{"_id":"@gulibs/vgrove-client","_rev":"81-4dd96ae03f57fe5cab4f30c460cfd175","name":"@gulibs/vgrove-client","dist-tags":{"latest":"0.0.170"},"versions":{"0.0.1":{"name":"@gulibs/vgrove-client","version":"0.0.1","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.1","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"3816f0aeeebffb9674b5bd1f5b9a95782d389e9f","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.1.tgz","fileCount":28,"integrity":"sha512-F3C0HgXQVYjViPRMgN1pqOyDDy7z/7fJHaYtzZxjRS69Kzku9lO+LPAMkyzKqDJvfvAEG10jqf4oIGIJwD76MA==","signatures":[{"sig":"MEYCIQCG097TRqwv+o2IyD1SOiTbpElu0nuheiK7M/JQSpUrtQIhANDEh7K8jhjqfOYnQ4Xsl4oAPmBVONJMUVs2e1rDk3xh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":502637},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"b8ab8717c409a997374b28ca4c545c1e6186b0df","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.1_1750845617708_0.8739781311047241","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@gulibs/vgrove-client","version":"0.0.2","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.2","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"8923527c71f6614d71ca54ea13e1f3750ef2769a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.2.tgz","fileCount":28,"integrity":"sha512-MsOnoOGX9DcyGAEvTuOv3p2dz/grtCbMs9+TUrfTJn5Vpc+RuMfdKLwKwo4fFM6kdfOUa6IJ8tdRtImFuNwssA==","signatures":[{"sig":"MEUCID3Gt80gk9nnsXCLfHP8dQ8onGNyYJIPo0C5ke+W9mVfAiEAxVlCLKYTM6rUVCe8E/lxpeJefMzsWhLFnCqG5lim4do=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503003},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"b8ab8717c409a997374b28ca4c545c1e6186b0df","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.2_1750851713386_0.601797242703904","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@gulibs/vgrove-client","version":"0.0.3","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.3","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"bf5270f47b9911888aae25b2bdac90cc689ac522","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.3.tgz","fileCount":28,"integrity":"sha512-9cOMWTInJkNY/pNODioVSqAGSjwxFMuhO0Ib3ctwBK7IcV73s+rH61n2yrtxxYP2QwRqiHnkEK9mnpUGnXpAwA==","signatures":[{"sig":"MEYCIQD9CFNFCAt5yntDY8qGe8N6+O5oSfewIzcMVg9y4zTt3QIhANAFKTI6w7+4nfGINBvQKCbOgYDjl+CCIliSZOU6+Y1O","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503063},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"9277544a590103be1c2c8b96dbec8b5344d9fe1c","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.3_1750852914207_0.01845874376276302","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@gulibs/vgrove-client","version":"0.0.4","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.4","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"8d96b9ff158abcba853ad1c91b937a83f0d7d0c2","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.4.tgz","fileCount":28,"integrity":"sha512-iOJP/Wlam357PBSgqCw/tvu1t0A0/eWpwultfP9HtnVKjqncVRRcsJR5cFO0Y8x8dGloyUgTEwfRxC4NhmszFQ==","signatures":[{"sig":"MEUCIGbOwEcqCateKiCsCwgHhIz8ThXG3pnkFbausIOJ7qLXAiEAlhL+T43cWw7FEDjEOaOjXk4xtooapJrtgGcQ8a39oB4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505279},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"66d216b281017e09edbec875d00193a79bd5b1a7","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.4_1750853831841_0.7871799778611772","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@gulibs/vgrove-client","version":"0.0.5","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.5","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"199817aee9d460fe481929a2a64f88bff96ed049","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.5.tgz","fileCount":28,"integrity":"sha512-rML2dJxEh2PcURD9jCDFVl/R3xGVGQ5VuA4CA+O3ua0otBZ17jNWO2RHuRpZXyCRe3dZy/0G77gzNACp6lLbQw==","signatures":[{"sig":"MEUCIQCnc2EijeUztTn6WrgLnEDqMNxuDeQ3afFUYAKwfQ8zhAIgGEVKhZe2PWUklhd25wKLbDomjFTUWiWLw/Oe/cnh2MQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":504750},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c14b96c6a5cdfdeca347a8b58966856762f435d0","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.5_1750854723360_0.3005606960713485","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@gulibs/vgrove-client","version":"0.0.6","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.6","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"38aa8e905d5430374527f0417b8964dff56036fb","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.6.tgz","fileCount":28,"integrity":"sha512-VmTxGMzKGUploMiggBhirzlE7vAkfbVhrKXE3cDC7K7kFT/DsZTEpBUvefBNdOmw+qACJGCHOFf8KNJ8RMredA==","signatures":[{"sig":"MEUCIQCrqmDS/e8961tqdOQcyckFgJzh4EV86u8ntsV9ZBFG0gIgFaj7uAaBte7cytgY0K2V4NdUdSWjoBwiHjb9u6cfTMQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":505422},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c14b96c6a5cdfdeca347a8b58966856762f435d0","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.6_1750855294077_0.5167129149650558","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@gulibs/vgrove-client","version":"0.0.7","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.7","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"341093ea6581b0896e77cc9fac8bc7cd0745a5cb","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.7.tgz","fileCount":28,"integrity":"sha512-ngK+iq2Cmb+4vSOjN9TI2FsXxOWApyygDVV/Lyk6J51rdUNdohW9PadvnsTlpsP3g4uKxjpuNzkrMiTxkwb7fA==","signatures":[{"sig":"MEUCIEFzTbfgoJNV9owgSTa0XfdOgc9vwbfcVxISn0O2RlBbAiEAqhNHx3DLXFhVeE4MCIvQZF2P9X3py+NeZIFZ4CQXzxE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":499844},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"533d47d50625fa41e61fd8ac0f5404cb3538e8e5","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.7_1751050719982_0.9666673407217934","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@gulibs/vgrove-client","version":"0.0.8","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.8","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"539636682881a99aece3080e4102a7dc56c26a93","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.8.tgz","fileCount":28,"integrity":"sha512-brnZUb90yADJg8LOUN44ZELJvSK+jTXj3syIy9Hfr5BQI0wgIzn2yg+QcFbwNw883cVZ0MpkWZgvsruP5ApHQg==","signatures":[{"sig":"MEUCIErZfZhLzAlkqFLvaC5zBCIBLjQxjRf2fJ2jUVQ1mq+/AiEA1DbTsKhErNLUUNDtbrzYLqB0/Kbzksh/i7YmM4L4CsY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":510256},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f33f088116df1848fac72154ed251ee4e0e39f8c","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.8_1751347443327_0.7657672032797465","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@gulibs/vgrove-client","version":"0.0.9","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.9","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"2d9426cac3681a6dc027192660d4104ab85cb44e","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.9.tgz","fileCount":28,"integrity":"sha512-F0gTiNSAjDyzXInm3EXYiS+I19dfTWpTrEOuQyoO51+nfOEC/9rm2iP3VcR8Xk0bk4OobD/GMd0+vaOorq23fg==","signatures":[{"sig":"MEUCIGXXJ58BraXVqWkqDKQbfTQGOeTlfegoxkNg2ju/t3b3AiEAmPNXJpQn+yixhDBBS4HwgYisvHz+7dmDD9XS7kMvMXo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518134},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"d4e014079780728d44cc81047e53ef669ed7a1f3","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.9_1751364127382_0.9696813603629604","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@gulibs/vgrove-client","version":"0.0.10","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.10","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"d4e5b1659359e12fa4354e1948d144f37edea3ef","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.10.tgz","fileCount":28,"integrity":"sha512-FcweRQ5oEvI7qt3+BqKuJArD1OLU7H01L4LJC4EHElWzcUCPKyePLCG6EFJrgXqke81U9xm+cOse0lPpxEcu4Q==","signatures":[{"sig":"MEQCIC9EO1OwE0xbmMqcCZZCId5AAb7WiCTA/0JH7W2engypAiBM/XTox2Wqhl60U2wYJj50tyBqfKR9K+5Q6ifYyo3mWQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":518413},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"16db231ec169b316009150223223755abf41ded3","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.10_1751507739745_0.9788727591373603","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@gulibs/vgrove-client","version":"0.0.11","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.11","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"1c5ac4d86e2fd4451a78138658d0ded499a2e3e1","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.11.tgz","fileCount":28,"integrity":"sha512-7QHbFtC5sjZex/Wokjm23arJy55yCzgZOBrNn96cPW8oaGQ6VwtMEkxg4t3UqIr6tooAPEIpFayybIVU/6GUYA==","signatures":[{"sig":"MEUCIEKN6OjyvsJEnyN9Z5raMLu5iFJHM0LsxhguPT3Ytn6aAiEAw+6mNEmIjkEJmcQtM+OPK35gTUOk1gDGWpj/M/ebS5E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":567780},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"68f21d311ef929a8a5f1be434ea76786e031d66a","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.11_1751537658476_0.7585942660743448","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@gulibs/vgrove-client","version":"0.0.12","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.12","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"4516c3cac306f407e06f41bbe6ad11fc95ed7752","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.12.tgz","fileCount":28,"integrity":"sha512-NTUy6tx1vY9LLgqHmFb5CzTlUmx9JXrjD7eed0ttQ9ZlHXLJhmbYLCent+N7GkLl8sLZZoG1+yhYtsLNShQ1dQ==","signatures":[{"sig":"MEUCIQCp1827k6CAbjnINACgHmbW0Sen6qNQDqmsZTShNNiaKwIgZ4+AI5dxO885M6bI5vdf8cTarkRb3Jfvn9vE2HS6x00=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":567730},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"5b7dad1c924a79387aa4580b8d21e568b555b596","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.12_1751545588841_0.7378739197697963","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@gulibs/vgrove-client","version":"0.0.13","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.13","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"b2c1da8e6ff68bfe676ab47a3ae766d7f6ca72c3","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.13.tgz","fileCount":28,"integrity":"sha512-qqowFevkwzGPrMuSxrT/uwluYbL9jv4Jvf+SwRgDpe4BKr4lGy1b7966dnZLXmqen7vzJjSNc6jdUnHwRvCv3A==","signatures":[{"sig":"MEQCIBAQqgF9XPERwMGIi69FR/bY8aZS3V9u2FmB1WGU/67iAiB0Yo0EgurMB0/lfSFQUuk7+Sv1VvOYzsTxE8S/m5MD5Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":568011},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"0338e0e01c6e4232b50035c3b3c4f40d43a43d4c","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.13_1751562465719_0.9518210129369395","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@gulibs/vgrove-client","version":"0.0.14","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.14","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"5f5c0f8d2fc6e677536afdb73780adf649396094","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.14.tgz","fileCount":28,"integrity":"sha512-7w7AUYrm7KELUdCUC9WdKZ104dzGr2a+WoPoHB4lwbZUBgx9I8+dkHIJPX0BFPTq8VfMYHmKkbnvY2VLi9nHKQ==","signatures":[{"sig":"MEUCIQD/H3bGqW6gnpSxp5FOMea9nyiA/g4J7gOXEdVlqSsuNwIgIJPobeMSOT7l6dYB5dAAbXrluY0rBuAqCC4tnF9ov4k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":585328},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"6d1fab5bf335ea32793bbb79372f4c077f3c7bae","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.14_1751565717466_0.914971346470232","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@gulibs/vgrove-client","version":"0.0.15","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.15","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"d680edd11357f67fb65a4271198108c01100f46a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.15.tgz","fileCount":28,"integrity":"sha512-Ondx8/cltFh1revxKBoEGvYPftDmoUjyR9MGr5nzJ2belsia/PywXCr0tLt8Bh/LzRyZz/aBnBWvZHVZK/0A6g==","signatures":[{"sig":"MEQCIEDa37X5sdKlMmv81rdRc7VoZMJe9NUzozbbEYJMZ72ZAiA23HTvrDowvGm2eMjp3pQ48iPRsejw7yshRE9/fPZ8jA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":642800},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f566bcf56d9d283db4ff959094ca873f0929c8e2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.15_1751684031069_0.9654003415376868","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@gulibs/vgrove-client","version":"0.0.16","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.16","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"4bf81569a41c1deffe6ad1357feeac40cc64af06","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.16.tgz","fileCount":28,"integrity":"sha512-qxLxwpTSn0Ke8lliCAHH4AkedA0YjYfe7E8z0syYyBPk/5Mgig5HFBZaaG42LW5aHdA3azhJ2N/IUakdajiVmQ==","signatures":[{"sig":"MEMCICe/xzRkgOb6B+bDaUYQPQFh9pCBrZpixmVGJHHjB1MUAh899L6TUJXp4/3cWtwzbaC4LueQh6OsfQMXpPf8Nbge","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757041},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"57635fc306fb44c384d106ec26b1629ccca127b2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=16.8.0","lodash":">=4.17.21","react-dom":">=16.8.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.16_1751769066629_0.8391158374434098","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@gulibs/vgrove-client","version":"0.0.17","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.17","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"6013a7671f25c5cfd28f15c5be03a9be61e9cb4c","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.17.tgz","fileCount":28,"integrity":"sha512-ombYLQBvaYtQdEVD9jFKaGmsdjNVAxTiqjilUawP73Ylh+Gabwej9hbo2UX9mDBdU0LVTOc7P0ApRp7W8MNREw==","signatures":[{"sig":"MEUCIG7k/NtemLtAouyY4lJ+2IbUYjQ1aMWfA7T5K2ioWV2IAiEA3KWmWp9SfoucwUZasq47CY8zuFy4oYe1xKgqkMowh0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757041},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"57635fc306fb44c384d106ec26b1629ccca127b2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^18.0.0","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":">=18.0.0","lodash":">=4.17.21","react-dom":">=18.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.17_1751770059701_0.6055968953514717","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@gulibs/vgrove-client","version":"0.0.18","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.18","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"35db77479f29a12981820bf82843b05cce72adb6","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.18.tgz","fileCount":28,"integrity":"sha512-kGyj2lzNczglGB4DVDa/ZbxBN/ly8yhZWnLCQxROXdeQZDQdc5XoBk1TMu2lPrq+YVTYE4TILXTD+fshbkGIUA==","signatures":[{"sig":"MEQCIBIhHSd0CkYIS+uOHlZo1SiV6cMS13GmRL8MwRI5PVgJAiBZg6UbJ2HLHdGDUyXGtSLkr9IBtIkqEf4xUNNl3wYRsQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":757939},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"051051d05997141ebc05a86a4b3e9514eb1f45ab","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.18_1751777133993_0.29003643374648536","host":"s3://npm-registry-packages-npm-production"}},"0.0.19":{"name":"@gulibs/vgrove-client","version":"0.0.19","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.19","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"f651cc78d5c0b58919e4b8ab965058b1bdf07520","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.19.tgz","fileCount":40,"integrity":"sha512-V+dHAI4wcFLwZEWvM8bVMS64pcSbnjFqJoYy6QperzX27847xmnKdFQaWKsYQ2xcc1tc73p1unLp7OMDVxsFQg==","signatures":[{"sig":"MEYCIQCpxbayI6XosIfPTbR/uZC1xxEdoIlidJ56p9I9twSraAIhAOIXItvpnBS1aKfbdl0iu/vtZ4+RARPCwlrpZoGNlEVI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043557},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f13458c481cc72d833879edced54e85e3bfec3c9","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.19_1751800306550_0.41167902995059524","host":"s3://npm-registry-packages-npm-production"}},"0.0.20":{"name":"@gulibs/vgrove-client","version":"0.0.20","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.20","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"c6e7df372ce0f9ca30ffe9ca6be92a4c1e5c36c2","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.20.tgz","fileCount":40,"integrity":"sha512-LBdgbhfWluukDg8HwdRaZTytEF3diLGN6mwBAhTI/Ejv2Vsfb7smVZH2KfhLJegakQAxEmN2O+cSC2SAh+v7WA==","signatures":[{"sig":"MEQCIDe0wXWwukGFWIQQfk07ndB9HkyQAuiJl3x93iLW4YliAiA6WFMrnuGfmHYtf23S1eMk8pxlf/5FPLA4Y5ROT8ZPuw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043769},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"36fb59cafc2c1271c8855d910d7c44a7d04213b2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.20_1751801459642_0.9776087680069554","host":"s3://npm-registry-packages-npm-production"}},"0.0.21":{"name":"@gulibs/vgrove-client","version":"0.0.21","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.21","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"60eb6bc12c4e5ac63c9a050f9617e66be0194728","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.21.tgz","fileCount":40,"integrity":"sha512-j5TTSHC7L2K7uEMJxKcJKRD7hywb+oq0rFd8ErwdKfc8ZrGQOjZTS6U6Jw06ZwZXDnsOMtUFXjXPSlqaUg37UQ==","signatures":[{"sig":"MEUCIQCqKgalSbk+eb/0RAfprBfynZimkCKd/AY6/ODD/gL9BgIgHnBXjB9WZhvFcqOkp0Oj0cHsAseU/WAUEQqOx7NjG1U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043757},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f171e024215ceaa122e948b31b27c7d2abe1455b","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.21_1751801820404_0.5470221127240908","host":"s3://npm-registry-packages-npm-production"}},"0.0.22":{"name":"@gulibs/vgrove-client","version":"0.0.22","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.22","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"6dbb056a5adca2565ab116f7466526fce17492cb","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.22.tgz","fileCount":40,"integrity":"sha512-ika5NlxtPizMe1+Eu1F5De4dUns7jAmUKKIdRXMrfRrhFlptUovKJOAbclcg+Xp0FZNTgL+MSBUEZiDVvvgX3A==","signatures":[{"sig":"MEUCIQD31mTGIuCHzmpG8Yz2oYVU2nHSyWUhTlCl/1XSi7NPLwIgSCt+XE4PCW2ANbkfyVvwkfCsQyIy0/Wwolo5P6bXXmo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1043733},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"8d9a00337c2cd3a357bc726e5b3147634ccc35d3","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.22_1751801981004_0.3264670545718953","host":"s3://npm-registry-packages-npm-production"}},"0.0.23":{"name":"@gulibs/vgrove-client","version":"0.0.23","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.23","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"9f5f5d76ba141232f8e6f729d2ff93b33c850c42","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.23.tgz","fileCount":28,"integrity":"sha512-TC9Jrbl5jUY5n49QWTyU1FyPEzSeOB5jXq1sOuXh2GJ0q6adwkVbGx3Z1UbLaHpVXi0eVxe18Z9Hbmtwa4CeHw==","signatures":[{"sig":"MEYCIQD2QmKsarzbf/bet+CkGMjD7ixE5GKC8OuW6hFBqJlopAIhALMhQlyk70/t2b/ju8GamFZv+6arJtQZQJPRtvOuuC+f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":729524},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"329035b818a1b3afd0b7f69003f7794015aee324","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.23_1751805040348_0.4363027749531978","host":"s3://npm-registry-packages-npm-production"}},"0.0.24":{"name":"@gulibs/vgrove-client","version":"0.0.24","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.24","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"a20b4ef4fab34a0176775259641be00fa4a1e49c","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.24.tgz","fileCount":28,"integrity":"sha512-OC67RYz5q5J9kBbLJAr6cuG8E9uSkDjtluXOYhl+3v3FMF/kc494y3ZaUpVX14L4D6ccKU7wAijF11XmknpPvw==","signatures":[{"sig":"MEYCIQCbCqlBlz9avqXtIk2/3FI7OE12HETyYE7Md/0iM7OlfQIhAPD1o9dNyiR7NFujXF9NlfnoYeiiJ/LA4RwICQNVvoNg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":730020},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e9d04d5a47173a2e2a95535fd4a8a1dd8eb35f15","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.24_1751805191897_0.6716358368400108","host":"s3://npm-registry-packages-npm-production"}},"0.0.25":{"name":"@gulibs/vgrove-client","version":"0.0.25","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.25","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"90fc9197d2f3324033a0688926589d3fa2772baf","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.25.tgz","fileCount":28,"integrity":"sha512-7rujzWP5jMZvxu4emz0c7YNbsUM1zMLLbR/fDKejUcpky5Z+y0fLHVlNJEjFyu74z3uSDFum/yVXWoxDIVFmSQ==","signatures":[{"sig":"MEUCIQDhxHUw9H8k5pooSMe9gPxi6D1xTzUWgVyiXN2eLvMpSQIgMgSG7UQ28WoebLJRTEWHOTAe2Ep/zUoPek0tubW7vGA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":730158},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"9ab44a2ca80e8667688bca7a99bc72cf3de8f242","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.25_1751807479266_0.4241950880002161","host":"s3://npm-registry-packages-npm-production"}},"0.0.26":{"name":"@gulibs/vgrove-client","version":"0.0.26","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.26","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"e72ed5cb8c7e27560e18d837a7c5e2aac39c349d","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.26.tgz","fileCount":28,"integrity":"sha512-OwjgaIImw5rkVr4lIt7SHTvYX9AsPqIyNLgv2PwFF+YF/plPZtcjDuk8qp669liu6zLIfpxLZTb22xIpyoqUHA==","signatures":[{"sig":"MEUCIC0yh2dVLETURHH49fmWqWBWdy9uWRkk70qjaOW2clfCAiEA9DkCcNm6oVGSRDIOCF8TQvByJr+So8/MulArOwQ9ov8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":790056},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c85bf70ef8232d5433f824c9a8ed1129f95044f2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.26_1751817579337_0.43188607619419495","host":"s3://npm-registry-packages-npm-production"}},"0.0.27":{"name":"@gulibs/vgrove-client","version":"0.0.27","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.27","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"46edf8ad870cf7393505e036c640b14d8160d1f7","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.27.tgz","fileCount":28,"integrity":"sha512-qFHlqoQJ+V0kWYNmKXzwsgNGBWHhtIpn1M7J6F1fKVlMvHKblAr6OEuUR+i5k7hULnQRWAHvbTjlcjBWfvfFjQ==","signatures":[{"sig":"MEUCIQDixeuQvTpjeH+kO+IKJ4ylnvlqbay+NjyjqZFeeLCsggIgIwm8H0oR4TjFpSC1xF4URV0TkdF5Etmi7UFHI61aU/4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":791116},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"1cd9c7d04f85a0c7e4c960d1ac661f135226dfbe","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.27_1751817995502_0.7847465380561216","host":"s3://npm-registry-packages-npm-production"}},"0.0.28":{"name":"@gulibs/vgrove-client","version":"0.0.28","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.28","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"7b084b64d49abc94e95b81a746dfb8184d818f5a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.28.tgz","fileCount":28,"integrity":"sha512-fQ5jqqd54Qcp/dhHsgvbr+VzKzdCqKbxnKIhH+qvDc/utS0ilNF4jnSsbH48a23qg6KdfzsUWiAvXeK3CU+OTA==","signatures":[{"sig":"MEYCIQDdsbv3peqPNmqwpVzLLmvuDHmRetyu0tA4sJINbItmVAIhAJLCsHbsLyjBHyz1sBVZc3C9Gb87hTnAR+gPEdm/RbUz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":794567},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3502be246c5108b263bce7e7278e993f2967ceed","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.28_1751819120997_0.45087770568384355","host":"s3://npm-registry-packages-npm-production"}},"0.0.29":{"name":"@gulibs/vgrove-client","version":"0.0.29","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.29","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"1ff9974d7b0511df109e7e2faf497a3fab463d88","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.29.tgz","fileCount":30,"integrity":"sha512-Hky1KSyRnPnRdM7x+6P3ZBhVwMaITD/cL9rWDr2iapv0Myf1dC628m9dQv0HRjra2ZSi+stfyo4ama2eiCouwg==","signatures":[{"sig":"MEYCIQCJJZi5jGAZkUNp/LyrG9xaXVXDX6k4eeRXoiYwFdBOwwIhALMvClwBI4zsaxgr5eDDCBRYjj1WOMMpxh5+SlSFdsxe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":805543},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"d46cad8153c2e008a489d4cb059c680d0515af10","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.29_1751825085934_0.6944144778093739","host":"s3://npm-registry-packages-npm-production"}},"0.0.30":{"name":"@gulibs/vgrove-client","version":"0.0.30","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.30","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"2962a4696a1aeafe8859c24d7f9842af66c24729","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.30.tgz","fileCount":30,"integrity":"sha512-Zb22BZ7YE5qoouzvh4ZiijCGQ+iDfFB9rxedjWktHEt0YoGf13EC0VWDI2ZtnYZ0Wu4eRFgVWeNmdYTNbQ3Y8Q==","signatures":[{"sig":"MEYCIQD7nAhFgHmpa+/YjMkuX7KtnuIu/8EISDq9SOk/5GSvFwIhAOwL1OWLNW8ng+YplomdM4MC/ncNnVQFLO2xMbffpQOC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":809678},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e98bd3f2b1c946ba4306b19e36806fee34ae0768","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.30_1751826687573_0.5411952662316393","host":"s3://npm-registry-packages-npm-production"}},"0.0.31":{"name":"@gulibs/vgrove-client","version":"0.0.31","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.31","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"a4c525ae2ec98fafd28f081c0322add8a67ea0cd","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.31.tgz","fileCount":30,"integrity":"sha512-fL4r5nwJfTyZqnQ9ODm/dNpTf1LrAzgtFNXLY7qpEfC9uRTAV05qnM0oIlBrmCTUkaGQotK1OkBqpXwThZLZHA==","signatures":[{"sig":"MEUCIQCSx5Y/a63dXKvz/QGcAhhVpZ8ECxagV/hVuPBManmtqgIgdUH22/Mt+CAOxu/UA5M82Yn8y9AcoU+josuE6hzKY2o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":816172},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7dd3932477e55268ae644766794da2235d807084","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.31_1751827152485_0.19109022949759025","host":"s3://npm-registry-packages-npm-production"}},"0.0.32":{"name":"@gulibs/vgrove-client","version":"0.0.32","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.32","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"7cd9ecfb8842db40743c027f5529f4e6d8caaf2f","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.32.tgz","fileCount":30,"integrity":"sha512-JGIXDOSk/VkGOJlKAbzTAQczSKswFOPJzPFXIy38QGwY8dpHy8rQHw2HjCX1fuSy1fGKFuFJxLuoTkFbjeTCfg==","signatures":[{"sig":"MEUCIGQScuwIEo/9iLGgQFTC6UeSoEZTuaUrhnAWGGA0msalAiEAgK3BXqeN1g1MSTc5uJ3HIiIOZ4GhFWPZYfX6BeJOjfk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":816467},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"401ed15cf71ce078029fa50ca61922e60eb0ed05","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.32_1751829778018_0.004506833379560149","host":"s3://npm-registry-packages-npm-production"}},"0.0.33":{"name":"@gulibs/vgrove-client","version":"0.0.33","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.33","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"730b7e0162127d540fefdb4f60031c6cad57415c","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.33.tgz","fileCount":30,"integrity":"sha512-hUP1bWvP6/KxN1XyyfpVGGzGkZnTDqc5QdvUhfyDADWumisAutgpDRF4PvpLREyZAnoCWcpX15wqluE1I1h8rA==","signatures":[{"sig":"MEYCIQDwkSa+mxAprx7c4YuHTqqn9x/K1TdXTdtunujgsjtlPQIhAOnrfcmD2AQDp5mTSkgolO30dacSfGJ8wY6sFW0C67GO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":798519},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e8ab475ade9aef8ba51fd1da01ae130542648d55","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.33_1751830155288_0.6256433989295653","host":"s3://npm-registry-packages-npm-production"}},"0.0.34":{"name":"@gulibs/vgrove-client","version":"0.0.34","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.34","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"43bb982a95f8963cbe202382f210f5a26a0e5767","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.34.tgz","fileCount":30,"integrity":"sha512-bBBD7e4tt667mQnRHkqSZD26oTgfEM1BrdzStqnpvevNd+MBrZ+EpwDdW59MGVwyC4w6I6/ZHTGA5lkzQKQ9xg==","signatures":[{"sig":"MEUCIQCNlCV1Sqe0FIXbvKC9103MItVSRp9V4UxwXvS0ZzFY5gIgNUW8+Gul4eYpJjlQN/YRmNW2NYnUWzEmWVHGHT5s1+k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":798791},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"811783ab13ac3e60b2c27ea33f8b6a953db9254c","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.34_1751830603482_0.020866807020533784","host":"s3://npm-registry-packages-npm-production"}},"0.0.35":{"name":"@gulibs/vgrove-client","version":"0.0.35","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.35","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"5681bf799814cb3d32cb003132bdebcdf5a6f557","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.35.tgz","fileCount":30,"integrity":"sha512-uCD7t3ltjL2kjKzzX++tiB821uJ5cp32JZhnqEv8N0Rb8AQwAqfyEVQ3xCw8R9jgzREslREWzd4nlCU+MuukOA==","signatures":[{"sig":"MEQCIBsoSwmBLnQ/8kGUT8+PLsnsWrXTtMxXi50KQGJ+Yg9CAiAd2bAG2WbxgXZJtZ0mvGRpJHi7AWm6TohsPaFi7VL+Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":808032},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c9fc1c3f6b714c27d24d257d2f6bf0fab9b0db46","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.35_1751832237823_0.8158311962067606","host":"s3://npm-registry-packages-npm-production"}},"0.0.36":{"name":"@gulibs/vgrove-client","version":"0.0.36","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.36","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"460090a4c0fc49dd6a54d492b7f6af58e85cd597","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.36.tgz","fileCount":30,"integrity":"sha512-c9xwv7nY4JWE/YBcibtSb3XTdbmvLmpJy1X06COFDOaZokNvfnOtjy9xulHblJWoJ2hWaMqqlHO8Ww7BRcU/1w==","signatures":[{"sig":"MEUCIECZboPdJOk40EAjYpqM6PuKRnbpg6WHeqxtfZvLm3/ZAiEAgyiZPUPtJ74h4QHxA5FCVAYNBcn4WGgr1/pX24m7rgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":809203},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"eacc11143a97fd690566138f17beae520768e9e0","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.36_1751832988673_0.2701688274437777","host":"s3://npm-registry-packages-npm-production"}},"0.0.37":{"name":"@gulibs/vgrove-client","version":"0.0.37","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.37","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"d3a30a7d5e552e110d2f7c872ed434511c7a00f2","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.37.tgz","fileCount":30,"integrity":"sha512-60xTCVFQy5qLgZCvVfCVCcX3yiEm0Al7EOUhNvlMShu86TRj5rl2qDT6gEeRwNeFOonX0n6JNd9xcdnph1ZYWw==","signatures":[{"sig":"MEUCIQCVBXiJOwPodgf7gm6ZmNgIs0bWeKBizz9Js2box1+9AgIgRtydfFAVLC21AlD6HorYeBJ8cAxccxlWd604Fer40kA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":824094},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"214063f609799bd7c4a4eefdc56ed1bf732e9829","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.37_1751855732240_0.07787034925801906","host":"s3://npm-registry-packages-npm-production"}},"0.0.38":{"name":"@gulibs/vgrove-client","version":"0.0.38","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.38","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"08252aea4abb7a00d7d9832b82b0985b18da9b0d","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.38.tgz","fileCount":32,"integrity":"sha512-eaM5hqMovMWLX/IJBTP6gjI5O9Re89ocr4As27vg8VzU9IuOg7qUIPmtEWrwKs/k0dzLtv0hRNG1tCesRYrKXQ==","signatures":[{"sig":"MEYCIQCZyrtudmGeS5VIzNSOWChGdsbd8B2Jpg5EME8eAZi5/AIhALHlqS1/mMKmDlwSJZo1GlEQHRZErJEpd9Dox0u0a5qt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":858430},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"69cc73975961cc2100c218174c2fb1cf684958cf","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.38_1751937859755_0.8969773430150838","host":"s3://npm-registry-packages-npm-production"}},"0.0.39":{"name":"@gulibs/vgrove-client","version":"0.0.39","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.39","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"24af662c0e391ba8263aba60d6e0e984efda0c5d","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.39.tgz","fileCount":32,"integrity":"sha512-sFGdImptL0QE7oxg4umGkja1Z24t/UpY8FccpWXO9YIRaCjhYi1Kbux0mxo1rrydz3MFwNZ9GMjyTeiJvhSlxA==","signatures":[{"sig":"MEUCIQDsiJKCYR88pnbnxjOt8jhk2cIxuwrPC9HRBga08W7VFAIgOACpR1YoMIM9AuiYArp5iw6j7u9WavTdf8TyKrWcuDw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867300},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7b761bea7495b78f01eac2737722ff6390312966","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.39_1751959665416_0.3328466588292984","host":"s3://npm-registry-packages-npm-production"}},"0.0.40":{"name":"@gulibs/vgrove-client","version":"0.0.40","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.40","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"d832af8bfbaee3d03a6255fe065dc03177fab01d","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.40.tgz","fileCount":32,"integrity":"sha512-EBx58Y1OSKSLkR58YDU2nMbPnOJpFdXO21OSLWIAkGilOXCTsqV6xryB4UbHWBmer56KbOKt62/cFSXnpMk/Qw==","signatures":[{"sig":"MEYCIQDo1ubTCHUpxaF1fYnd3UEl+HTXnxU1da8DBWZk8ME0MgIhAN1o+Ie3y6mqBxicMBTB/fL6zceA6p5X6qdxCbl7lwn8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":875564},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"9503fbffc78b8a176edc738b3dde5e34097491da","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.40_1751967479043_0.8676964199136907","host":"s3://npm-registry-packages-npm-production"}},"0.0.41":{"name":"@gulibs/vgrove-client","version":"0.0.41","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.41","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"3d63518fbf32c13372641d5068ba06b06dad4ae7","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.41.tgz","fileCount":32,"integrity":"sha512-P7t6earS69leqptbcPtZUgpOwCenTls/M9KdGmXxZYpqD0c6yJrSkmQ5DTRyn0wiLufCOqowl5HJF/8xmItanQ==","signatures":[{"sig":"MEUCIGr9qL8srZiMrXZo+OM2/rDCqbhodYvV8PXdZRpOQT1CAiEA1NqEGRUTydSvcURlHR1kT+m8bCdnbrPy4pIyRH/Mr8Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":878902},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3fc74e2423e51951b20670aee2ff590d7acba43a","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.41_1751996342733_0.07851182543034407","host":"s3://npm-registry-packages-npm-production"}},"0.0.42":{"name":"@gulibs/vgrove-client","version":"0.0.42","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.42","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"33d60536200dcfcf8485b5189a3e50bf97ff2069","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.42.tgz","fileCount":32,"integrity":"sha512-ED6eKyA2ErzeXQU5cRm/bSoS7tHfv1C+5A5GOQ5IXsWDVP3bboc/YZy5SHejoGH6lMN6STNjcWfeICqDKipS/w==","signatures":[{"sig":"MEUCIEICK/CXboz/QDBolitGlOq48VveC5A4SNCnKDfiy8+SAiEApmV/gw4u2EHCwxsDNJflvfzMmjTDL6BzzLJMm/fg7kU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":867120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"642db97b85519c2844016368d6686d3ae004d34e","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.42_1752023748265_0.2734565076246045","host":"s3://npm-registry-packages-npm-production"}},"0.0.43":{"name":"@gulibs/vgrove-client","version":"0.0.43","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.43","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"69221d2243e3e9903e69347f9fdaf4951612c1ac","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.43.tgz","fileCount":32,"integrity":"sha512-+i+ONBnu6vObKMZp5n+l8ZUJD0eVXoMTMqb1Mg/teIKYR3vUhyB4hLPqupDopBI0+UidcywLDTGt6X4WARAgkQ==","signatures":[{"sig":"MEUCIBU3WacQUMxR3MubItQKlZmPhAxF2+OSaUfhyLeJr6zZAiEAyRFxk2hrH4abq94Lafzm8+f9+MSIWKXdZmvMRKog8Fk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":875753},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"642db97b85519c2844016368d6686d3ae004d34e","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.43_1752024762528_0.49261270941373403","host":"s3://npm-registry-packages-npm-production"}},"0.0.44":{"name":"@gulibs/vgrove-client","version":"0.0.44","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.44","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"5404eb725e0097fc7366a1fc5932b5b2956e89ea","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.44.tgz","fileCount":32,"integrity":"sha512-+2SLkrfzff7oVA+dvtyM1YU3I2r1ApuF84scYmnbyWTHDDXFh/VcmrZWYyxFSyhLPRQE8dnfTYSb1WoAJe8YgA==","signatures":[{"sig":"MEUCIQCzDjUkBCxCUMDTU3rP6kUoGoDc4gaKIJmIrJk/C+rYSgIgR2ZT7M/YhxIYMxRCNm+YFRB26tVl9ublAvaBw9RfE6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":876233},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3492ac21e60dbadfb2264a8159839c90c736ec0b","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.44_1752058242706_0.30104692187345417","host":"s3://npm-registry-packages-npm-production"}},"0.0.46":{"name":"@gulibs/vgrove-client","version":"0.0.46","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.46","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"7ff70138adf23e6368036a505c60205a4db4ca09","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.46.tgz","fileCount":32,"integrity":"sha512-7qwaIKOsiuFh5N55VGkogyHPZe5/vOUF7CD9XxMW6iAwZKNnNZE7r79OcRsJtuIK2OlvktgrTAgj6as7kOmwXw==","signatures":[{"sig":"MEYCIQDwq6C1qn1wlHZqxF+Mh821gBnAZ+FigbqlQpAgfz0UuAIhAOZWNEJ+HAEkzE2efS94FAr6MEbY9Qq5mpcSwLxWrkwS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":887989},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"816335efe041feca8260ab3f2ef41b19e4b6cb09","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.46_1752059302327_0.461741622697023","host":"s3://npm-registry-packages-npm-production"}},"0.0.47":{"name":"@gulibs/vgrove-client","version":"0.0.47","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.47","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"f176b56bdc83dda5c82cf5934ba7c38e9be709c4","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.47.tgz","fileCount":32,"integrity":"sha512-XfT1Km7dBXdlCCIEHOTOWJGc7+Q+7pS5G8qb8OurMt9SZVTHqcNBa9VmCIKPhYI7wouWB/w/yELE9Yu7CYG4yg==","signatures":[{"sig":"MEYCIQCZ7PJet8mvC54CI45NM4QXgNCwHr7e52FhyfTqHmH1DwIhAPhjvkGE9XCoO4sE6t9zScF7b8tNM1woOZw8MWZMlgE2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":896723},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"6f37cfed17285dc6875bef111f0637c69e4b94b3","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.47_1752060505634_0.9907916848721692","host":"s3://npm-registry-packages-npm-production"}},"0.0.48":{"name":"@gulibs/vgrove-client","version":"0.0.48","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.48","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"fe43dc06ae1493c77d1dff545de2247837b9cd43","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.48.tgz","fileCount":32,"integrity":"sha512-QjCphLwOpy5cOhOXYG6yhUVEBIKkilYRqYq160ZOfzXLL2MeRK4RLFOiZMxKNf0R2HYrWRPr4Bak5WPh2kIclA==","signatures":[{"sig":"MEYCIQDRK6KTmNfbxzDgG+WGu6izqAMHyAxJUVbNk7qcujurbgIhAMGk2Zp6QAVIdeA4oRrOSZF5BIb5lPxT9nvJmSTVeg9y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":898603},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.48_1752114200680_0.20184022202938734","host":"s3://npm-registry-packages-npm-production"}},"0.0.49":{"name":"@gulibs/vgrove-client","version":"0.0.49","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.49","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"409d11b7676e93110c250808c71cecca33960846","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.49.tgz","fileCount":32,"integrity":"sha512-eji+9CQjjR2wmGpFmMmFXKJUZFlxSZTUuA9huI5Uu5jnR09wKbqqyLK0Es2ep/0tNCJxc8y1eVFN2K/KIcTT0A==","signatures":[{"sig":"MEYCIQC3OIUD7W1Wnzu3Gv9gvWC/8UKq1LGUf4cylaejs9wq7AIhANxieW90ajbc18XjQfMIIO/3U3/2GC5rYIPug9lTj5MI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":903169},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.49_1752115207867_0.4913528616278324","host":"s3://npm-registry-packages-npm-production"}},"0.0.50":{"name":"@gulibs/vgrove-client","version":"0.0.50","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.50","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"313a67ad61235edaa617fcbf932f42972676a657","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.50.tgz","fileCount":32,"integrity":"sha512-bUkZiqKtEFrG8JTlFp+wzxFF8uwOvFB4k15+Ntb6a12wcLgqNC/4mpP/oQmagTGm9sTE/5mky+W5Q9D/e4g5Pw==","signatures":[{"sig":"MEYCIQDfIqYP/LDnXWT4POgDkOKWggqnvA5+JQ9Bte/faCxoEAIhANMPlwruJL2ujSZF512YmEwVzXpdJd5oThiRN5/BoXIs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911193},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.50_1752115711387_0.6514500376738916","host":"s3://npm-registry-packages-npm-production"}},"0.0.51":{"name":"@gulibs/vgrove-client","version":"0.0.51","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.51","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"da83870d27a91fd2508d0ff1a064b39f9b21c48a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.51.tgz","fileCount":32,"integrity":"sha512-6o2Taap0ZI5mVsAgS5g/BPimJjHtkWWXUYCBnqpc7DR2KAdnQLv8rZlTyr6qSYwV/iPPMDYVSCEEWgl6PErFmw==","signatures":[{"sig":"MEUCIDr+pvWj9fxuqvG9CzS8cfqgOiKRGi4byuWuJTMShe1IAiEA+rEzzEmW/3BBpXMQAJdmtwwrrAlByvLrasO4BVI1agw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":912873},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.51_1752115907499_0.7031616533601455","host":"s3://npm-registry-packages-npm-production"}},"0.0.52":{"name":"@gulibs/vgrove-client","version":"0.0.52","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.52","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"972f34780d2ced58e61329dbe652845fe0964045","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.52.tgz","fileCount":32,"integrity":"sha512-mNBlbGuZHW3ZOmVKFMIhI9s9uOkSngZjJoBPo1ruLw9MQFCpYkhB28bzoSZrMjuM96lnIP08/IC355fJns4keA==","signatures":[{"sig":"MEUCICRCs0nR/r1FLiptak2A6mS+/GnUConm4ec+Zb3l3l7YAiEAxK1Z+h89m/nNa8QXeeDCjhuMiFNlKfh+nhK4P9mQATo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":896723},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.52_1752116723690_0.38213592765012305","host":"s3://npm-registry-packages-npm-production"}},"0.0.53":{"name":"@gulibs/vgrove-client","version":"0.0.53","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.53","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"03b8197f3047ca30bd180cafcc3e892d809ef5e4","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.53.tgz","fileCount":32,"integrity":"sha512-fpLOeHiCELgp/I3jGREeorbaSuic0KAUyCvKE785FDa+hizdY3hRCafT8B4gSdjUbEQM5NJL2+0rY2J1aGGf4A==","signatures":[{"sig":"MEUCIQD4Hf9sFRvem9WHlXJM5pEM/jDFqul2pqJz5/0T2kUeSQIgE5t8o5YXUT+PJsnjQzYmpwlPBUPU+64xIyM4GsWJ70M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911643},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"f3921476ce4a4e07249c32056622071bb63b7398","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.53_1752121180115_0.08633764847061909","host":"s3://npm-registry-packages-npm-production"}},"0.0.54":{"name":"@gulibs/vgrove-client","version":"0.0.54","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.54","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"3362a468be3e153c5719ce34f7de08bad8bfdee3","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.54.tgz","fileCount":32,"integrity":"sha512-yypITJsvudgvdw+FU7jcNs9mGrwdz0v3b0RFeENCvHZ76G1H9EYzzMH4YPP/miPADiyRMuEmZ0qMEBPgjqntWQ==","signatures":[{"sig":"MEUCIQCX9diW9vz0g1D7+LeLlBgd2ZEp7lCjjUDkI1V/hm8uGQIgSKX6fxz1SyYMTfiNtsMdrltpgP6ilsXZo5uX66Mrqqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":904344},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"005f986b821d9080a2e0680a859f5480c2ad06a0","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.54_1752130930889_0.6764256607225745","host":"s3://npm-registry-packages-npm-production"}},"0.0.55":{"name":"@gulibs/vgrove-client","version":"0.0.55","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.55","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"9141a4132ba7aa7d0ff8b44d87ae491558774162","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.55.tgz","fileCount":32,"integrity":"sha512-yuj8IhfmNxDYBCvJ9qmN6j0RvfjuhUx4g3Wag0Tlv+jdhbj/SPA2BRxkxHjFMY00CtZIwqWltNu9gkPpyA/XWA==","signatures":[{"sig":"MEYCIQDkepymY8bMukviWqv9y0leuNv1Vcru6wgXUy90NDEsxgIhALK3xlXhfaSF0HKbJbQSSUznOKCTIZY0QUCOlKU4M621","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":906120},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"87cf5548f80e04b91d7a9e3e9521d9f27d51b879","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.55_1752137468932_0.6755066908418876","host":"s3://npm-registry-packages-npm-production"}},"0.0.56":{"name":"@gulibs/vgrove-client","version":"0.0.56","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.56","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"33b5e81e638262f8ec519442d25ee62dc1bb0ac1","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.56.tgz","fileCount":32,"integrity":"sha512-71heBPbfBq6cB+PUxKUG8bKB1JGN1hSouv6ILi6hinpkvEzeXEvbZvasV2lUTGN0HhLmkzPYrGF9YYwEvctwpg==","signatures":[{"sig":"MEYCIQD/47AS4imqRzK9BqKGgBs9qZ+NsjO0LM1RKtQGZ+YC5AIhAKMrohO2mZhao8r/zvkdGQY60bUK8wjmbeaI8J+dongk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":904668},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"4d7dbe0f7c986c804868b65e617e6235f3eed9d0","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.56_1752140893526_0.6511966336284267","host":"s3://npm-registry-packages-npm-production"}},"0.0.57":{"name":"@gulibs/vgrove-client","version":"0.0.57","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.57","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"c867647f1a69fb5ba6aad55a5b187aefc3bfc256","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.57.tgz","fileCount":32,"integrity":"sha512-dSokSw428DNAyDB/66oJ0wFIjJMqC1Fe6pm+JIenzTAkYEJH8lKowLWf8P978TxcBuCYT2BesxJT8/CCbVHFrQ==","signatures":[{"sig":"MEQCIAr2japLA1Z/S6TZLe36Ir/o5LYV7ngDFSIUwOI1E+qcAiBvyKUTcvAB/cE5cjy3YStV+eLHhXpWSWxNYz0LAKoxMg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":904776},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"5573281fb6f35eb0d770a9c3e59cb842dc9a8da7","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.57_1752143181376_0.1959607355214188","host":"s3://npm-registry-packages-npm-production"}},"0.0.58":{"name":"@gulibs/vgrove-client","version":"0.0.58","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.58","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"c296b1ba3d92d1e6ef40c8d4aa6e2552e4e3f33a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.58.tgz","fileCount":32,"integrity":"sha512-8kDSuVxIpDbUHCQUZTOxg+xXrdJlzxV6EJTtrC9Aak7U+vNjVNS+e+3CKwleq5brR3YT+Jfi/Q/OxpA5Ix0T4w==","signatures":[{"sig":"MEQCIF+FY63SE04owPXVuqwpIe97uIxflfxNgfVwpdGZzW57AiBo9Dr3ZAbHgBv1ArEGW/aejl+evn7KcKcWk16timYDUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":906008},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"1666537fddb783775c1a87673a25533cff7b4841","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.58_1752143547328_0.5834728472932997","host":"s3://npm-registry-packages-npm-production"}},"0.0.59":{"name":"@gulibs/vgrove-client","version":"0.0.59","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.59","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"217b223fa4f4cb7386af23f109b4acc847a6486e","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.59.tgz","fileCount":32,"integrity":"sha512-In/EMCJqD1EDBbnwqY4++RajGQJOwegioJgvLwwRcV2mfabS8a5VMZm8ZG9aCAAyGyHEVZcQZgCsxaXHkXGPaQ==","signatures":[{"sig":"MEYCIQCGwehgz6BRbz+0PW04ODknhJrphX0W8H2wvER97kO9jAIhAJ0nZnCscoI54bwVhZHU6dQxGaDQPamXwiuD3kCemoT3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":902386},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"1eace7ea5892c51d0e75fc2fac1c5aa076dc66ec","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.59_1752144449108_0.10226682219347194","host":"s3://npm-registry-packages-npm-production"}},"0.0.60":{"name":"@gulibs/vgrove-client","version":"0.0.60","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.60","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"cc2bed7f24c133f3c1e77480f3489e1d702b078a","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.60.tgz","fileCount":32,"integrity":"sha512-tD1ncayoubCwWBLjKmHIN2n2zxAxOiAEv2GoFPWKOEe9pEJbsdkGxiLdR8B+R/1RyBv6R1l7K1l5A94aS0TXDA==","signatures":[{"sig":"MEUCIG++emSMHhDzYmeffqh9lFkD6a/6H3cF6WAOGR68dx98AiEAucDOmC6QvHpeP9Xm/zhQ8KkLm5CF8+jLVNY37++Hs2E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":911336},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"916e1a2512645bd3b4d0775e933cbb3bbd9b5a33","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.60_1752145815493_0.5282834182186988","host":"s3://npm-registry-packages-npm-production"}},"0.0.61":{"name":"@gulibs/vgrove-client","version":"0.0.61","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.61","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"65a6f634900c88780f82799aeda4d4853bdc3682","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.61.tgz","fileCount":32,"integrity":"sha512-x+C0W04YQbbv37a+xJX0eAmy25xt+LsYj49FHwCldORvNO9N0Yat6wtvVGpBsacVkkCbf0kqeWO8IP506HW6dg==","signatures":[{"sig":"MEQCIEUL7gTvuC7JKVsfzNOGY7Dd+/MNlPRDDlRlUAbRwae8AiAOf7mXQPXvNbhafZFSVVVX0hRm78rZTpL8cUYOtvFBrw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926389},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"8c5b547c49d021740c064f464e3e9655300f80f4","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.61_1752146726909_0.8760311222884358","host":"s3://npm-registry-packages-npm-production"}},"0.0.62":{"name":"@gulibs/vgrove-client","version":"0.0.62","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.62","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"7f1508db10ae85278e5251b566ce961f4f0db9dc","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.62.tgz","fileCount":32,"integrity":"sha512-2ludpb1Ol40NQOJi44v8B5ja+yNPH8RMC5s7LVY/8ofV3e9z8cjXEK99w+Vria31vztSXzc1VwolF3PAFq6LXQ==","signatures":[{"sig":"MEUCICgm6XGmxAnHHeRnB0LUj5xt9XzpLZcWD+1/F17DxrgSAiEAzAhi5GT1/90sJJUMDNKrl4SGWnlHcYZf1lHhDpO7Q38=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":925155},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"6459efdace192bff6a79f8b5928e4d166aedfcc2","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.62_1752147596894_0.9332292167289182","host":"s3://npm-registry-packages-npm-production"}},"0.0.63":{"name":"@gulibs/vgrove-client","version":"0.0.63","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.63","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"b3043a300c0534615bc9e775c1d1be3a2351eda3","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.63.tgz","fileCount":32,"integrity":"sha512-03DFJNSWLQA71M+O0xMkFOku8a1Js3VFBqm+8L1Nbp5BR/oyHg+HVou06ApJXaBM1jlP72xBLu1SkldtA3TqGg==","signatures":[{"sig":"MEQCIFLRtp3fwTUsYXmErg/jOc7183tmQPUYnG6KkXkEf02uAiBlYV4lZ+zw9clrZ1DtvQB4xXv8l5g4s5lWdxUV7ae/vA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926666},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"1956a80e536c89027a1a5fa0cbed6f30dea42b63","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.63_1752147977722_0.686390754900039","host":"s3://npm-registry-packages-npm-production"}},"0.0.64":{"name":"@gulibs/vgrove-client","version":"0.0.64","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.64","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"7e2f088bcb80553a5598d2bfd1f5cbcaccb4b7f1","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.64.tgz","fileCount":32,"integrity":"sha512-JjthHAANDWkmm3Oogn5FtM7KcSzdMRqqoCelLipDLwztCyWR5MXDQj0QUOh1L7uvuuNG/SuGGBs2GLK5Iexb7w==","signatures":[{"sig":"MEYCIQC9j5u/ATGfWVmON8GZNa8uny4DS3r7K0aJQ9vACj9IeQIhAOe9hF5MFlxwsykF+AuEm52TLcJKpRRsyzCWl9o5wnOZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":927128},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"1f57ae40bc34eab0518a21eadb5b70eae29a4ecb","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.64_1752148260000_0.382594033743586","host":"s3://npm-registry-packages-npm-production"}},"0.0.65":{"name":"@gulibs/vgrove-client","version":"0.0.65","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.65","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"fb5ab6e7979435168e3f26b81514520aac0f9773","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.65.tgz","fileCount":32,"integrity":"sha512-YKCnS8Lz1EsJhnbXMwBO+HGyXlRtP7NGwJjXOk5RV4mKedhcmUepJzanD/FDBtStUxU8CiNAKheirc0KTtGGXQ==","signatures":[{"sig":"MEQCIBx5/gD3pxEsx9s1Dd+LolvVHCDbWKibd8qZRGqyqOQUAiBuVuG2/jajm0NTk9wLNxUydyjaHxsvIhZ7FgvxkZJZmg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":927528},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3b1b2dd1fbe452349588921b4ac7649a094ee8c8","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.65_1752148641261_0.7455488571806288","host":"s3://npm-registry-packages-npm-production"}},"0.0.66":{"name":"@gulibs/vgrove-client","version":"0.0.66","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.66","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"b7241152e9cd0f2eef102e65aca00e31a2ae3b3d","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.66.tgz","fileCount":32,"integrity":"sha512-aVW5Bf+rfVqbKOttBo2fwOYhLBV5GPP2qn20m4mbVtTROG4OTuwYPKV15igGY9Y/I2Mp4LCGdLaJL5E0DG4SNg==","signatures":[{"sig":"MEUCIQDfMyVNovQjAtVNSmjX12mC632U8M2pW98hmZW36HHYcwIgREtYgbjZCq/phrcLTSxfHoz8iaZ6FqWbaGf0FJ4KQzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":926494},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"c826bc9048cfbb2fc9409240083bb5a7141398e9","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.66_1752149489567_0.9959498330323384","host":"s3://npm-registry-packages-npm-production"}},"0.0.67":{"name":"@gulibs/vgrove-client","version":"0.0.67","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.67","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"5c92c7eca484bf0fa138c6277b0bf9ed6537aa9f","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.67.tgz","fileCount":32,"integrity":"sha512-VtDCqWg5MqQ4juQsU/75RgEuSsY88dzzNkGCxI08+LJs+PrWALn8ox+jaQX+KcE7eHhz6+CChAg+smjyqd2vWg==","signatures":[{"sig":"MEYCIQD7p8PjPo2PbwZ6qfvr1cWKTVUs+1hbG+pAWCQ1nfO08AIhAMS6YuF7ogBjTLKSdOGigHAKbcrTebYflBDDWhJxiUiv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":928148},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"66182b953cff1ca6f08e52bb714e8b8124e84625","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.67_1752150024624_0.07722746901767885","host":"s3://npm-registry-packages-npm-production"}},"0.0.68":{"name":"@gulibs/vgrove-client","version":"0.0.68","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.68","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"92318b5119da71cff504f30d1f3b94448b4e942e","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.68.tgz","fileCount":32,"integrity":"sha512-AjR0GfIGaoN9ddM7MRhic6zZ6Qk6S3IpjMFf3+uV/SZoEBNF9LaPZv85BVd7WxTDFziOWOdkSsa5ER1NxuNifw==","signatures":[{"sig":"MEYCIQDJ0ZFF9dnoUMWiuKxgUTZbFX4wguBokRxZwrzJxs2PpgIhAJu+rVLG2VzQk8Vgu1liFVilfycMdnmmNLlzI/suSlxR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":930414},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"8ec7d2f1dfdd57ec19d2fafcc8c11855cac46125","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.68_1752150340345_0.48372779411506484","host":"s3://npm-registry-packages-npm-production"}},"0.0.69":{"name":"@gulibs/vgrove-client","version":"0.0.69","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.69","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"a51ad0cec5f737d06ed20a4549a0c1952489a8c6","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.69.tgz","fileCount":32,"integrity":"sha512-efq/8DYy3Sr9SEFGnkxDSJ7NiI8Gas0HHUzCYSPOlnROUOA9fV6ItxUdq+L8CILPKpzRor88R1WvSqfB5QA7ag==","signatures":[{"sig":"MEUCIQDTQaf+pbV2DpSgG0n0M3W6Yysr/AyM/VT2m3bILYrkUAIgKQkymM0VqOXxiKd40E9aDSfYJ2q5J5xkd/IEON1QxQI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":933930},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e1772381d8d1c9da76318742f0a3accae03ce342","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.69_1752150652638_0.39069014922233136","host":"s3://npm-registry-packages-npm-production"}},"0.0.70":{"name":"@gulibs/vgrove-client","version":"0.0.70","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.70","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"e1ecfe530d7e44aea38504ddc77c0e17dd02ce95","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.70.tgz","fileCount":32,"integrity":"sha512-n5ndoi0RQu6lwscyzqAtwI9tSbE1f35V7UHzMnNg3GgAOLeyCbhQecYWIS37GtmWWHfl+BZvr+VI2I2Kn8n9Xg==","signatures":[{"sig":"MEQCIFgISeOCRlHRhzlJiaWXCSn+Y3mEX1GO3rxwYovfCYsnAiBrG3C75m/9PXSAD6dX3D+3wBMmpn4rFPcJPHA6nTQakA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":944370},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"aadd3b30c5c3b93b88ca1b3e9abba7b83fb22ab4","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.70_1752151071498_0.2659993110305192","host":"s3://npm-registry-packages-npm-production"}},"0.0.71":{"name":"@gulibs/vgrove-client","version":"0.0.71","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.71","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"101ae106c0bed1efac041760cb961c0a0b99c77e","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.71.tgz","fileCount":32,"integrity":"sha512-AK3KZevdoZfvU0vUTmyeBcENL7zSw3pfoIEHb4YqhHUcEb0fX9HZJLaPKHz50Z5qltFDK0tUvvBsZHbsb0tIZw==","signatures":[{"sig":"MEUCIQDJ07dnuOT03a+yydY7YCP06WQQ/tyWB57EqA6NZi/b/gIgEVZRq4ApqWw8kfhfa9CyDiuy9tcLl0ePedpUxnUZ/iI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":949756},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"3eaaee4a3e9b0294e36145a96192ad204196d40e","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.71_1752151815619_0.4119200823155984","host":"s3://npm-registry-packages-npm-production"}},"0.0.72":{"name":"@gulibs/vgrove-client","version":"0.0.72","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.72","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"1e81c3e95101b069a5588aa7ca67fffd223a7c84","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.72.tgz","fileCount":32,"integrity":"sha512-MgTvbIpP+NLXQjC5eVm1XrkmLnvpVQGjjuJWmlxghgzjCexahgWdMIndSoLq9xknJ+4h3K6owCR6DPrUNjeiqA==","signatures":[{"sig":"MEQCIDXsOtrqE9PX8SotuTCUVX31KQBYSPZU+9+toJj9zq7WAiBewRCuzOMrXcs9mC+NWjaj1WDrACpWn9wZcRVW7jW+uA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":944370},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"e65151626fd8352e042d197685a43f5fba94a7d6","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.72_1752152524724_0.9279603034893076","host":"s3://npm-registry-packages-npm-production"}},"0.0.73":{"name":"@gulibs/vgrove-client","version":"0.0.73","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.73","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"64ecf2e2bf22ddda2fa823293be5e4fddfe51791","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.73.tgz","fileCount":32,"integrity":"sha512-92Bc5sEBIDlb2Tx2gqnIS93Nbp/EN1yxzmwFJYeeTBi1amR0Qdxl9iBM0q8tUtXQaYh8qcNHowF1h4l6v7jTQg==","signatures":[{"sig":"MEUCIQDzUkTDZ9+ZLHdjAx1fLBYHxfPgS7kxmKesuHbv+/CIHAIgE/lgVVaMY0M9vcG2TUwSXPRCf0s+SB+OkFdqOhQn7w8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":958007},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"a3e24a4d8a24f17cac8a90c601f8216cc7d921e5","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.73_1752153066098_0.02387791698768349","host":"s3://npm-registry-packages-npm-production"}},"0.0.74":{"name":"@gulibs/vgrove-client","version":"0.0.74","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.74","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"efdfd362c592a723c39a11d1eaf3a42406f07a60","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.74.tgz","fileCount":32,"integrity":"sha512-fTddGPz43b5lMv1EuTOTrGNOHpRL7rkBAysfNVeZlvZ9hfmnxxkTkuEBRST8lHJax5lzm6hFqVmNQYba7h2FPQ==","signatures":[{"sig":"MEUCIQDcu41vPNlQuJJUlt6tMJ9r2QKUw34vnLTqg7NsQ97YvAIgBwLnfoqXmldkGeRgRUV8Lba7luEYTtNYaRy3IwNBvDg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":964675},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"85a2bf33d475d4f4e9512bdf37428842a9e5108a","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.74_1752153600738_0.09579525752661455","host":"s3://npm-registry-packages-npm-production"}},"0.0.75":{"name":"@gulibs/vgrove-client","version":"0.0.75","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.75","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"27ca8037d9b4288631dec768657352aa711723f6","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.75.tgz","fileCount":32,"integrity":"sha512-9OL+beewCycP3doha8Rz37s7cXpy92t8dDlanixLIpi51C7q2xH+x99dASiFpgztjKTiZij8h42S+avH3h9bfA==","signatures":[{"sig":"MEQCIB21EZwVZRyYYdwRQqpTfCMzk5bSN5bhLziKE38HnaTCAiBq0WrxQee/Y9KZrvKdb7PI3DnuOln1zM+AiDKYoSYPyg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":970565},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"fcdf8e0fb171bd1b95105eed0776f91a1cb8276b","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.75_1752153806749_0.3105209804259714","host":"s3://npm-registry-packages-npm-production"}},"0.0.76":{"name":"@gulibs/vgrove-client","version":"0.0.76","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.76","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"5a05fcb7c46745de450c0a39aea96ac36367f4d8","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.76.tgz","fileCount":32,"integrity":"sha512-I+KsEWKTUNxOWXUGO/I+K7no7rq1AzPFahQlhuKOTv3a+AvHSWM6KH/UibxdSDhsPwHDhdRj1ToO4azFvqEdmA==","signatures":[{"sig":"MEQCIAt9+iXQEktuNG/yI4gBMrY2YeZMcu33wQyyNTgoqgLgAiB57VT1l7Sv3I/GmA5BKrBvniUtLJrPwX1+JOBSLVsiNg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":970823},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7bff7e30cda57496f07724c0d0dd1555f7e6b099","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","actor":{"name":"gujiwen","type":"user","email":"gujiwen2020@163.com"},"email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.76_1752158933697_0.5389735778750198","host":"s3://npm-registry-packages-npm-production"}},"0.0.77":{"name":"@gulibs/vgrove-client","version":"0.0.77","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.77","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"6316b01bbba25bb428298888f64a3defcd6a32b9","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.77.tgz","fileCount":32,"integrity":"sha512-9M8ELSymxe+mnGwaHVONFgrfUeYAaR2+paPdwA1ynRqP7psHtatX8cmdzWOSPCU5eueBvmJRjmoG48+0nsSa0A==","signatures":[{"sig":"MEUCIEroVgK4jptshRtb756p7ubH5WRFYaa1I/MovZpd8hk2AiEAxmSdVAEYd2DRlQw4vG4mvXXtwkMemIKEul+D6kG46Ho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":971333},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"7be1929e7b1a8dada6da53a7ed560667cc506458","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.77_1752197628306_0.8496284516544415","host":"s3://npm-registry-packages-npm-production"}},"0.0.78":{"name":"@gulibs/vgrove-client","version":"0.0.78","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.78","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"9070aa1011034b0d5c32506306a9cda5491864a8","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.78.tgz","fileCount":32,"integrity":"sha512-WOv3GPUU0qS2ueUnJfVk45DfyyjjXoakwPcDNvupswVWLwcNcMqJBBMCFNZNEypZqJeDt+Zre3M3nvQuWaNrPw==","signatures":[{"sig":"MEUCIFMjSZptMJaSk2S+RX+AE4Mn73xVhTZpkBtJvqQTpM/KAiEAgkUhjK70GKZz9YbjM6/azGVegRMWYwN254VFrSsihO0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":972582},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"5c2fa290282b0c63b14c2c430562eb381b22a3f7","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.78_1752199076684_0.7513652269746831","host":"s3://npm-registry-packages-npm-production"}},"0.0.79":{"name":"@gulibs/vgrove-client","version":"0.0.79","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.79","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"2061f702d256ef617a10c6f83ed85e865c1f2769","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.79.tgz","fileCount":32,"integrity":"sha512-C/kOx/lTJp0rqjuJgUDF+UDNC6w3Xm+LiY3jyaKGsQug6/21gny+4B4+G93uEu1MzIXRwr+ARaFwyJR4PrW64w==","signatures":[{"sig":"MEUCIHe/vBPcZttn8SviLrYkWIhefWAhWgBNUwL4YjiKbDZIAiEAnaXDzJ2S75JuPEEj+FXLDq6f2Zy2VBhXj0uXO4aaTFo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":973574},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"8c11996cb10020e169e7bf1eac71f7c2c522e00e","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.79_1752199590377_0.07850730588775034","host":"s3://npm-registry-packages-npm-production"}},"0.0.80":{"name":"@gulibs/vgrove-client","version":"0.0.80","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.80","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"d1f26d77956361811a5b7d5b8e62026b7d26439e","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.80.tgz","fileCount":32,"integrity":"sha512-UY/2+Alj+BL8UElamvTopmFT+zcjJvKKTK3o0+rpz5jYWnq6kdUsjuq/FHv5ir19PZyU0EE+557sK5FcTVfg4A==","signatures":[{"sig":"MEYCIQDbeIjsD6B6XnJ+uyxruZuTnm/H7FRbz09imS6JtiuwWwIhAN5mc6MqkECoaJHY6mTaARg+SkjWEnBQA0f68e5/Z2ED","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":984856},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"bb8e7b3e445150051d94321dabb0ad76c560a5ba","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"10.8.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"18.20.8","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^4.9.0","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.80_1752200778394_0.5230889270645589","host":"s3://npm-registry-packages-npm-production"}},"0.0.169":{"name":"@gulibs/vgrove-client","version":"0.0.169","keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","_id":"@gulibs/vgrove-client@0.0.169","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"dist":{"shasum":"eb1fbf8833a4aa26061f7a224f7de34e499ae621","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.169.tgz","fileCount":36,"integrity":"sha512-xuY6zAXM7td2K8qvS311xCcxb1JpDBKsnpgzwYaf/aK+H3+9Ji6Pg8BBx8+DovZBvHx1nyrxXrGFthF8uFBmDg==","signatures":[{"sig":"MEUCIE3f76AKlXCvTqxgK2pGUpXjdCbe5VtoVQ86VOnPufHEAiEArVe2gpxbusORgfV+TtNSEQoaIPY5PNcgDVdPspLBfi0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1014711},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","gitHead":"28deb69e81a12275fc3c744eda5746ddb89e134e","private":false,"scripts":{"dev":"rollup -c -w","build":"rollup -c","type-check":"tsc --noEmit"},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"_npmVersion":"10.9.2","description":"Client-side utilities for React auto routes","directories":{},"_nodeVersion":"23.11.1","dependencies":{"lodash":"^4.17.21","tailwind-variants":"^1.0.0","@react-types/shared":"^3.30.0","@gulibs/react-storage":"^0.0.8"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"rollup":"^3.0.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.2","@types/lodash":"^4.17.17","@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-typescript":"^11.0.0","@rollup/plugin-node-resolve":"^15.0.0"},"peerDependencies":{"react":"^18.0.0 || ^19.0.0","lodash":">=4.17.21","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"_npmOperationalInternal":{"tmp":"tmp/vgrove-client_0.0.169_1753852617763_0.3371652112955743","host":"s3://npm-registry-packages-npm-production"}},"0.0.170":{"name":"@gulibs/vgrove-client","version":"0.0.170","private":false,"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"description":"Client-side utilities for React auto routes","type":"module","main":"dist/index.js","module":"dist/index.esm.js","types":"dist/index.d.ts","scripts":{"build":"rollup -c","dev":"rollup -c -w","type-check":"tsc --noEmit"},"keywords":["react","router","auto-routes","client","typescript"],"author":{"name":"HectorGu"},"license":"MIT","peerDependencies":{"lodash":">=4.17.21","react":"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0","react-router":">=7.6.2"},"dependencies":{"@gulibs/react-storage":"^0.0.8","@react-types/shared":"^3.30.0","lodash":"^4.17.21","tailwind-variants":"^1.0.0"},"devDependencies":{"@rollup/plugin-commonjs":"^24.0.0","@rollup/plugin-node-resolve":"^15.0.0","@rollup/plugin-typescript":"^11.0.0","@types/lodash":"^4.17.17","@types/react":"^19.1.8","react-router":"^7.6.2","rollup":"^3.0.0","typescript":"^5.8.3"},"_id":"@gulibs/vgrove-client@0.0.170","gitHead":"2d4ab750247cc5d58aa21c07bf82e9e814eab93d","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-lPrnrcAFEbFOgjaTpAWbSOTNc+swx6RjVUj03t8m0PydCOCb1lJUGK8qBxKApBIXg9b/X9DjFu/8TDRtRgea1w==","shasum":"8d6b8d3506a965d3c148258141958144f1f36083","tarball":"https://registry.npmjs.org/@gulibs/vgrove-client/-/vgrove-client-0.0.170.tgz","fileCount":36,"unpackedSize":1014742,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC+QCXlFkcWJBXMTFL3PZgxQxLBrx95FkNUBc+aMa/Z7wIhAKzWdpns+MmPwtFTn+4NCNbHM3pqpJ76IIZhh479KZ6R"}]},"_npmUser":{"name":"gujiwen","email":"gujiwen2020@163.com"},"directories":{},"maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vgrove-client_0.0.170_1753901008127_0.8492096052192806"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-25T10:00:17.635Z","modified":"2025-07-30T18:43:28.594Z","0.0.1":"2025-06-25T10:00:17.909Z","0.0.2":"2025-06-25T11:41:53.585Z","0.0.3":"2025-06-25T12:01:54.382Z","0.0.4":"2025-06-25T12:17:12.015Z","0.0.5":"2025-06-25T12:32:03.565Z","0.0.6":"2025-06-25T12:41:34.295Z","0.0.7":"2025-06-27T18:58:40.182Z","0.0.8":"2025-07-01T05:24:03.635Z","0.0.9":"2025-07-01T10:02:07.601Z","0.0.10":"2025-07-03T01:55:39.918Z","0.0.11":"2025-07-03T10:14:18.747Z","0.0.12":"2025-07-03T12:26:29.027Z","0.0.13":"2025-07-03T17:07:45.903Z","0.0.14":"2025-07-03T18:01:57.632Z","0.0.15":"2025-07-05T02:53:51.270Z","0.0.16":"2025-07-06T02:31:06.866Z","0.0.17":"2025-07-06T02:47:39.903Z","0.0.18":"2025-07-06T04:45:34.218Z","0.0.19":"2025-07-06T11:11:46.785Z","0.0.20":"2025-07-06T11:30:59.896Z","0.0.21":"2025-07-06T11:37:00.609Z","0.0.22":"2025-07-06T11:39:41.285Z","0.0.23":"2025-07-06T12:30:40.607Z","0.0.24":"2025-07-06T12:33:12.145Z","0.0.25":"2025-07-06T13:11:19.499Z","0.0.26":"2025-07-06T15:59:39.573Z","0.0.27":"2025-07-06T16:06:35.750Z","0.0.28":"2025-07-06T16:25:21.238Z","0.0.29":"2025-07-06T18:04:46.145Z","0.0.30":"2025-07-06T18:31:27.768Z","0.0.31":"2025-07-06T18:39:12.676Z","0.0.32":"2025-07-06T19:22:58.220Z","0.0.33":"2025-07-06T19:29:15.507Z","0.0.34":"2025-07-06T19:36:43.772Z","0.0.35":"2025-07-06T20:03:58.015Z","0.0.36":"2025-07-06T20:16:28.919Z","0.0.37":"2025-07-07T02:35:32.475Z","0.0.38":"2025-07-08T01:24:19.995Z","0.0.39":"2025-07-08T07:27:45.653Z","0.0.40":"2025-07-08T09:37:59.267Z","0.0.41":"2025-07-08T17:39:02.949Z","0.0.42":"2025-07-09T01:15:48.495Z","0.0.43":"2025-07-09T01:32:42.714Z","0.0.44":"2025-07-09T10:50:42.922Z","0.0.46":"2025-07-09T11:08:22.657Z","0.0.47":"2025-07-09T11:28:25.892Z","0.0.48":"2025-07-10T02:23:20.875Z","0.0.49":"2025-07-10T02:40:08.062Z","0.0.50":"2025-07-10T02:48:31.582Z","0.0.51":"2025-07-10T02:51:47.731Z","0.0.52":"2025-07-10T03:05:23.933Z","0.0.53":"2025-07-10T04:19:40.310Z","0.0.54":"2025-07-10T07:02:11.174Z","0.0.55":"2025-07-10T08:51:09.211Z","0.0.56":"2025-07-10T09:48:13.813Z","0.0.57":"2025-07-10T10:26:21.649Z","0.0.58":"2025-07-10T10:32:27.606Z","0.0.59":"2025-07-10T10:47:29.339Z","0.0.60":"2025-07-10T11:10:15.730Z","0.0.61":"2025-07-10T11:25:27.137Z","0.0.62":"2025-07-10T11:39:57.139Z","0.0.63":"2025-07-10T11:46:17.973Z","0.0.64":"2025-07-10T11:51:00.216Z","0.0.65":"2025-07-10T11:57:21.488Z","0.0.66":"2025-07-10T12:11:29.767Z","0.0.67":"2025-07-10T12:20:24.869Z","0.0.68":"2025-07-10T12:25:40.607Z","0.0.69":"2025-07-10T12:30:52.887Z","0.0.70":"2025-07-10T12:37:51.728Z","0.0.71":"2025-07-10T12:50:15.850Z","0.0.72":"2025-07-10T13:02:04.959Z","0.0.73":"2025-07-10T13:11:06.351Z","0.0.74":"2025-07-10T13:20:00.964Z","0.0.75":"2025-07-10T13:23:26.962Z","0.0.76":"2025-07-10T14:48:53.883Z","0.0.77":"2025-07-11T01:33:48.497Z","0.0.78":"2025-07-11T01:57:56.878Z","0.0.79":"2025-07-11T02:06:30.583Z","0.0.80":"2025-07-11T02:26:18.610Z","0.0.169":"2025-07-30T05:16:57.991Z","0.0.170":"2025-07-30T18:43:28.411Z"},"author":{"name":"HectorGu"},"license":"MIT","keywords":["react","router","auto-routes","client","typescript"],"description":"Client-side utilities for React auto routes","maintainers":[{"name":"gujiwen","email":"gujiwen2020@163.com"}],"readme":"# @gulibs/vgrove-client\n\n一个功能强大的 React 路由自动化客户端库，提供完整的路由保护、状态管理、国际化和性能优化解决方案。\n\n## ✨ 特性\n\n- 🛡️ **路由保护** - 支持认证、权限、角色和自定义守卫，提供组件包装器、高阶组件和 Hook 三种使用方式\n- 🏗️ **中间件系统** - 可插拔的中间件架构，支持优先级排序和开发环境限制\n- 🌍 **国际化支持** - 与 @gulibs/vgrove-i18n 完美集成，支持虚拟模块、资源加载和路由集成\n- 📊 **状态管理** - 基于 React Storage 的用户认证状态管理，支持 Token 自动刷新\n- 💾 **存储管理** - 统一的 localStorage/sessionStorage 管理接口，支持跨标签页同步\n- ⚡ **性能优化** - 内置 LRU 缓存、批处理器、性能追踪器和内存优化器，智能保护需求检测\n- 🚀 **布局抖动修复** - 智能检测空配置文件，避免不必要的状态转换，提供快速通道渲染\n- 🎯 **TypeScript** - 完整的类型定义支持，提供类型安全的国际化键\n- 📱 **现代化** - 支持 React 18+ 和现代浏览器，兼容最新的 React Router v7\n- 🔄 **热更新** - 支持开发时的热模块替换和资源热重载\n- 📦 **模块化** - 按需导入，减小包大小，支持 Tree Shaking\n- 🛠️ **工具函数** - 丰富的实用工具函数库，涵盖路径处理、查询参数、防抖节流等\n- 🔒 **安全设计** - 调试功能默认全部关闭，需要显式启用，确保生产环境安全\n- 🔍 **调试支持** - 细粒度调试控制系统，支持模块化开关和浏览器开发者工具集成\n\n## 📦 安装\n\n```bash\nnpm install @gulibs/vgrove-client\n# 或\npnpm add @gulibs/vgrove-client\n# 或\nyarn add @gulibs/vgrove-client\n```\n\n### 对等依赖\n\n```bash\nnpm install react react-dom react-router lodash\n```\n\n## 🚀 快速开始\n\n### 0. 配置管理（推荐） ⚠️\n\n⚠️ **重要：安全设计**\n- **调试功能默认全部关闭**，包括开发环境\n- 必须显式启用调试才能看到相关日志\n- 这避免了意外暴露敏感信息到调试日志中\n\n首先初始化 VGrove Client，配置调试选项和开发者工具：\n\n```tsx\nimport { initVGroveClient } from '@gulibs/vgrove-client';\n\n// 🔒 生产环境推荐配置（默认安全）\ninitVGroveClient();  // 所有调试功能默认关闭\n\n// 🛠️ 开发环境配置（需要显式启用调试）\ninitVGroveClient({\n  debug: {\n    enabled: true,        // 必须显式启用调试系统\n    auth: true,           // 启用认证调试\n    i18n: false,          // 保持国际化调试关闭\n    performance: true,    // 启用性能监控\n    routing: true,        // 启用路由调试\n    storage: false        // 保持存储调试关闭\n  },\n  devtools: process.env.NODE_ENV === 'development' // 只在开发环境启用\n});\n```\n\n使用浏览器开发者工具（开发环境）：\n\n```javascript\n// 在浏览器控制台中使用内置开发者工具\n__VGROVE_DEVTOOLS__.debug.status();              // 查看调试状态（表格形式）\n__VGROVE_DEVTOOLS__.debug.enable();              // 启用所有调试\n__VGROVE_DEVTOOLS__.debug.enableModule('auth');  // 启用特定模块\n__VGROVE_DEVTOOLS__.debug.disableModule('routing'); // 禁用特定模块\n__VGROVE_DEVTOOLS__.client.getState();           // 查看客户端状态\n```\n\n### 1. 路由保护\n\n```tsx\nimport { RouteProtectionWrapper, defineAuth, defineGuard } from '@gulibs/vgrove-client';\n\n// 定义认证守卫\nconst authGuard = defineAuth({\n  redirectTo: '/login',\n  errorMessage: '请先登录'\n});\n\n// 定义自定义守卫\nconst adminGuard = defineGuard({\n  name: 'admin-only',\n  condition: (context) => context.user?.role === 'admin',\n  redirectTo: '/forbidden',\n  errorMessage: '需要管理员权限'\n});\n\nfunction ProtectedPage() {\n  return (\n    <RouteProtectionWrapper\n      guards={[authGuard, adminGuard]}\n      loadingElement={<div>验证中...</div>}\n      component={<YourPageComponent />}\n    />\n  );\n}\n```\n\n### 2. 用户状态管理\n\n```tsx\nimport { useUser } from '@gulibs/vgrove-client';\n\nfunction AuthComponent() {\n  const {\n    user,\n    isAuthenticated,\n    isLoading,\n    login,\n    logout,\n    error\n  } = useUser({\n    loginApi: async (credentials) => {\n      const response = await fetch('/api/login', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(credentials)\n      });\n      return response.json();\n    },\n    fetchUser: async (token) => {\n      const response = await fetch('/api/user', {\n        headers: { Authorization: `Bearer ${token}` }\n      });\n      return response.json();\n    }\n  });\n\n  if (isLoading) return <div>加载中...</div>;\n  if (error) return <div>错误: {error}</div>;\n\n  return (\n    <div>\n      {isAuthenticated ? (\n        <div>\n          <p>欢迎, {user?.name}</p>\n          <button onClick={logout}>退出登录</button>\n        </div>\n      ) : (\n        <button onClick={() => login({ username: 'demo', password: '123' })}>\n          登录\n        </button>\n      )}\n    </div>\n  );\n}\n```\n\n### 3. 性能优化与布局抖动修复 🚀\n\nVGrove Client 提供了先进的性能优化功能，特别针对布局抖动问题进行了专项修复。\n\n#### 3.1 智能保护需求检测\n\n当 `_configs.tsx` 文件为空或无实际保护需求时，系统会自动启用快速通道，避免不必要的状态转换：\n\n```tsx\n// ❌ 之前：即使空配置也会执行完整状态机\n// _configs.tsx (空配置)\nexport default defineConfigs({});\n\n// ✅ 现在：自动检测无保护需求，启用快速通道\nimport { RouteProtectionWrapper } from '@gulibs/vgrove-client';\n\nfunction OptimizedPage() {\n  return (\n    <RouteProtectionWrapper\n      component={<YourPageComponent />}\n      // 空配置时自动跳过状态转换，直接渲染组件\n    />\n  );\n}\n```\n\n#### 3.2 布局抖动解决方案\n\n**问题描述**：空配置文件导致页面经历 `checking` → `passed` 状态转换，造成布局抖动。\n\n**解决方案**：智能检测 + 快速通道\n\n```tsx\nimport { RouteProtectionWrapper, defineAuth, defineGuard } from '@gulibs/vgrove-client';\n\n// ✅ 有实际保护需求 - 正常执行保护逻辑\nconst protectedPageConfig = {\n  guards: [\n    defineAuth({ redirectTo: '/login' }),\n    defineGuard({\n      condition: (ctx) => ctx.user?.permissions.includes('read'),\n      redirectTo: '/forbidden'\n    })\n  ]\n};\n\n// ✅ 无保护需求 - 启用快速通道\nconst publicPageConfig = {\n  guards: [],           // 无守卫\n  middlewares: [],      // 无中间件\n  stateRenderers: {},   // 无状态渲染器\n  redirectConfig: {}    // 无重定向配置\n};\n\nfunction SmartProtectedPage() {\n  return (\n    <RouteProtectionWrapper\n      {...protectedPageConfig}\n      component={<YourPageComponent />}\n      // 智能检测：有保护需求时执行完整逻辑\n      // 无保护需求时直接渲染，0ms 状态转换\n    />\n  );\n}\n```\n\n#### 3.3 性能指标对比\n\n| 场景 | 修复前 | 修复后 | 改善 |\n|------|--------|--------|------|\n| 空配置页面首次渲染 | ~50ms + 布局抖动 | ~5ms 无抖动 | 90% ⬇️ |\n| 有保护需求页面 | ~50ms | ~45ms | 10% ⬇️ |\n| 调试输出（生产环境） | 20+ console 调用 | 0 console 调用 | 100% ⬇️ |\n| 内存占用 | ~200KB | ~150KB | 25% ⬇️ |\n\n#### 3.4 调试性能监控\n\n```tsx\nimport { debug } from '@gulibs/vgrove-client';\n\n// ✅ 高性能调试（仅在需要时执行）\nfunction PerformanceOptimizedComponent() {\n  useEffect(() => {\n    // 只有在调试启用时才执行相关逻辑\n    debug.performance('组件渲染完成', {\n      timestamp: Date.now(),\n      componentName: 'PerformanceOptimizedComponent'\n    });\n  }, []);\n\n  return <div>组件内容</div>;\n}\n```\n\n#### 3.5 验证修复效果\n\n```tsx\n// 验证工具：检查页面是否使用了快速通道\nfunction usePerformanceVerification() {\n  const [hasLayoutShift, setHasLayoutShift] = useState(false);\n  const [renderTime, setRenderTime] = useState(0);\n\n  useEffect(() => {\n    const startTime = performance.now();\n\n    // 检测布局抖动\n    const observer = new PerformanceObserver((list) => {\n      for (const entry of list.getEntries()) {\n        if (entry.entryType === 'layout-shift' && entry.value > 0) {\n          setHasLayoutShift(true);\n        }\n      }\n    });\n\n    observer.observe({ entryTypes: ['layout-shift'] });\n\n    // 测量渲染时间\n    requestAnimationFrame(() => {\n      setRenderTime(performance.now() - startTime);\n    });\n\n    return () => observer.disconnect();\n  }, []);\n\n  return { hasLayoutShift, renderTime };\n}\n\n// 使用验证工具\nfunction VerifiedPage() {\n  const { hasLayoutShift, renderTime } = usePerformanceVerification();\n\n  return (\n    <div>\n      <RouteProtectionWrapper component={<YourContent />} />\n      {process.env.NODE_ENV === 'development' && (\n        <div style={{ position: 'fixed', top: 0, right: 0, background: '#f0f0f0', padding: '8px' }}>\n          <p>布局抖动: {hasLayoutShift ? '❌ 检测到' : '✅ 无'}</p>\n          <p>渲染时间: {renderTime.toFixed(2)}ms</p>\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n### 4. 国际化支持\n\n```tsx\nimport { I18nProvider, useI18n, createI18nClient } from '@gulibs/vgrove-client';\n\n// 创建国际化客户端\nconst i18nClient = createI18nClient({\n  defaultLocale: 'zh',\n  supportedLocales: ['zh', 'en'],\n  resources: {\n    zh: {\n      welcome: '欢迎',\n      hello: '你好, {name}!'\n    },\n    en: {\n      welcome: 'Welcome',\n      hello: 'Hello, {name}!'\n    }\n  }\n});\n\nfunction App() {\n  return (\n    <I18nProvider client={i18nClient}>\n      <MyComponent />\n    </I18nProvider>\n  );\n}\n\nfunction MyComponent() {\n  const { t, locale, setLocale } = useI18n();\n\n  return (\n    <div>\n      <p>{t('welcome')}</p>\n      <p>{t('hello', { name: '张三' })}</p>\n      <button onClick={() => setLocale(locale === 'zh' ? 'en' : 'zh')}>\n        切换语言\n      </button>\n    </div>\n  );\n}\n```\n\n### 5. 存储管理\n\n```tsx\nimport { useStorage } from '@gulibs/vgrove-client';\n\nfunction StorageExample() {\n  // 基础存储使用\n  const [userPrefs, setUserPrefs, removeUserPrefs] = useStorage('user_preferences', {\n    theme: 'light',\n    language: 'zh'\n  });\n\n  // 使用 sessionStorage\n  const [tempData, setTempData] = useStorage('temp_data', null, {\n    storage: 'session'\n  });\n\n  // 带过期时间的存储（1小时后过期）\n  const [cacheData, setCacheData, removeCacheData, setCacheWithExpiry, isCacheExpired, cleanupCache] = useStorage(\n    'api_cache',\n    {},\n    {\n      storage: 'local',\n      maxAge: 60 * 60 * 1000, // 1小时\n      autoCleanup: true,      // 自动清理过期数据\n      cleanupInterval: 5 * 60 * 1000 // 每5分钟清理一次\n    }\n  );\n\n  // 临时令牌存储（30分钟后过期）\n  const [tempToken, setTempToken, removeTempToken, setTokenWithExpiry, isTokenExpired] = useStorage(\n    'temp_token',\n    null,\n    {\n      storage: 'session',\n      maxAge: 30 * 60 * 1000, // 30分钟\n      autoCleanup: true\n    }\n  );\n\n  return (\n    <div>\n      <p>当前主题: {userPrefs.theme}</p>\n      <button onClick={() => setUserPrefs({ ...userPrefs, theme: 'dark' })}>\n        切换到暗色主题\n      </button>\n      <button onClick={removeUserPrefs}>\n        重置偏好设置\n      </button>\n\n      {/* 缓存数据管理 */}\n      <div>\n        <p>缓存状态: {isCacheExpired() ? '已过期' : '有效'}</p>\n        <button onClick={() => setCacheData({ apiData: 'some data' })}>\n          设置缓存（使用默认过期时间）\n        </button>\n        <button onClick={() => setCacheWithExpiry({ quickData: 'quick' }, 5 * 60 * 1000)}>\n          设置快速缓存（5分钟过期）\n        </button>\n        <button onClick={cleanupCache}>\n          手动清理过期数据\n        </button>\n      </div>\n\n      {/* 临时令牌管理 */}\n      <div>\n        <p>令牌状态: {isTokenExpired() ? '已过期' : '有效'}</p>\n        <button onClick={() => setTempToken('temp-token-123')}>\n          设置临时令牌\n        </button>\n        <button onClick={() => setTokenWithExpiry('extended-token', 60 * 60 * 1000)}>\n          设置扩展令牌（1小时）\n        </button>\n      </div>\n    </div>\n  );\n}\n```\n\n### 6. 认证状态管理 Hooks\n\n```tsx\nimport { useUser, useUserState, useAuthToken } from '@gulibs/vgrove-client';\n\n// 只读用户状态\nfunction ReadOnlyUserInfo() {\n  const { user, isAuthenticated, token } = useUserState('auth', false);\n\n  if (!isAuthenticated) return <div>未登录</div>;\n\n  return (\n    <div>\n      <p>用户: {user?.name}</p>\n      <p>Token: {token?.substring(0, 20)}...</p>\n    </div>\n  );\n}\n\n// Token 管理\nfunction TokenManager() {\n  const {\n    token,\n    refreshToken,\n    setToken,\n    setRefreshToken,\n    clearAllTokens,\n    hasToken,\n    hasRefreshToken\n  } = useAuthToken('auth');\n\n  return (\n    <div>\n      <p>有 Token: {hasToken ? '是' : '否'}</p>\n      <p>有 Refresh Token: {hasRefreshToken ? '是' : '否'}</p>\n      <button onClick={() => setToken('new-token-123')}>\n        设置新 Token\n      </button>\n      <button onClick={clearAllTokens}>\n        清除所有 Token\n      </button>\n    </div>\n  );\n}\n```\n\n### 7. 路由保护的不同形式\n\n```tsx\nimport {\n  RouteProtectionWrapper,\n  withRouteProtection,\n  useRouteProtection\n} from '@gulibs/vgrove-client';\n\n// 1. 组件包装器形式（已展示）\nfunction ComponentWrapper() {\n  return (\n    <RouteProtectionWrapper\n      guards={[authGuard]}\n      component={<ProtectedContent />}\n    />\n  );\n}\n\n// 2. 高阶组件形式\nconst ProtectedComponent = withRouteProtection(MyComponent, {\n  guards: [authGuard, adminGuard],\n  loadingElement: <div>验证中...</div>\n});\n\nfunction App() {\n  return <ProtectedComponent prop1=\"value1\" />;\n}\n\n// 3. Hook 形式\nfunction HookBasedProtection() {\n  const { isLoading, error, hasAccess, user } = useRouteProtection([authGuard]);\n\n  if (isLoading) return <div>检查访问权限...</div>;\n  if (error) return <div>错误: {error}</div>;\n  if (!hasAccess) return <div>访问被拒绝</div>;\n\n  return (\n    <div>\n      <h1>受保护的内容</h1>\n      <p>欢迎, {user?.name}</p>\n    </div>\n  );\n}\n```\n\n## 🛡️ 认证与守卫系统完全指南\n\n### 认证 vs 守卫的区别\n\n| 特性 | Auth （认证） | Guard （守卫） |\n|------|-------------|--------------|\n| **主要用途** | 身份验证 | 权限控制 |\n| **检查内容** | 用户是否已登录 | 用户是否有权限访问 |\n| **失败后果** | 重定向到登录页 | 重定向到错误页 / 拒绝页 |\n| **适用场景** | 保护需要登录的页面 | 保护需要特定权限的页面 |\n| **执行顺序** | 优先执行 | 在认证通过后执行 |\n\n### 🔐 认证系统详解\n\n#### 1. 基础认证 - defineAuth\n\n**最简单的认证方式，适合基础的登录检查**\n\n```tsx\nimport { defineAuth } from '@gulibs/vgrove-client';\n\n// 页面级认证文件：pages/dashboard/auth.ts\nexport default defineAuth({\n    name: 'dashboard-auth',                    // 认证名称（可选）\n    redirectTo: '/login',                      // 失败时重定向路径\n    errorMessage: '请先登录访问仪表板',         // 错误消息\n    check: (context) => {                      // 认证检查函数\n        // context 包含：path, params, query, user, roles, permissions, data\n        const token = localStorage.getItem('auth_token');\n\n        // ⚠️ 关键：必须返回 boolean 值\n        return !!token;\n    }\n});\n```\n\n**❌ 常见错误：**\n\n```tsx\n// 错误1：没有返回值\ncheck: (context) => {\n    const token = localStorage.getItem('auth_token');\n    // ❌ 缺少 return 语句\n}\n\n// 错误2：返回非布尔值\ncheck: (context) => {\n    return localStorage.getItem('auth_token'); // ❌ 返回 string | null\n}\n\n// 错误3：异步函数但没有正确处理\ncheck: (context) => {\n    return fetch('/api/verify').then(res => res.ok); // ❌ 返回 Promise\n}\n```\n\n**✅ 正确用法：**\n\n```tsx\n// 同步检查\ncheck: (context) => {\n    const token = localStorage.getItem('auth_token');\n    return !!token; // ✅ 返回 boolean\n}\n\n// 异步检查\ncheck: async (context) => {\n    try {\n        const response = await fetch('/api/verify', {\n            headers: { Authorization: `Bearer ${context.user?.token}` }\n        });\n        return response.ok; // ✅ 返回 boolean\n    } catch (error) {\n        console.error('Auth check failed:', error);\n        return false; // ✅ 异常时返回 false\n    }\n}\n```\n\n#### 2. 智能认证 - defineSmartAuth ⭐\n\n**推荐使用！自动处理循环重定向，防止常见错误**\n\n```tsx\nimport { defineSmartAuth } from '@gulibs/vgrove-client';\n\n// 页面级认证文件：pages/auth.ts (根目录)\nexport default defineSmartAuth({\n    name: 'root-smart-auth',\n    redirectTo: '/login',\n    errorMessage: '请先登录后访问应用',\n\n    // 🚀 智能特性配置\n    enableLoopDetection: true,              // 启用循环重定向检测\n    excludeCommonPublicPaths: true,         // 自动排除常见公共路径\n    publicPaths: [                          // 自定义公共路径\n        '/about',\n        '/help',\n        '/docs/*',                          // 支持通配符\n        '/api/*'\n    ],\n\n    check: (context) => {\n        // 智能认证会自动处理：\n        // 1. 如果是公共路径，直接允许访问\n        // 2. 如果检测到循环重定向，自动阻止\n        // 3. 然后才执行这里的检查逻辑\n\n        const token = localStorage.getItem('auth_token');\n        console.log('🔐 Smart Auth Check:', {\n            path: context.path,\n            hasToken: !!token,\n            user: context.user\n        });\n\n        return !!token;\n    }\n});\n```\n\n**内置公共路径列表：**\n\n```tsx\n// defineSmartAuth 自动排除这些路径：\nconst DEFAULT_PUBLIC_PATHS = [\n    '/login', '/signin', '/sign-in',\n    '/register', '/signup', '/sign-up',\n    '/auth/login', '/auth/signin',\n    '/auth/register', '/auth/signup',\n    '/reset-password', '/forgot-password',\n    '/verify-email', '/verify',\n    '/public', '/'\n];\n```\n\n#### 3. 根目录认证 - defineRootAuth\n\n**专用于整个应用的登录保护**\n\n```tsx\nimport { defineRootAuth } from '@gulibs/vgrove-client';\n\n// 页面级认证文件：pages/auth.ts\nexport default defineRootAuth({\n    redirectTo: '/login',\n    errorMessage: '请先登录后访问应用',\n    publicPaths: ['/help', '/about'],       // 自定义公共路径\n    check: (context) => {\n        const token = localStorage.getItem('auth_token');\n        return !!token;\n    }\n});\n```\n\n### 🛡️ 守卫系统详解\n\n#### 1. 自定义守卫 - defineGuard\n\n**适用于复杂的业务逻辑判断**\n\n```tsx\nimport { defineGuard } from '@gulibs/vgrove-client';\n\n// 页面级守卫文件：pages/admin/guard.ts\nexport default defineGuard({\n    name: 'admin-access',                      // 守卫名称\n    type: 'custom',                            // 守卫类型\n    redirectTo: '/forbidden',                  // 失败时重定向\n    errorMessage: '需要管理员权限访问此页面',   // 错误消息\n    condition: (context) => {                  // 守卫条件函数\n        // context 包含：path, params, query, user, permissions, roles, data\n\n        // 检查用户角色\n        if (!context.user?.role) return false;\n\n        // 检查是否是管理员\n        const isAdmin = context.user.role === 'admin';\n\n        // 检查时间限制（示例：只允许工作时间访问）\n        const now = new Date();\n        const workingHours = now.getHours() >= 9 && now.getHours() <= 18;\n\n        return isAdmin && workingHours;\n    }\n});\n```\n\n#### 2. 角色守卫 - defineRoleGuard\n\n**基于用户角色的访问控制**\n\n```tsx\nimport { defineRoleGuard } from '@gulibs/vgrove-client';\n\n// 在 _configs.tsx 中使用\nexport default defineConfigs({\n    guard: defineRoleGuard(\n        ['admin', 'manager'],                  // 允许的角色列表\n        '/forbidden',                          // 可选：重定向路径\n        {                                      // 可选：额外选项\n            publicPaths: ['/help'],\n            enableLoopDetection: true\n        }\n    )\n});\n```\n\n#### 3. 权限守卫 - definePermissionGuard\n\n**基于具体权限的访问控制**\n\n```tsx\nimport { definePermissionGuard } from '@gulibs/vgrove-client';\n\n// 在 _configs.tsx 中使用\nexport default defineConfigs({\n    guard: definePermissionGuard(\n        ['user.write', 'user.update'],         // 所需权限列表\n        '/no-permission',                      // 可选：重定向路径\n        {                                      // 可选：额外选项\n            enableLoopDetection: true\n        }\n    )\n});\n```\n\n#### 4. 守卫工厂函数\n\n**快速创建常用的守卫**\n\n```tsx\nimport { defineCustomGuard } from '@gulibs/vgrove-client';\n\n// VIP 用户守卫\nexport const vipGuard = defineCustomGuard(\n    'vip-only',\n    (context) => context.user?.membership === 'VIP',\n    '/upgrade'\n);\n\n// 时间限制守卫\nexport const workingHoursGuard = defineCustomGuard(\n    'working-hours',\n    (context) => {\n        const hour = new Date().getHours();\n        return hour >= 9 && hour <= 18;\n    },\n    '/not-available'\n);\n\n// 地理位置守卫\nexport const regionGuard = defineCustomGuard(\n    'region-check',\n    async (context) => {\n        const region = await getUserRegion();\n        return ['US', 'CA', 'EU'].includes(region);\n    },\n    '/region-blocked'\n);\n```\n\n### 📁 使用方式对比\n\n#### 方式 1：单文件方式\n\n```\nsrc/pages/\n├── dashboard/\n│   ├── auth.ts          # 认证配置\n│   ├── guard.ts         # 守卫配置\n│   └── page.tsx         # 页面组件\n└── admin/\n    ├── auth.ts\n    ├── guard.ts\n    └── page.tsx\n```\n\n**优点：** 功能分离清晰，易于理解\n**缺点：** 文件较多，配置分散\n\n#### 方式 2：配置文件方式 （推荐）\n\n```\nsrc/pages/\n├── dashboard/\n│   ├── _configs.tsx     # 集中配置\n│   └── page.tsx         # 页面组件\n└── admin/\n    ├── _configs.tsx\n    └── page.tsx\n```\n\n**优点：** 配置集中，支持自定义组件，功能完整\n**缺点：** 单文件可能较大\n\n**完整示例：**\n\n```tsx\n// pages/dashboard/_configs.tsx\nimport { defineConfigs, defineSmartAuth, defineGuard } from '@gulibs/vgrove-client';\nimport React from 'react';\n\n// 自定义错误组件\nconst AccessDeniedError = ({ error, retry }: { error?: Error; retry?: () => void }) => (\n    <div className=\"access-denied\">\n        <h2>访问被拒绝</h2>\n        <p>{error?.message}</p>\n        <button onClick={retry}>重试</button>\n        <button onClick={() => window.location.href = '/login'}>\n            重新登录\n        </button>\n    </div>\n);\n\n// 自定义加载组件\nconst AuthLoading = ({ progress }: { progress?: number }) => (\n    <div className=\"auth-loading\">\n        <div className=\"spinner\" />\n        <p>验证身份中...</p>\n        {progress && <div>进度: {Math.round(progress * 100)}%</div>}\n    </div>\n);\n\nexport default defineConfigs({\n    // 智能认证配置\n    auth: defineSmartAuth({\n        name: 'dashboard-smart-auth',\n        redirectTo: '/login',\n        errorMessage: '请先登录访问仪表板',\n        enableLoopDetection: true,\n        excludeCommonPublicPaths: true,\n        check: (context) => {\n            const token = localStorage.getItem('auth_token');\n            console.log('Dashboard auth check:', {\n                path: context.path,\n                hasToken: !!token\n            });\n            return !!token;\n        }\n    }),\n\n    // 守卫配置\n    guard: defineGuard({\n        name: 'dashboard-access',\n        type: 'custom',\n        redirectTo: '/upgrade',\n        errorMessage: '需要升级账户以访问仪表板',\n        condition: (context) => {\n            // 检查用户类型\n            if (!context.user) return false;\n\n            // 免费用户不能访问仪表板\n            return context.user.plan !== 'free';\n        }\n    }),\n\n    // 自定义错误组件\n    error: AccessDeniedError,\n\n    // 自定义加载组件\n    loading: AuthLoading\n});\n```\n\n### 🚨 常见错误和解决方案\n\n#### 错误 1：循环重定向死循环\n\n**症状：** 页面不断重定向，浏览器显示\"重定向次数过多\"\n\n**原因：** 登录页面设置了认证保护\n\n```tsx\n// ❌ 错误示例\n// pages/login/auth.ts\nexport default defineAuth({\n    redirectTo: '/login',      // 重定向到自己\n    check: () => false         // 总是返回false\n});\n```\n\n**解决方案：**\n\n```tsx\n// ✅ 方案1：删除登录页面的认证文件\n// 直接删除 pages/login/auth.ts\n\n// ✅ 方案2：使用智能认证自动处理\nexport default defineSmartAuth({\n    redirectTo: '/login',\n    enableLoopDetection: true,    // 自动检测并阻止循环\n    excludeCommonPublicPaths: true, // 自动排除登录页面\n    check: (context) => !!context.user\n});\n```\n\n#### 错误 2：守卫执行顺序混乱\n\n**症状：** 权限检查在认证检查之前执行\n\n```tsx\n// ❌ 错误：在需要认证的页面只设置守卫\nexport default defineConfigs({\n    // 缺少 auth 配置\n    guard: defineGuard({\n        condition: (context) => context.user?.role === 'admin' // 用户可能为 null\n    })\n});\n\n// ✅ 正确：先认证，再守卫\nexport default defineConfigs({\n    // 先进行身份认证\n    auth: defineSmartAuth({\n        redirectTo: '/login',\n        check: (context) => !!context.user\n    }),\n\n    // 认证通过后检查权限\n    guard: defineGuard({\n        condition: (context) => {\n            // 此时 context.user 已经确保存在\n            return context.user?.role === 'admin';\n        },\n        redirectTo: '/forbidden'\n    })\n});\n```\n\n### 🎯 最佳实践\n\n#### 1. 分层认证架构\n\n```\nsrc/pages/\n├── auth.ts                    # 根目录：基础身份认证\n├── public/                    # 公开页面（无需认证）\n│   ├── login/\n│   ├── register/\n│   └── about/\n├── user/                      # 用户区域\n│   ├── _configs.tsx          # 用户认证 + 基础权限\n│   ├── dashboard/\n│   └── profile/\n├── admin/                     # 管理员区域\n│   ├── _configs.tsx          # 管理员认证 + 管理权限\n│   ├── users/\n│   └── settings/\n└── premium/                   # 高级功能区域\n    ├── _configs.tsx          # 会员认证 + 会员权限\n    └── analytics/\n```\n\n#### 2. 认证状态管理\n\n```tsx\n// utils/auth.ts - 集中的认证工具\nexport class AuthManager {\n    private static instance: AuthManager;\n\n    static getInstance(): AuthManager {\n        if (!AuthManager.instance) {\n            AuthManager.instance = new AuthManager();\n        }\n        return AuthManager.instance;\n    }\n\n    // 获取当前用户\n    getCurrentUser(): User | null {\n        try {\n            const userData = localStorage.getItem('user_data');\n            return userData ? JSON.parse(userData) : null;\n        } catch {\n            return null;\n        }\n    }\n\n    // 检查认证状态\n    isAuthenticated(): boolean {\n        const token = localStorage.getItem('auth_token');\n        const user = this.getCurrentUser();\n        return !!(token && user && user.status === 'active');\n    }\n\n    // 检查角色\n    hasRole(roles: string[]): boolean {\n        const user = this.getCurrentUser();\n        return user?.roles?.some(role => roles.includes(role)) || false;\n    }\n\n    // 检查权限\n    hasPermission(permissions: string[]): boolean {\n        const user = this.getCurrentUser();\n        return permissions.every(permission =>\n            user?.permissions?.includes(permission)\n        );\n    }\n\n    // 登出\n    logout(): void {\n        localStorage.removeItem('auth_token');\n        localStorage.removeItem('user_data');\n        localStorage.removeItem('refresh_token');\n\n        // 触发自定义事件通知其他组件\n        window.dispatchEvent(new CustomEvent('authStateChange'));\n\n        // 重定向到登录页\n        window.location.href = '/public/login';\n    }\n}\n\n// 在认证配置中使用\nexport default defineSmartAuth({\n    check: (context) => {\n        const authManager = AuthManager.getInstance();\n        return authManager.isAuthenticated();\n    }\n});\n```\n\n#### 3. 调试和开发工具\n\n```tsx\n// utils/authDebug.ts - 认证调试工具\nexport class AuthDebugger {\n    private static enabled = process.env.NODE_ENV === 'development';\n\n    static log(message: string, data?: any): void {\n        if (!this.enabled) return;\n\n        console.group(`🔐 Auth Debug: ${message}`);\n        if (data) {\n            console.log('Data:', data);\n        }\n        console.log('Timestamp:', new Date().toISOString());\n        console.groupEnd();\n    }\n\n    static logAuthCheck(\n        checkName: string,\n        result: boolean,\n        context: any,\n        reason?: string\n    ): void {\n        if (!this.enabled) return;\n\n        const emoji = result ? '✅' : '❌';\n        console.group(`${emoji} Auth Check: ${checkName}`);\n        console.log('Result:', result);\n        console.log('Context:', {\n            path: context.path,\n            user: context.user ? 'Present' : 'Missing',\n            roles: context.roles,\n            permissions: context.permissions\n        });\n        if (reason) console.log('Reason:', reason);\n        console.groupEnd();\n    }\n}\n\n// 在认证配置中使用\nexport default defineSmartAuth({\n    name: 'debug-auth',\n    redirectTo: '/login',\n    check: (context) => {\n        const token = localStorage.getItem('auth_token');\n        const result = !!token;\n\n        AuthDebugger.logAuthCheck(\n            'Token Check',\n            result,\n            context,\n            result ? 'Token found' : 'Token missing'\n        );\n\n        return result;\n    }\n});\n```\n\n### 🔧 调试指南\n\n#### 浏览器控制台调试命令\n\n```javascript\n// 1. 检查当前认证状态\nconsole.log('Auth Token:', localStorage.getItem('auth_token'));\nconsole.log('User Data:', JSON.parse(localStorage.getItem('user_data') || 'null'));\n\n// 2. 模拟登录状态\nlocalStorage.setItem('auth_token', 'debug-token-123');\nlocalStorage.setItem('user_data', JSON.stringify({\n    id: 'debug-user',\n    name: 'Debug User',\n    role: 'admin',\n    status: 'active',\n    permissions: ['read', 'write', 'admin']\n}));\n\n// 3. 清除认证状态\nlocalStorage.removeItem('auth_token');\nlocalStorage.removeItem('user_data');\nlocalStorage.removeItem('refresh_token');\n\n// 4. 检查页面保护状态\nconsole.log('Current Path:', window.location.pathname);\nconsole.log('Should be protected:', !window.location.pathname.includes('/public/'));\n```\n\n### 📝 快速参考\n\n#### 认证类型对比表\n\n| 场景 | 推荐方案 | 配置示例 |\n|------|----------|----------|\n| 简单登录检查 | `defineAuth` | `check: (ctx) => !!ctx.user` |\n| 复杂认证逻辑 | `defineSmartAuth` | `enableLoopDetection: true` |\n| 根目录保护 | `defineRootAuth` | `publicPaths: ['/public/*']` |\n| 角色权限 | `defineRoleGuard` | `['admin', 'manager']` |\n| 具体权限 | `definePermissionGuard` | `['user.read', 'user.write']` |\n| 自定义业务逻辑 | `defineGuard` | `condition: (ctx) => {...}` |\n\n#### 记住这些关键点\n\n- ✅ 认证函数必须返回 `boolean`\n- ✅ 登录页面不要设置认证保护\n- ✅ 使用 `defineSmartAuth` 避免循环重定向\n- ✅ 先设置 `auth` 再设置 `guard`\n- ✅ 异步认证要用 `async/await`\n- ✅ 错误处理要提供用户友好的提示\n\n---\n\n> **💡 提示：** 对于初学者，建议先使用 `defineSmartAuth` 和 `defineRoleGuard`，它们内置了大部分常见错误的处理逻辑。\n\n### 7. 高级国际化 Hooks\n\n```tsx\nimport {\n  useI18nKeyValidator,\n  useI18nNamespace,\n  usePlural,\n  useTranslateLocalized\n} from '@gulibs/vgrove-client';\n\n// 键验证 Hook\nfunction I18nKeyValidator() {\n  const { hasKey, validateKey, getAvailableKeys } = useI18nKeyValidator();\n\n  const checkKey = (key: string) => {\n    if (hasKey(key)) {\n      console.log('键存在:', key);\n    } else {\n      const { suggestions } = validateKey(key);\n      console.log('键不存在，建议:', suggestions);\n    }\n  };\n\n  return (\n    <div>\n      <button onClick={() => checkKey('welcome.title')}>\n        检查键: welcome.title\n      </button>\n      <p>可用键数量: {getAvailableKeys().length}</p>\n    </div>\n  );\n}\n\n// 命名空间 Hook\nfunction NamespaceExample() {\n  const { t, resources, exists } = useI18nNamespace('user');\n\n  if (!exists) return <div>命名空间不存在</div>;\n\n  return (\n    <div>\n      <h1>{t('profile.title')}</h1> {/* 相当于 user.profile.title */}\n      <p>{t('profile.description')}</p>\n    </div>\n  );\n}\n\n// 复数形式 Hook\nfunction PluralExample() {\n  const plural = usePlural();\n  const [count, setCount] = useState(1);\n\n  return (\n    <div>\n      <p>{plural('message.count', count, { count })}</p>\n      <button onClick={() => setCount(count + 1)}>增加</button>\n    </div>\n  );\n}\n\n// 本地化对象翻译 Hook\nfunction LocalizedTranslation() {\n  const translateLocalized = useTranslateLocalized();\n\n  const localizedTitle = { localizedId: 'page.title' };\n\n  return (\n    <div>\n      <h1>{translateLocalized(localizedTitle)}</h1>\n    </div>\n  );\n}\n```\n\n### 8. I18nMessage 组件\n\n```tsx\nimport { I18nMessage, I18nTitle, I18nText, I18nSwitch } from '@gulibs/vgrove-client';\n\n// 基础用法\nfunction MyComponent() {\n  return (\n    <div>\n      <I18nMessage id=\"welcome.title\" defaultValue=\"欢迎\" />\n      <I18nMessage\n        id=\"welcome.description\"\n        params={{ name: '用户' }}\n        defaultValue=\"你好，{name}！\"\n      />\n    </div>\n  );\n}\n\n// 使用便捷组件\nfunction PageContent() {\n  return (\n    <div>\n      <I18nTitle id=\"page.title\" level={1} />\n      <I18nText id=\"page.subtitle\" className=\"text-gray-600\" />\n\n      {/* 支持不同格式 */}\n      <I18nMessage\n        id=\"rich.content\"\n        format=\"markdown\"\n        defaultValue=\"**粗体** 和 *斜体* 文本\"\n      />\n\n      {/* 组件标记格式 */}\n      <I18nMessage\n        id=\"component.text\"\n        format=\"component\"\n        defaultValue=\"点击 {strong}这里{/strong} 查看更多\"\n      />\n    </div>\n  );\n}\n\n// 语言切换器\nfunction LanguageSwitcher() {\n  return (\n    <I18nSwitch\n      variant=\"select\"\n      locales={[\n        { code: 'zh', label: '中文' },\n        { code: 'en', label: 'English' }\n      ]}\n      onLocaleChange={(locale) => console.log('语言切换到:', locale)}\n    />\n  );\n}\n```\n\n### 9. 性能优化工具详细示例\n\n```tsx\nimport {\n  PerformanceCache,\n  BatchProcessor,\n  PerformanceTracker,\n  MemoryOptimizer,\n  Debouncer,\n  measureAsync\n} from '@gulibs/vgrove-client';\n\n// 缓存管理\nfunction CacheExample() {\n  const cache = useMemo(() => new PerformanceCache<string, any>(100), []);\n\n  const fetchWithCache = useCallback(async (key: string) => {\n    if (cache.has(key)) {\n      return cache.get(key);\n    }\n\n    const data = await fetch(`/api/data/${key}`).then(res => res.json());\n    cache.set(key, data);\n    return data;\n  }, [cache]);\n\n  return (\n    <div>\n      <button onClick={() => fetchWithCache('user-1')}>\n        获取用户数据（带缓存）\n      </button>\n      <p>缓存大小: {cache.size()}</p>\n    </div>\n  );\n}\n\n// 批处理示例\nfunction BatchProcessingExample() {\n  const batchProcessor = useMemo(() => new BatchProcessor(5, 100), []);\n\n  const processBatchData = useCallback(async () => {\n    const userIds = ['1', '2', '3', '4', '5', '6', '7', '8'];\n\n    const users = await batchProcessor.processBatch(\n      userIds,\n      async (id) => {\n        const response = await fetch(`/api/users/${id}`);\n        return response.json();\n      }\n    );\n\n    console.log('批处理完成:', users);\n  }, [batchProcessor]);\n\n  return (\n    <button onClick={processBatchData}>\n      批量处理用户数据\n    </button>\n  );\n}\n\n// 性能追踪示例\nfunction PerformanceExample() {\n  const tracker = useMemo(() => new PerformanceTracker(), []);\n\n  const expensiveOperation = useCallback(async () => {\n    tracker.startTimer('expensive-operation');\n\n    // 模拟耗时操作\n    await new Promise(resolve => setTimeout(resolve, 1000));\n\n    const duration = tracker.endTimer('expensive-operation');\n    console.log(`操作耗时: ${duration}ms`);\n\n    tracker.increment('operation-count');\n    console.log(`操作次数: ${tracker.getCounter('operation-count')}`);\n  }, [tracker]);\n\n  return (\n    <div>\n      <button onClick={expensiveOperation}>\n        执行耗时操作\n      </button>\n      <button onClick={() => console.log(tracker.getStats())}>\n        查看性能统计\n      </button>\n    </div>\n  );\n}\n\n// 防抖示例\nfunction DebounceExample() {\n  const debouncer = useMemo(() => new Debouncer(), []);\n  const [searchTerm, setSearchTerm] = useState('');\n\n  const handleSearch = useCallback((term: string) => {\n    debouncer.debounce('search', () => {\n      console.log('搜索:', term);\n      // 执行实际搜索\n    }, 500);\n  }, [debouncer]);\n\n  return (\n    <input\n      value={searchTerm}\n      onChange={(e) => {\n        setSearchTerm(e.target.value);\n        handleSearch(e.target.value);\n      }}\n      placeholder=\"搜索（防抖 500ms）\"\n    />\n  );\n}\n\n// 内存优化示例\nfunction MemoryOptimizationExample() {\n  useEffect(() => {\n    const memoryOptimizer = MemoryOptimizer.getInstance();\n\n    // 添加清理任务\n    memoryOptimizer.addCleanupTask(() => {\n      console.log('清理缓存数据');\n      // 清理各种缓存\n    });\n\n    // 启动定期清理（5分钟）\n    memoryOptimizer.startPeriodicCleanup(5 * 60 * 1000);\n\n    return () => {\n      // 组件卸载时进行清理\n      memoryOptimizer.runCleanup();\n    };\n  }, []);\n\n  return <div>内存优化已启用</div>;\n}\n\n// 异步性能测量\nfunction AsyncMeasurementExample() {\n  const measureApiCall = useCallback(async () => {\n    const result = await measureAsync('api-call', async () => {\n      const response = await fetch('/api/data');\n      return response.json();\n    });\n\n    console.log('API 调用结果:', result);\n    console.log('耗时:', result.duration, 'ms');\n  }, []);\n\n  return (\n    <button onClick={measureApiCall}>\n      测量 API 调用性能\n    </button>\n  );\n}\n```\n\n### 10. 工具函数详细示例\n\n```tsx\nimport {\n  normalizePath,\n  parseQuery,\n  buildQuery,\n  updateQuery,\n  debounce,\n  throttle,\n  deepMerge,\n  deepClone,\n  unique,\n  groupBy,\n  isEmpty,\n  safeParseInt,\n  toCamelCase,\n  toKebabCase,\n  capitalize,\n  truncate,\n  safely,\n  safelyAsync\n} from '@gulibs/vgrove-client';\n\nfunction UtilityFunctionsExample() {\n  // 路径处理\n  const normalizedPath = normalizePath('//api//users//profile//');\n  console.log(normalizedPath); // '/api/users/profile'\n\n  // 查询参数处理\n  const queryParams = parseQuery('?name=john&age=25&active=true');\n  console.log(queryParams); // { name: 'john', age: '25', active: 'true' }\n\n  const queryString = buildQuery({ name: 'jane', age: 30, active: false });\n  console.log(queryString); // 'name=jane&age=30&active=false'\n\n  const updatedUrl = updateQuery('/users', { page: 2, size: 10 });\n  console.log(updatedUrl); // '/users?page=2&size=10'\n\n  // 防抖和节流\n  const debouncedSearch = debounce((term: string) => {\n    console.log('搜索:', term);\n  }, 500);\n\n  const throttledScroll = throttle(() => {\n    console.log('滚动事件');\n  }, 100);\n\n  // 对象操作\n  const original = { a: 1, b: { c: 2 } };\n  const cloned = deepClone(original);\n  const merged = deepMerge({ x: 1 }, { y: 2, z: { a: 3 } });\n\n  // 数组操作\n  const items = [1, 2, 2, 3, 4, 4, 5];\n  const uniqueItems = unique(items);\n  console.log(uniqueItems); // [1, 2, 3, 4, 5]\n\n  const users = [\n    { name: 'Alice', role: 'admin' },\n    { name: 'Bob', role: 'user' },\n    { name: 'Charlie', role: 'admin' }\n  ];\n  const groupedUsers = groupBy(users, user => user.role);\n  console.log(groupedUsers);\n  // { admin: [Alice, Charlie], user: [Bob] }\n\n  // 字符串操作\n  const camelCase = toCamelCase('hello-world-example');\n  console.log(camelCase); // 'helloWorldExample'\n\n  const kebabCase = toKebabCase('HelloWorldExample');\n  console.log(kebabCase); // 'hello-world-example'\n\n  const capitalized = capitalize('hello world');\n  console.log(capitalized); // 'Hello world'\n\n  const truncated = truncate('This is a very long text', 10);\n  console.log(truncated); // 'This is a...'\n\n  // 安全操作\n  const safeValue = safely(() => JSON.parse('invalid json'), null);\n  console.log(safeValue); // null\n\n  const safeAsyncValue = safelyAsync(\n    async () => {\n      const response = await fetch('/api/data');\n      return response.json();\n    },\n    { error: 'Failed to load' }\n  );\n\n  // 类型检查和转换\n  const emptyCheck = isEmpty(''); // true\n  const numberValue = safeParseInt('123abc', 0); // 123\n\n  return (\n    <div>\n      <h3>工具函数示例</h3>\n      <p>标准化路径: {normalizedPath}</p>\n      <p>解析查询: {JSON.stringify(queryParams)}</p>\n      <p>构建查询: {queryString}</p>\n      <p>唯一数组: {JSON.stringify(uniqueItems)}</p>\n      <input\n        onChange={(e) => debouncedSearch(e.target.value)}\n        placeholder=\"防抖搜索\"\n      />\n      <div\n        onScroll={throttledScroll}\n        style={{ height: '100px', overflow: 'scroll' }}\n      >\n        滚动内容...\n      </div>\n    </div>\n  );\n}\n```\n\n### 11. 国际化路由集成\n\n```tsx\nimport {\n  createI18nClient,\n  createI18nRouteLoader,\n  createI18nHandle,\n  useRouteI18n\n} from '@gulibs/vgrove-client';\n\n// 创建国际化客户端\nconst i18nClient = createI18nClient({\n  defaultLocale: 'zh',\n  supportedLocales: ['zh', 'en'],\n  basePath: '/api/locales'\n});\n\n// 创建路由加载器\nconst i18nLoader = createI18nRouteLoader(i18nClient, {\n  preloadAll: false,\n  delay: 0\n});\n\n// 路由配置\nexport const route = {\n  path: '/products/:id',\n  loader: i18nLoader,\n  handle: createI18nHandle({\n    meta: {\n      title: 'products.detail.title',\n      description: 'products.detail.description'\n    },\n    pageExtras: (context) => {\n      const { params, query } = context;\n\n      return (\n        <div>\n          <ProductBreadcrumb productId={params.id} />\n          {query.variant && <VariantSelector variant={query.variant} />}\n        </div>\n      );\n    }\n  })\n};\n\n// 组件使用\nfunction ProductDetailPage() {\n  const {\n    locale,\n    isLoaded,\n    getLocalizedUrl,\n    waitForI18n\n  } = useRouteI18n();\n\n  const { t } = useI18n();\n  const { meta, pageExtras } = useHandle();\n\n  // 等待国际化资源加载\n  useEffect(() => {\n    waitForI18n().then(() => {\n      console.log('国际化资源加载完成');\n    });\n  }, [waitForI18n]);\n\n  if (!isLoaded) {\n    return <div>Loading translations...</div>;\n  }\n\n  return (\n    <div>\n      <h1>{t('products.detail.title')}</h1>\n      {/* 动态生成的页面额外内容 */}\n      {pageExtras}\n      {/* 语言切换按钮 */}\n      <button onClick={() => window.location.href = getLocalizedUrl('en')}>\n        English\n      </button>\n    </div>\n  );\n}\n```\n\n### 12. 页面配置和 Hooks\n\n```tsx\nimport {\n  useHandle,\n  defineHandle,\n  usePageMeta,\n  useBreadcrumbs,\n  useDocumentTitle\n} from '@gulibs/vgrove-client';\n\n// 定义页面处理配置\nexport const handle = defineHandle({\n  meta: {\n    title: 'page.title',\n    description: '页面描述'\n  },\n  breadcrumbs: {\n    href: '/current-page',\n    children: '当前页面'\n  },\n  // pageExtras 可以是静态内容或函数\n  pageExtras: (context) => {\n    // 可以访问路由上下文信息\n    const { path, params, query, matches, handle } = context;\n\n    return (\n      <div>\n        <p>当前路径: {path}</p>\n        <p>路由参数: {JSON.stringify(params)}</p>\n        <p>查询参数: {JSON.stringify(query)}</p>\n        <p>匹配的路由数量: {matches.length}</p>\n        {params.id && <p>商品ID: {params.id}</p>}\n        {query.tab && <p>当前标签: {query.tab}</p>}\n      </div>\n    );\n  }\n});\n\nfunction MyPage() {\n  // 获取页面配置\n  const { meta, breadcrumbs, pageExtras } = useHandle();\n\n  return (\n    <div>\n      <h1>{meta?.title}</h1>\n      {/* 渲染动态生成的额外内容 */}\n      {pageExtras}\n      {/* 页面内容 */}\n    </div>\n  );\n}\n\n// 使用页面元数据 Hook\nfunction PageWithMeta() {\n  const meta = usePageMeta(handle, { enableI18n: true });\n  const updateTitle = useDocumentTitle(handle, 'My App', { enableI18n: true });\n\n  useEffect(() => {\n    updateTitle(); // 设置文档标题\n  }, [updateTitle]);\n\n  return (\n    <div>\n      <h1>{meta?.title}</h1>\n      <p>{meta?.description}</p>\n    </div>\n  );\n}\n\n// 使用面包屑 Hook\nfunction PageWithBreadcrumbs() {\n  const breadcrumbs = useBreadcrumbs(handle, {\n    enableI18n: true,\n    includeMatches: true\n  });\n\n  return (\n    <div>\n      <nav>\n        {breadcrumbs.map((breadcrumb, index) => (\n          <span key={index}>\n            {index > 0 && ' > '}\n            <a href={breadcrumb.href}>{breadcrumb.children}</a>\n          </span>\n        ))}\n      </nav>\n      {/* 页面内容 */}\n    </div>\n  );\n}\n```\n\n### 13. 综合应用示例\n\n```tsx\nimport {\n  RouteProtectionWrapper,\n  I18nProvider,\n  useUser,\n  useI18n,\n  I18nMessage,\n  createI18nClient,\n  defineAuth,\n  defineGuard,\n  PerformanceCache,\n  useStorage\n} from '@gulibs/vgrove-client';\n\n// 创建国际化客户端\nconst i18nClient = createI18nClient({\n  defaultLocale: 'zh',\n  supportedLocales: ['zh', 'en'],\n  persistence: { enabled: true },\n  detectBrowserLanguage: true\n});\n\n// 创建缓存\nconst appCache = new PerformanceCache<string, any>(200);\n\n// 定义认证守卫\nconst authGuard = defineAuth({\n  redirectTo: '/login',\n  errorMessage: 'auth.required'\n});\n\n// 定义VIP守卫\nconst vipGuard = defineGuard({\n  name: 'vip-only',\n  condition: (context) => context.user?.membership === 'VIP',\n  redirectTo: '/upgrade',\n  errorMessage: 'vip.required'\n});\n\n// 主应用组件\nfunction App() {\n  return (\n    <I18nProvider client={i18nClient}>\n      <AppContent />\n    </I18nProvider>\n  );\n}\n\nfunction AppContent() {\n  const { isAuthenticated, user } = useUser({\n    storagePrefix: 'myapp',\n    autoRefreshInterval: 15 * 60 * 1000,\n    loginApi: async (credentials) => {\n      const response = await fetch('/api/auth/login', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application/json' },\n        body: JSON.stringify(credentials)\n      });\n      return response.json();\n    }\n  });\n\n  const { locale, setLocale } = useI18n();\n  const [userPreferences, setUserPreferences] = useStorage('user_prefs', {\n    theme: 'light',\n    notifications: true\n  });\n\n  return (\n    <div>\n      {/* 顶部导航 */}\n      <header>\n        <I18nMessage id=\"app.title\" defaultValue=\"我的应用\" />\n        {isAuthenticated && (\n          <span>\n            <I18nMessage\n              id=\"welcome.user\"\n              params={{ name: user?.name }}\n              defaultValue=\"欢迎, {name}!\"\n            />\n          </span>\n        )}\n        <button onClick={() => setLocale(locale === 'zh' ? 'en' : 'zh')}>\n          {locale === 'zh' ? 'English' : '中文'}\n        </button>\n      </header>\n\n      {/* 主内容区 */}\n      <main>\n        {/* 公开页面 */}\n        <PublicPage />\n\n        {/* 需要认证的页面 */}\n        <RouteProtectionWrapper\n          guards={[authGuard]}\n          loadingElement={\n            <I18nMessage id=\"loading.auth\" defaultValue=\"验证中...\" />\n          }\n          component={<ProtectedPage />}\n        />\n\n        {/* 需要VIP权限的页面 */}\n        <RouteProtectionWrapper\n          guards={[authGuard, vipGuard]}\n          loadingElement={\n            <I18nMessage id=\"loading.vip\" defaultValue=\"检查VIP权限...\" />\n          }\n          component={<VIPPage />}\n        />\n      </main>\n\n      {/* 用户偏好设置 */}\n      <aside>\n        <h3>\n          <I18nMessage id=\"settings.title\" defaultValue=\"设置\" />\n        </h3>\n        <label>\n          <input\n            type=\"checkbox\"\n            checked={userPreferences.notifications}\n            onChange={(e) =>\n              setUserPreferences({\n                ...userPreferences,\n                notifications: e.target.checked\n              })\n            }\n          />\n          <I18nMessage id=\"settings.notifications\" defaultValue=\"启用通知\" />\n        </label>\n      </aside>\n    </div>\n  );\n}\n\n// 公开页面\nfunction PublicPage() {\n  return (\n    <div>\n      <I18nMessage id=\"public.welcome\" defaultValue=\"欢迎访问我们的网站\" />\n    </div>\n  );\n}\n\n// 受保护页面\nfunction ProtectedPage() {\n  const { user } = useUser();\n\n  return (\n    <div>\n      <I18nMessage\n        id=\"protected.welcome\"\n        params={{ name: user?.name }}\n        defaultValue=\"欢迎进入会员区域, {name}!\"\n      />\n    </div>\n  );\n}\n\n// VIP页面\nfunction VIPPage() {\n  const { user } = useUser();\n\n  return (\n    <div>\n      <I18nMessage\n        id=\"vip.welcome\"\n        params={{ name: user?.name }}\n        defaultValue=\"欢迎尊贵的VIP用户, {name}!\"\n      />\n    </div>\n  );\n}\n```\n\n## 🎯 高级用法\n\n### 中间件系统\n\n```tsx\nimport { defineMiddleware } from '@gulibs/vgrove-client';\n\nconst loggingMiddleware = defineMiddleware({\n  name: 'logging',\n  priority: 10,\n  handler: async (context, next) => {\n    console.log(`访问页面: ${context.path}`);\n    const start = Date.now();\n\n    await next();\n\n    const duration = Date.now() - start;\n    console.log(`页面处理耗时: ${duration}ms`);\n  }\n});\n\n// 全局性能监控中间件\nconst performanceMiddleware = defineMiddleware({\n  name: 'performance',\n  priority: 1,\n  handler: async (context, next) => {\n    if (window.performance) {\n      const mark = `route-${context.path}-start`;\n      performance.mark(mark);\n    }\n\n    await next();\n\n    if (window.performance) {\n      const endMark = `route-${context.path}-end`;\n      performance.mark(endMark);\n      performance.measure(`route-${context.path}`, `route-${context.path}-start`, endMark);\n    }\n  }\n});\n\n<RouteProtectionWrapper\n  middlewares={[performanceMiddleware, loggingMiddleware]}\n  component={<YourComponent />}\n/>\n```\n\n### 国际化资源加载器\n\n```tsx\nimport { createI18nLoader, ViteI18nLoader, createI18nClient } from '@gulibs/vgrove-client';\n\n// 1. 基础资源加载器\nconst loader = createI18nLoader({\n  basePath: '/api/locales',\n  extensions: ['.json'],\n  cache: true,\n  debug: true\n});\n\n// 2. 自定义获取函数\nconst customLoader = createI18nLoader({\n  fetchResources: async (locale, path) => {\n    const response = await fetch(`/api/i18n/${locale}`);\n    if (!response.ok) {\n      throw new Error(`Failed to load locale: ${response.statusText}`);\n    }\n    return response.json();\n  },\n  onLoad: (locale, data) => {\n    console.log(`✅ Loaded ${locale}:`, Object.keys(data));\n  },\n  onError: (locale, error) => {\n    console.error(`❌ Failed to load ${locale}:`, error);\n  }\n});\n\n// 3. 高级加载器实例\nconst advancedLoader = new ViteI18nLoader({\n  basePath: '/locales',\n  cache: true,\n  cacheTime: 30 * 60 * 1000, // 30分钟\n  debug: process.env.NODE_ENV === 'development'\n});\n\n// 4. 与国际化客户端集成\nconst i18nClient = createI18nClient({\n  defaultLocale: 'zh',\n  supportedLocales: ['zh', 'en'],\n  basePath: '/api/locales',\n  cache: true,\n  detectBrowserLanguage: true,\n  persistence: {\n    enabled: true,\n    key: 'user_locale',\n    storage: 'localStorage'\n  }\n});\n\n// 5. 手动预加载资源\nawait loader.preloadResources(['zh', 'en']);\n\n// 6. 检查加载器状态\nconsole.log('Available keys:', loader.getAvailableKeys?.());\nconsole.log('Has key \"welcome\":', loader.hasKey?.('welcome'));\nconsole.log('Using virtual module:', advancedLoader.isUsingVirtualModule?.());\n```\n\n### 复杂路由守卫\n\n```tsx\n// 角色守卫\nconst roleGuard = defineAuth({\n  roles: ['admin', 'moderator'],\n  redirectTo: '/login',\n  errorMessage: '需要以下角色之一: admin, moderator'\n});\n\n// 权限守卫\nconst permissionGuard = defineGuard({\n  name: 'permission-user:read,user:write',\n  condition: (context) => {\n    return context.user?.permissions?.includes('user:read') &&\n           context.user?.permissions?.includes('user:write');\n  },\n  redirectTo: '/forbidden',\n  errorMessage: '需要以下权限: user:read, user:write'\n});\n\n// 自定义复合守卫\nconst complexGuard = defineGuard({\n  name: 'complex-auth',\n  condition: async (context) => {\n    // 检查用户是否已认证\n    if (!context.user) return false;\n\n    // 检查时间限制\n    const now = new Date();\n    const workingHours = now.getHours() >= 9 && now.getHours() <= 18;\n\n    // 检查用户类型和时间\n    return context.user.type === 'employee' ? workingHours : true;\n  },\n  redirectTo: '/access-denied',\n  errorMessage: '当前时间段无法访问'\n});\n\n// 环境守卫\nconst environmentGuard = defineGuard({\n  name: 'environment',\n  condition: () => {\n    return process.env.NODE_ENV === 'development' ||\n           localStorage.getItem('feature_flag_enabled') === 'true';\n  },\n  redirectTo: '/not-available'\n});\n```\n\n### 性能优化工具\n\n```tsx\nimport {\n  PerformanceCache,\n  BatchProcessor,\n  PerformanceTracker,\n  MemoryOptimizer\n} from '@gulibs/vgrove-client';\n\n// 创建缓存实例\nconst cache = new PerformanceCache<string, any>(100);\n\n// 批处理器\nconst processor = new BatchProcessor(5, 100);\n\n// 性能追踪\nconst tracker = new PerformanceTracker();\n\n// 内存优化器\nconst memoryOptimizer = MemoryOptimizer.getInstance();\n\nfunction useOptimizedData() {\n  useEffect(() => {\n    // 启动性能追踪\n    tracker.startTimer('data-loading');\n\n    // 批处理数据加载\n    const loadData = async () => {\n      const items = ['user', 'settings', 'permissions'];\n      const results = await processor.processBatch(\n        items,\n        async (item) => {\n          const cached = cache.get(item);\n          if (cached) return cached;\n\n          const data = await fetchData(item);\n          cache.set(item, data);\n          return data;\n        }\n      );\n\n      return results;\n    };\n\n    loadData().finally(() => {\n      const duration = tracker.endTimer('data-loading');\n      console.log(`数据加载耗时: ${duration}ms`);\n    });\n\n    // 注册清理任务\n    memoryOptimizer.addCleanupTask(() => {\n      cache.clear();\n    });\n\n    return () => {\n      memoryOptimizer.runCleanup();\n    };\n  }, []);\n}\n```\n\n### 工具函数和实用程序\n\n```tsx\nimport {\n  normalizePath,\n  parseQuery,\n  buildQuery,\n  debounce,\n  throttle,\n  deepMerge,\n  safeParseInt,\n  isEmpty,\n  measureTime\n} from '@gulibs/vgrove-client';\n\n// 路径处理\nconst normalizedPath = normalizePath('//path//to//page//');\n// => '/path/to/page'\n\n// 查询参数处理\nconst params = parseQuery('?name=john&age=25&active=true');\n// => { name: 'john', age: '25', active: 'true' }\n\nconst query = buildQuery({ name: 'jane', age: 30 });\n// => 'name=jane&age=30'\n\n// 防抖和节流\nconst debouncedSearch = debounce((query: string) => {\n  searchAPI(query);\n}, 500);\n\nconst throttledScroll = throttle(() => {\n  updateScrollPosition();\n}, 100);\n\n// 性能测量\nconst timedFunction = measureTime(expensiveFunction, 'expensive-operation');\n\n// 数据处理\nconst config = deepMerge(defaultConfig, userConfig);\nconst count = safeParseInt(userInput, 0);\nconst hasData = !isEmpty(responseData);\n```\n\n## 📖 API 参考\n\n### 路由保护\n\n#### `RouteProtectionWrapper`\n\n路由保护包装器组件。\n\n**Props:**\n\n```typescript\ninterface RouteProtectionWrapperProps {\n  guards?: (AuthOptions | GuardOptions | Function)[];\n  middlewares?: (MiddlewareOptions | Function)[];\n  loadingElement?: React.ReactNode;\n  component: React.ReactNode;\n  children?: React.ReactNode;\n}\n```\n\n#### `defineAuth(options: AuthOptions)`\n\n定义认证守卫。\n\n```typescript\ninterface AuthOptions {\n  name?: string;\n  redirectTo?: string;\n  errorMessage?: string;\n  check?: (context: AuthContext) => boolean | Promise<boolean>;\n  roles?: string[];\n  permissions?: string[];\n}\n```\n\n#### `defineGuard(options: GuardOptions)`\n\n定义自定义守卫。\n\n```typescript\ninterface GuardOptions {\n  name?: string;\n  type?: 'auth' | 'role' | 'permission' | 'custom';\n  redirectTo?: string;\n  errorMessage?: string;\n  condition: (context: GuardContext) => boolean | Promise<boolean>;\n}\n```\n\n#### `defineMiddleware(options: MiddlewareOptions)`\n\n定义中间件。\n\n```typescript\ninterface MiddlewareOptions {\n  name?: string;\n  priority?: number;\n  devOnly?: boolean;\n  handler: (context: MiddlewareContext, next: () => Promise<void> | void) => Promise<void> | void;\n}\n```\n\n### 状态管理\n\n#### `useUser<TUser, TCredentials>(options: UseUserOptions)`\n\n用户状态管理 Hook。\n\n**返回值：**\n\n```typescript\ninterface AuthState<TUser> & AuthActions<TUser, TCredentials> {\n  user: TUser | null;\n  token: string | null;\n  refreshToken: string | null;\n  isAuthenticated: boolean;\n  isLoading: boolean;\n  error: string | null;\n  login: (credentials: TCredentials) => Promise<void>;\n  logout: () => void;\n  refreshUser: () => Promise<void>;\n  refreshTokenAction: () => Promise<void>;\n  updateUser: (userData: Partial<TUser>) => void;\n  setToken: (token: string) => void;\n  setRefreshToken: (refreshToken: string) => void;\n  clearError: () => void;\n}\n```\n\n#### `useStorage<T>(key: string, defaultValue: T, options?)`\n\n基于 @gulibs/react-storage 的通用存储 Hook，支持过期时间。\n\n```typescript\ninterface UseStorageOptions {\n  /** 存储类型 */\n  storage?: 'local' | 'session';\n  /** 过期时间（毫秒），0 表示永不过期 */\n  maxAge?: number;\n  /** 是否自动清理过期数据 */\n  autoCleanup?: boolean;\n  /** 清理间隔（毫秒），默认 5 分钟 */\n  cleanupInterval?: number;\n}\n\nfunction useStorage<T>(\n  key: string,\n  defaultValue: T,\n  options?: UseStorageOptions\n): [\n  T,                                    // 当前值\n  (value: T) => void,                   // 设置值函数\n  () => void,                           // 移除值函数\n  (value: T, maxAge?: number) => void,  // 设置值并指定过期时间\n  () => boolean,                        // 检查是否过期\n  () => void                            // 清理过期数据\n]\n```\n\n**返回值：**\n- `[0]` - 当前值\n- `[1]` - 设置值函数（使用默认过期时间）\n- `[2]` - 移除值函数\n- `[3]` - 设置值并指定过期时间函数\n- `[4]` - 检查是否过期函数\n- `[5]` - 手动清理过期数据函数\n\n**示例：**\n\n```typescript\n// 基础使用\nconst [userPrefs, setUserPrefs, removeUserPrefs] = useStorage('user_prefs', {\n  theme: 'light'\n}, { storage: 'local' });\n\n// 带过期时间（1小时）\nconst [cache, setCache, removeCache, setCacheWithExpiry, isCacheExpired, cleanupCache] = useStorage(\n  'api_cache',\n  {},\n  {\n    storage: 'local',\n    maxAge: 60 * 60 * 1000, // 1小时过期\n    autoCleanup: true       // 自动清理\n  }\n);\n\n// 使用指定过期时间设置数据\nsetCacheWithExpiry({ data: 'temp' }, 5 * 60 * 1000); // 5分钟后过期\n\n// 检查数据是否过期\nif (isCacheExpired()) {\n  console.log('数据已过期');\n}\n\n// 手动清理过期数据\ncleanupCache();\n```\n\n#### `useUserState<TUser>(storagePrefix?, useSessionStorage?)`\n\n只读用户状态 Hook。\n\n```typescript\nfunction useUserState<TUser = any>(\n  storagePrefix?: string,\n  useSessionStorage?: boolean\n): {\n  user: TUser | null;\n  token: string | null;\n  refreshToken: string | null;\n  isAuthenticated: boolean;\n}\n```\n\n#### `useAuthToken(storagePrefix?, useSessionStorage?)`\n\nToken 管理 Hook。\n\n```typescript\nfunction useAuthToken(\n  storagePrefix?: string,\n  useSessionStorage?: boolean\n): {\n  token: string | null;\n  refreshToken: string | null;\n  setToken: (token: string) => void;\n  setRefreshToken: (refreshToken: string) => void;\n  clearToken: () => void;\n  clearRefreshToken: () => void;\n  clearAllTokens: () => void;\n  hasToken: boolean;\n  hasRefreshToken: boolean;\n}\n```\n\n### 国际化\n\n#### `I18nProvider`\n\n国际化提供者组件。\n\n```typescript\ninterface I18nProviderProps {\n  children: ReactNode;\n  client?: I18nClient | I18nClientConfig;\n  defaultLocale?: string;\n  locales?: string[];\n  loadResources?: (locale: string) => Promise<Record<string, any>>;\n  resources?: Record<string, Record<string, any>>;\n}\n```\n\n#### `I18nMessage`\n\n国际化消息组件，修复了刷新时找不到翻译内容的问题。\n\n```typescript\ninterface I18nMessageProps<Keys extends string = string> {\n  /** 翻译键 - 类型安全，与 @gulibs/vgrove-i18n 生成的类型兼容 */\n  id: LocalizedType<Keys>;\n  /** 插值参数 */\n  params?: Record<string, string | number | boolean>;\n  /** 默认值（当翻译不存在时使用） */\n  defaultValue?: string;\n  /** 渲染格式 */\n  format?: 'text' | 'html' | 'markdown' | 'component';\n  /** 自定义渲染函数 */\n  render?: (text: string) => ReactNode;\n  /** 包装元素 */\n  as?: keyof React.JSX.IntrinsicElements | React.ComponentType<Record<string, unknown>>;\n  /** 自定义类名 */\n  className?: string;\n}\n```\n\n#### `I18nSwitch`\n\n语言切换组件。\n\n```typescript\ninterface I18nSwitchProps {\n  /** 自定义类名 */\n  className?: string;\n  /** 语言选项，如果不提供则使用可用语言列表 */\n  locales?: { code: string; label: string }[];\n  /** 是否显示语言标签 */\n  showLabels?: boolean;\n  /** 切换按钮样式 */\n  variant?: 'select' | 'button' | 'tabs';\n  /** 语言切换回调 */\n  onLocaleChange?: (locale: string) => void;\n}\n```\n\n#### 便捷组件\n\n```typescript\n// 国际化标题\nfunction I18nTitle<Keys extends string = string>(\n  props: Omit<I18nMessageProps<Keys>, 'as' | 'format'> & { level?: 1 | 2 | 3 | 4 | 5 | 6 }\n): JSX.Element\n\n// 国际化段落\nfunction I18nParagraph<Keys extends string = string>(\n  props: Omit<I18nMessageProps<Keys>, 'as' | 'format'>\n): JSX.Element\n\n// 国际化文本\nfunction I18nText<Keys extends string = string>(\n  props: Omit<I18nMessageProps<Keys>, 'as' | 'format'>\n): JSX.Element\n```\n\n#### 调试和优化 Hooks\n\n```typescript\n// I18nMessage 调试 Hook\nfunction useI18nMessageDebug<Keys extends string = string>(): {\n  isReady: boolean;\n  locale: string;\n  debugInfo: {\n    totalKeys: number;\n    isUsingVirtualModule: boolean;\n    hasKeys: boolean;\n  };\n  validateKey: (key: string) => {\n    exists: boolean;\n    ready: boolean;\n    locale: string;\n  };\n}\n\n// I18nMessage 性能优化 Hook\nfunction useI18nMessageMemo<Keys extends string = string>(\n  id: LocalizedType<Keys>,\n  params?: Record<string, string | number | boolean>,\n  defaultValue?: string\n): string\n```\n\n#### `useI18n()`\n\n国际化 Hook。\n\n```typescript\ninterface I18nContextType {\n  locale: string;\n  setLocale: (locale: string) => Promise<void>;\n  t: (key: string, params?: Record<string, any>) => string;\n  isReady: boolean;\n  availableLocales: string[];\n  availableKeys: string[];\n  hasKey: (key: string) => boolean;\n  getNamespaceResources: (namespace: string) => Record<string, any> | undefined;\n  isUsingVirtualModule: boolean;\n}\n```\n\n#### `createI18nClient(config: I18nClientConfig)`\n\n创建国际化客户端。\n\n```typescript\ninterface I18nClientConfig extends I18nLoaderConfig {\n  defaultLocale: string;\n  supportedLocales?: string[];\n  resources?: Record<string, Record<string, any>>;\n  fallbackToDefault?: boolean;\n  detectBrowserLanguage?: boolean;\n  persistence?: {\n    enabled?: boolean;\n    key?: string;\n    storage?: 'localStorage' | 'sessionStorage';\n  };\n  interpolation?: {\n    prefix?: string;\n    suffix?: string;\n    escape?: (value: any) => string;\n  };\n}\n```\n\n#### `createI18nLoader(config: I18nLoaderConfig)`\n\n创建资源加载器。\n\n```typescript\ninterface I18nLoaderConfig {\n  basePath?: string;\n  extensions?: string[];\n  localePattern?: 'directory' | 'filename';\n  defaultLocale?: string;\n  cacheTime?: number;\n  cache?: boolean;\n  debug?: boolean;\n  onLoad?: (locale: string, data: Record<string, any>) => void;\n  onError?: (locale: string, error: Error) => void;\n  fetchResources?: (locale: string, path: string) => Promise<Record<string, any>>;\n}\n```\n\n### 页面配置\n\n#### `usePageConfig<Keys>(handle?, options?)`\n\n获取页面配置。\n\n#### `useI18nPageConfig<Keys>(handle?)`\n\n获取国际化页面配置。\n\n#### `useHandle<Keys>()`\n\n获取当前页面的 handle。\n\n#### `PageExtrasContext` 接口\n\npageExtras 函数的上下文参数接口。\n\n```typescript\ninterface PageExtrasContext<Keys extends string = string> {\n  /** 当前路由路径 */\n  path: string;\n  /** 路由参数 */\n  params: Record<string, string>;\n  /** 查询参数 */\n  query: Record<string, string>;\n  /** 当前路由匹配信息 */\n  matches: UIMatch[];\n  /** 当前页面的 handle */\n  handle: PageHandle<Keys>;\n}\n```\n\n**使用示例：**\n\n```typescript\nexport const handle = defineHandle({\n  meta: {\n    title: 'products.title'\n  },\n  pageExtras: (context: PageExtrasContext) => {\n    const { path, params, query, matches, handle } = context;\n\n    // 根据路由参数动态生成内容\n    if (params.productId) {\n      return <ProductBanner productId={params.productId} />;\n    }\n\n    // 根据查询参数显示不同内容\n    if (query.mode === 'debug') {\n      return (\n        <DebugInfo\n          path={path}\n          matches={matches.length}\n          handleMeta={handle.meta}\n        />\n      );\n    }\n\n    return null;\n  }\n});\n```\n\n#### `useBreadcrumbs<Keys>(handle?, options?)`\n\n获取面包屑配置。\n\n#### `useDocumentTitle<Keys>(handle?, suffix?, options?)`\n\n设置文档标题。\n\n### 国际化路由集成\n\n#### `createI18nRouteLoader(i18nClient, options?)`\n\n创建国际化路由加载器，用于在路由加载时预加载所需的翻译资源。\n\n```typescript\nfunction createI18nRouteLoader(\n  i18nClient: I18nClient,\n  options?: I18nRouteLoaderOptions\n): (args: LoaderFunctionArgs) => Promise<RouteI18nData>\n\ninterface I18nRouteLoaderOptions {\n  /** 要预加载的语言列表，默认使用当前语言 */\n  locales?: string[];\n  /** 是否预加载所有支持的语言 */\n  preloadAll?: boolean;\n  /** 延迟加载时间（毫秒），用于演示加载状态 */\n  delay?: number;\n}\n```\n\n#### `useRouteI18n()`\n\n在组件中使用路由国际化数据的 Hook。\n\n```typescript\nfunction useRouteI18n(): {\n  /** 当前语言 */\n  locale: string;\n  /** 国际化资源是否已加载 */\n  isLoaded: boolean;\n  /** 获取当前路径的语言参数 */\n  getLocaleFromPath: () => string | null;\n  /** 切换语言的 URL 生成器 */\n  getLocalizedUrl: (newLocale: string) => string;\n  /** 等待国际化资源加载完成 */\n  waitForI18n: () => Promise<void>;\n}\n```\n\n#### `createI18nHandle<Keys>(baseHandle?)`\n\n创建支持国际化的页面处理配置。\n\n```typescript\nfunction createI18nHandle<Keys extends string = string>(\n  baseHandle?: Partial<PageHandle<Keys>>\n): I18nHandle<Keys>\n\ninterface I18nHandle<Keys extends string = string> extends PageHandle<Keys> {\n  /** 标记为需要国际化处理 */\n  i18n: boolean;\n  /** 国际化元数据处理器 */\n  getI18nMeta?: (t: (key: string) => string) => {\n    title?: string;\n    description?: string;\n    [key: string]: any;\n  };\n}\n```\n\n#### `enhanceRoutesWithI18n(routes, i18nClient, options?)`\n\n为现有路由配置添加国际化支持。\n\n```typescript\nfunction enhanceRoutesWithI18n(\n  routes: any[],\n  i18nClient: I18nClient,\n  options?: EnhanceRoutesI18nOptions\n): any[]\n\ninterface EnhanceRoutesI18nOptions {\n  /** 是否为所有路由添加国际化 loader */\n  autoAddLoader?: boolean;\n}\n```\n\n### 性能优化\n\n#### `PerformanceCache<K, V>`\n\n高性能 LRU 缓存。\n\n```typescript\nclass PerformanceCache<K, V> {\n  constructor(maxSize: number = 100);\n  get(key: K): V | undefined;\n  set(key: K, value: V): void;\n  has(key: K): boolean;\n  delete(key: K): boolean;\n  clear(): void;\n  size(): number;\n}\n```\n\n#### `BatchProcessor`\n\n批处理器。\n\n```typescript\nclass BatchProcessor {\n  constructor(batchSize: number = 10, delay: number = 50);\n  async processBatch<T, R>(\n    items: T[],\n    processor: (item: T) => Promise<R>\n  ): Promise<R[]>;\n}\n```\n\n#### `PerformanceTracker`\n\n性能追踪器。\n\n```typescript\nclass PerformanceTracker {\n  startTimer(name: string): void;\n  endTimer(name: string): number;\n  increment(name: string): void;\n  getCounter(name: string): number;\n  reset(): void;\n  getStats(): Record<string, any>;\n}\n```\n\n#### `MemoryOptimizer`\n\n内存优化器（单例模式）。\n\n```typescript\nclass MemoryOptimizer {\n  static getInstance(): MemoryOptimizer;\n  addCleanupTask(task: () => void): void;\n  startPeriodicCleanup(intervalMs?: number): void;\n  runCleanup(): void;\n  dispose(): void;\n}\n```\n\n#### `Debouncer`\n\n防抖器。\n\n```typescript\nclass Debouncer {\n  debounce(key: string, fn: () => void, delay: number): void;\n  cancel(key: string): void;\n  cancelAll(): void;\n}\n```\n\n### 工具函数 API\n\n#### 路径和 URL 工具\n\n```typescript\n// 路径标准化\nfunction normalizePath(path: string): string;\n\n// 路径连接\nfunction joinPath(...segments: string[]): string;\n\n// 路径匹配\nfunction matchPath(pattern: string, path: string): boolean;\n\n// 参数提取\nfunction extractParams(pattern: string, path: string): Record<string, string>;\n\n// 查询参数解析\nfunction parseQuery(search: string): Record<string, string>;\n\n// 查询参数构建\nfunction buildQuery(params: Record<string, any>): string;\n\n// URL 查询参数更新\nfunction updateQuery(url: string, params: Record<string, any>): string;\n```\n\n#### 数据处理工具\n\n```typescript\n// 深拷贝\nfunction deepClone<T>(obj: T): T;\n\n// 深度合并\nfunction deepMerge<T extends Record<string, any>>(target: T, source: Partial<T>): T;\n\n// 数组去重\nfunction unique<T>(array: T[], keyFn?: (item: T) => any): T[];\n\n// 数组分组\nfunction groupBy<T>(array: T[], keyFn: (item: T) => string): Record<string, T[]>;\n\n// 数组映射为数组\nfunction mapToArray<K, V>(map: Map<K, V>): V[];\n```\n\n#### 字符串工具\n\n```typescript\n// 转换为驼峰命名\nfunction toCamelCase(str: string): string;\n\n// 转换为短横线命名\nfunction toKebabCase(str: string): string;\n\n// 首字母大写\nfunction capitalize(str: string): string;\n\n// 字符串截断\nfunction truncate(str: string, length: number, suffix?: string): string;\n```\n\n#### 类型检查和安全工具\n\n```typescript\n// 空值检查\nfunction isEmpty(value: any): boolean;\n\n// 函数检查\nfunction isFunction(value: any): value is Function;\n\n// Promise 检查\nfunction isPromise(value: any): value is Promise<any>;\n\n// 记录对象检查\nfunction isRecord(obj: any): obj is Record<string, any>;\n\n// 安全整数解析\nfunction safeParseInt(value: any, defaultValue?: number): number;\n\n// 安全执行\nfunction safely<T>(fn: () => T, fallback: T): T;\n\n// 安全异步执行\nfunction safelyAsync<T>(fn: () => Promise<T>, fallback: T): Promise<T>;\n```\n\n#### 性能和缓存工具\n\n```typescript\n// 防抖函数\nfunction debounce<T extends (...args: any[]) => void>(\n  fn: T,\n  delay: number\n): T;\n\n// 节流函数\nfunction throttle<T extends (...args: any[]) => void>(\n  fn: T,\n  delay: number\n): T;\n\n// 性能测量\nfunction measureTime<T extends (...args: any[]) => any>(\n  fn: T,\n  name?: string\n): T;\n\n// 异步性能测量\nfunction measureAsync<T>(\n  name: string,\n  fn: () => Promise<T>\n): Promise<T & { duration: number }>;\n\n// 简单缓存类\nclass SimpleCache<K, V> {\n  constructor(maxAge?: number, maxSize?: number);\n  set(key: K, value: V): void;\n  get(key: K): V | undefined;\n  has(key: K): boolean;\n  delete(key: K): boolean;\n  clear(): void;\n}\n```\n\n## 🏆 最佳实践\n\n### 1. I18nMessage 组件最佳实践\n\n```tsx\n\n// ✅ 推荐：总是提供默认值\nfunction GoodExample() {\n  return (\n    <I18nMessage\n      id=\"welcome.title\"\n      defaultValue=\"欢迎\"\n      params={{ name: '用户' }}\n    />\n  );\n}\n\n// ❌ 避免：不提供默认值\nfunction BadExample() {\n  return <I18nMessage id=\"welcome.title\" />;\n}\n\n// ✅ 推荐：使用调试工具进行开发\nfunction DebugExample() {\n  const { validateKey, debugInfo } = useI18nMessageDebug();\n\n  useEffect(() => {\n    // 开发环境下验证翻译键\n    if (process.env.NODE_ENV === 'development') {\n      const validation = validateKey('welcome.title');\n      if (!validation.exists) {\n        console.warn('翻译键不存在：', 'welcome.title');\n      }\n    }\n  }, [validateKey]);\n\n  return (\n    <div>\n      <I18nMessage id=\"welcome.title\" defaultValue=\"欢迎\" />\n      {process.env.NODE_ENV === 'development' && (\n        <pre>{JSON.stringify(debugInfo, null, 2)}</pre>\n      )}\n    </div>\n  );\n}\n\n// ✅ 推荐：使用性能优化 Hook 处理复杂逻辑\nfunction OptimizedExample() {\n  const translatedText = useI18nMessageMemo(\n    'complex.message',\n    { count: 100, type: 'items' },\n    '默认消息'\n  );\n\n  return (\n    <div>\n      <span>{translatedText}</span>\n      {/* 避免在渲染中直接使用 t 函数进行复杂计算 */}\n    </div>\n  );\n}\n\n// ✅ 推荐：组合使用便捷组件\nfunction PageLayout() {\n  return (\n    <div>\n      <I18nTitle id=\"page.title\" level={1} />\n      <I18nText id=\"page.subtitle\" className=\"text-gray-600\" />\n\n      <I18nMessage\n        id=\"rich.content\"\n        format=\"markdown\"\n        defaultValue=\"支持 **粗体** 和 *斜体*\"\n      />\n\n      <I18nSwitch\n        variant=\"tabs\"\n        onLocaleChange={(locale) => {\n          // 可选：语言切换时的额外逻辑\n          console.log(`语言切换到: ${locale}`);\n        }}\n      />\n    </div>\n  );\n}\n\n```\n\n### 2. 国际化路由集成最佳实践\n\n```tsx\n\n// i18n/routes.ts\nimport { createI18nClient, createI18nRouteLoader, createI18nHandle } from '@gulibs/vgrove-client';\n\n// 创建国际化客户端\nconst i18nClient = createI18nClient({\n  defaultLocale: 'zh',\n  supportedLocales: ['zh', 'en'],\n  basePath: '/api/locales',\n  cache: true\n});\n\n// 创建国际化路由加载器\nexport const i18nLoader = createI18nRouteLoader(i18nClient, {\n  preloadAll: false,\n  delay: 0 // 生产环境不需要延迟\n});\n\n// 路由配置\nexport const routes = [\n  {\n    path: '/dashboard',\n    loader: i18nLoader,\n    handle: createI18nHandle({\n      meta: {\n        title: 'dashboard.title',\n        description: 'dashboard.description'\n      },\n      pageExtras: (context) => {\n        return <DashboardBreadcrumb path={context.path} />;\n      }\n    })\n  }\n];\n\n// 组件中使用\nfunction DashboardPage() {\n  const { locale, isLoaded, getLocalizedUrl } = useRouteI18n();\n  const { t } = useI18n();\n\n  if (!isLoaded) {\n    return <div>加载中。..</div>;\n  }\n\n  return (\n    <div>\n      <h1>{t('dashboard.title')}</h1>\n      <button onClick={() => window.location.href = getLocalizedUrl('en')}>\n        Switch to English\n      </button>\n    </div>\n  );\n}\n\n```\n\n### 3. 路由守卫组织\n\n```tsx\n\n// guards/index.ts\nexport const authGuard = defineAuth({\n  redirectTo: '/login',\n  errorMessage: '请先登录'\n});\n\nexport const adminGuard = defineAuth({\n  roles: ['admin'],\n  redirectTo: '/forbidden',\n  errorMessage: '需要管理员权限'\n});\n\nexport const premiumGuard = defineGuard({\n  name: 'premium',\n  condition: (context) => context.user?.isPremium,\n  redirectTo: '/upgrade',\n  errorMessage: '需要升级到高级版'\n});\n\n// guards/factory.ts\nexport function createRoleGuard(roles: string[], redirectTo = '/forbidden') {\n  return defineAuth({\n    roles,\n    redirectTo,\n    errorMessage: `需要以下角色之一: ${roles.join(', ')}`\n  });\n}\n\nexport function createPermissionGuard(permissions: string[], redirectTo = '/forbidden') {\n  return defineGuard({\n    name: `permission-${permissions.join('-')}`,\n    condition: (context) => {\n      return permissions.every(permission =>\n        context.user?.permissions?.includes(permission)\n      );\n    },\n    redirectTo,\n    errorMessage: `需要以下权限: ${permissions.join(', ')}`","readmeFilename":"README.md"}