{"_id":"@native-router/react","_rev":"29-07f3ebbd24c4d77b81908c5652d8262b","name":"@native-router/react","dist-tags":{"latest":"1.16.1"},"versions":{"1.0.0":{"name":"@native-router/react","version":"1.0.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.0.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/wmzy/@native-router/react","bugs":{"url":"https://github.com/wmzy/@native-router/react/issues"},"dist":{"shasum":"422d1a69e82ec4405b496fabc4e1b6a516f3b2d8","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.0.0.tgz","fileCount":17,"integrity":"sha512-4xtKBaZYwAtde3hCPA0d932ZKFhXbmytuvfHrWjihdVqfzBmbPzavirxskSOKGuC/uLRie6Zdgt/3TYPacxp7g==","signatures":[{"sig":"MEYCIQC/KdotGfACpKhCjalHnu5rKs/QweMiRsmXTz06oL1ZhgIhAKY8fz/HoQKRRLIOAJOHN/lxgutCDX+lF1vRdHIGKQR0","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48812},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.mjs"}},"gitHead":"876a6a12f22b1a09b495b6b29f45a0b1882d0339","scripts":{"lint":"eslint --fix src test demos *.js --ext .js,.jsx,.ts,.tsx","test":"cross-env NODE_ENV=test c8 mocha","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"npm run doc:gen && npm run build:demo && gh-pages -d dist","doc:gen":"typedoc","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","start:ssr":"cross-env SSR=true vite","build:demo":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build","preversion":"npm run build","test:watch":"npm test -- --watch","postpublish":"git push --follow-tags && npm run deploy","postversion":"npm publish"},"_npmUser":{"name":"wmzy","email":"1256573276@qq.com"},"repository":{"url":"https://github.com/wmzy/@native-router/react","type":"git"},"_npmVersion":"8.19.4","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^8.0.1","vite":"^4.4.9","husky":"^8.0.3","jsdom":"^22.1.0","mocha":"^10.2.0","react":"^18.2.0","sinon":"^16.0.0","eslint":"^8.50.0","should":"^13.2.3","terser":"^5.20.0","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","coveralls":"^3.1.1","cross-env":"^7.0.3","react-dom":"^18.2.0","tsc-alias":"^1.8.8","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/mocha":"^10.0.1","@types/react":"^18.2.22","@types/sinon":"^10.0.16","global-jsdom":"^9.1.0","should-sinon":"0.0.6","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^18.2.7","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","eslint-plugin-mocha":"^10.1.0","eslint-plugin-react":"^7.33.2","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","babel-plugin-module-resolver":"^5.0.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","eslint-import-resolver-typescript":"^3.6.1","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.0.0_1695610106903_0.8737262239667194","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@native-router/react","version":"1.0.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.0.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/wmzy/@native-router/react","bugs":{"url":"https://github.com/wmzy/@native-router/react/issues"},"dist":{"shasum":"2467cf71857ae65ebc9da43fbfe17f228ad447ab","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.0.1.tgz","fileCount":17,"integrity":"sha512-h7mo6B+G2Tbl7/LFg+17r2m3q2TRurrwbyhdxgrNowq7maA8oWwAvcKH2Ybhyr9KUbGh0IcKNOpcW0j9675TNA==","signatures":[{"sig":"MEYCIQDALBIKv19v4Xj9DCs4jj+iohnkWh1T9nd6vwekfru4UwIhAIN01OvMIQpdBqcssqhZKVGOCACGVnDJ921i/BoFrG7R","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":48781},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.mjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.mjs"}},"gitHead":"7c91afaeeb744c5f737c06400c82f37fae70440a","scripts":{"lint":"eslint --fix src test demos *.cjs --ext .mjs,.cjs,.js,.jsx,.ts,.tsx","test":"cross-env NODE_ENV=test c8 mocha","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"npm run doc:gen && npm run build:demo && gh-pages -d dist","doc:gen":"typedoc","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","start:ssr":"cross-env SSR=true vite","build:demo":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build","preversion":"npm run build","test:watch":"npm test -- --watch","postpublish":"git push --follow-tags && npm run deploy","postversion":"npm publish"},"_npmUser":{"name":"wmzy","email":"1256573276@qq.com"},"repository":{"url":"https://github.com/wmzy/@native-router/react","type":"git"},"_npmVersion":"8.19.4","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^8.0.1","vite":"^4.4.9","husky":"^8.0.3","jsdom":"^22.1.0","mocha":"^10.2.0","react":"^18.2.0","sinon":"^16.0.0","eslint":"^8.50.0","should":"^13.2.3","terser":"^5.20.0","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","coveralls":"^3.1.1","cross-env":"^7.0.3","react-dom":"^18.2.0","tsc-alias":"^1.8.8","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/mocha":"^10.0.1","@types/react":"^18.2.22","@types/sinon":"^10.0.16","global-jsdom":"^9.1.0","should-sinon":"0.0.6","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^18.2.7","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","eslint-plugin-mocha":"^10.1.0","eslint-plugin-react":"^7.33.2","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","babel-plugin-module-resolver":"^5.0.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","eslint-import-resolver-typescript":"^3.6.1","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.0.1_1696646187885_0.805878025692015","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@native-router/react","version":"1.0.2","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.0.2","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"ac1e70daa7cb8c4b504c4dc0c0406c3711ec2222","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.0.2.tgz","fileCount":23,"integrity":"sha512-9O0A5yff/QrOM3y+1xFklR4Ny8FUFNIbjG68qkscikJcE5VBOSo+cpN3f1jD/9dYmuwsY0txGU5FffoWvgCS4w==","signatures":[{"sig":"MEYCIQD+G3bmbkdUhkHr1iskoAcPa+8XbthqIPBMQI3YvOmavwIhAOZE5wNYKkd3tipN6+u3Ks0pw8gJy9TMmdrQD0lVs/kA","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74844},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"9eb5aa44a55748e6af061baf56cef14531a94f78","scripts":{"lint":"eslint --fix src test demos *.cjs --ext .mjs,.cjs,.js,.jsx,.ts,.tsx","test":"cross-env NODE_ENV=test c8 mocha","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"npm run doc:gen && npm run build:demo && gh-pages -d dist","doc:gen":"typedoc","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","start:ssr":"cross-env SSR=true vite","build:demo":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build","preversion":"npm run build","test:watch":"npm test -- --watch","postpublish":"git push --follow-tags && npm run deploy","postversion":"npm publish"},"_npmUser":{"name":"wmzy","email":"1256573276@qq.com"},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"8.19.4","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"16.20.1","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^8.0.1","vite":"^4.4.9","husky":"^8.0.3","jsdom":"^22.1.0","mocha":"^10.2.0","react":"^18.2.0","sinon":"^16.0.0","eslint":"^8.50.0","should":"^13.2.3","terser":"^5.20.0","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","coveralls":"^3.1.1","cross-env":"^7.0.3","react-dom":"^18.2.0","tsc-alias":"^1.8.8","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/mocha":"^10.0.1","@types/react":"^18.2.22","@types/sinon":"^10.0.16","global-jsdom":"^9.1.0","should-sinon":"0.0.6","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^18.2.7","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","eslint-plugin-mocha":"^10.1.0","eslint-plugin-react":"^7.33.2","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.0.0","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","babel-plugin-module-resolver":"^5.0.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","eslint-import-resolver-typescript":"^3.6.1","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0","react-dom":"^17.0.0 || ^18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.0.2_1697529502720_0.6538028468998511","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@native-router/react","version":"1.1.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.1.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"a693284f816f28392362745265614edfc1b0b599","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.1.0.tgz","fileCount":23,"integrity":"sha512-/ZyhwIq7yGXCnlz96X5IADU4FiET1XyRmzV9s7347D4F/7XtFre9uO7h+XXKyrhN0DCIA49u4G2nZP+r6Ts1QQ==","signatures":[{"sig":"MEQCIC+Cj8fEfI6eoJ+2FMzVJu02bGa2WtDJx1+UwzgC7qK8AiBcax/Xs0Ricn9JXgAsmZ3jFAzDkoEiU4XO0I3oHNvYZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62583},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"0ce7a05610eb12287f393dfee02dfe02047fa464","scripts":{"lint":"eslint --fix src test demos *.cjs --ext .mjs,.cjs,.js,.jsx,.ts,.tsx","test":"vitest run","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"npm run doc:gen && npm run build:demo && gh-pages -d dist","doc:gen":"typedoc","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","start:ssr":"cross-env SSR=true vite","build:demo":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build","test:watch":"npm test -- --watch"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.11.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"c8":"^8.0.1","vite":"^7.3.1","husky":"^8.0.3","jsdom":"^22.1.0","mocha":"^10.2.0","react":"^19.0.0","sinon":"^16.0.0","eslint":"^8.50.0","should":"^13.2.3","terser":"^5.20.0","vitest":"^4.0.18","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","coveralls":"^3.1.1","cross-env":"^7.0.3","react-dom":"^19.0.0","tsc-alias":"^1.8.8","@vitest/ui":"^4.0.18","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/mocha":"^10.0.1","@types/react":"^19.0.0","@types/sinon":"^10.0.16","global-jsdom":"^9.1.0","should-sinon":"0.0.6","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^19.0.0","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","@vitest/coverage-v8":"^4.0.18","eslint-plugin-mocha":"^10.1.0","eslint-plugin-react":"^7.33.2","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.3.1","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","babel-plugin-module-resolver":"^5.0.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","eslint-import-resolver-typescript":"^3.6.1","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.1.0_1773244777158_0.4608535788917911","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@native-router/react","version":"1.1.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.1.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"db726d556070a84df8d9ec3482ac026219c7bc1b","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.1.1.tgz","fileCount":23,"integrity":"sha512-ozWCli//f1JhAIDf72KiwGgSo6XpTIaZishs5/8uyE9jdqit5yQb4zdPNXwWDgLYHKm59vNBsnRFzwtw8sJcWw==","signatures":[{"sig":"MEQCIFeMqgss/b2zYvTHTO9XhHDlt3onz44KJo4u1flCjybgAiBfoC3XoVmc1VWdJCVprrgsX6QezfSk2PIOK3nIGANitw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62461},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"73e38bd159c01365210e73183b2c689a4fb8e6b9","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","postpublish":"git push --follow-tags && npm run deploy","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.11.1","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","husky":"^8.0.3","jsdom":"^22.1.0","react":"^19.0.0","eslint":"^8.50.0","terser":"^5.20.0","vitest":"^4.0.18","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","cross-env":"^7.0.3","react-dom":"^19.0.0","tsc-alias":"^1.8.8","@vitest/ui":"^4.0.18","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/react":"^19.0.0","global-jsdom":"^9.1.0","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^19.0.0","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","@vitest/coverage-v8":"^4.0.18","eslint-plugin-react":"^7.33.2","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.3.1","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^3.6.1","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.1.1_1773584153174_0.7208095043044964","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@native-router/react","version":"1.1.2","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.1.2","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"2d9e06724f4fbac21565e2d8e18f6c0ce985d71f","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.1.2.tgz","fileCount":23,"integrity":"sha512-+/iVfQNY5Mpu8pvL+EFU7p2+PKF4/22HzSeKZLsQsCiPK55bo4d/WoyFgP9ske1vtX+6jCsYLQf0RMAvIQVutQ==","signatures":[{"sig":"MEUCIEHQj1IzBagIMlFmhuNZ1kRmgV2j5MAdOe5BAAtJaT//AiEA59pJsuRuA4BnxoZD3OYw1xuX+X+oEIk6qqCxwqV3EGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":62402},"type":"module","engines":{"node":">=14"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"aac745ca8e4e8681f1acda82f6eb96293b8ba081","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.9.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.3.1","husky":"^8.0.3","jsdom":"^22.1.0","react":"^19.0.0","eslint":"^8.50.0","terser":"^5.20.0","vitest":"^4.0.18","core-js":"^3.32.2","typedoc":"^0.25.1","gh-pages":"^6.0.0","prettier":"^3.0.3","cross-env":"^7.0.3","react-dom":"^19.0.0","tsc-alias":"^1.8.8","@vitest/ui":"^4.0.18","commitizen":"^4.3.0","typescript":"^5.2.2","@babel/core":"^7.22.20","@types/node":"^20.6.5","lint-staged":"^14.0.1","@types/react":"^19.0.0","global-jsdom":"^9.1.0","@linaria/core":"^5.0.1","@linaria/vite":"^5.0.2","@types/react-dom":"^19.0.0","semantic-release":"^25.0.3","@babel/preset-env":"^7.22.20","@babel/preset-react":"^7.22.15","@vitest/coverage-v8":"^4.0.18","eslint-plugin-react":"^7.33.2","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^4.1.0","eslint-config-airbnb":"^19.0.4","eslint-plugin-compat":"^4.2.0","eslint-plugin-import":"^2.28.1","@linaria/babel-preset":"^5.0.2","@testing-library/react":"^14.3.1","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^9.0.0","eslint-plugin-jsx-a11y":"^6.7.1","eslint-plugin-prettier":"^5.0.0","@babel/preset-typescript":"^7.22.15","@typescript-eslint/parser":"^6.7.2","eslint-plugin-react-hooks":"^4.6.0","typedoc-plugin-missing-exports":"^2.1.0","eslint-config-airbnb-typescript":"^17.1.0","@typescript-eslint/eslint-plugin":"^6.7.2","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^3.6.1","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.1.2_1773756662967_0.31703002311681305","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@native-router/react","version":"1.2.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.2.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"aab2d0d868cdf7b03bb7f4e56abb4207b5eca7d3","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.2.0.tgz","fileCount":25,"integrity":"sha512-mDVuSgj7aujGSI+s/t5EodqtnQiAdRRmPApRtWYeGqnqcoEfmcK8NoJ0ZOgp10hdOOHKATR263LREl0Xpeiq6Q==","signatures":[{"sig":"MEYCIQCzVzcYBkCJcOiqD2pyjn1H4PYJ2HSC/TWcU1WWbIJxJQIhAO0460RdRMCtzKRFiN96wDEO65V/o8qu7/M9mf/dSe5W","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":143613},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"95af2a8bf5e2c758090d4af1f91bbea68031a1c2","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.4.1","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.0","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.2.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.4","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.67.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.2.0_1787485189457_0.4919838574593496","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@native-router/react","version":"1.2.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.2.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"1732b99df5fe40bdc32fe3757781fb05dc47fa9d","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.2.1.tgz","fileCount":25,"integrity":"sha512-Qqwan31sVz/kh1mTCvxLu6ns5RC4qPv+KvGhPO528fQQSR33AoLXIslOIsLeC3ljIJTVoxzy1VGFkkoqOe+1nw==","signatures":[{"sig":"MEQCIF1iFstEE7yu7hRdCsan2oC4Zg+zfLQJLNtUYlahb6aHAiACnIvE0lVbF0FeiRfyCIs3apEeTBGunx2gGvdYgn/htw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":145022},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"e99aec775de0e7fba8a551d387466e858737136e","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.4.1","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.0","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.2.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.4","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.67.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.2.1_1787492424154_0.047201668619991644","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@native-router/react","version":"1.3.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.3.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"0d7ae9e9852251ec630b1f5384988c5778925ac6","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.3.0.tgz","fileCount":25,"integrity":"sha512-RHvsx0XsXYVlNPZIFmP0fY7kvkg4hsC8zSSJo7hUqmBp1OLHP+KfUC/8dQBdaw5aDRsGgwLfvXkr1dz4RDEN1A==","signatures":[{"sig":"MEUCIQC3+z2583BbCl/qxOim1ILiyOMj6NqK9ZjqmLJQH48segIgBg4BFZC/1FIS7U+s4Torwcpv3Xcj0OU6m6VSdbzaW/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154058},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"ac304c3cae326251acf9c7e23ddc360c3fe14728","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.5.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.0","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.2.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.4","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.67.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.3.0_1787548969770_0.4419726364556731","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@native-router/react","version":"1.3.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.3.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"fc0a734a2303a3a6357407d692f69e1c44349779","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.3.1.tgz","fileCount":25,"integrity":"sha512-7atjNEKSH5sHhBigXe26flMp0hO3vPbtwmcPEybQPU6kXFRIK9kn9jxvzgR9Zi5mpLYhZGTf9xUKp/pRCHOYQg==","signatures":[{"sig":"MEUCIGQmSzkKu8WNuzwgSXO8z/sA5fNEdMYdWyXerSwTsIhMAiEArjM0A/+7zewIig3bzHPoAYfggew3s3BpGbTdIUVNn5s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.3.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":154058},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"da16c45068ca5be0702743c957548ec8e2d2b171","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.5.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.0","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.2.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.4","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.67.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.3.1_1787621688586_0.5117726468632611","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@native-router/react","version":"1.4.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.4.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"ee84ba45bd74fa9bf089342789ecf3e16d40d0a9","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.4.0.tgz","fileCount":28,"integrity":"sha512-2+Tl2TFCdAtn07Mf1hXZ1DS0C86tavtuBxFLlkjqkQqwk16ndq/jQOy8dKocWdnukfj6kgeUK0zcfUcf/W2KfQ==","signatures":[{"sig":"MEYCIQCIFVLXvu1psUqw0Miz26pnOrMcBWaF4SaJhCvSsYRoXgIhAK5T72MMPaMi39Sn5BXJKQHrm067LsEgKp32pAkAsNRJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":195509},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"bd8fe8fab8a3c45fffa320fea0bf37f0eb525690","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.5.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.0","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.2.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.4","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.67.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.4.0_1787662047686_0.00740202377050081","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@native-router/react","version":"1.5.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.5.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"53aa771fc532ae311f168b80ddf33f383d1ada20","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.5.0.tgz","fileCount":29,"integrity":"sha512-pbMRxHW9xwSDI/Nh/Y8GyhjvUJ5InxgcpGeHDmwbTzyl/2hoZyu1Vb1PUl+mO8Q/h0ZmroBHpGjB0tAyHOdClg==","signatures":[{"sig":"MEUCIDtwcwfXOPGF+KmG+DAmcF+rhgvJCFt9ZFgj1AouxvLUAiEA2u6M2bSELX+WCv6d/VcaAczSzjGQzBqmFIaAztrzb8g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":221753},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"7c82c47c6eb19890c40f653f3c93932f21ce2ea0","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.7.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.3.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.5.0_1787803765268_0.9826678034069596","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@native-router/react","version":"1.6.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.6.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"7536dec6edaab183d4383de48ebf78291388dff9","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.6.0.tgz","fileCount":29,"integrity":"sha512-saBwBY6V/On8wS/7jKNFP6DF9kffyXZHmuAt61B120Ji6f3JWvP6oFWbF2yJIFkytbZ5IrqnXkH+y1nrprKKZQ==","signatures":[{"sig":"MEUCIQC+qTGFt+sDvVEZrL3qrsVTokJpGM6TC3TSpU3WVo7oXgIgJ99JYRWTVtBZ00+7YcY4GPsG9mUiM8wlTr35i6J1RcI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":227018},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"0d67d432f6f7bedb22f6af3ad88d213c5ebc0d9c","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.3.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.6.0_1787829900766_0.7552555434374533","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@native-router/react","version":"1.6.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.6.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"d88e1fefcd67d8f447acfa7c9cdd2e786ba05ad9","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.6.1.tgz","fileCount":29,"integrity":"sha512-f9Zku4AnC7KtrdBquozfrT/N5yb794nHERW9zoOHF/D15lbogolW75gH4jhOIxfMBpt8bhu5Ng3niRqrzZ1zCQ==","signatures":[{"sig":"MEQCIAi8K4Edr+wadIEFhhkQGZoFHxnMStC6I1K9nLWknfhcAiBi36GlVsx7HVxBFZXnKh+HMr1K5RBHwSxTCMrUeg0s8w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":228032},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"a22e26a0798f8c70b0f139cab839282aa52991b5","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.50.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.3.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@linaria/vite":"^5.0.4","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@linaria/babel-preset":"^5.0.4","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.6.1_1787831394709_0.46202851710822834","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@native-router/react","version":"1.6.2","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.6.2","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"b94b2328476fa1d8df9faf5cb0b43ad2cd7757aa","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.6.2.tgz","fileCount":81,"integrity":"sha512-YgnlWuuvZlxI9Wp+WMciWIwNivT0RcPt9yDnXQJPNo2Ux+J6fCfL1hiMVxSXTtVZRS/c7iYLVU/vkVGLAEqp7Q==","signatures":[{"sig":"MEQCICSf7+00OcXR0ox/iSSf/A2143h4IThx35aY9UPRNMgDAiB9OLiY6Nv249fg/tYkjysORvmX1J/Wza21Nf41NST48A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.6.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":238837},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"a2bc9cfa7ab66a536515e7e531a0b2516683ec68","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.6.2_1787885083961_0.22836523454195645","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@native-router/react","version":"1.7.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.7.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"d497d9fd6b0d2627f32765b668e4eb27db3e58f3","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.7.0.tgz","fileCount":81,"integrity":"sha512-5qVHemklERqaU3/X2H0yZNaA8t0O1l3JBagycFet4TXj+g785xh+BeCOa+Q0xHo/K5/Aq+RtCbfBQ27BiGa9sA==","signatures":[{"sig":"MEQCIB82GnXMDInDlY8jP2ch4gwyKsNHOWA5KO+fg/3EvUoHAiBYfVtz7XSX6gS0mjVlX9ZqRRFzi4MkWyxnkWvFiZuZwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":251929},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"529d0512bba475b4f9078e459224762243443d1b","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.7.0_1787966379635_0.07874475106206358","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@native-router/react","version":"1.7.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.7.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"d9e606eb29f2b3614192398badb0fed2c0ef409c","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.7.1.tgz","fileCount":81,"integrity":"sha512-d8IBU0KVaKCl9Yat/MEu02nOAX0gRq4ogqYCSzjk/l7syPvlyoNL8ojZEXHzO8iKSigd4S0vOBiT2mUE33SmgQ==","signatures":[{"sig":"MEUCIAK81AuAN3xfWfTVCIIdkPLlsRoUFRYqnEK5g8rheTJdAiEA88Qr/DURf1pUJcPXnvWTnVu5bDNs3v8FUddw58ZxFps=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.7.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":253739},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"884f8816746e9e3c6625b8fc0203323d0e265453","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.7.1_1787968463478_0.5007755276107251","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@native-router/react","version":"1.7.2","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.7.2","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"e8a63753c5bf22fa4847a0815c645c459c2f89e5","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.7.2.tgz","fileCount":81,"integrity":"sha512-UIZM/KifVlnL7QxDtRxmAQotkbxObG87se6wZXiypOBddK2xOmqqXH1y8IIA3JKn6Pfy/uagqLOKhOUCwCMueg==","signatures":[{"sig":"MEQCIAed7jaUC8bvbWvjMJhT5oNFz/J9rtzkTkzwuJOe2f7WAiBYrVyG64HJwYn9gJ7NpfQ6laIdOMrU8t9r0d7/y5l2TA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.7.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":255145},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"26767d9c4033fd1b2aa976405f0191fb4d326d7e","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.8.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.7.2_1787992478166_0.9781274833155738","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@native-router/react","version":"1.8.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.8.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"9a28c7b7edaf4109e81659516c5fb9a55391c82d","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.8.0.tgz","fileCount":91,"integrity":"sha512-y414kra/jXiAZw8yuwOaTJJltD7+fCy2d4wfEYhiUDHhN1KcAEAMQ9RIVIjaN11TvegNhYFrKPMLyMRyg8YC6Q==","signatures":[{"sig":"MEQCIFdmUc6lLE8HlbH+tDcnyzDLB9wlsgJ8qMr96n4XzHcVAiBsIP/IyWMnR5+uoMt4pZh0wH7uZRc4mvDWN/lXPP1LQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":283321},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"c875bac3b7e54c4d15b33e7584b57a574d319f9d","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.10.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.8.0_1788039837583_0.7524048761402597","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@native-router/react","version":"1.9.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.9.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"3b93f89a0c9089cb7d88ba9f4b6f37fe5baf6866","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.9.0.tgz","fileCount":91,"integrity":"sha512-Btt0qtWtrRNoIQu/kgId8xOlzoH84aYOEy3QOsygumFtfqe5F9FZHDk1YjzWb449YZYXXRsf8FCogJ/B/zg9tQ==","signatures":[{"sig":"MEUCIQC5xwv9KwbtZDVUKsmand6QL/gIlwm8FaTFXTakIWQ+AwIgXMPti4tTs1X2cKdHkPO6tS0jqdOK96BFAzjuYdwEYV4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.9.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":300494},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"bcc1935c8fb631f955d353387d853de07908188c","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.10.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.9.0_1788076251910_0.4845189555412628","host":"s3://npm-registry-packages-npm-production"}},"1.10.0":{"name":"@native-router/react","version":"1.10.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.10.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"1e670398a539d7a887d72da941491a2586eaae31","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.10.0.tgz","fileCount":96,"integrity":"sha512-SQ0Dh9MPelcayljAM4CgbTSaokBHE5rZoYdTIS9Y4XyG+9Yp0VdCcQit2LOxTlgMTiQ6xzCGyBEEYFXTdbYQmg==","signatures":[{"sig":"MEUCIACO6Y1yIyPPEFLPeelYVW4NjLJv/ek/AmMSNE/Z3yAtAiEAi/dcK453KGBh2PB+it5smEl1rDkcIIo9SNIY5RcpzLQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.10.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":328808},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"7c495c6c9329888598a0714cb2ad37aeace5fb20","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.11.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.10.0_1788173033229_0.03191738709593017","host":"s3://npm-registry-packages-npm-production"}},"1.10.1":{"name":"@native-router/react","version":"1.10.1","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.10.1","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"0d2a58735640fc042b71c79961080603eaf9a40b","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.10.1.tgz","fileCount":101,"integrity":"sha512-fFZ/BPYravkTtiwqThDkLh3KRnE6VQa9mhdqh8skoJQeET1h1P+m1fn2xzuO7Qhe5b9xmnI8PlWeaumBzg+yZw==","signatures":[{"sig":"MEUCIQDWweMQFqgNYp2zwzOZHEiV13SnrdCPbS0ky37QtKLd0gIgcbt8NQ5VX/rd1wok/782xTXd9r9G7PHkYO+pjSZEYIw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.10.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":340390},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"2163fbdba080bd8352ba6f33e33da6ab9d8bc371","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.11.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.10.1_1788175283157_0.0787242034540847","host":"s3://npm-registry-packages-npm-production"}},"1.11.0":{"name":"@native-router/react","version":"1.11.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.11.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"063f50eff2d458c8c78f904d3526decd41a28698","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.11.0.tgz","fileCount":101,"integrity":"sha512-CYoxLUpc6nAmEAO8cMSd7yMzrD1LLZgBJMM+m0gFX4J9DvBW4EaacRrlNRAE0pf8Zko6aBH8z3lxZPxFjdvb0w==","signatures":[{"sig":"MEQCIBRWkNjAKlCPGNeMZ3tOrxh52mkSDdsgAcVjdgt1f2F8AiApVR6UPQ0EEbyyuBqT2Dyq4gI6Q8VipLatxflT9GvyjQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":347634},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"95afde4fb793e85a11411f8662c0a28ed19bf056","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.11.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.11.0_1788184444366_0.026983616176703862","host":"s3://npm-registry-packages-npm-production"}},"1.12.0":{"name":"@native-router/react","version":"1.12.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.12.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"ecd0e486b34ef841c1ffd5f8fdd921148e7d75ca","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.12.0.tgz","fileCount":101,"integrity":"sha512-aysdv4h1xt7RwnXxh4IqHk743u8wnF/rL6cEOC5yf7KojgmZkWantxRkivIqtLXTEHd7Oh5mWVt8WzbIvRlItw==","signatures":[{"sig":"MEQCIC7XIWnqkacGwTLXdh4UUuAxJbUWm+6hkWRH2jPQajEhAiAqWIzhKD2PSyJaJCl7V0kTUvCNM2H5TcIfPzowlLX5Ig==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":353510},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"7e69cc75604247af39da0f972fc493f500655dc3","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.12.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.12.0_1788202156658_0.2290463027733125","host":"s3://npm-registry-packages-npm-production"}},"1.13.0":{"name":"@native-router/react","version":"1.13.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.13.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"786bcd8d1b432ecce499dc75fad24c98cd429bc7","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.13.0.tgz","fileCount":101,"integrity":"sha512-9g8XiBm5uD3MBMXvLV69zB7U6eqUntmn+n91Z8kgAVxnuHCjSncfQ6EWx4ByXebXV7t97Yotg3dZmXgaKXFjXQ==","signatures":[{"sig":"MEUCIDNiUyKWcD5tScSvpNEa8TuXMU/ZOPUV7Smma/n8bVz0AiEArHlERJuZmSt5/S6I/mp/537QbMbjaF19hBUg5f617QY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":367684},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"41a4d49e6355e16a267aef2c5c3d6be39a8a1191","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.17.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.19.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.13.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.13.0_1788292836920_0.680143753988401","host":"s3://npm-registry-packages-npm-production"}},"1.14.0":{"name":"@native-router/react","version":"1.14.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.14.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"4b6c0319743ed047eb9db4a8cced76cbb932c6c2","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.14.0.tgz","fileCount":101,"integrity":"sha512-xiwxLHRjOYyUaKALT3oo/gDnmB2hMnBkk+C4IvU5oOfWvkTgsm62CgOZAG3Yw3jpq/zCjxXTvoQMpYf+1ZqAtA==","signatures":[{"sig":"MEUCIQC7VDQolNOBlAlafmoirNF0WcQoWhvcthX81RDbyiLrHAIgWmlIDNEDZJycbPExH8m0Ca0vYZ9RJBoAX6wcNw9ft4w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":407452},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"c772b0557c6acffd8c865901c159f880d7e9500e","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.19.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.15.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.14.0_1788439613848_0.23556255539104454","host":"s3://npm-registry-packages-npm-production"}},"1.15.0":{"name":"@native-router/react","version":"1.15.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.15.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"b5c340d8cefcb974788dc56272a75be579ec6a6d","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.15.0.tgz","fileCount":106,"integrity":"sha512-uHGCEoVj0gyQ/WYwoS2pe9nUBDhcxx+oqFHJrDilusBgGr26w7He8qrwYRHFv4YOND2Z5NgFiZWzmXsJBcuRbg==","signatures":[{"sig":"MEYCIQD8A87HS23ddXobOrXvzzRGWVHjtYhaNUCkW9U0pb9XNgIhAMs9CdzKeJGxBLQ4lNLXZJWmCR0eOW6rpWJecp58uwk8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":431346},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"08b5ccb9cdb5a0372fdef3cd97b6c2a67b6b2aca","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.19.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.16.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.15.0_1788532324976_0.9598564989014866","host":"s3://npm-registry-packages-npm-production"}},"1.16.0":{"name":"@native-router/react","version":"1.16.0","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"author":{"name":"wmzy"},"license":"MIT","_id":"@native-router/react@1.16.0","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"homepage":"https://github.com/native-router/react","bugs":{"url":"https://github.com/native-router/react/issues"},"dist":{"shasum":"712e0c9b4b0facae1aaf69b163ee5145f6f80c7f","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.16.0.tgz","fileCount":106,"integrity":"sha512-m9O8QMfvwm/ojLErWgMRh1y26rCDD8ClsS5UZYn3VsGCRU6k4DvzkU4lQT0xxWz3ZU5x3mzgEXQZ5vf+P2XZ/Q==","signatures":[{"sig":"MEYCIQC4+wekY3nGpD2ly+xGJfsTciZZxES/pf43VwN6bJxauAIhAJU7ghba8ZWkufEceobwDVQa2VAtj3H52gTOdP6wXZuK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":435457},"type":"module","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"gitHead":"d6c7f5f338c2d974aeceb4e366129b9c888261ce","scripts":{"lint":"eslint --fix .","test":"vitest","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","serve":"vite preview","start":"vite","commit":"lint-staged && git-cz -n","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test:ui":"vitest --ui","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","test:run":"vitest run","start:ssr":"cross-env SSR=true vite","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"repository":{"url":"git+https://github.com/native-router/react.git","type":"git"},"_npmVersion":"11.19.0","description":"A route close to the native experience for react.","directories":{},"sideEffects":false,"_nodeVersion":"24.20.0","dependencies":{"history":"^5.3.0","@native-router/core":"^1.17.0","use-sync-external-store":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.2.2","husky":"^9.1.7","jsdom":"^30.0.1","react":"^19.2.8","eslint":"^10.9.1","terser":"^5.51.0","vitest":"^4.1.11","core-js":"^3.50.0","globals":"^17.11.0","typedoc":"^0.28.20","gh-pages":"^6.3.0","prettier":"^3.9.6","cross-env":"^10.1.0","react-dom":"^19.2.8","tsc-alias":"^1.9.2","@eslint/js":"^10.0.1","@vitest/ui":"^4.1.11","commitizen":"^4.3.2","typescript":"^6.0.3","@babel/core":"^8.0.1","@types/node":"^26.4.0","lint-staged":"^17.3.0","@types/react":"^19.2.18","global-jsdom":"^29.0.0","@linaria/core":"^8.2.0","@wyw-in-js/vite":"^2.4.3","@types/react-dom":"^19.2.5","semantic-release":"^25.0.9","@babel/preset-env":"^8.0.2","typescript-eslint":"^8.68.0","@babel/preset-react":"^8.0.1","@vitest/coverage-v8":"^4.1.11","@testing-library/dom":"^10.4.1","@vitejs/plugin-react":"^6.1.0","eslint-plugin-compat":"^7.0.2","@testing-library/react":"^16.3.2","babel-runtime-jsx-plus":"^0.1.5","eslint-config-prettier":"^10.1.8","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","@babel/preset-typescript":"^8.0.1","eslint-plugin-react-hooks":"^7.1.1","@eslint-react/eslint-plugin":"^5.18.6","typedoc-plugin-missing-exports":"^4.1.4","babel-plugin-transform-jsx-class":"^0.1.3","eslint-import-resolver-typescript":"^4.4.5","rollup-plugin-type-as-json-schema":"^0.2.6","babel-plugin-transform-jsx-condition":"^0.1.3","typedoc-plugin-mark-react-functional-components":"^0.2.2"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"_npmOperationalInternal":{"tmp":"tmp/react_1.16.0_1788742650168_0.49545565030712746","host":"s3://npm-registry-packages-npm-production"}},"1.16.1":{"name":"@native-router/react","version":"1.16.1","type":"module","exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"},"./ssr":{"types":"./dist/types/ssr.d.ts","import":"./dist/ssr.js","require":"./dist/ssr.cjs"},"./server":{"types":"./dist/types/server.d.ts","import":"./dist/server.js","require":"./dist/server.cjs"}},"keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"description":"A route close to the native experience for react.","scripts":{"start":"vite","start:ssr":"cross-env SSR=true vite","build":"vite build && tsc -p tsconfig.production.json && tsc-alias -p tsconfig.production.json","commit":"lint-staged && git-cz -n","coverage":"c8 report --reporter=text-lcov > ./coverage/coverage.txt","lint":"eslint --fix .","deploy":"cross-env BABEL_ENV=development BUILD_DEMO=true vite build && gh-pages -d dist","test":"vitest","test:ui":"vitest --ui","test:run":"vitest run","serve":"vite preview","typecheck":"tsc -p tsconfig.production.json --noEmit && tsc -p tsconfig.test.json --noEmit"},"repository":{"type":"git","url":"git+https://github.com/native-router/react.git"},"sideEffects":false,"author":{"name":"wmzy"},"license":"MIT","bugs":{"url":"https://github.com/native-router/react/issues"},"homepage":"https://github.com/native-router/react","engines":{"node":">=18"},"peerDependencies":{"react":"^17.0.0 || ^18.0.0 || ^19.0.0","react-dom":"^17.0.0 || ^18.0.0 || ^19.0.0"},"dependencies":{"@native-router/core":"^1.17.0","history":"^5.3.0","use-sync-external-store":"^1.6.0"},"devDependencies":{"@babel/core":"^8.0.1","@babel/preset-env":"^8.0.2","@babel/preset-react":"^8.0.1","@babel/preset-typescript":"^8.0.1","@eslint-react/eslint-plugin":"^5.18.6","@eslint/js":"^10.0.1","@linaria/core":"^8.2.0","@testing-library/dom":"^10.4.1","@testing-library/react":"^16.3.2","@types/node":"^26.4.0","@types/react":"^19.2.18","@types/react-dom":"^19.2.5","@vitejs/plugin-react":"^6.1.0","@vitest/coverage-v8":"^4.1.11","@vitest/ui":"^4.1.11","@wyw-in-js/vite":"^2.4.3","babel-plugin-transform-jsx-class":"^0.1.3","babel-plugin-transform-jsx-condition":"^0.1.3","babel-runtime-jsx-plus":"^0.1.5","commitizen":"^4.3.2","core-js":"^3.50.0","cross-env":"^10.1.0","eslint":"^10.9.1","eslint-config-prettier":"^10.1.8","eslint-import-resolver-typescript":"^4.4.5","eslint-plugin-compat":"^7.0.2","eslint-plugin-import-x":"^4.17.1","eslint-plugin-jsx-a11y":"^6.10.2","eslint-plugin-prettier":"^5.5.6","eslint-plugin-react-hooks":"^7.1.1","gh-pages":"^6.3.0","global-jsdom":"^29.0.0","globals":"^17.11.0","husky":"^9.1.7","jsdom":"^30.0.1","lint-staged":"^17.3.0","prettier":"^3.9.6","react":"^19.2.8","react-dom":"^19.2.8","rollup-plugin-type-as-json-schema":"^0.2.6","semantic-release":"^25.0.9","terser":"^5.51.0","tsc-alias":"^1.9.2","typedoc":"^0.28.20","typedoc-plugin-mark-react-functional-components":"^0.2.2","typedoc-plugin-missing-exports":"^4.1.4","typescript":"^6.0.3","typescript-eslint":"^8.68.0","vite":"^8.2.2","vitest":"^4.1.11"},"gitHead":"3c0669dd1e4f49e49c7c8b7eaacfdaf8090be2d8","_id":"@native-router/react@1.16.1","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-wUnsf0SCzYHKp5jv8DNaZJ1zym2nh2vZV6NR2rx90/Z06RXOxVTYxmVzWs/owXkYOv/wFKBEo9vNfIHRIiPVaQ==","shasum":"7cec545c55c5354243fcd04543a647b2d26f2ddc","tarball":"https://registry.npmjs.org/@native-router/react/-/react-1.16.1.tgz","fileCount":106,"unpackedSize":436449,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@native-router%2freact@1.16.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEMbwP8jaCkezSpaUDa2Dtj+Egi8RkuInjxMFBwhLgIDAiEAwC3bEwNocJXKmrccL3LqW+8h0pzGOcXJ3bKtFuymcmg="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:67da48dd-0a71-4ef0-a635-383c839579cd"}},"directories":{},"maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_1.16.1_1789147508128_0.6670559886621696"},"_hasShrinkwrap":false}},"time":{"created":"2023-09-25T02:48:26.808Z","modified":"2026-09-11T17:25:08.663Z","1.0.0":"2023-09-25T02:48:27.161Z","1.0.1":"2023-10-07T02:36:28.082Z","1.0.2":"2023-10-17T07:58:23.012Z","1.1.0":"2026-03-11T15:59:37.306Z","1.1.1":"2026-03-15T14:15:53.318Z","1.1.2":"2026-03-17T14:11:03.132Z","1.2.0":"2026-08-23T11:39:49.611Z","1.2.1":"2026-08-23T13:40:24.288Z","1.3.0":"2026-08-24T05:22:49.930Z","1.3.1":"2026-08-25T01:34:48.727Z","1.4.0":"2026-08-25T12:47:27.827Z","1.5.0":"2026-08-27T04:09:25.391Z","1.6.0":"2026-08-27T11:25:00.895Z","1.6.1":"2026-08-27T11:49:54.867Z","1.6.2":"2026-08-28T02:44:44.098Z","1.7.0":"2026-08-29T01:19:39.867Z","1.7.1":"2026-08-29T01:54:23.623Z","1.7.2":"2026-08-29T08:34:38.330Z","1.8.0":"2026-08-29T21:43:57.749Z","1.9.0":"2026-08-30T07:50:52.046Z","1.10.0":"2026-08-31T10:43:53.423Z","1.10.1":"2026-08-31T11:21:23.302Z","1.11.0":"2026-08-31T13:54:04.512Z","1.12.0":"2026-08-31T18:49:16.824Z","1.13.0":"2026-09-01T20:00:37.095Z","1.14.0":"2026-09-03T12:46:53.990Z","1.15.0":"2026-09-04T14:32:05.153Z","1.16.0":"2026-09-07T00:57:30.327Z","1.16.1":"2026-09-11T17:25:08.303Z"},"bugs":{"url":"https://github.com/native-router/react/issues"},"author":{"name":"wmzy"},"license":"MIT","homepage":"https://github.com/native-router/react","keywords":["react","router","react router","react-router","async","tiny","data-fetching","prefetch","preview"],"repository":{"type":"git","url":"git+https://github.com/native-router/react.git"},"description":"A route close to the native experience for react.","maintainers":[{"name":"wmzy","email":"1256573276@qq.com"}],"readme":"[![npm](https://img.shields.io/npm/v/@native-router/react.svg)](https://www.npmjs.com/package/@native-router/react)\n[![Build Status](https://github.com/native-router/react/actions/workflows/ci.yml/badge.svg)](https://github.com/native-router/react/actions)\n[![codecov](https://codecov.io/gh/native-router/react/graph/badge.svg?token=QIXC6HJH6Z)](https://codecov.io/gh/native-router/react)\n[![install size](https://packagephobia.now.sh/badge?p=@native-router/react)](https://packagephobia.now.sh/result?p=@native-router/react)\n\n# Native Router React\n\n> A route close to the native experience for react.\n\nEnglish | [简体中文](./README-zh_CN.md)\n\n## Highlights\n\n### Back with zero requests\n\nEvery committed navigation stores its resolved view in the router's in-memory view stack. Back/forward lands on the cached view instantly — the route is not re-matched and `data` is not refetched.\n\n```tsx\nimport {useRouter} from '@native-router/react';\nimport {back} from '@native-router/core';\n\nfunction BackButton() {\n  const router = useRouter();\n  // Renders the cached view of the previous entry instantly\n  return <button onClick={() => back(router)}>Back</button>;\n}\n```\n\n### Survives a refresh\n\nThe session stack is serialized into `history.state` as a bounded tail window (`maxStackDepth`, default 100) and restored on startup. Warm the window once after a refresh with `initHistoryStack`, and every in-window back/forward renders from cache with zero requests. Entries outside the window fall back to a single lazy re-resolve.\n\n```tsx\nimport {useEffect} from 'react';\nimport {useRouter} from '@native-router/react';\nimport {initHistoryStack} from '@native-router/core';\n\nfunction StackWarmer() {\n  const router = useRouter();\n  useEffect(() => {\n    // Warm up the window restored from history.state after a refresh\n    initHistoryStack(router);\n  }, [router]);\n  return null;\n}\n```\n\n### Prefetch and preview\n\n`PrefetchLink` resolves the target view — through the route guards — before the click, with four strategies: `intent` (default, hover/focus), `render`, `viewport` and `none`. `usePrefetch` exposes `{view, loading, error}`, so a popover can render a live preview of the target view while the user is still hovering. The typed links take the same `prefetch` prop directly — `<TypedLink<typeof routes> to=\"/users/:id\" params={{id: '7'}} prefetch=\"viewport\">` needs no component swap. Reliability is built in: a failed prefetch is dropped, so the next hover/focus retries it, and the click itself always re-validates through the router's `preload` cache — `invalidate()` (logout, account switch) is honored, so a stale guard-passed entry can never commit without re-running the guards; within the TTL that re-validation is free, resolving to the same cached promise.\n\n```tsx\nimport {PrefetchLink, usePrefetch} from '@native-router/react';\n\nfunction Preview({visible}: {visible: boolean}) {\n  const {view, loading, error} = usePrefetch();\n  if (!visible) return null;\n  if (loading) return <div className=\"popover\">Loading…</div>;\n  if (error) return <div className=\"popover\">Failed to prefetch</div>;\n  return <div className=\"popover\">{view}</div>; // the target view, before any click\n}\n\n<PrefetchLink to=\"/users/1\" prefetch=\"viewport\">\n  User 1\n  <Preview visible={false /* show on hover */} />\n</PrefetchLink>\n```\n\n## Features\n\n- Three history modes out of the box: `HistoryRouter`, `HashRouter`, `MemoryRouter` (tests, widgets); `Router` renders with an externally created instance, `createRouter` builds one for a custom history\n- Route guards: static `redirect` and async `beforeLoad` on every route level, run shallow → deep; both may return `{path, replace: true}` to overwrite the current history entry instead of pushing (the last redirect hop wins); more than 10 chained redirects reject with `RedirectLoopError`\n- Cancelable async navigation: starting a new navigation supersedes the in-flight one; `cancel(router)` aborts it; a history POP cancels it too — and the chain's `AbortSignal` reaches every `data` loader as `ctx.signal` (`fetch(url, {signal: ctx.signal})`), so superseded navigations stop their requests instead of only having results dropped\n- `NavLink` with `isActive`/`isExactActive`, `end`, `caseSensitive` and `aria-current` (defaults to `\"page\"`); `className`/`style`/`children` accept `({isActive, isExactActive})` callbacks; `to=\"/\"` is active for every path\n- Polymorphic links: every link component takes an `as` component — own props flattened and type-checked on the link, colliding props through the `asProps` escape hatch, `href`/`onClick`/`aria-current` injected, `ref` forwarded\n- `useSearchParams` reads and writes the query string; writes push by default or replace with `{replace: true}`; `useSetSearch(schema)` is the schema-aware setter twin of `useSearch(schema)` — the next value is validated by the same schema before any navigation, a rejection throws `SearchError` without touching the location, and the written query is the schema's own output(defaults applied); `writeSchema(schema, defaults)` (from the core) derives a write projection that strips default-equal keys for clean URLs; the setters are fire-and-forget safe — navigation failures are already handled, and the returned promise still rejects for callers that await it\n- Typed search: an optional Standard Schema validator (zod/valibot/arktype, no hard dependency) on any route `search` field, parsed at resolve time — `data` loaders and `beforeLoad` guards receive a typed `ctx.search` and an invalid search fails the level through the existing error layers; `useSearch(schema?)` reads it in components, degrading to the raw object without a schema\n- Search and params type closure: `createRoutes(routes)` re-types the returned table so every level's `data`/`beforeLoad` `ctx.search` derives from the level's own schema and `ctx.params` from the accumulated path patterns of the matched prefix (`beforeLoad` additionally honors a prefix `params` schema's output) — no `Route<P, S>` generics or callback annotations needed; param-less levels keep the loose `Record<string, string>`, and an explicit `Route<P, S>` generic still wins wherever written\n- `createRoute(path, search?, config)` factory: build one route at a time with WRITE-TIME typed callbacks — the schema as the second argument types `ctx.search` while you write it, the path argument types `ctx.params`; the two-argument form keeps the schema inside the config and the returned route re-types precisely all the same\n- Fine-grained search invalidation via `searchDeps` on every route level (the field passes through `createRoutes` to the core): declare the search keys a level's resolution consumes and a same-path navigation that leaves every declared projection unchanged re-serves the current view snapshot — zero guards, zero loaders, zero lazy imports; `useSearchParams`/`useSetSearch` writes (push and `{replace: true}`) take the same fast path, and `useSetSearch(schema)` still validates the whole value before navigating\n- Type-safe links: `createRoutes(routes)` checks the table while keeping every `path` literal, `RoutePaths<typeof routes>` extracts the pattern union(through nesting and param segments), and `<TypedLink<RoutePaths<...>> to params>` narrows `to` to the table and checks `params` against the exact pattern's segments — compile errors for unknown paths and missing/wrong params, click-time interpolation with encoding as the runtime backstop; `TypedNavLink`/`TypedPrefetchLink` bring the same narrowing to the active-state and prefetching links. Give the link the whole table — `<TypedLink<typeof routes>>` — and `search` joins the discrimination too, typed by the pattern's route schema input(Standard Schema `~standard.types`, zod/valibot/arktype), serialized into the href and the navigation target; schema-less patterns keep `search` loose, and the paths-union flavor is untouched. `TypedLink` and `TypedNavLink` also take an optional `prefetch` strategy — declared, the link renders through `PrefetchLink` on the interpolated target(`usePrefetch` preview context included) with the narrowing and the missing-param backstop kept; omitted, it stays the plain link\n- Router context: a `context` prop on the Router components (or a `context` option on `createRouter`) bakes in one synchronous value per router instance, handed to every `data` loader and `beforeLoad` guard as `ctx.context` — per-instance deps (API client, config, i18n) without a module singleton; omit it and the context is `undefined`, existing setups unchanged\n- Route context: a route may additionally declare its own `context` object, merged OVER the router context (route wins on key conflicts) for the level and its descendants — `beforeLoad` sees the fold accumulated through its own level, each `data` loader the fold through its level; typing closes on the `createRoutes` table and through `Route<P, S, C, RC>`'s fourth generic, and tables that declare none keep the exact instance value\n- `ScrollRestoration` restores the scroll offset per history entry on back/forward and resets it on push (`resetOnPush` to opt out)\n- `viewTransition` prop on the Router components opts navigation into the browser's View Transitions API: `true` animates push navigations only, a predicate decides per navigation on `{action, to, from}`; the direction rides the transition `types` for `:active-view-transition-type(push|pop)` CSS, and unsupported browsers degrade to plain navigation\n- Router-level `preload(router, to)` shares resolved views across links with in-flight dedup and a 30s TTL; `PrefetchLink` prefetch through it — a failed prefetch retries on the next hover/focus, a click always re-validates through the cache (so `invalidate()` can never be outrun by a stale entry; within the TTL the check is free), and a prefetched redirect that returned `{replace: true}` commits by replacing\n- Hooks: `useRouter`, `useView`, `useData<T>(name?)` (typed data of the current level, or named data of ancestor routes — derive the annotation from the loader with `RouteDataOf` instead of hand-writing it), `useMatched` (matched levels, params, location), `useLoading`, `usePrefetch`, `useSearch(schema?)`, `useSetSearch(schema)`, `useRouteDebug()` (the core's `onDebug`/`getDebugInfo` observability surface as a `useSyncExternalStore` snapshot — current location, window depth, snapshot count and the in-flight navigation chain, re-rendered on every navigation lifecycle event; purely observational), `useBlocker(fn)` (unsaved-changes guard: the core `setBlocker` veto — the predicate allow-lists, return `true` to let the navigation through, `false` to veto it — registered while the component is mounted and always asked through the latest closure; every veto is tracked on the returned `blocker.state` with a `proceed()`/`reset()` channel — `proceed()` retries the vetoed navigation bypassing this hook's blocker only, so the confirm dialog is a three-liner)\n- `notFound` prop on the Router components: a `NotFoundError` (unmatched path, or a guard/loader throwing one for missing data) renders the declared node/component as the entry's committed view instead of a blank screen — precedence over `errorHandler` for `NotFoundError` only, every other error keeps the existing channel\n- Two error layers, both phases: global `errorHandler` prop on the Router, per-route `errorComponent` receiving `{error, ctx}` — `errorComponent` renders for resolve failures(loader/guard/search, no `ctx.phase`) AND for render errors thrown by the component subtree(`ctx.phase === 'render'`, caught by a route-level error boundary so a rendering crash never escapes past its route, like the browser's error page for any failed load)\n- Route-level `pendingComponent` skeleton, shown only when no previous view can be retained (cold start, refresh, re-navigation after an error); the nearest matched ancestor's wins, and in-app navigation keeps the previous view instead — unless the Router opts into `pendingDelayMs`, switching the retained view to the skeleton once a navigation has been pending that long\n  - Keeping the previous view during in-app navigation is an intentional design following browser-native semantics — see the Design Principles section of the core repository's README\n- SSR: `resolveServerView` (from `@native-router/react/server`) renders the view plus an inline data payload; `hydrate` (from `@native-router/react/ssr`) reuses that payload on the client with zero refetch\n- Tree-shakable: `sideEffects: false` — unused components and hooks drop out of the bundle\n\n## Matching semantics\n\n- Every matching chain is collected and the **most specific one wins**: per path segment, static text outranks a dynamic `:param`, which outranks a splat `*wildcard`, and every segment adds to the chain's score — so longer chains (more of the URL pinned down) outrank shorter ones. Equally specific chains fall back to **declaration order**. A parent whose prefix matched but whose children all failed never hides later siblings — e.g. `[{path: '/a', children: [{path: '/b'}]}, {path: '/*rest'}]` serves `/a/q` from the wildcard.\n- A route **without `path`** is a layout: it matches the empty prefix and its children are matched against the full remaining path.\n- A leaf child with **`path: ''`** matches whatever is left under its parent. It serves as the parent's index route (and as the fallback for paths unmatched under the parent) — siblings that match with real segments outrank it by specificity, so its declaration position no longer decides.\n- **Trailing slashes are significant**: `/users/` does not match `/users`.\n- Matching is **case-sensitive**.\n- Params of nested levels are merged **deep over shallow** (`mergeMatchedParams`): for `/:id` + `/posts/:id`, the deeper `id` wins.\n\n## Link interception\n\n`Link` (and `PrefetchLink`/`NavLink`, which delegate to it) intercepts only plain primary-button clicks. The browser keeps its default behavior for:\n\n- modified clicks (⌘/Ctrl/Shift/Alt) and any non-left button\n- `target=\"_blank\"`, `target=\"_parent\"` or `target=\"_top\"`\n- `rel` containing `external`\n- events already `defaultPrevented`\n\nA user-provided `onClick` runs first with the same event; calling `e.preventDefault()` there suppresses the navigation entirely. While a navigation started by a link is pending, further clicks on that link are ignored.\n\n## Rendering through your own component (`as`)\n\n`Link`, `NavLink`, `PrefetchLink`, `TypedLink`, `TypedNavLink` and `TypedPrefetchLink` accept an `as` component: the link renders through it instead of the plain `<a>`, so a design-system link gets SPA navigation, active state and prefetch in one line:\n\n```tsx\nimport {NavLink} from '@native-router/react';\nimport {NavLink as HazeNavLink} from 'haze-ui';\n\n<NavLink as={HazeNavLink} to=\"/help\" variant=\"primary\">\n  Help\n</NavLink>\n```\n\nThe contract for the `as` component:\n\n- **Forward its ref and spread the rest props** onto the DOM element it renders — everything below depends on it (`href`, the composed `onClick` and `aria-current` must reach the DOM).\n- **Own props land directly on the link** (`variant` above): props that do not collide with the link's own props are flattened and checked by TypeScript — required props stay required, invalid values are compile errors.\n- **Colliding props go through `asProps`**: only keys the component shares with the link's base props (anchor attributes such as `title`/`target`) are accepted there, and they are spread last, explicitly overriding the base value. With no shared keys the prop degrades to `{}` — no ambiguity.\n\nThe navigation semantics stay owned by the link: `href` is always the computed target of `to`, the click handling is always the composed one (user `onClick` → interception guard → in-app navigation) and `NavLink`'s `aria-current` is always its active-state value — none of them can be overridden, not even through `asProps`. The `ref` is the `as` component's own, so a component that is not wrapped in `forwardRef` rejects `ref` at compile time.\n\n`TypedLink` composes with `as` on top of its pattern narrowing — give both type arguments, since a partial instantiation does not infer the remaining one:\n\n```tsx\n<TypedLink<RoutePaths<typeof routes>, typeof HazeNavLink>\n  to=\"/users/:id\"\n  params={{id: '7'}}\n  variant=\"primary\"\n>\n  User 7\n</TypedLink>\n```\n\n`TypedNavLink` and `TypedPrefetchLink` are the one exception: with a single type argument they still accept an `as` component (`<TypedNavLink<Paths> to=\"/\" end as={HazeNavLink} />`), with the component's own props passing through unchecked; give both type arguments for the full checking above.\n\n`PrefetchLink`'s strategies keep working through the `as` component; the `viewport` strategy observes the DOM node the component forwards its ref to, so a component that never forwards the ref down to a DOM element simply never triggers a viewport prefetch.\n\n## View Transitions\n\nThe `viewTransition` prop opts navigation into the browser's [View Transitions API](https://developer.mozilla.org/en-US/docs/Web/API/View_Transitions_API) — route views crossfade with zero animation code:\n\n```tsx\nimport {HistoryRouter as Router, View} from '@native-router/react';\n\n<Router routes={routes} viewTransition>\n  <View />\n</Router>\n```\n\nThe library owns only the **timing**: every navigation that passes the check is committed inside `document.startViewTransition(() => flushSync(render))`, so the DOM updates synchronously in the transition callback and the browser captures both frames correctly. While a transition is open, the pending view is committed only inside its callback — anything else that re-renders in between (the loading state, the internal replace that follows a POP) still sees the old view, so nothing leaks a pre-capture commit. The library never assigns a `view-transition-name` and never injects CSS: **what animates is entirely your stylesheet**.\n\n**`true` animates pushes only.** A `pop` lands on a cached `viewStack` snapshot — animating it would only slow the back button down — and `replace` stays silent (`refresh`, or a guard redirect that returned `{path, replace: true}`; a plain path-string redirect still pushes). A predicate decides per navigation instead, judged on `{action: 'push' | 'replace' | 'pop', to, from}`:\n\n```tsx\n// Pushes slide in from the right, back/forward mirror it:\n<Router\n  routes={routes}\n  viewTransition={({action}) => action === 'push' || action === 'pop'}\n>\n  <View />\n</Router>\n```\n\nEach animated navigation carries its direction as a [transition type](https://developer.chrome.com/docs/web-platform/view-transitions/same-document) — `push` or `pop`, none for `replace` — so CSS can tell the two apart:\n\n```css\n/* Default crossfade needs no CSS at all; this adds direction */\n::view-transition-old(root) {animation: 200ms ease both vt-out;}\n::view-transition-new(root) {animation: 200ms ease both vt-in;}\n/* pop plays the same pair mirrored */\n:root:active-view-transition-type(pop)::view-transition-old(root) {\n  animation-name: vt-out-rev;\n}\n:root:active-view-transition-type(pop)::view-transition-new(root) {\n  animation-name: vt-in-rev;\n}\n@keyframes vt-out    {to   {transform: translateX(-30%); opacity: 0;}}\n@keyframes vt-in     {from {transform: translateX(30%);  opacity: 0;}}\n@keyframes vt-out-rev {to   {transform: translateX(30%);  opacity: 0;}}\n@keyframes vt-in-rev  {from {transform: translateX(-30%); opacity: 0;}}\n```\n\n### Recipe 1 — whole-page transition (zero CSS)\n\nWith no `view-transition-name` anywhere, the whole document is one `root` snapshot: `viewTransition` alone gives you the browser's default crossfade. Nothing to set up.\n\n### Recipe 2 — animating only the view outlet\n\nNested layouts, `MemoryRouter` widgets, master-detail panes: circle the animated region and freeze everything else. Give the outlet the document's only `view-transition-name`, then hold the `root` group still:\n\n```tsx\n<main className=\"outlet\">\n  <View />\n</main>\n```\n\n```css\n.outlet {\n  view-transition-name: outlet;\n}\n/* Freeze the page shell: only the outlet group animates */\n::view-transition-group(root) {\n  animation: none;\n}\n::view-transition-old(root),\n::view-transition-new(root) {\n  animation: none;\n  mix-blend-mode: normal;\n}\n/* The outlet itself crossfades (or slides — style it like root above) */\n::view-transition-group(outlet) {\n  animation-duration: 200ms;\n}\n```\n\nA `view-transition-name` must be **unique across the whole document** — one name, one element. Two elements sharing a name make the transition skip.\n\n### Concurrency: one transition per document\n\nThe browser runs a single view transition per document at a time — starting a new one skips the previous. Two routers both animating (nested SPAs, several `MemoryRouter` panes) will constantly skip each other; give the inner routers predicates that keep them quiet, or animate only one of them. This is browser semantics, not something the library intervenes in.\n\n### Accessibility\n\nRespect `prefers-reduced-motion`:\n\n```css\n@media (prefers-reduced-motion: reduce) {\n  ::view-transition-group(*),\n  ::view-transition-old(*),\n  ::view-transition-new(*) {\n    animation: none !important;\n  }\n}\n```\n\n### Support\n\n- Same-document View Transitions: Chrome/Edge 111+, Safari 18+, Firefox 139+\n- Transition `types` (the direction tags): Chrome/Edge 129+, Safari 18.2+ — probed once by behavior (a callback-only implementation throws a synchronous `TypeError` on the options form); elsewhere the transition still runs, just without direction types, so `:active-view-transition-type(...)` selectors stop matching\n- No View Transitions at all (jsdom, older browsers): plain navigation, nothing happens\n\n## Typing `useData`\n\n`useData<T>()` annotations have no compile-time link to the route's `data` loader — the annotation *is* the contract. That is deliberate. Two closure schemes were evaluated (2026-08) and rejected:\n\n- **A from-argument** (`useData('/articles/:slug')`, indexing a route-table map by path literal — TanStack's `useLoaderData({from})` shape). Rejected: it makes every view aware of the path it happens to be mounted under. Matching data to a view is the route configuration's job; a view should know what it renders, not where it is mounted.\n- **A data-props protocol** — constrain `component` to `ComponentType<{data: D}>` and let `createRoutes` check the loader output against it at the config site. The check lands at the right layer, but deep children would then need prop drilling to reach the data.\n\nWhat stays: path-agnostic views, no prop drilling, one local annotation.\n\nThe channel that couples neither paths nor props arrived as a type helper: `RouteDataOf` derives the annotation from the loader itself — the same reference the route table hangs — so it cannot drift from what `route.data` resolves:\n\n```tsx\nconst loadUser = ({params, signal}) =>\n  userService.fetchById(+params.id, {signal}); // → Promise<User>\n\n{path: '/users/:id', data: loadUser, component: () => UserView}\n\n// UserView — still one local annotation, now checked instead of asserted\nconst user = useData<RouteDataOf<typeof loadUser>>(); // User | undefined\n```\n\nZero runtime, zero new call-site arguments. Each level of a nested chain types through its own loader (the runtime's nearest-provider rule — a view reads the data of its own matched level), a level without `data` reads `undefined`, and anything the helper cannot resolve degrades to `unknown` — the bare `useData()` width — never a compile error. A hand-written `useData<Article>()` keeps priority wherever it is written.\n\n## Data loading recipe\n\nBare loaders plus `useData<RouteDataOf<...>>()` carry simple tables a long way. When an app grows — entity caches, DevTool mocks, mutations that must address the same data the route loaders produced — the pattern that scales is a per-entity triple: one factory call binds the same fetch to the route table, the view read and the component/mutation channel at once:\n\n```tsx\n// [loader, useData, queryFn] — one declaration per entity\nconst [loadArticle, useArticle, queryArticle] = createDataLoader({\n  fetch: (slug: string, signal?: AbortSignal) =>\n    api.get(`/articles/${slug}`, {signal}), // the one fetch\n  cache: articleCache, // keyed entity cache: [slug] → Article\n  keyOf: (ctx) => [ctx.params.slug], // route ctx → cache key, defined once\n  staleTime: 30_000\n});\n\n// the route table hangs the loader by reference\n{path: '/articles/:slug', data: loadArticle, component: () => ArticleView}\n\n// the view reads typed by the same loader, optionality in the return type\nconst article = useArticle(); // Article — this route declares the loader\nconst maybe = useArticle({optional: true}); // Article | undefined — a shared\n// component may also be mounted under a route without the loader\n\n// reads outside the route lifecycle and mutations address the same entity\nconst fresh = useQuery(queryArticle, [slug]);\ninvalidate(queryArticle, [slug]);\n```\n\nWhy one factory for the three:\n\n- **`loader`** — what the route table hangs, by reference. The reference identity doubles as a DEV source check: in the hook, `route.data === loadArticle` proves the view reads what this loader resolved. Declaration identity, not a result fingerprint — the same loader under different params, optimistic writes and stale-while-revalidate's old-value-first all fake a fingerprint.\n- **`useData`** — the view read with the required/optional split carried in the return type: a bare call asserts the route declares this loader, so data is resolved before the view mounts (pending and errors are handled by `pendingComponent`/`errorComponent`); `{optional: true}` covers shared components that may also render under routes without the loader.\n- **`queryFn`** — the same fetch × cache bound for reads outside the route lifecycle; mutations write and invalidate through the same key the loader resolves, so the route channel and the component channel cannot drift apart.\n\nThe factory itself is application glue — cache library, mock layer, DEV checks — not router API. It is extracted from **painless**, the reference SPA template built on this router (see its `src/util/dataLoader.ts` for the full implementation: double-channel caching, DevTool mocks and the DEV identity check included).\n\n## Deferred data without `<Await>`\n\nTanStack Router ships a deferred-data primitive: a loader returns a promise for secondary data without awaiting it, and the view renders `<Await>` over it so the page streams in as it settles. This router deliberately does not — the answer is a composition of the two channels above plus plain React:\n\n- **First-screen-critical data rides the loader and blocks the resolve.** The view commits whole — `pendingComponent` covers the cold start, in-app navigation keeps the previous view until the new one is ready — so there is no client-side promise plumbing on the critical path, and every committed view is a complete snapshot (which is what back/forward, preload previews and view transitions are built on).\n- **Secondary data — comments, sidebars, recommendations — rides the component channel and never blocks.** The component fetches it itself through its `queryFn`, and the loading state lives where the data renders: painless' comment list renders its own `Spinner` while the article above it is already interactive (`src/views/Article/CommentList.tsx`, bound in `src/services/dataloaders.ts`).\n- **Want the `<Await>` ergonomics anyway — a declarative fallback instead of a manual loading flag?** That is what React's `<Suspense>` is for, and react-toolroom's `useSuspenseResult` hands it the in-flight result: the reader suspends until the first result exists, the owner drives the fetch from outside the boundary. Same deferred effect, standard pieces, no router API involved:\n\n```tsx\nimport {Suspense} from 'react';\nimport {useRun, useSuspenseResult} from 'react-toolroom/async';\n\nfunction ArticleComments({slug}: {slug: string}) {\n  const fetchComments = useInjectable(queryComments);\n  useRun(fetchComments, [slug]); // outside the boundary — effects of a\n  return (                       // suspended subtree never run\n    <Suspense fallback={<Spinner />}>\n      <CommentReader fetchComments={fetchComments} />\n    </Suspense>\n  );\n}\n\nfunction CommentReader({fetchComments}: {fetchComments: typeof queryComments}) {\n  const comments = useSuspenseResult(fetchComments); // suspends once\n  return comments.map((c) => <Comment key={c.id} {...c} />);\n}\n```\n\nThe trade: `<Await>` gives you promise-typed loader returns and route-managed streaming at the cost of partial commits; this router keeps commits atomic and pushes deferred rendering to the component level, where Suspense, error boundaries and the entity cache already live. **painless** is the living reference for both channels — see `decisions.md` there for the channel-split reasoning.\n\n## Fine-grained search invalidation\n\nA same-path search change — paging, filtering, collapsing a panel — normally re-resolves the whole chain: every level's `beforeLoad`, `data` loader and lazy `component` import re-run, however small the change is. `searchDeps` (a `Route` field inherited from the core) opts a level out of that by declaring which search keys its resolution consumes. The recommended shape is the one painless uses: the root layout declares `[]` (it renders the outlet and consumes nothing), each leaf declares exactly the keys its loader reads:\n\n```tsx\nimport {createRoutes} from '@native-router/react';\nimport {z} from 'zod';\n\nconst homeSearch = z.object({\n  tag: z.string().optional(),\n  offset: z.coerce.number().default(0),\n  limit: z.coerce.number().default(20)\n});\n\nconst routes = createRoutes({\n  component: () => import('./Layout'),\n  searchDeps: [], // the layout consumes nothing from the search\n  children: [\n    {\n      path: '/',\n      search: homeSearch,\n      searchDeps: ['tag', 'offset', 'limit'], // exactly what the loader reads\n      component: () => import('./Home'),\n      data: ({search}) => fetchArticles(search)\n    }\n  ]\n});\n```\n\n- **Fast path:** the navigation targets the same pathname, **every level of the matched chain declares `searchDeps`**, and each level's projection is unchanged between the current entry and the target → the current view snapshot is committed as the new entry: zero guards, zero loaders, zero lazy loading, the same path a POP hitting the view stack takes. `navigate()` and both `useSearchParams`/`useSetSearch` write branches (push and `{replace: true}`) take it — the check is the core's `reusableEntry`\n- **Chain coverage is all-or-nothing:** one undeclared level re-resolves the whole chain on every navigation — the behavior before this feature, byte for byte. That is why the layout declares `[]` too: miss one level and the whole chain falls back to re-resolving on every search change\n- **Schema and guard keys count as consumed:** the fast path runs no `beforeLoad`, and a guard reading a search key will not re-run when it changes unless the key is declared. The `search` schemas themselves are NOT skipped: the target's raw search validates against every matched level's schema before the snapshot is re-served, and a rejected value abandons the fast path so the `SearchError` surfaces through the normal error layer (route `errorComponent`, else the global `errorHandler`) instead of landing unchecked in the URL — the same failure a hand-typed invalid URL produces. `useSetSearch(schema)` still validates the whole value against the schema before any navigation, whatever the declared keys\n- **The reused view is a snapshot:** it keeps the `data` and matched `ctx` of the resolve that produced it; read live search through `useSearch`/`useSearchParams` — they subscribe to history and are always current — never through the matched context. `hash`/`state` never take part either: on a fully declared chain a hash-only navigation reuses the snapshot too\n- **No View Transition, scroll reset as usual:** a reused navigation keeps the same view reference, so nothing animates; `ScrollRestoration`'s `resetOnPush` scrolls each new push entry back to the top exactly as before\n- `invalidate()` drops the snapshots and the fast path stays off until the next real resolve; POP replay, `initHistoryStack` warm-up and `refresh()` are untouched\n\n## Observability / debug events\n\nThe core ships an opt-in, purely observational navigation event stream — `router.onDebug(listener)` emits `nav-start` / `nav-commit` / `nav-cancel` / `nav-supersede` / `nav-error` (with the action, the target path and timings; `nav-commit.replay` flags a POP served from the `viewStack` snapshot), and `router.getDebugInfo()` snapshots the current location, the session window depth, the held view snapshots and the in-flight chain. See the core README's [Observability / debug events](https://github.com/native-router/core#observability--debug-events) section for the full event table.\n\n`useRouteDebug()` is the React binding over that surface — a `useSyncExternalStore` snapshot re-rendered on every navigation lifecycle event, ready for a DevTool panel:\n\n```tsx\nimport {useRouteDebug} from '@native-router/react';\n\nfunction RouteDevPanel() {\n  const {to, index, stackDepth, snapshots, resolving} = useRouteDebug();\n  return (\n    <aside aria-label=\"router debug\">\n      <b>{to}</b> (index {index}, stack {stackDepth}, snapshots {snapshots})\n      {resolving && <span> navigating to {resolving.to}…</span>}\n    </aside>\n  );\n}\n```\n\nMount the panel anywhere inside the Router (a nav bar beside `<View />` works); subscribing is what enables the stream, and with no consumer mounted the observation is free. For a full event timeline the raw stream is a plain effect away — `useEffect(() => router.onDebug(listener), [router])` — and the snapshot stays consistent with it because every event refreshes the cache the hook reads.\n\n## Structural differences vs TanStack Router\n\nFour capabilities in this README — the view stack, `searchDeps`, `useBlocker` and `viewTransition` — read like features, but each is an architectural commitment that TanStack Router makes differently or not at all. The TanStack statements below are checked against its current docs at [tanstack.com/router](https://tanstack.com/router/latest/docs/framework/react/overview); the native-router side is what the source does. A concept-by-concept migration map lives in [docs/from-tanstack-router.md](./docs/from-tanstack-router.md).\n\n### `viewStack`: back lands on a snapshot, not on a loader cache\n\nEvery committed navigation stores its resolved view in the router's in-memory view stack; a POP lands on that snapshot — no re-match, no guards, no loaders, no requests. The session stack survives a refresh as a bounded tail window serialized into `history.state` (`maxStackDepth`, default 100), restored on startup and warmed once by `initHistoryStack` from `@native-router/core` (the `StackWarmer` above is an example component pattern, not a library export).\n\nTanStack Router has no counterpart: back is an ordinary navigation — the route re-matches, and its built-in SWR cache decides what a loader re-runs. The cache is keyed on the parsed pathname plus `loaderDeps`; the `beforeLoad` chain runs on every navigation regardless; and with the default `staleTime: 0`, re-entering a loader key revalidates in the background — so back fires requests by default, tuned away through `staleTime`/`gcTime`/`shouldReload`.\n\nThe difference is structural, not a matter of cache tuning: a snapshot retains the *resolved view* — the same element carrying its resolve-time `data` and matched `ctx`, the lazy `component` already imported — so the page back re-mounts has nothing to re-run and nothing to wait for (`ScrollRestoration` restores the entry's scroll offset; React state is not retained — the component mounts fresh). A loader cache re-feeds a re-mounted component, and with default staleness its loaders fire again. \"Back never runs user code\" is a property of the stack, not a configuration of a cache.\n\n### `searchDeps`: a search change that runs nothing\n\nOn a same-path search change where **every level of the matched chain declares `searchDeps`** and no declared projection changed, the current view snapshot is re-committed — zero guards, zero loaders, zero lazy imports, the same path a POP takes. Chain coverage is all-or-nothing: one undeclared level restores the resolve-on-every-navigation behavior byte for byte. The wiring rule from the previous section applies unchanged: guard-read keys must be declared or their guards will not re-run (`search` schemas are not skipped — the target validates before the snapshot is re-served), and `useSetSearch(schema)` still validates the whole value before navigating.\n\nTanStack's nearest knob is `loaderDeps`, and it points the other way: `loaderDeps` is a cache *key* — when the deps change the route reloads, and when they don't, default staleness still revalidates in the background; `beforeLoad` keeps running either way. There is no configuration in which a search change runs literally nothing.\n\nStructurally this is the `viewStack` mechanism applied mid-session — the view never leaves the tree, and re-committing the identical element reference makes React skip the subtree, so component state survives — which is why it cannot be reproduced by making a cache \"fresh enough\".\n\n### `useBlocker`: the rewind lives in the library\n\nA vetoed browser POP is automatically pushed back — the core rewinds the history itself, leaving no dangling forward entry. The ask surface is `{state, proceed, reset}`: `proceed()` is a one-shot bypass of this hook's own blocker only (other registered blockers and the guard chain are still asked), and the retry is a fresh push navigation. The predicate is a synchronous allow-list — `true` lets the navigation through, `false` vetoes, a throw counts as a veto (fail-closed) — asked at the head of every navigation and before a POP lands; `refresh` and guard redirects are never blocked.\n\nTanStack's `useBlocker({shouldBlockFn, withResolver, enableBeforeUnload})` returns `{status, proceed, reset}` and also intercepts popstate through its history layer. The predicate polarity is reversed (`shouldBlockFn` returning `true` *blocks*; here `true` *allows* — invert your dirtiness check), the decision may be asynchronous (`withResolver` defers it), and `enableBeforeUnload` couples the browser's unload dialog into the hook. Here the decision is made synchronously inside the history event, so the rewind is immediate and the confirm UI is three props wide — the division of labor differs, not just the spelling.\n\n### `viewTransition`: the library owns timing, CSS owns scope\n\nThe library wraps the commit in `document.startViewTransition(() => flushSync(render))` behind a commit gate — while a transition is open, the store snapshot keeps serving the old view and only the transition callback commits the new one, so nothing (a loading re-render, the post-POP window sync) can commit before the browser captures the old frame. The direction rides the transition `types` (`:active-view-transition-type(push|pop)`), `true` animates pushes only — a `pop` lands on a `viewStack` snapshot and animating it would only slow the back button — and a predicate decides per navigation on `{action, to, from}`. The library never assigns a `view-transition-name` and never injects CSS; what animates is the caller's stylesheet.\n\nTanStack Router opts in per navigation (`viewTransition` on `Link`/`navigate`) or router-wide (`defaultViewTransition`): `true` wraps navigations in `startViewTransition()` with no direction filter, and `ViewTransitionOptions.types` computes the type tags from `{fromLocation, toLocation, pathChanged, …}` yourself (returning `false` skips the transition). Scope is the caller's CSS there too — that part is the platform's, not the library's. What differs is the default predicate (push-only, because a pop is a snapshot hit), the automatic action→types mapping, and the commit gate as documented behavior rather than an implementation detail.\n\n## Install\n\n```bash\nnpm i @native-router/react\n```\n\n`@native-router/core` comes along as a dependency.\n\n## Usage\n\n```tsx\nimport {View, HistoryRouter as Router} from '@native-router/react';\nimport type {Route} from '@native-router/react';\nimport Loading from '@/components/Loading';\nimport RouterError from '@/components/RouterError';\nimport * as userService from '@/services/user';\n\nconst routes = {\n  component: () => import('./Layout'), // a layout renders <View /> for its child\n  children: [\n    {\n      path: '/',\n      component: () => import('./Home')\n    },\n    {\n      path: '/users',\n      component: () => import('./UserList'),\n      data: userService.fetchList,\n      // cold-start/refresh skeleton; in-app navigation keeps the old view\n      pendingComponent: () => <UserListSkeleton />\n    },\n    {\n      path: '/users/:id',\n      component: () => import('./UserProfile'),\n      // guards run before the view resolves; return a path to redirect —\n      // or {path, replace: true} to replace instead of push, so back\n      // skips the guarded URL:\n      //   return {path: `/login?redirect=${encodeURIComponent(location.pathname)}`, replace: true};\n      async beforeLoad({params}) {\n        if (!await canView(+params.id)) return '/login';\n      },\n      // data receives {matched, index, router, location, params, search, signal};\n      // ctx.signal aborts when this navigation is superseded/cancelled\n      data: ({params, signal}) =>\n        userService.fetchById(+params.id, {signal}),\n      errorComponent: ({error}) => <p>{error.message}</p>\n    },\n    {\n      path: '/help',\n      component: () => import('./Help')\n    }\n  ]\n} as Route;\n\nexport default function App() {\n  return (\n    <Router\n      routes={routes}\n      baseUrl=\"/demos\"\n      errorHandler={(e) => <RouterError error={e} />}\n    >\n      <View />\n      <Loading />\n    </Router>\n  );\n}\n```\n\nRead the page data and params in a view:\n\n```tsx\nimport {useData, useMatched} from '@native-router/react';\n\nexport default function UserProfile() {\n  const user = useData<User>(); // the data of the current level, typed\n  const {params} = useMatched(); // params accumulated to this level\n  return <h1>{user!.username}(#{params.id})</h1>;\n}\n```\n\nThe progress bar above the view is just `useLoading`:\n\n```tsx\nimport {useLoading} from '@native-router/react';\n\nexport default function Loading() {\n  const loading = useLoading();\n  return loading?.status === 'pending' ? <div className=\"bar\" /> : null;\n}\n```\n\nRender something for unmatched paths instead of a blank screen — a `notFound` prop on the Router components (a ReactNode as-is, or a component type rendered with no props):\n\n```tsx\n<HistoryRouter routes={routes} notFound={() => < NotFoundPage />}>\n  <View />\n</HistoryRouter>;\n```\n\nA resolution rejecting with the core's `NotFoundError` — an unmatched path, or a guard/loader throwing one for missing data — renders it as the entry's committed view, so a back/forward onto the entry replays it. `notFound` takes precedence over `errorHandler` for `NotFoundError` only; every other error keeps the existing `errorHandler` path, and without the prop nothing changes.\n\nIn-app navigations keep the previous view until the new one resolves (the view stack design). Opt into a skeleton for the slow ones with `pendingDelayMs` — once a navigation has been pending that long, the nearest matched `pendingComponent` replaces the retained view until it settles; a loader that resolves inside the threshold never flashes:\n\n```tsx\n<HistoryRouter routes={routes} pendingDelayMs={300}>\n  <View />\n</HistoryRouter>;\n```\n\nRead and write the query string:\n\n```tsx\nimport {useSearchParams} from '@native-router/react';\n\nfunction Pager() {\n  const [searchParams, setSearchParams] = useSearchParams();\n  const page = searchParams.get('page') ?? '1';\n\n  function go(next: number) {\n    const params = new URLSearchParams(searchParams);\n    params.set('page', String(next));\n    setSearchParams(params); // push by default\n    // setSearchParams(params, {replace: true}); // or rewrite the current entry\n  }\n\n  return <button onClick={() => go(+page + 1)}>Next</button>;\n}\n```\n\nRestore the scroll offset like a native app (place inside the Router):\n\n```tsx\nimport {ScrollRestoration} from '@native-router/react';\n\n// in your layout:\n<ScrollRestoration /> // back/forward restore, push resets; resetOnPush={false} to keep\n```\n\nOn mount it also sets `history.scrollRestoration` to `manual`: the browser's own `auto` restoration would race the component's restore and pre-scroll while the left entry's offset is still being read, so the component owns scroll restoration for the session (the setting is not reverted on unmount).\n\nScroll timing is sequenced around view commits and therefore safe with `viewTransition`: the leaving offset is read at the history event — before the view commits, so a shrinking document cannot clamp the saved value — and the restore runs after the landed view has committed (through the view-transition callback when one is open), so `scrollTo` never lands on the outgoing document's height.\n\nValidate and type the search with a schema — any zod/valibot/arktype schema works, the router only speaks [Standard Schema](https://standardschema.dev). Declare it once on the route and the search is parsed during resolve: the `data` loader and the `beforeLoad` guard receive a typed `ctx.search` (coerced numbers, defaults applied), and an invalid search fails the level through the existing error layers — the route `errorComponent`, else the global `errorHandler`.\n\nBuild the table with `createRoutes` and the typing closes by itself: the returned table derives every level's `ctx.search` from the level's own schema, so neither the manual `Route<P, S>` generic nor callback annotations are needed. (Callbacks written inside the literal are checked loosely — `ctx.search: any` — since TypeScript cannot contextually type a member from sibling properties; the precise types hold on the returned table, and a callback annotation that contradicts the schema is rejected at the property.)\n\n`ctx.params` closes the same way, from the matched prefix's path patterns: `data` loaders see the accumulated raw string params, `beforeLoad` guards see them upgraded by any prefix level's `params` schema. A level whose pattern has no params keeps the loose `Record<string, string>` — precision is progressive, existing tables never re-type. A hand-written `Route<'/users/:id'>` gets the same precision on the spot: its `beforeLoad` types `ctx.params` from the pattern just like the `data` loader, while params coerced by a `params` schema still close only through `createRoutes`.\n\n```tsx\nimport {createRoutes, useData, useSearch} from '@native-router/react';\nimport {z} from 'zod';\n\nconst listSearch = z.object({\n  page: z.coerce.number().default(1),\n  tag: z.string().optional()\n});\n\nconst routes = createRoutes({\n  component: () => import('./Layout'),\n  children: [\n    {\n      path: '/articles/:slug',\n      search: listSearch,\n      component: () => import('./ArticleList'),\n      // typeof routes → ctx.search: {page: number; tag?: string},\n      //                ctx.params: {slug: string} — no annotations\n      data: ({search, params}) => fetchArticles(params.slug, search.tag),\n      errorComponent: ({error}) => <p>{error.message}</p>\n    }\n  ]\n});\n\nfunction ArticleList() {\n  const articles = useData<Article[]>(); // typed, no casts\n  const {page} = useSearch(listSearch); // parsed like ctx.search\n  const raw = useSearch(); // degraded raw object: {page: '2'} strings\n  // ...\n}\n```\n\nHand-annotated route objects keep the explicit generic — it wins wherever written:\n\n```tsx\nconst listRoute = {\n  path: '/articles',\n  search: listSearch,\n  component: () => import('./ArticleList')\n} as Route<'/articles', {page: number; tag?: string}>;\n```\n\nPrefer one level at a time? `createRoute` gives the callbacks their types WHILE YOU WRITE THEM — the schema rides the second argument, and TypeScript contextually types a parameter from earlier arguments, so `ctx.search` needs no annotation and no round-trip through the returned table:\n\n```tsx\nimport {createRoute} from '@native-router/react';\n\nconst articleRoute = createRoute('/articles/:slug', listSearch, {\n  component: () => import('./ArticleList'),\n  // ctx.search: {page: number; tag?: string},\n  // ctx.params: {slug: string} — typed right here, in the editor\n  data: ({search, params}) => fetchArticles(params.slug, search.tag)\n});\n```\n\nThe two-argument form — `createRoute('/articles/:slug', {search: listSearch, ...})` — accepts the schema inside the config: `ctx.params` is still write-time typed from the path, `ctx.search` degrades to the loose `SearchInput` while writing, and the returned route re-types precisely all the same. The written callbacks carry over untouched (return types included, so `RouteDataOf<typeof route.data>` keeps working), and nesting through `children` accumulates literals for `RoutePaths`/`TypedLink` exactly like a `createRoutes` table.\n\n`useSearch()` without a schema degrades to the raw input object of `parseSearchInput` (strings; repeated keys are arrays) and needs no schema on the route. Both flavors re-render on every location change, and the schema must validate synchronously.\n\nWrite the search through the same schema — `useSetSearch(schema)` validates the next value before any navigation, throws `SearchError` (with the schema's issues) without touching the location when it rejects, and writes the schema's own output so defaults apply. The setters' idiom is fire-and-forget: failures down the navigation chain (a throwing guard, ...) are already handled and never surface as an unhandled rejection; await the returned promise when you need to observe the failure — it still rejects:\n\n```tsx\nimport {useSearch, useSetSearch} from '@native-router/react';\n\nfunction Pager() {\n  const {page} = useSearch(listSearch);\n  const setSearch = useSetSearch(listSearch);\n\n  function go(next: number) {\n    setSearch({page: String(next)}); // push; {replace: true} rewrites\n  }\n  // ...\n}\n```\n\nWriting the schema's own output means defaults land in the query — every page link carries `?page=1`. For clean URLs derive the write side once with `writeSchema(schema, defaults)` from `@native-router/core`: it validates through the same read contract and strips every key equal to its default, so one read schema covers both directions and the hand-written write-side twin disappears:\n\n```tsx\nimport {writeSchema} from '@native-router/core';\n\nconst listWrite = writeSchema(listSearch, {page: 1});\n// useSetSearch(listWrite): {page: 1} writes '' (clean), {page: 3} writes '?page=3'\nconst setSearch = useSetSearch(listWrite);\n```\n\nGive the whole router its own context — deps, config, i18n handles — without a module singleton: pass `context` to the Router components (or `createRouter`) and every `data` loader and `beforeLoad` guard receives it as `ctx.context`, one value per router instance. A router per test keeps fixtures from leaking across tests; a router per micro-frontend pane keeps panes from sharing state.\n\n```tsx\nimport {HistoryRouter, View} from '@native-router/react';\n\nconst routerContext = {api, i18n};\n\n<HistoryRouter routes={routes} context={routerContext}>\n  <View />\n</HistoryRouter>;\n\n// in a route: ctx.context is the very value passed above\n{\n  path: '/articles',\n  data: ({context}) => context.api.fetchArticles()\n}\n```\n\n- The value is a synchronous snapshot baked in per instance — not a reactive store; changing it does not re-resolve anything\n- The type is inferred from the prop into the router instance (`router.context`); omit it and the context is `undefined` — existing setups keep their exact types and behavior\n- To type `ctx.context` precisely, give `Route` its third generic — `Route<'/articles', Search, typeof routerContext>` — or annotate the callback's ctx; un-annotated loaders see it `any` (the same loose default `ctx.search` gets, since the route table is declared before the router)\n- `createRouter(routes, history, {context})`, `<Router>`, `<HistoryRouter>`, `<HashRouter>` and `<MemoryRouter>` all accept it\n\nA route may additionally declare its own `context` — merged OVER the router context, the route winning on key conflicts, for the level and every deeper level of its chain:\n\n```tsx\nconst routes = createRoutes({\n  component: () => import('./Layout'),\n  context: {theme: 'light'}, // layout-level defaults\n  children: [\n    {\n      path: '/admin',\n      context: {role: 'admin'}, // inherits theme, adds role\n      children: [\n        {\n          path: '/audit',\n          // this guard's ctx.context: {api, i18n, theme: 'light', role: 'admin'}\n          beforeLoad: ({context}) => (context.role === 'admin' ? undefined : '/'),\n          // each data loader sees the fold through its own level only —\n          // a layout's loader never observes deeper declarations\n          data: ({context}) => context.api.fetchAuditLog()\n        }\n      ]\n    }\n  ]\n});\n```\n\nLevels without a `context` contribute nothing — tables that never declare route contexts keep the exact instance value. On the returned `createRoutes` table every level's `ctx.context` re-types from its own declaration; the `Route` generic spells the merged shape explicitly — `Route<'/audit', any, AppContext, {role: 'admin'}>` types `ctx.context` as `AppContext & {role: 'admin'}`.\n\nMake `Link` targets type-safe: build the table with `createRoutes` (a `satisfies`-style identity function that keeps every `path` literal), extract the pattern union with `RoutePaths`, and narrow `TypedLink` to it. `params` is checked against the exact pattern's param segments — `:name` wants a string, `*name` a string array:\n\n```tsx\nimport {TypedLink, createRoutes} from '@native-router/react';\nimport type {RoutePaths} from '@native-router/react';\n\nconst routes = createRoutes({\n  component: () => import('./Layout'),\n  children: [\n    {path: '/', component: () => import('./Home')},\n    {path: '/users/:id', component: () => import('./UserProfile')},\n    {path: '/files/*rest', component: () => import('./Files')}\n  ]\n});\n\ntype AppPaths = RoutePaths<typeof routes>; // '/' | '/users/:id' | '/files/*rest'\n\n<TypedLink<AppPaths> to=\"/users/:id\" params={{id: '7'}}>User 7</TypedLink>\n// @ts-expect-error '/help' is not a pattern of the table\n<TypedLink<AppPaths> to=\"/help\">Help</TypedLink>\n// @ts-expect-error params are required for '/users/:id'\n<TypedLink<AppPaths> to=\"/users/:id\">User ?</TypedLink>\n```\n\nAt click time the params are interpolated into the pattern (values percent-encoded, wildcard segments joined with `/`); a missing required param throws instead of navigating — the runtime backstop of the type-level check. An `as Route` assertion widens every `path` to `string`, so `RoutePaths` degrades to `string` and `TypedLink` accepts any path, exactly like a plain `Link` — the migration is opt-in.\n\n`search` joins the check when you give the link the whole table instead of the paths union: `TypedLink<typeof routes>` types `search` by each pattern's route schema **input** (the URL-side type, extracted from the Standard Schema `~standard.types` pair that zod/valibot/arktype carry), while `TypedLink<RoutePaths<...>>` keeps working exactly as before with `search` loose:\n\n```tsx\nimport {TypedLink, createRoutes} from '@native-router/react';\n\nconst routes = createRoutes({\n  component: () => import('./Layout'),\n  children: [\n    {\n      path: '/articles',\n      search: z.object({page: z.coerce.number(), tag: z.string().optional()}),\n      component: () => import('./Articles')\n    },\n    {path: '/users/:id', component: () => import('./UserProfile')}\n  ]\n});\n\n<TypedLink<typeof routes> to=\"/articles\" search={{page: 2, tag: 'react'}}>\n  Page 2\n</TypedLink>\n// @ts-expect-error 'ppage' is not a field of the schema input\n<TypedLink<typeof routes> to=\"/articles\" search={{ppage: 2}} />\n// schema-less patterns stay loose: any SearchInput passes\n<TypedLink<typeof routes> to=\"/users/:id\" params={{id: '7'}} search={{from: 'list'}} />\n```\n\nAt click time the search is serialized into the query string (values `String()`-ed, arrays repeating the key, `undefined`/`null` dropped) and the route's schema validates the result on resolve exactly like a hand-written URL — an invalid search fails the level through the existing error layers. Schemas without the input pair (a bare `validate`, older vendors) degrade `search` to the loose `SearchInput` instead of erroring.\n\n`TypedNavLink` and `TypedPrefetchLink` bring the same narrowing to the active-state and prefetching links — `to` narrowed to the table, `params` and `search` checked per pattern, and every `NavLink`/`PrefetchLink` capability (`end`, `caseSensitive`, active-state `className`/`style`/`children` callbacks, `ariaCurrent`, the `prefetch` strategies) kept:\n\n```tsx\nimport {TypedNavLink} from '@native-router/react';\nimport type {RoutePaths} from '@native-router/react';\n\n<TypedNavLink<RoutePaths<typeof routes>> to=\"/\" end>Home</TypedNavLink>\n<TypedNavLink<RoutePaths<typeof routes>> to=\"/users/:id\" params={{id: '7'}}>\n  User 7\n</TypedNavLink>\n// @ts-expect-error '/help' is not a pattern of the table\n<TypedNavLink<RoutePaths<typeof routes>> to=\"/help\">Help</TypedNavLink>\n```\n\nThe active state is computed on the interpolated target, and a missing required param throws on click instead of navigating (quietly skipped when your own `onClick` already called `preventDefault`). Both compose with an `as` component: with a single type argument — `<TypedNavLink<Paths> to=\"/\" end as={MyLink} variant=\"primary\" />` — the component's own props pass through unchecked (TypeScript cannot infer the second type argument once the first is explicit); give both — `<TypedNavLink<Paths, typeof MyLink> ... />` — to check them like `TypedLink` does.\n\n`TypedLink` and `TypedNavLink` take an optional `prefetch` strategy — the same values `PrefetchLink` takes (`'intent'`/`'render'`/`'viewport'`/`'none'`). Declared, the link upgrades in place to a prefetching one: it renders through `PrefetchLink` on the interpolated target (search included, so the prefetched entry is cached under the exact pathname+search it will commit), the `usePrefetch` preview context is live on its children, and every strategy keeps working — while the pattern narrowing and the click-time missing-param backstop stay exactly as above. Omitted, the link stays the plain `Link`/`NavLink` path byte for byte, so adding `prefetch` to an existing typed link is the whole migration — no component swap:\n\n```tsx\n<TypedLink<AppPaths> to=\"/articles/:slug\" params={{slug}} prefetch=\"viewport\">\n  <PreviewCard visible={false /* show on hover */} />\n</TypedLink>\n```\n\nA render error never crashes past its route: the level's resolved view is wrapped in a route-level error boundary, which renders the same route `errorComponent` with `ctx.phase === 'render'` (the resolve-phase fallback passes no `phase`). Without a route `errorComponent` the error goes to the global `errorHandler`; the boundary keeps working across recoveries — a retry button can `refresh(router)`, and navigating away renders the next view normally.\n\nSee [demos](./demos) for a complete example.\n\n## Development\n\n`@native-router/react` (this package) and `@native-router/core` live in **two independent repositories**; clone them side by side. The vitest config aliases `@native-router/core` to `../core/src`, so tests exercise the latest core source without any install-level linking (a `@native-router/core` from the npm registry is still installed for types and production builds).\n\n```bash\npnpm install\npnpm start     # demo dev server\npnpm test:run  # react tests\n```\n\nReact's type check and production build resolve core from the npm registry, so publish core first when this repo needs to consume unpublished core APIs.\n\n## Documentation\n\n[API](https://native-router.github.io/react/modules.html)\n","readmeFilename":"README.md"}