{"_id":"@firtoz/router-toolkit","_rev":"44-b6370ca40fe6e2c76a8e8c085fe39568","name":"@firtoz/router-toolkit","dist-tags":{"latest":"9.1.0"},"versions":{"0.1.1":{"name":"@firtoz/router-toolkit","version":"0.1.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":"Firtina Ozbalikchi <firtoz@github.com>","license":"MIT","_id":"@firtoz/router-toolkit@0.1.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"be43aee3aac6a2f57eadc1c6a20fc1b8e75aebff","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.1.1.tgz","fileCount":9,"integrity":"sha512-IMAt54a8F2wKB0VDN+Ina5kwYxNOEU9avUy6xMaxGbTZbpzkjP1IkaiAvcYMfJ9AwFWEClxlj17MdUDROT7iDg==","signatures":[{"sig":"MEQCIEtE2arsO+kbXz4PpyOR21YrUlbMLgV0hmWbKe/C/4aXAiAW67XNUYRvRgnmG68g1A8LwkcGSIJvTbJajyDvq1YQvw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16311},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","shasum":"be43aee3aac6a2f57eadc1c6a20fc1b8e75aebff","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":{"types":"./src/*","import":"./src/*","require":"./src/*"}},"scripts":{"lint":"eslint src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"_integrity":"sha512-IMAt54a8F2wKB0VDN+Ina5kwYxNOEU9avUy6xMaxGbTZbpzkjP1IkaiAvcYMfJ9AwFWEClxlj17MdUDROT7iDg==","repository":{"url":"https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"22.6.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.1.1_1751662539067_0.8227390273775415","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@firtoz/router-toolkit","version":"0.1.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":"Firtina Ozbalikchi <firtoz@github.com>","license":"MIT","_id":"@firtoz/router-toolkit@0.1.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"5661c4cfb2a23732384477718802278df05787fa","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.1.2.tgz","fileCount":8,"integrity":"sha512-HBhceQGfk1WMkbNq0DZvR23yQr2Y9qfSMzUG/5211FG6SxIHBAxg+aL41tTwY/jQgiaaIvXbP7DHe497RSza2w==","signatures":[{"sig":"MEUCIQDow+4WYLCbvPfbw3342/cEmYBFP0JcYJtRs5P8QpQXngIgZO3X5qPes8GfjOqt4lxiy9pvk+djAt4ycQPA43RecHU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15989},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","shasum":"5661c4cfb2a23732384477718802278df05787fa","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":{"types":"./src/*","import":"./src/*","require":"./src/*"}},"scripts":{"lint":"eslint src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"_integrity":"sha512-HBhceQGfk1WMkbNq0DZvR23yQr2Y9qfSMzUG/5211FG6SxIHBAxg+aL41tTwY/jQgiaaIvXbP7DHe497RSza2w==","repository":{"url":"https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"22.6.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.1.2_1751662950801_0.3055638880303295","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@firtoz/router-toolkit","version":"0.1.3","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":"Firtina Ozbalikchi <firtoz@github.com>","license":"MIT","_id":"@firtoz/router-toolkit@0.1.3","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"0fbe6ae11eec2f625e4e86dc315c84d87f5149ad","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.1.3.tgz","fileCount":8,"integrity":"sha512-1SkPJHhT2ocLzTeohZfF3sSsNHjKCzRaWaCO/v1ez7j+I54nyEoECrj+/O3lxSKuAAHEtUvhUJnZ0GP8EYSlIQ==","signatures":[{"sig":"MEQCIF/890eFyeTIQoHMEc5YzEOJowXWK9VYZpRUsGwgNvvzAiAktlxL1lvX/5p5rZhrJSKEf9R8H2uqXEfrDxwPU+E2Ww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16067},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","shasum":"0fbe6ae11eec2f625e4e86dc315c84d87f5149ad","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":{"types":["./src/**/*.ts","./src/**/*.tsx"],"import":["./src/**/*.ts","./src/**/*.tsx"],"require":["./src/**/*.ts","./src/**/*.tsx"]}},"scripts":{"lint":"eslint src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"_integrity":"sha512-1SkPJHhT2ocLzTeohZfF3sSsNHjKCzRaWaCO/v1ez7j+I54nyEoECrj+/O3lxSKuAAHEtUvhUJnZ0GP8EYSlIQ==","repository":{"url":"https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"22.6.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.1.3_1751663185713_0.7376194053675718","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@firtoz/router-toolkit","version":"0.1.4","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":"Firtina Ozbalikchi <firtoz@github.com>","license":"MIT","_id":"@firtoz/router-toolkit@0.1.4","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"05bb22e10903711c17701c2ed6ba6f01fcb7b67f","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.1.4.tgz","fileCount":8,"integrity":"sha512-QFhD0AhxeMXp5sjwzZQFFh+m65hk+PhzRaWGIFIpTSxxuPRc80SFNwGJ/7skG80MRGRdEdwEQtRaYVDB7/xWxQ==","signatures":[{"sig":"MEUCIQCUZVQDaugfnY9YawxSwtqGPro/2064A1QACCjw2O6sJwIgCCXjMlG3V7aIyNhkRoAIHp11a/DOCEEwRbYd4xXYhlw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15931},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","shasum":"05bb22e10903711c17701c2ed6ba6f01fcb7b67f","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"scripts":{"lint":"eslint src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"_integrity":"sha512-QFhD0AhxeMXp5sjwzZQFFh+m65hk+PhzRaWGIFIpTSxxuPRc80SFNwGJ/7skG80MRGRdEdwEQtRaYVDB7/xWxQ==","repository":{"url":"https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"22.6.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.1.4_1751663958303_0.8674495507673281","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@firtoz/router-toolkit","version":"0.1.5","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@0.1.5","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"c17190abde0a9e7eb1c7680b0478e8279161d4ce","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.1.5.tgz","fileCount":9,"integrity":"sha512-9roDfG/s2bxPxLH9KldneaNgf/OSXqqnWMbsE/I5+nlPomqOVrEAK8P5+J1uVMd2cpxILb2JTf0jMfGRmy3DQA==","signatures":[{"sig":"MEQCIHX6UGOYSkhz5oetnqt1VkVo1ZONc/bh55CUx+FFHVy3AiBGEYAi0tBWk59yj9nAl2cOxKPk08p7ieaC2u92sUEhjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16112},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"87eb26c10828baa6dbdae917e4382e3e11bdba5b","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","release":"changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3","@biomejs/biome":"^2.0.6","@changesets/cli":"^2.29.5"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.1.5_1751756747949_0.2939943859419505","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@firtoz/router-toolkit","version":"0.2.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@0.2.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"4a48195f783162367d1a20c76d5a5aa06c27efd7","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.2.0.tgz","fileCount":14,"integrity":"sha512-BTwD6AucJM7BpqL2kB8G9gLa07sv6mAeNp0xMHkzKQjluv59B0B0KJHQDjfqfaw5UCGSfv99GzSOFN5hfHLq4A==","signatures":[{"sig":"MEUCIQDFSDMVd2Cz9c8F51zuPjmJsyhwF/4gMfRIovg2fpyjVAIgH3uYVkcYHX0yHYvlk10FXZAYHXDaDmXxnK787y5wOKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17324},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"1a9df8a41c61df8f0efb134924e36f96fc1ecd82","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","release":"changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3","@biomejs/biome":"^2.0.6","@changesets/cli":"^2.29.5"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.2.0_1751822389495_0.6280817577913347","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@firtoz/router-toolkit","version":"0.2.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@0.2.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"acf7231d6e0fa2fd78d8409359f3f7247b9d67ad","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-0.2.1.tgz","fileCount":14,"integrity":"sha512-WvdC7IvHyYQrav3fDxA1RnN173IZ5R73oTgdvIoghtfr/afplnfiiuAyU+ryMgz6JG2b1VvYPpTfmtQqKYmEyA==","signatures":[{"sig":"MEYCIQCy27j8SHoNE+y5z5MpHxH9Whoy50XX/uw7DEyv0jJZkgIhAP5+Wr5P5PqyLfLFSz9j31gBzspT2EzEW6uX+oI7MDC/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17322},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"aeac339461852a5a638eb2ab3d8387f7de2ceadc","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","release":"changeset publish","version":"changeset version","changeset":"changeset","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","actor":{"name":"firtoz","type":"user","email":"firtina@fastmail.com"},"email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3","@biomejs/biome":"^2.0.6","@changesets/cli":"^2.29.5"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_0.2.1_1751822522571_0.486757093681657","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@firtoz/router-toolkit","version":"1.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"240a50ac5769154ec8794a018da5a932e2ee1df7","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.0.0.tgz","fileCount":14,"integrity":"sha512-Z2PobiOMxgW0yHltKOONa3RE2RdPNKOz9YuOCwoju6q2YmMNb+jG45F9UH2LW20jDVUbO7HnFBn9t2zl2S/R+g==","signatures":[{"sig":"MEQCIFKAxbChumoZ03jn17winksfxFRIToSxR2kauhB9YYF+AiAXBpZfIGMBcbrz9bUG1rjdKbAptqA00v7sxJ+A2rBG+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17564},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"7de4ed306f4d7b0b53ff12752395ec5e46a3b533","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","prepare":"husky","typecheck":"tsc --noEmit","semantic-release":"semantic-release"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git"},"_npmVersion":"10.9.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.25.74","husky":"^9.1.7","react":"^19.1.0","typescript":"^5.8.3","@types/react":"^19.1.8","react-router":"^7.6.3","@biomejs/biome":"^2.0.6","@commitlint/cli":"^19.8.1","semantic-release":"^24.2.7","@semantic-release/git":"^10.0.1","@semantic-release/npm":"^12.0.2","@semantic-release/github":"^11.0.3","@semantic-release/changelog":"^6.0.3","@commitlint/config-conventional":"^19.8.1"},"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.0.0_1752343186308_0.16662562499320566","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@firtoz/router-toolkit","version":"1.1.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.1.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"00f080a4c10ee21b1d43966ef16891912c4b25a0","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.1.0.tgz","fileCount":13,"integrity":"sha512-ZvhzjVV0w0TLzKxtgiDXbfjZ3dJjR6UN1jXSdmXFptCiWQx4xtj+kdJID9G8EVhf/wh0hon2fKyB0W03UESu4A==","signatures":[{"sig":"MEYCIQC1Yx8Rf8ZRSQAQeJYIVGSQsC62ETelmDfm3m2gtxTnigIhAPDDm1V0KmUWEwoU8uVu3R/3bAeVkAb9QvQO9VzewF9d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16410},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"5403c2eb00e3b2157d1e54d5322ce352714ed2b1","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit","semantic-release":"semantic-release -e semantic-release-monorepo"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.9.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^3.25.69","react":"^19.1.0","react-router":"^7.6.3","@firtoz/maybe-error":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.1.0_1752392889825_0.6218857332701391","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@firtoz/router-toolkit","version":"1.1.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.1.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"b4cc5afe0a85ee7dde195f9bc3cc3b5ddb50a9eb","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.1.2.tgz","fileCount":13,"integrity":"sha512-21o2UVGacIeOXX97vuz1IYIiQFoNCJKr77/DcBWnKzrIz09srcKVEV92tZhboVqla+TtatDnh5MUH1zt5cDAPw==","signatures":[{"sig":"MEUCIHVrqSKmz5+sNF/POE2D7/1mDiDrGUxA9tEvE/StPlr5AiEAlAImdpwUxwNGNp+pYoUCDv8/kIrpN3W2UAvztmW2lsk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18268},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"dcc0e2646033f22cfec05bcde729e5442d6fc0db","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.9.3","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.5","react":"^19.1.0","react-router":"^7.6.3","@firtoz/maybe-error":"^1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.1.2_1752426388624_0.9380604760073872","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@firtoz/router-toolkit","version":"1.1.3","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.1.3","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"8d0dce331973be498f6a53780e174f59fe58dea0","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.1.3.tgz","fileCount":13,"integrity":"sha512-XNY4fat+s7Ri94Z2xo34g6+hvp3eGGagrGwwY9e5dbS0JtwFa4ppBMjdRQc9Fg1RvTN90XbEzGvIOSu0s4SZdg==","signatures":[{"sig":"MEYCIQDrlnK6isT9gWD0y6VR/+S8h6NW5yr1TOKsZr4jJIFSswIhAIJC0CUGOwImeJkRZdviIycvNp6wYwrH+6iP061aOpY/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18268},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"c3349e47b5e7a7488c18b24d5264ddc9a66302e0","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.3","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.5","react":"^19.1.0","react-router":"^7.6.3","@firtoz/maybe-error":"^1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.1.3_1752427566218_0.392988571269846","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@firtoz/router-toolkit","version":"1.2.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.2.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"9fa6f67df09116a3e8c3d93627d0e91625523649","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.2.0.tgz","fileCount":13,"integrity":"sha512-YWXm3hl0yglzxfcBaRQaZUknZDeivwFDhKRmZE/h3SFi46+JvMZsVj+Tc59LGKv8+o/QCZDKld/7NDxtPUJ++A==","signatures":[{"sig":"MEYCIQCHdAKBCfLe6cNvM9jt8EOUf3dCCxh+o7lswS06BYwGGwIhALkE7IUHlxnduezHkOi6q7VK+6YlX9bRzJGIgEXiVbPX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18268},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"a249db9a42a44c01f7b29678ce22d3e7baed79fc","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.9","react":"^19.1.0","react-router":"^7.7.1","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.2.0_1753909094232_0.4840701990157523","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@firtoz/router-toolkit","version":"1.3.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.3.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"0ea3d2f12fac96b5c45808317f67185c96115846","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.3.0.tgz","fileCount":13,"integrity":"sha512-SXOkIrKhyHt8EdhU7rG+uVuH12We4AXYXqHh/pgIyEt9rZTe+s4f4nA+ErhcxMfZgzyA+I/xRceSFSIDdso8QQ==","signatures":[{"sig":"MEQCIAKRf9gLnav/U5ddogYx2coHYU+sYgK7Kqn0oK+eeby5AiBBOe2nSwDVO6UbbLeUdmf9rS6ChdthJaMyUe720yTHlQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18269},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"8c1d1fc56e39c2c0c74604df17eb377651923559","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.15","react":"^19.1.1","react-router":"^7.8.0","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.3.0_1754599188391_0.24250231120929122","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@firtoz/router-toolkit","version":"1.3.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@1.3.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"c3842206e015a2673aa4ac0e9d3fcd95e0bf0f40","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-1.3.1.tgz","fileCount":13,"integrity":"sha512-Vc+uzShFyvnetgd/JahiL/ce2rR0IbmAO6iFYytzX+BMiz6cBC1YWbgtBsEeogyI6hpjpn3+eGsdl6msPo+LQA==","signatures":[{"sig":"MEQCIGCrfk6ktG0pF0Oy+gw2FKC1iz2gihX4MBLekIz6fzuFAiBFSRWLwghitE/c5KjUtiobDOt/NBli/pIB9Mh4ZBxveA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41527},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"52198c7bcac7c29c9519e97597ed7d341bdfdf48","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.4","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.15","react":"^19.1.1","react-router":"^7.8.0","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_1.3.1_1755339800200_0.4348756237706577","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@firtoz/router-toolkit","version":"2.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@2.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"711c1bdd5d078569c420a0881667361c68bcdb2b","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-2.0.0.tgz","fileCount":14,"integrity":"sha512-RABy+6d8QHT3mDWiX44CppE2tMKyfgfuPxoeqw5RVbm+PB0v838HEUzfR8y1IAvjKwDatDsfd8b//Rng9uLC5A==","signatures":[{"sig":"MEQCICA7/RVMw94pHd23zvM8kRFzKMPkPIMzjHrG5VCUbiySAiBHf56JDERvUDoRPICJFJVcb3m/b/gKa+pVmerZvFZjrg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53445},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"857b2c39e63e85fa9a14fe3eaa651e292e7c6af0","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod-form-data":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.15","react":"^19.1.1","react-router":"^7.8.0","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_2.0.0_1755380013044_0.6061788765331892","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@firtoz/router-toolkit","version":"2.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@2.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"2764f3ee4fbe9f037b1dc4da4c1e51148df722b4","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-2.0.1.tgz","fileCount":14,"integrity":"sha512-81EG3TK0B4ODw/koA9xqxPXMVS1/A72HwgxkxwTp7yfJ+LiYqgiL3vwfxlk8n04+Edp9iUJalohxZ+z3VNuGmg==","signatures":[{"sig":"MEUCIEIooYDBATrJat5KPRerOFR/TBEiMqIeTHYNJnshZaKAAiEA4oiPatdXWuAL9nhX1j9cGgAFzGnqcIvMu3A32Ibu69A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53524},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"61fffd427075c4c49f0c96e2c31d2368f28bc027","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod-form-data":"^3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.0.15","react":"^19.1.1","react-router":"^7.8.0","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_2.0.1_1755381224421_0.11448399391507857","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@firtoz/router-toolkit","version":"2.1.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@2.1.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"bd1850bdf591bd2c55eca7810879334c68f7fa56","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-2.1.0.tgz","fileCount":14,"integrity":"sha512-W71navSKw5weyVZClOf8SStnw13kZ+Phph9gFNhOmw2kx/8eH2/qasA6peMcJzFp5pgX4rusHg2MuRDGf/0x3w==","signatures":[{"sig":"MEQCIG0u1EeHqrQcScnJVvih3uHWAV4sOvxkiElwF2NN77ZQAiB4NKh2D9KN4kBKe1IiXAJsrlX9SVH0vVNB0Ti9QpqEGA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53493},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"8eb89d4b97c5656490d946ebb98fbca44dafa6f8","scripts":{"lint":"biome check src","test":"echo 'No tests yet'","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"zod":"^4.1.8","react":"^19.1.1","react-router":"^7.9.1","@firtoz/maybe-error":"^1.2.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_2.1.0_1757969709050_0.9584186360946563","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"@firtoz/router-toolkit","version":"3.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/router-toolkit#readme","bugs":{"url":"https://github.com/firtoz/router-toolkit/issues"},"dist":{"shasum":"bd5b4d44032caccf40587b622085f4ff5d21411c","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.0.tgz","fileCount":14,"integrity":"sha512-AempmG2mQABZ3Oe0rFFPwjwcCiTs6Hk8K2bXpJiT501Qvl6RxZCsp8bY8heH88Aa/qJJqWpTywomHCn03hL5jA==","signatures":[{"sig":"MEUCIQChl+acfSZFc/QQ/kVZ0xUtMDyUQ2Zl988aD2tJSAwGTwIgHBN9dFhraZrHZmTS3v6jynDD5Af19lPdGoyNtqhMFS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53698},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"96e68919d9572aeecd8a0678ed7c097ba7bbde1e","scripts":{"lint":"biome lint src --write","test":"bun test","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/router-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.2.23","@types/jsdom":"^27.0.0","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.11","react":"^19.2.0","react-router":"^7.9.3","@firtoz/maybe-error":"^1.3.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.0_1759577557391_0.8805200654220762","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"@firtoz/router-toolkit","version":"3.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"167f5a7040e944f8aefc2cfd9a5a3564e573018c","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.1.tgz","fileCount":14,"integrity":"sha512-9PomJXaqUG9NFnLHE7SvudGXzZcLQPUUM/lywXUmrs5Eod/5LWpJ8ZoIPOAbR9s1Rjra3XhtoIPY8MuvyyK3yw==","signatures":[{"sig":"MEQCIHYMPKDL68X0dpGPLECU+l7KqlJ0Na3JKM0l//2dBe5TAiBj1P4RMZ4sGJ4bar1SE4PgBMnt22arpmKZMbE2grczqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53713},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"d2c566e75bf7f72173b00e13fcd41884b8371c3e","scripts":{"lint":"biome lint src --write","test":"bun test","build":"echo 'No build step - using TypeScript source directly'","format":"biome format src --write","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.2.23","@types/jsdom":"^27.0.0","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.11","react":"^19.2.0","react-router":"^7.9.3","@firtoz/maybe-error":"^1.3.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.1_1759651284511_0.6419485558381783","host":"s3://npm-registry-packages-npm-production"}},"3.0.2":{"name":"@firtoz/router-toolkit","version":"3.0.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"0e89c0d6be937aa46fbb08585a4e4a53700c870b","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.2.tgz","fileCount":14,"integrity":"sha512-q38WPqrGIsg2p+BayKeb7VZW5W/upmU0uUUt1VK4kU3SgNhPwpRgL/vM43rz4Z9pV4myQTYwSJ3TRr/BmKOTQg==","signatures":[{"sig":"MEQCICZKzu0trgLguV8/hn27rGxSIVKBWFOkiHTOPbA2IHIYAiBGCH+FUGfzH1nw52wwXyn+KHKHtTYsp15buFtrN/JE3Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":53643},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"036f61c9f7b43d5c308bbb34de16ebd03bd55847","scripts":{"lint":"biome lint src --write","test":"bun test","format":"biome format src --write","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.2.23","@types/jsdom":"^27.0.0","@types/react":"^19.2.0","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.11","react":"^19.2.0","react-router":"^7.9.3","@firtoz/maybe-error":"^1.3.2"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.2_1759656614251_0.8786583093751705","host":"s3://npm-registry-packages-npm-production"}},"3.0.3":{"name":"@firtoz/router-toolkit","version":"3.0.3","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.3","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"0c1008a5522ec31ed2ceb1b6816d45f25de5991c","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.3.tgz","fileCount":14,"integrity":"sha512-tq28xes502Z0N1jpSp9lydN53LitgyLBqCeVAPacewRsfDvd+8IExEbdBYryciIBQl81nPsEekPBjyXJkqHGxg==","signatures":[{"sig":"MEQCICxAj9pOHFvc6xc/plWhcpB2NLCmqQSvkfj+one5KpYsAiAVEj8k+DzobYKQs86/AdqAtV1CySs0dmaOLK+ORfKe8Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54077},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"4ec9a1c878c8b801c9679d176e5b4081891dc543","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.3.0","@types/jsdom":"^27.0.0","@types/react":"^19.2.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.12","react":"^19.2.0","react-router":"^7.9.4","@firtoz/maybe-error":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.3_1760135426007_0.9793996387080015","host":"s3://npm-registry-packages-npm-production"}},"3.0.4":{"name":"@firtoz/router-toolkit","version":"3.0.4","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.4","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"87eb636f2568d904d93443fc615564f27c82465c","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.4.tgz","fileCount":14,"integrity":"sha512-OfC9GY/Js33Obp9IQ975tVdSXFBoMLv4n2SEzN9Uu//FcCx1Ebk+V+Izz8WHI2G9WBBmmFFBl844rcIWjhR1HQ==","signatures":[{"sig":"MEUCIHdH/VIDC7KuIaif2+RpneF936cHDpn9Nqx7Wy6Ga1dAAiEA8RBd29jlmMOqtFpwIQW5fWGjSamOZ5s7P9Oyd/Q4M70=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54130},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"d8890089a65778592fea21354ebb2509c5e5a3fb","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.3.0","@types/jsdom":"^27.0.0","@types/react":"^19.2.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.12","react":"^19.2.0","react-router":"^7.9.4","@firtoz/maybe-error":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.4_1760473120703_0.7523534690415119","host":"s3://npm-registry-packages-npm-production"}},"3.0.5":{"name":"@firtoz/router-toolkit","version":"3.0.5","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@3.0.5","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"cac7fb2ea31364e9cf9b14f77c471308801b3c84","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-3.0.5.tgz","fileCount":14,"integrity":"sha512-zSSqpVfzrjfQHKrdzSKIVzM7l4h+ScrD6K/z25IIkadha19+WcIWi0oSBAnuGfz9xWtroJSyJqMUElFFhju4ow==","signatures":[{"sig":"MEYCIQC9+8AAXl4H/lh4sB85tmBAYhNKQrjL4AZDKawbh1ZDQgIhAIQ4F23JnPAoZ9iEQcTWgkYVNRFGhOh1HyUCz0K88weg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54157},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"1c492a5c6723fa9cd618be421b610df199c29f9b","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.0","bun-types":"^1.3.0","@types/jsdom":"^27.0.0","@types/react":"^19.2.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.12","react":"^19.2.0","react-router":"^7.9.4","@firtoz/maybe-error":"^1.3.3"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_3.0.5_1760508294111_0.5750006055943955","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@firtoz/router-toolkit","version":"4.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@4.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"6bdd9f3e7ed53efab144331372067044d0524c4e","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-4.0.0.tgz","fileCount":14,"integrity":"sha512-UnGRqHgxiMa+MG686LDDo1CqttdQiR5D3XUPA0oIhviqvWyup9Ql5sTJLpLs877he5FLTbg6xMR/3D2wgF0a3Q==","signatures":[{"sig":"MEQCIEuTHApayguwxsL130KaySbXCYsRSfzPlPU64pDZBua4AiAb23FXweCpKm+jiYF9EwYlAAUAvCwu1d5z9Wclf5k9hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54164},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"7324e9337a8dfed332e33279386baa981583a1d8","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.1","bun-types":"catalog:","@types/jsdom":"^27.0.0","@types/react":"catalog:","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"catalog:","react":"catalog:","react-router":"catalog:","@firtoz/maybe-error":"^1.4.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_4.0.0_1760883655943_0.7277231442713488","host":"s3://npm-registry-packages-npm-production"}},"5.0.0":{"name":"@firtoz/router-toolkit","version":"5.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"bc287ca20e60869a2ac7abd4171a19e97ec1fa99","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.0.0.tgz","fileCount":14,"integrity":"sha512-92lsIf53C+bMKjcg0D7s0XVNn7btjdFizUWqtT4JBeAKv4NQ2xGnd4cOcDaltAOj8nkaG7FGlVQ2JEbkqHmUaw==","signatures":[{"sig":"MEUCIQDEcEBcLxEMLDdXtoh2e7mDaEwwwGXCo7Bphh/qocxxBQIgUMXfYlMQj8eZEujp5fDvoT8ZfjJ5MYY36hHgkharlug=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54157},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"86bcb25302b7f4dd1770c29cef0fbc837c901806","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.1","bun-types":"^1.3.0","@types/jsdom":"^27.0.0","@types/react":"^19.2.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.12","react":"^19.2.0","react-router":"^7.9.4","@firtoz/maybe-error":"^1.5.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.0.0_1760884658133_0.4291195647798145","host":"s3://npm-registry-packages-npm-production"}},"5.0.1":{"name":"@firtoz/router-toolkit","version":"5.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"0242e6467d1f87e13315e68a7aed7f065a75fa18","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.0.1.tgz","fileCount":14,"integrity":"sha512-5F4kruz9FXlOX4tGDAlKbnxa9r0emiPakQfktJ83ClrJxw5jWb7LXhBsuMwJawh/gt5dAu8ag5QBmwIaRDoHoQ==","signatures":[{"sig":"MEUCIE/yUtVGwTct7dY9haDFuWlb6xa+nerktv/dls8l31UYAiEAtTSc1SP+ZFxk9Ijt/q8gqAOIbtBw9wvgYQuixXeWFYo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":54157},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"048d8edd795a6ead5c207c4997db1120112a1a7d","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.0.1","bun-types":"^1.3.0","@types/jsdom":"^27.0.0","@types/react":"^19.2.2","@testing-library/react":"^16.3.0"},"peerDependencies":{"zod":"^4.1.12","react":"^19.2.0","react-router":"^7.9.4","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.0.1_1760910364866_0.088993127279553","host":"s3://npm-registry-packages-npm-production"}},"5.1.0":{"name":"@firtoz/router-toolkit","version":"5.1.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.1.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"43fb065d3f30766568832536201bcaf5a7fd09fe","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.1.0.tgz","fileCount":14,"integrity":"sha512-5E/hqKMieEic/JbnShXy7VcQQ3ZxqMi+cF6fsIM5P+1l+CnsCC8Qjl9oZpCHFeXrrqrqo3hnd54Dinuf7v3WFQ==","signatures":[{"sig":"MEUCIC+PPm8+okN7rg9KjcUjquZz/QbqAq3e3Ga/jWCsw4ZbAiEAgcRWkJUF7+KmE0IpzTs8Dwnf+zUm/Y0s9pxXsksjG1w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73581},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"65bcacdc96b943d970d660f0cb2c2a7578710276","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0","bun-types":"^1.3.6","@types/jsdom":"^27.0.0","@types/react":"^19.2.8","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.5","react":"^19.2.3","react-router":"^7.12.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.1.0_1768599617716_0.7276315912246427","host":"s3://npm-registry-packages-npm-production"}},"5.2.0":{"name":"@firtoz/router-toolkit","version":"5.2.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.2.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"156fee1637470fba145223570857f0f6f260db33","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.2.0.tgz","fileCount":14,"integrity":"sha512-fBal1FUUMZ+UpUc018ymd1llKATUnwyc20r2jczP6jvt32C+5PYHCphjLyWyqADYS6plGkMKElmqQzMhZjxUQQ==","signatures":[{"sig":"MEYCIQDmgW8uZjfMa/1SoiMgvxDqOxt0N85CaOzkyXsF8UQp4QIhAL19vsyLyLdpQxPh7kRry5QZaky77NhcXFjs2olOuOQU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74130},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"9deaa05d4fd5bb5fa5abca6892affa2b01044df5","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0","bun-types":"^1.3.6","@types/jsdom":"^27.0.0","@types/react":"^19.2.8","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.5","react":"^19.2.3","react-router":"^7.12.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.2.0_1768600592447_0.023301978283511326","host":"s3://npm-registry-packages-npm-production"}},"5.3.0":{"name":"@firtoz/router-toolkit","version":"5.3.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.3.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"ea2e8d23e44ba8d6e73dfbcc8784b45348af49dc","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.3.0.tgz","fileCount":14,"integrity":"sha512-048n7DjyeV4GdxMzETfCUEpHOs5tUBb7RUmSV/XY/9NcaKxzlQ5o+n9T+a0WRGZDjicuXD1smNbib3F9vBawPg==","signatures":[{"sig":"MEUCIQDLDwf6TX5UvQFSJqhi8aLgVV+2qpYvm15YX3BRITNmLgIgYOvaZnT1Yr9FTtWL3op5BJf9k4x/Iqy6nXpu04TDYTE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74960},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"de63b62c4de7746303f9222063edbfe293839a97","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.19.6","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^27.4.0","bun-types":"^1.3.6","@types/jsdom":"^27.0.0","@types/react":"^19.2.8","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.5","react":"^19.2.3","react-router":"^7.12.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.3.0_1769085794216_0.14972312228549667","host":"s3://npm-registry-packages-npm-production"}},"5.3.1":{"name":"@firtoz/router-toolkit","version":"5.3.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.3.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"2fd0ed02d78e8617acd43df3190786004acc9cf8","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.3.1.tgz","fileCount":14,"integrity":"sha512-/y5OuU05I34Zt1PtfFjG2flgwBWPCEaNj+zFW164fnBFJORvbqISWcjg1nf6yD+OEkjD8TnZ2MQh30MJ8qQKZg==","signatures":[{"sig":"MEUCIETJaNNVvVnbVrio0CDjeLcdM74k+uBbHcs0xCHvEDqVAiEAyUFZuAdx6PV6XgII5vvjlHJjA9l9EfVOpJqE0Oj5HsI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74961},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"0fada99b7695423caa381841e4bc76e58865e1f0","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.0.0","bun-types":"^1.3.8","@types/jsdom":"^27.0.0","@types/react":"^19.2.13","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.3.1_1770508309367_0.7590979969511238","host":"s3://npm-registry-packages-npm-production"}},"5.4.0":{"name":"@firtoz/router-toolkit","version":"5.4.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.4.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"30bd1e4278ed8fc21a1370ed912144e48247b762","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.4.0.tgz","fileCount":15,"integrity":"sha512-RaAms88aOl8ZzLApkFcVPWH4iNN72VRI/nOOj4obr2zlS0FqHBrhdWB/0ZsZtkRXHaYgCHnyl3i3eWN4GHheLQ==","signatures":[{"sig":"MEYCIQCvAJdavWmnJNqyxVURrAP6gb3FIwvUA6hJNPFI/2t4yAIhAL2pCiGxm7pe4lwQ/bnt0hRSJMp9hdew3W8eFVmtySt9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81617},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"2d358c2059d242f41f8d4f2fd1b6035e95d83b89","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.4.0_1772453827693_0.5321453973862784","host":"s3://npm-registry-packages-npm-production"}},"5.5.0":{"name":"@firtoz/router-toolkit","version":"5.5.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.5.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"e4d32639f5f17650f88acc717cbddd61101aa13e","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.5.0.tgz","fileCount":15,"integrity":"sha512-xadV7PRJBtuqZ4NxV9yxVB8MoRRalf273z5v4tlL5emdyV3bUMi8bKjehictyc+leQrDaNf1TcaYbIxiXcCwqw==","signatures":[{"sig":"MEUCIQC2WYHx6opXqUBDFG9lO1aOj0HVIeFKMt/7llFOZfOOFgIgZRa/eHz5bk5UynKdCGioDG8j3fDkJIOouODKcYePUjQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84236},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"5928864362417266b0f328b94ff1a3872e6a097b","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.5.0_1772455787172_0.25416355536085167","host":"s3://npm-registry-packages-npm-production"}},"5.5.1":{"name":"@firtoz/router-toolkit","version":"5.5.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.5.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"1121c125d156eebf6e1af7bc2785fb9e77ff70ff","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.5.1.tgz","fileCount":15,"integrity":"sha512-ExviXT/Tz2j097M3oGou82hT1srLqlPhWpkB13XfdBWjBpxkao2rs+SpZOcXbdNqNt3yb7QXGo0aYttvH8xQhg==","signatures":[{"sig":"MEYCIQDVKfAzoV5zJ4TWSIFUR6OAi52Uh35Uw3wYITk2BWD3MAIhAL0pSIKcOx2nWSjXIzhO73JirIkpVxlvraiJy2KmvjBq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84645},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"46d076c4e9a2f2154ba136ff3bf72727e6942d15","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.5.1_1772458736232_0.2519201938892841","host":"s3://npm-registry-packages-npm-production"}},"5.5.2":{"name":"@firtoz/router-toolkit","version":"5.5.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@5.5.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"3aecf90967dcccc47b9b7d6dca20c109977f7b9b","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-5.5.2.tgz","fileCount":15,"integrity":"sha512-xO0RH334FtIunpwTmIp8s1auzrK6+IwwdZuloiaNcV67zpiILr4E8pNBJoxPgM4nHXJMq/psMjY9O2bovv3GZg==","signatures":[{"sig":"MEUCIQDEtEVunQUbID77qYfpi+spTs5BzmnwV9IkH3CnIFiYzAIgN/IdKQzxBVoiuTsriZSpoPWsxJqhMvfmml7nSqe42jc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":84880},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"cfa06b0eea970112fe95570cf7c9ce10e29fb04f","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_5.5.2_1773119532204_0.6267243853706477","host":"s3://npm-registry-packages-npm-production"}},"6.0.0":{"name":"@firtoz/router-toolkit","version":"6.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@6.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"b637da2400d83ae22035b995545e2b2e137593eb","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-6.0.0.tgz","fileCount":17,"integrity":"sha512-haLtzC0RxnRISJCmjwvguyvF2FoEBR1tb9b8NGflPEab4vWZ0ySH95QsAePSRHGRj7/TQQLikFOy3ry0CAeRqw==","signatures":[{"sig":"MEUCIQDpW1vucr2QyYQfUK7EQsqzN/KWMmV61u/ryPdJryOewgIgKUBBGgfhfuX2c1mhYC3S7+4HLw1pHsdgQmlgJ8uJksk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":88586},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"f3740a84455de999704d6af6cf595f6c9b508495","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_6.0.0_1773267531942_0.6993016851706357","host":"s3://npm-registry-packages-npm-production"}},"7.0.0":{"name":"@firtoz/router-toolkit","version":"7.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@7.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"991635ec852b75116492cc45596f1f6d2163c729","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-7.0.0.tgz","fileCount":17,"integrity":"sha512-RLxrTgNWbI0VwV2OpY8uuaK6VSjBjT8qzZ7ar3RqRFGo1saVagQtRN5wmhng4xJeA/8Fb5cMSQSJgQZJvukH9A==","signatures":[{"sig":"MEQCIFjO/DNeDX5JpLBywQno+eGK8IiZrDvhudbnqO+CHVpxAiA9ZXDI2ZhfSKhG6m0OOsS55a4XvuJMljR2xpK2Fnhu3g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91927},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"44ab87e880bb7fa55c83eefe7ed4a55c631daa9a","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.0","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_7.0.0_1773440793493_0.9564264028041509","host":"s3://npm-registry-packages-npm-production"}},"7.0.1":{"name":"@firtoz/router-toolkit","version":"7.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@7.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"37890f517ae45b05db6eae377c6a9265e0d7f0e0","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-7.0.1.tgz","fileCount":17,"integrity":"sha512-JOaKEumd7iv69X/naZJXJTqBOGverKX7b2C6T70/VkqvyZxPAvrNjyQj0BXqkVsZZe7+Ak/LLZ40kyWFtuIhXA==","signatures":[{"sig":"MEYCIQCO7GUxKiDYDcdaNFdZ1Y7O3YFigdv+lT5u2NXa/r3H6gIhAPM2S9AjWG5Uxw8/7ZjUzzlOoydsCCZQtKGnjK5xUN1v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91965},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"682774cd2115ff53182c03a99a2096819940c83a","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsc --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^28.1.0","bun-types":"^1.3.9","@types/jsdom":"^27.0.0","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.0","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_7.0.1_1773443476604_0.20855046893536278","host":"s3://npm-registry-packages-npm-production"}},"7.0.2":{"name":"@firtoz/router-toolkit","version":"7.0.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@7.0.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"5da49899f5e206c418960e08c0275c114d61dbd5","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-7.0.2.tgz","fileCount":17,"integrity":"sha512-MYB29YtljNKvkinNsZvpiVmwicYWbno7UCxkXFWny254DoNR61GNEw7m75ejtOGQ89kIGAYIA8Lj2gJVim4NlQ==","signatures":[{"sig":"MEQCIEjjiRYwxx6yAWwELMD6UoKReQ2dMTXH33uE6DWYF/FzAiBVEHjs/LGfTG0Kttx/XE4JyiBSgN1WcrPGKbCCdmvpkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":92038},"main":"./src/index.ts","types":"./src/index.ts","module":"./src/index.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./src/index.ts","import":"./src/index.ts","require":"./src/index.ts"},"./*":["./src/*.ts","./src/*.tsx"]},"gitHead":"9a37ea1284f839c9a875c212fb118a866d4f72ab","scripts":{"lint":"biome check --write src","test":"bun test","format":"biome format src --write","lint:ci":"biome ci src","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.1","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.0.1","bun-types":"^1.3.11","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.2","@firtoz/maybe-error":"^1.5.1"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_7.0.2_1774804078381_0.5653288409986352","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"@firtoz/router-toolkit","version":"8.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@8.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"edb4fa9cfb704172cfdd9fd001d395ace5bfa046","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-8.0.0.tgz","fileCount":90,"integrity":"sha512-0upIvloXQKBGoUZ6yJMEpwsAsyLCiK6hVuwYJYyLKHLooARS75z4sIuRIY+/0aLLCNFF2rel71l1Fo4P4HP3iQ==","signatures":[{"sig":"MEYCIQD9OzYa0YoPw/J+Ts/Ig5ks49M+g9vb7dxcm2sBlPKEIgIhALDorkOg/Ck3NtVrbUtEDrVocws7MiFZkSHDUetv4XI9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208797},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"}},"gitHead":"b355cca50f678eadfc82a8a7e897eceda44a32e0","scripts":{"lint":"biome check --write src","test":"bun test","build":"tsup","format":"biome format src --write","lint:ci":"biome ci src","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"10.8.2","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"20.20.2","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.0.1","bun-types":"^1.3.11","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.4","react-router":"^7.13.2","@firtoz/maybe-error":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_8.0.0_1776278290553_0.05964440160807416","host":"s3://npm-registry-packages-npm-production"}},"8.0.1":{"name":"@firtoz/router-toolkit","version":"8.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@8.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"af107b7f6693a72fb03b278352d7bca9482b9581","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-8.0.1.tgz","fileCount":90,"integrity":"sha512-1vF8bo1TUjyxGvaf35wj+x4VLiOmbO9Dx5uCrPPH9sayOKDQDH4flJPp37xggAnapkvJJLzjYbIMrPfRmn+91A==","signatures":[{"sig":"MEYCIQCzSu5m4DmQndl0IZQ7Kyx5TJ7JaM9jJdHS6NZFXkxvBQIhAKcbUxlDbpyXZasTFleCnQaOr7gqCC/2g5K+hEfvISwO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":208797},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"}},"gitHead":"730e5bd1730fe526e5edf1c1f5b2ea149ad02bda","scripts":{"lint":"biome check --write src","test":"bun test","build":"tsup","format":"biome format src --write","lint:ci":"biome ci src","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"11.11.0","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod-form-data":"^3.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.0.2","bun-types":"^1.3.12","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.5","react-router":"^7.14.1","@firtoz/maybe-error":"^1.6.0"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_8.0.1_1776459287098_0.009542047527051123","host":"s3://npm-registry-packages-npm-production"}},"9.0.0":{"name":"@firtoz/router-toolkit","version":"9.0.0","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@9.0.0","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"6c389e4af22717c9599a49eb6c51d2629dae7400","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-9.0.0.tgz","fileCount":90,"integrity":"sha512-/kicV03k3m6N2nVUgeP1VB3cSXcl/gyaFxRVWzYc1aHv/JTW5X5M7NaYozmqo90R+QSMNt0IyLOdxbDKS5aUng==","signatures":[{"sig":"MEUCIQCT7i2JzJG2Bn3YlG2UoZBW1Y9RbYEq1w1f7GsL3jJDIQIgTn2Jo70xby26mSRdWarP1QsjAe0n1wn3jluEbTUYHIk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":250290},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"}},"gitHead":"54d2ca4ba934a5333e27ea876980fc15135bc02f","scripts":{"lint":"biome check --write src","test":"bun test","build":"tsup","format":"biome format src --write","lint:ci":"biome ci src","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"11.11.0","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod-form-data":"^3.0.1","@firtoz/maybe-error":"^1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.0.2","bun-types":"^1.3.13","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.5","react-router":"^7.14.2"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_9.0.0_1776888414339_0.5118148751892881","host":"s3://npm-registry-packages-npm-production"}},"9.0.1":{"name":"@firtoz/router-toolkit","version":"9.0.1","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@9.0.1","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"3e4f88ef91151a0f727ec7259ce0a45bdff5ac9c","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-9.0.1.tgz","fileCount":90,"integrity":"sha512-Z52IuBX7H+Kq7Cznkog3UD3jbpSkrCr/P6lbmf7Tz1IyToa3sDQPH3ZGDWGU+4vPEaOywO//xey+60Rdd4mtrg==","signatures":[{"sig":"MEYCIQCIOn4DDc09xI6Qb8kyAygTqD8RiPmDS60snT07F0WTxwIhAK/LLv9cURm/55ntwW6YZDmZJg+iw8Zrr9YoDjlAH9lf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252200},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"}},"gitHead":"8c925c12f2eb0adc9fd81c45edcdad67fc68f862","scripts":{"lint":"biome check --write src","test":"bun test","build":"tsup","format":"biome format src --write","lint:ci":"biome ci src","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"11.11.0","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod-form-data":"^3.0.1","@firtoz/maybe-error":"^1.6.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.0.2","bun-types":"^1.3.13","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.3.6","react":"^19.2.5","react-router":"^7.14.2"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_9.0.1_1776894293681_0.4102605495110845","host":"s3://npm-registry-packages-npm-production"}},"9.0.2":{"name":"@firtoz/router-toolkit","version":"9.0.2","keywords":["react-router","react-router-7","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","_id":"@firtoz/router-toolkit@9.0.2","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"homepage":"https://github.com/firtoz/fullstack-toolkit#readme","bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"dist":{"shasum":"a216ab34912de9a80809955992b47aaadc28c5c6","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-9.0.2.tgz","fileCount":90,"integrity":"sha512-gZP2wav68nLGDwrPDZ+f/tbSMfPTjd+q/zXWU76UUl8M0cRukZ45rVlwCgF1IfAQGlDedguPvx/mvm3nj8OzJQ==","signatures":[{"sig":"MEUCIBRu38Xt2chIk27K319yEy/a1NrSlD3TyrpOGIurQJszAiEAqC9YUTmkZG6vij+ksTwEUwmZlueBJoRs1A1fzvR1iLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252026},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"}},"gitHead":"a925395c66a1ba7346720478473dcdb207c4643c","scripts":{"lint":"biome check --write src","test":"bun test","build":"tsup","format":"biome format src --write","lint:ci":"biome ci src","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","test:watch":"bun test --watch"},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"repository":{"url":"git+https://github.com/firtoz/fullstack-toolkit.git","type":"git","directory":"packages/router-toolkit"},"_npmVersion":"11.13.0","description":"Type-safe React Router 7 framework mode helpers with enhanced fetching, form submission, and state management","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod-form-data":"^3.0.1","@firtoz/maybe-error":"^1.6.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jsdom":"^29.1.1","bun-types":"^1.3.13","@types/jsdom":"^28.0.1","@types/react":"^19.2.14","@testing-library/react":"^16.3.1"},"peerDependencies":{"zod":"^4.4.2","react":"^19.2.5","react-router":"^7.14.2"},"_npmOperationalInternal":{"tmp":"tmp/router-toolkit_9.0.2_1780253387311_0.744279211694967","host":"s3://npm-registry-packages-npm-production"}},"9.1.0":{"name":"@firtoz/router-toolkit","version":"9.1.0","description":"Type-safe React Router 7/8 framework mode helpers with enhanced fetching, form submission, and state management","type":"module","main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"},"./types/*":{"types":"./dist/types/*.d.ts","import":"./dist/types/*.js"},"./*":{"types":"./dist/*.d.ts","import":"./dist/*.js"}},"scripts":{"build":"tsup","prepack":"bun run build","typecheck":"tsgo --noEmit -p ./tsconfig.json","lint":"biome check --write src","lint:ci":"biome ci src","format":"biome format src --write","test":"bun test","test:watch":"bun test --watch"},"keywords":["react-router","react-router-7","react-router-8","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","homepage":"https://github.com/firtoz/fullstack-toolkit#readme","repository":{"type":"git","url":"git+https://github.com/firtoz/fullstack-toolkit.git","directory":"packages/router-toolkit"},"bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"peerDependencies":{"react":"^19.2.7","react-router":"^7.14.2 || ^8.0.0","zod":"^4.4.2"},"engines":{"node":">=18.0.0"},"publishConfig":{"access":"public"},"dependencies":{"@firtoz/maybe-error":"^1.6.2","zod-form-data":"^3.0.3"},"devDependencies":{"@testing-library/react":"^16.3.1","@types/jsdom":"^28.0.3","@types/react":"^19.2.17","bun-types":"^1.3.14","jsdom":"^29.1.1"},"gitHead":"12f8074a5c4f1327eac1023152ef094a0facffb1","_id":"@firtoz/router-toolkit@9.1.0","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-ZHVefytHtI4aJJnGxgcCXuH15G2MwCn+HC15xefXrZNxSsnOxGWm02NybKG95Nwn3IPBF6991jJLhoRBYaPHZA==","shasum":"334966a6b58d815226a4cef7e8013b8e3489a273","tarball":"https://registry.npmjs.org/@firtoz/router-toolkit/-/router-toolkit-9.1.0.tgz","fileCount":90,"unpackedSize":248643,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA9cT2JzgrMzkJRY8T19rGnMI7a2gKIPauV4arrAKyEaAiEAkq/aOb6z2ob8zaRI7FouUR8LMYmYYnAfG8HvLIuEKQg="}]},"_npmUser":{"name":"firtoz","email":"firtina@fastmail.com"},"directories":{},"maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/router-toolkit_9.1.0_1783463061973_0.24956017741055514"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-04T20:55:38.606Z","modified":"2026-07-07T22:24:22.190Z","0.1.1":"2025-07-04T20:55:39.243Z","0.1.2":"2025-07-04T21:02:30.977Z","0.1.3":"2025-07-04T21:06:25.917Z","0.1.4":"2025-07-04T21:19:18.501Z","0.1.5":"2025-07-05T23:05:48.128Z","0.2.0":"2025-07-06T17:19:49.686Z","0.2.1":"2025-07-06T17:22:02.812Z","1.0.0":"2025-07-12T17:59:46.473Z","1.1.0":"2025-07-13T07:48:10.015Z","1.1.2":"2025-07-13T17:06:28.803Z","1.1.3":"2025-07-13T17:26:06.391Z","1.2.0":"2025-07-30T20:58:14.418Z","1.3.0":"2025-08-07T20:39:48.643Z","1.3.1":"2025-08-16T10:23:20.406Z","2.0.0":"2025-08-16T21:33:33.251Z","2.0.1":"2025-08-16T21:53:44.601Z","2.1.0":"2025-09-15T20:55:09.245Z","3.0.0":"2025-10-04T11:32:37.606Z","3.0.1":"2025-10-05T08:01:24.709Z","3.0.2":"2025-10-05T09:30:14.429Z","3.0.3":"2025-10-10T22:30:26.178Z","3.0.4":"2025-10-14T20:18:40.908Z","3.0.5":"2025-10-15T06:04:54.303Z","4.0.0":"2025-10-19T14:20:56.145Z","5.0.0":"2025-10-19T14:37:38.310Z","5.0.1":"2025-10-19T21:46:05.075Z","5.1.0":"2026-01-16T21:40:17.860Z","5.2.0":"2026-01-16T21:56:32.614Z","5.3.0":"2026-01-22T12:43:14.382Z","5.3.1":"2026-02-07T23:51:49.515Z","5.4.0":"2026-03-02T12:17:07.870Z","5.5.0":"2026-03-02T12:49:47.322Z","5.5.1":"2026-03-02T13:38:56.373Z","5.5.2":"2026-03-10T05:12:12.388Z","6.0.0":"2026-03-11T22:18:52.088Z","7.0.0":"2026-03-13T22:26:33.662Z","7.0.1":"2026-03-13T23:11:16.765Z","7.0.2":"2026-03-29T17:07:58.552Z","8.0.0":"2026-04-15T18:38:10.691Z","8.0.1":"2026-04-17T20:54:47.256Z","9.0.0":"2026-04-22T20:06:54.499Z","9.0.1":"2026-04-22T21:44:53.828Z","9.0.2":"2026-05-31T18:49:47.449Z","9.1.0":"2026-07-07T22:24:22.108Z"},"bugs":{"url":"https://github.com/firtoz/fullstack-toolkit/issues"},"author":{"name":"Firtina Ozbalikchi","email":"firtoz@github.com"},"license":"MIT","homepage":"https://github.com/firtoz/fullstack-toolkit#readme","keywords":["react-router","react-router-7","react-router-8","framework-mode","hooks","typescript","form-submission","fetching","type-safe"],"repository":{"type":"git","url":"git+https://github.com/firtoz/fullstack-toolkit.git","directory":"packages/router-toolkit"},"description":"Type-safe React Router 7/8 framework mode helpers with enhanced fetching, form submission, and state management","maintainers":[{"name":"firtoz","email":"firtina@fastmail.com"}],"readme":"# @firtoz/router-toolkit\n\n[![npm version](https://img.shields.io/npm/v/%40firtoz%2Frouter-toolkit.svg)](https://www.npmjs.com/package/@firtoz/router-toolkit)\n[![npm downloads](https://img.shields.io/npm/dm/%40firtoz%2Frouter-toolkit.svg)](https://www.npmjs.com/package/@firtoz/router-toolkit)\n[![license](https://img.shields.io/npm/l/%40firtoz%2Frouter-toolkit.svg)](https://github.com/firtoz/fullstack-toolkit/blob/main/LICENSE)\n\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)\n[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)](https://react.dev)\n[![React Router](https://img.shields.io/badge/React_Router-7%20%7C%208-red)](https://reactrouter.com)\n\n**React Router 7/8 framework mode helpers** — typed fetchers, submitters, concurrent uploads, and Zod form actions wired to your route modules.\n\n> **⚠️ Early WIP Notice:** This package is in very early development and is **not production-ready**. It is TypeScript-only and may have breaking changes. While I (the maintainer) have limited time, I'm open to PRs for features, bug fixes, or additional support (like JS builds). Please feel free to try it out and contribute! See [CONTRIBUTING.md](../../CONTRIBUTING.md) for details.\n\n## Features\n\n- ✅ **Type-safe routing** - Full TypeScript support with React Router 7/8 framework mode\n- 🚀 **Enhanced fetching** - Dynamic fetchers with caching and query parameter support\n- 📝 **Form submission** - Type-safe form handling with Zod validation\n- 📤 **Concurrent submissions** - Multiple parallel submissions per action with per-operation tracking and optimistic UI (`ConcurrentSubmitterProvider` + `useConcurrentSubmitter`)\n- 🔄 **State tracking** - Monitor fetcher state changes with ease\n- 🎯 **Zero configuration** - Works out of the box with React Router 7 or 8\n- 📦 **Tree-shakeable** - Import only what you need\n\n## Installation\n\n```bash\nnpm install @firtoz/router-toolkit\n# or\nyarn add @firtoz/router-toolkit\n# or\npnpm add @firtoz/router-toolkit\n# or\nbun add @firtoz/router-toolkit\n```\n\n## Peer Dependencies\n\nThis package requires the following peer dependencies:\n\n```json\n{\n  \"react\": \"^19.2.7\",\n  \"react-router\": \"^7.14.2 || ^8.0.0\",\n  \"zod\": \"^4.4.2\"\n}\n```\n\n## Quick Start\n\n> **Prerequisites**: React Router 7.14+ or 8.x in framework mode. This toolkit requires the generated types from React Router's file-based routing. In React Router 8, middleware is always enabled — `formAction` handlers receive `context` as a `RouterContextProvider` (use `context.get(yourContext)` for typed middleware values).\n\n### 1. Setup Your Route Files\n\nEvery route file needs to export a `route` constant for type inference:\n\n```tsx\n// app/routes/users.tsx\nimport { useDynamicFetcher, type RoutePath } from '@firtoz/router-toolkit';\n\nexport const route: RoutePath<\"/users\"> = \"/users\";\n\nexport const loader = async () => {\n  return { users: [{ id: 1, name: \"John\" }] };\n};\n\nexport default function UsersPage() {\n  const fetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\n  \n  return (\n    <div>\n      <button onClick={() => fetcher.load()}>\n        {fetcher.state === \"loading\" ? \"Loading...\" : \"Refresh\"}\n      </button>\n      {fetcher.data && <pre>{JSON.stringify(fetcher.data, null, 2)}</pre>}\n    </div>\n  );\n}\n```\n\n### 2. Use in Other Routes\n\n```tsx\n// app/routes/dashboard.tsx\nimport { useEffect } from 'react';\nimport { useDynamicFetcher } from '@firtoz/router-toolkit';\n\nexport default function Dashboard() {\n  // Fetch data from the users route\n  const usersFetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\n  \n  useEffect(() => {\n    usersFetcher.load(); // Load users data\n  }, []);\n\n  return (\n    <div>\n      <h1>Dashboard</h1>\n      {usersFetcher.data?.users.map(user => (\n        <div key={user.id}>{user.name}</div>\n      ))}\n    </div>\n  );\n}\n```\n\n### 3. Forms with Actions\n\n`useDynamicSubmitter` returns a **stable** `{ submit, submitJson, Form, fetcherKey }` and does not expose `state` / `data`. Use `useDynamicSubmitterFetcher(submitter)` when you need reactive loading or action results in JSX (or `submitter.fetcherKey` with `useFetcher` for advanced cases).\n\n```tsx\n// app/routes/create-user.tsx\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\n\nexport const route: RoutePath<\"/create-user\"> = \"/create-user\";\n\nexport async function action({ request }) {\n  const formData = await request.formData();\n  const name = formData.get(\"name\");\n  return { success: true, user: { name } };\n}\n\nexport default function CreateUser() {\n  const path = \"/create-user\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./create-user\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <submitter.Form method=\"post\">\n      <input name=\"name\" placeholder=\"User name\" required />\n      <button type=\"submit\">\n        {fetcher.state === \"submitting\" ? \"Creating...\" : \"Create\"}\n      </button>\n      {fetcher.data?.success && <p>✅ User created!</p>}\n    </submitter.Form>\n  );\n}\n```\n\n**Key Points:**\n- Export `route: RoutePath<\"your-path\">` in every route file\n- Use `useDynamicFetcher<typeof import(\"./route-file\")>` for type-safe data fetching\n- Use `useDynamicSubmitter<typeof import(\"./route-file\")>` for type-safe `submit` / `submitJson` / `Form`; use `useDynamicSubmitterFetcher(submitter)` for reactive `state` / `data` on the same submission (optional `keySuffix` when two submitters share one URL)\n- Await `submit` / `submitJson` for programmatic flows; full TypeScript inference on the resolved payload\n\n> **💡 Tip**: Start with `useDynamicFetcher` for data loading, then add `useDynamicSubmitter` for forms. The `useFetcherStateChanged` hook is great for notifications and side effects.\n\n## Main Hooks\n\n### `useDynamicFetcher`\n\nEnhanced version of React Router's `useFetcher` with type safety and query parameter support.\n\n```tsx\n// app/routes/users.tsx\nimport { useDynamicFetcher, type RoutePath } from '@firtoz/router-toolkit';\n\nexport const route: RoutePath<\"/users\"> = \"/users\";\n\nexport const loader = async () => {\n  return {\n    users: [\n      { id: 1, name: \"John Doe\", email: \"john@example.com\" }\n    ],\n    timestamp: new Date().toISOString()\n  };\n};\n\nexport default function UsersPage() {\n  const fetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\n\n  const handleRefresh = () => {\n    fetcher.load(); // Basic fetch\n  };\n\n  const handleRefreshWithParams = () => {\n    fetcher.load({ page: \"1\", limit: \"10\", sort: \"name\" }); // With query params\n  };\n\n  return (\n    <div>\n      <button onClick={handleRefresh} disabled={fetcher.state === \"loading\"}>\n        {fetcher.state === \"loading\" ? \"Loading...\" : \"Refresh Data\"}\n      </button>\n      \n      <button onClick={handleRefreshWithParams} disabled={fetcher.state === \"loading\"}>\n        Load with Filters\n      </button>\n      \n      {fetcher.data && (\n        <div>\n          <h3>Users ({fetcher.data.users.length}):</h3>\n          <pre>{JSON.stringify(fetcher.data, null, 2)}</pre>\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n### `useDynamicSubmitter`\n\nType-safe `submit`, `submitJson`, and `Form` with a **stable** return object (`fetcherKey` included). Use `await submitJson(...)` (or `await submit(...)`) for action payloads; use `useDynamicSubmitterFetcher(submitter)` when you need `fetcher.state` / `fetcher.data` in the UI.\n\n```tsx\n// app/routes/contact.tsx\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\nimport { z } from 'zod';\nimport type { Route } from './+types/contact';\n\n// 1. Define your form schema\nexport const formSchema = z.object({\n  name: z.string().min(1),\n  email: z.email(),\n});\n\n// 2. Export route constant\nexport const route: RoutePath<\"/contact\"> = \"/contact\";\n\n// 3. Define your action\nexport async function action({ request }: Route.ActionArgs) {\n  const formData = await request.formData();\n  const name = formData.get(\"name\") as string;\n  const email = formData.get(\"email\") as string;\n\n  // Simple validation\n  if (!name || !email) {\n    return {\n      success: false,\n      message: \"Name and email are required\"\n    };\n  }\n\n  return {\n    success: true,\n    message: \"Form submitted successfully!\",\n    submittedData: { name, email }\n  };\n}\n\n// 4. Submitter + matching fetcher for reactive UI\nexport default function ContactForm() {\n  const path = \"/contact\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./contact\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <div>\n      <submitter.Form method=\"post\">\n        <div>\n          <label htmlFor=\"name\">Name:</label>\n          <input\n            id=\"name\"\n            name=\"name\"\n            type=\"text\"\n            required\n          />\n        </div>\n        \n        <div>\n          <label htmlFor=\"email\">Email:</label>\n          <input\n            id=\"email\"\n            name=\"email\"\n            type=\"email\"\n            required\n          />\n        </div>\n        \n        <button\n          type=\"submit\"\n          disabled={fetcher.state === \"submitting\"}\n        >\n          {fetcher.state === \"submitting\" ? \"Submitting...\" : \"Submit\"}\n        </button>\n      </submitter.Form>\n\n      {fetcher.data && (\n        <div>\n          {fetcher.data.success ? (\n            <p>✅ {fetcher.data.message}</p>\n          ) : (\n            <p>❌ {fetcher.data.message}</p>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n#### Local `useState` vs `useDynamicSubmitterFetcher`\n\nBoth are valid; pick based on how you want loading and action feedback to show up.\n\n**Local state around `await` (e.g. `saving` + `try` / `finally`)**\n\n- **Pros:** Matches the promise-first API; no extra hook; the pending flag tracks exactly your async handler (including extra `await`s in the same function); easy to reason about when you reload data after save (e.g. `useDynamicFetcher.load()`).\n- **Cons:** You must remember `finally` (or equivalent); one flag is awkward if several overlapping operations need distinct UX; you do not get declarative `fetcher.data` for the action unless you store the awaited value yourself.\n\n**`useDynamicSubmitterFetcher(submitter)`**\n\n- **Pros:** Declarative `fetcher.state` / `fetcher.data` in JSX—good for `<submitter.Form>`, inline validation or handler errors, and staying aligned with React Router’s fetcher lifecycle on `submitter.fetcherKey`.\n- **Cons:** Second `useFetcher` subscription; UI follows RR’s state machine, not only “my handler,” unless you isolate keys with `keySuffix` when two widgets share one URL.\n\n**Rule of thumb:** Use **local pending state** when the flow is “run this async function, disable until it finishes.” Use **`useDynamicSubmitterFetcher`** when you want **reactive** fetcher fields in render without mirroring them into state.\n\n### `ConcurrentSubmitterProvider` + `useConcurrentSubmitter`\n\nRun multiple submissions in parallel via the framework fetcher; each is tracked in `operations` with `submittedData` (for optimistic UI) and `data` when done. Wrap your app (or subtree) with `ConcurrentSubmitterProvider`, then use `useConcurrentSubmitter<TInfo>()` for typed `submitJson` / `submitFormData` with path and args per call.\n\n- **`submitJson(path, args, data, options?)`** — POST JSON to the given route; path/args are per call.\n- **`submitFormData(path, args, formData, submittedData?, options?)`** — POST multipart/form-data. Optional `submittedData` is a serializable object for the operations list (e.g. `{ type: \"upload\", label: \"photo.jpg\" }`); FormData/File are not stored in state.\n\n```tsx\n// Root (e.g. root.tsx)\nimport { ConcurrentSubmitterProvider } from '@firtoz/router-toolkit';\n\nexport default function App() {\n  return (\n    <ConcurrentSubmitterProvider>\n      <Outlet />\n    </ConcurrentSubmitterProvider>\n  );\n}\n\n// Any route or component\nimport { useConcurrentSubmitter } from '@firtoz/router-toolkit';\n\nfunction UploadList() {\n  const { operations, submitFormData } = useConcurrentSubmitter<\n    typeof import(\"./api.upload\")\n  >();\n\n  const handleUpload = (file: File) => {\n    const fd = new FormData();\n    fd.set(\"file\", file);\n    submitFormData(\"/api/upload\", undefined, fd, { type: \"upload\", label: file.name });\n  };\n\n  return (\n    <ul>\n      {Object.values(operations).map((op) => (\n        <li key={op.id}>\n          {op.status === \"pending\" && (\n            <Skeleton>{(op.submittedData as { label?: string }).label}</Skeleton>\n          )}\n          {op.status === \"done\" && (\n            <span>Saved: {op.data?.id}</span>\n          )}\n          {op.status === \"error\" && (\n            <span>Failed: {String(op.error)}</span>\n          )}\n        </li>\n      ))}\n    </ul>\n  );\n}\n```\n\n- **`operations`**: `Record<string, Operation<T>>` — each operation has `id`, `status` (`\"pending\"` | `\"done\"` | `\"error\"`), `submittedData` (payload or display object), and when done `data` (action response).\n- **`submitJson(path, args, data, options?)`** / **`submitFormData(path, args, formData, submittedData?, options?)`**: each returns `{ id, promise }`. `submittedData` defaults to `{}` and is used only for display in the operations list.\n\n### `useFetcherStateChanged`\n\nTrack changes in fetcher state and react to them. Perfect for triggering side effects, showing notifications, or handling state transitions in your application.\n\n```tsx\n// app/routes/notification-form.tsx\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  useFetcherStateChanged,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\nimport { useState } from 'react';\nimport { z } from 'zod';\nimport type { Route } from './+types/notification-form';\n\nexport const route: RoutePath<\"/notification-form\"> = \"/notification-form\";\n\nexport const formSchema = z.object({\n  message: z.string().min(1),\n  type: z.enum([\"info\", \"warning\", \"error\"]),\n});\n\nexport async function action({ request }: Route.ActionArgs) {\n  const formData = await request.formData();\n  const message = formData.get(\"message\") as string;\n  const type = formData.get(\"type\") as string;\n\n  // Simulate processing\n  await new Promise(resolve => setTimeout(resolve, 1000));\n\n  return {\n    success: true,\n    message: \"Notification sent!\",\n    data: { message, type }\n  };\n}\n\nexport default function NotificationForm() {\n  const path = \"/notification-form\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./notification-form\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n  const [notifications, setNotifications] = useState<string[]>([]);\n\n  // Track fetcher state changes for side effects (pass the parallel fetcher, not submitter)\n  useFetcherStateChanged(fetcher, (lastState, newState) => {\n    console.log(`Fetcher state changed from ${lastState} to ${newState}`);\n    \n    // Show success notification when form submission completes\n    if (newState === 'idle' && lastState === 'submitting') {\n      if (fetcher.data?.success) {\n        setNotifications(prev => [...prev, `✅ ${fetcher.data.message}`]);\n      } else {\n        setNotifications(prev => [...prev, `❌ Submission failed`]);\n      }\n    }\n    \n    // Clear notifications when starting new submission\n    if (newState === 'submitting' && lastState === 'idle') {\n      setNotifications([]);\n    }\n  });\n\n  return (\n    <div>\n      <h1>Send Notification</h1>\n      \n      <submitter.Form method=\"post\">\n        <div>\n          <label htmlFor=\"message\">Message:</label>\n          <input\n            id=\"message\"\n            name=\"message\"\n            type=\"text\"\n            required\n          />\n        </div>\n        \n        <div>\n          <label htmlFor=\"type\">Type:</label>\n          <select id=\"type\" name=\"type\" required>\n            <option value=\"info\">Info</option>\n            <option value=\"warning\">Warning</option>\n            <option value=\"error\">Error</option>\n          </select>\n        </div>\n        \n        <button \n          type=\"submit\" \n          disabled={fetcher.state === 'submitting'}\n        >\n          {fetcher.state === 'submitting' ? 'Sending...' : 'Send Notification'}\n        </button>\n        \n        <p>Current state: <strong>{fetcher.state}</strong></p>\n      </submitter.Form>\n\n      {/* Show notifications triggered by state changes */}\n      {notifications.length > 0 && (\n        <div style={{ marginTop: '20px' }}>\n          <h3>Notifications:</h3>\n          {notifications.map((notification, index) => (\n            <div key={index} style={{ padding: '5px', margin: '5px 0', backgroundColor: '#f0f0f0' }}>\n              {notification}\n            </div>\n          ))}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n**Common Use Cases:**\n\n- **Notifications**: Show success/error messages after form submissions\n- **Analytics**: Track form submission events and user interactions\n- **UI Updates**: Update other parts of the UI based on fetcher state\n- **Side Effects**: Trigger API calls, redirects, or other actions on state changes\n- **Debugging**: Log state transitions for debugging purposes\n\n**State Transitions:**\n- `idle` → `submitting`: Form submission started\n- `submitting` → `idle`: Form submission completed (check `fetcher.data` for results)\n- `idle` → `loading`: Data fetching started (with `useDynamicFetcher`)\n- `loading` → `idle`: Data fetching completed\n\n## Form Action Utilities\n\n### `formAction`\n\nType-safe form action wrapper that provides Zod validation and structured error handling for React Router actions. This utility integrates seamlessly with `useDynamicSubmitter` and the `formSchema` export pattern.\n\n#### Features\n\n- ✅ **Automatic form data validation** using Zod schemas\n- 🛡️ **Type-safe error handling** with structured error types\n- 🔄 **MaybeError integration** for consistent error patterns — import **`success`** / **`fail`** from [`@firtoz/maybe-error`](../maybe-error/README.md), not from router-toolkit (see [MaybeError Utility](#maybeerror-utility))\n- 🚀 **React Router compatibility** preserves redirects and responses\n- 📝 **Full TypeScript support** with inferred types from schemas\n\n#### Basic Usage\n\n```tsx\n// app/routes/register.tsx\nimport { z } from \"zod\";\nimport { formAction, type RoutePath } from \"@firtoz/router-toolkit\";\nimport { success, fail } from \"@firtoz/maybe-error\";\n\n// Export the schema for useDynamicSubmitter integration\nexport const formSchema = z.object({\n  email: z.string().email(\"Invalid email format\"),\n  password: z.string().min(8, \"Password must be at least 8 characters\"),\n  confirmPassword: z.string(),\n}).refine(data => data.password === data.confirmPassword, {\n  message: \"Passwords don't match\",\n  path: [\"confirmPassword\"],\n});\n\nexport const action = formAction({\n  schema: formSchema,\n  handler: async (args, data) => {\n    // data is fully typed based on the schema\n    try {\n      const user = await createUser({\n        email: data.email,\n        password: data.password,\n      });\n      \n      return success({\n        message: \"Registration successful!\",\n        userId: user.id,\n      });\n    } catch (error) {\n      return fail(\"Email already exists\");\n    }\n  },\n});\n\nexport const route: RoutePath<\"/register\"> = \"/register\";\n```\n\n#### Using with useDynamicSubmitter\n\nThe `formAction` utility works seamlessly with `useDynamicSubmitter` when you export a `formSchema`:\n\n```tsx\n// app/routes/register.tsx (component)\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n} from \"@firtoz/router-toolkit\";\n\nexport default function Register() {\n  const path = \"/register\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./register\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <submitter.Form method=\"post\">\n      <input name=\"email\" type=\"email\" required />\n      <input name=\"password\" type=\"password\" required />\n      <input name=\"confirmPassword\" type=\"password\" required />\n      <button type=\"submit\" disabled={fetcher.state === \"submitting\"}>\n        {fetcher.state === \"submitting\" ? \"Registering...\" : \"Register\"}\n      </button>\n    </submitter.Form>\n  );\n}\n```\n\n#### Error Handling\n\nThe `formAction` utility returns structured errors. Inspect `fetcher.data` from `useDynamicSubmitterFetcher(submitter)`, or `await submitter.submitJson(...)` in an async handler:\n\n```tsx\nexport default function Register() {\n  const path = \"/register\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./register\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  if (fetcher.data && !fetcher.data.success) {\n    const error = fetcher.data.error;\n\n    switch (error.type) {\n      case \"validation\":\n        console.log(\"Validation errors:\", error.error);\n        break;\n      case \"handler\":\n        console.log(\"Handler error:\", error.error);\n        break;\n      case \"unknown\":\n        console.log(\"Unknown error occurred\");\n        break;\n    }\n  }\n\n  // Rest of component...\n}\n```\n\n#### Error Types\n\nThe `formAction` utility returns three types of errors:\n\n1. **Validation Errors** (`type: \"validation\"`)\n   - Occurs when form data doesn't match the Zod schema\n   - Contains detailed field-level validation errors from Zod\n   - The `error.error` field contains the result of `z.treeifyError()`\n\n2. **Handler Errors** (`type: \"handler\"`)\n   - Occurs when your handler function returns a `fail()` result\n   - Contains the custom error you provided to `fail()`\n   - The `error.error` field contains your custom error value\n\n3. **Unknown Errors** (`type: \"unknown\"`)\n   - Occurs when an unexpected exception is thrown\n   - Logs the error to console for debugging\n   - Does not expose the raw error to avoid information leakage\n\n#### Advanced Features\n\n**File Uploads**\n\n```tsx\nconst uploadSchema = z.object({\n  title: z.string().min(1),\n  file: z.instanceof(File),\n  description: z.string().optional(),\n});\n\nexport const action = formAction({\n  schema: uploadSchema,\n  handler: async (args, data) => {\n    const uploadResult = await uploadFile(data.file, {\n      title: data.title,\n      description: data.description,\n    });\n    \n    return success({ fileId: uploadResult.id });\n  },\n});\n```\n\n**Complex Validation**\n\n```tsx\nconst complexSchema = z.object({\n  user: z.object({\n    name: z.string().min(2),\n    age: z.coerce.number().min(18),\n  }),\n  preferences: z.object({\n    newsletter: z.boolean().default(false),\n    theme: z.enum([\"light\", \"dark\"]).default(\"light\"),\n  }),\n  terms: z.literal(\"on\", { \n    errorMap: () => ({ message: \"You must accept the terms\" }) \n  }),\n});\n```\n\n**Redirects and Responses**\n\nReact Router `Response` objects (like redirects) are automatically preserved:\n\n```tsx\nexport const action = formAction({\n  schema: loginSchema,\n  handler: async (args, data) => {\n    const user = await authenticateUser(data.email, data.password);\n    \n    if (user) {\n      // This redirect will be properly handled by React Router\n      throw redirect(\"/dashboard\");\n    }\n    \n    return fail(\"Invalid credentials\");\n  },\n});\n```\n\n#### Type Safety\n\nThe `formAction` utility provides full type safety:\n\n- **Schema inference**: Form data is typed based on your Zod schema\n- **Handler types**: Handler parameters are properly typed\n- **Error types**: Error handling is type-safe with discriminated unions\n- **Integration**: Works seamlessly with `useDynamicSubmitter` type inference\n\n#### API Reference\n\n```tsx\nfunction formAction<\n  TSchema extends z.ZodTypeAny,\n  TResult = undefined,\n  TError = string,\n  ActionArgs extends ActionFunctionArgs = ActionFunctionArgs,\n>(config: {\n  schema: TSchema;\n  handler: (\n    args: ActionArgs, \n    data: z.infer<TSchema>\n  ) => Promise<MaybeError<TResult, TError>>;\n}): (args: ActionArgs) => Promise<MaybeError<TResult, FormActionError<TError>>>;\n\ntype FormActionError<TError> =\n  | { type: \"validation\"; error: ReturnType<typeof z.treeifyError> }\n  | { type: \"handler\"; error: TError }\n  | { type: \"unknown\" };\n```\n\n## Type Utilities\n\n### `RoutePath<T>`\n\nType-safe route path helper that ensures you're using valid route paths from your React Router configuration.\n\n```tsx\nimport type { RoutePath } from '@firtoz/router-toolkit';\n\n// Ensures \"/users\" is a valid route in your app\nexport const route: RoutePath<\"/users\"> = \"/users\";\n\n// TypeScript error if route doesn't exist\nexport const invalidRoute: RoutePath<\"/non-existent\"> = \"/non-existent\"; // ❌ Error\n```\n\nThis is the main type utility you'll use. It provides compile-time validation that your route paths actually exist in your React Router configuration.\n\n## Additional Utilities\n\n### `useCachedFetch`\n\nAlternative to `useDynamicFetcher` that uses standard `fetch()` instead of React Router's fetcher system. Provides automatic caching and avoids route invalidation.\n\n```tsx\n// app/routes/config.tsx\nimport { useCachedFetch, type RoutePath } from '@firtoz/router-toolkit';\n\nexport const route: RoutePath<\"/config\"> = \"/config\";\n\nexport const loader = async () => {\n  return {\n    apiUrl: \"https://api.example.com\",\n    version: \"1.0.0\",\n    features: [\"auth\", \"payments\"]\n  };\n};\n\nexport default function ConfigPage() {\n  const { data, isLoading, error } = useCachedFetch<typeof import(\"./config\")>(\"/config\");\n\n  if (isLoading) return <div>Loading...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n  \n  return (\n    <div>\n      <h1>Configuration</h1>\n      <p>API: {data?.apiUrl}</p>\n      <p>Version: {data?.version}</p>\n    </div>\n  );\n}\n```\n\n**When to use `useCachedFetch` vs `useDynamicFetcher`:**\n\n- **`useCachedFetch`**: Static data, configuration, content that rarely changes\n- **`useDynamicFetcher`**: Dynamic data, user-specific content, data that changes frequently\n\n## Configuration\n\nMake sure your routes are properly typed in your `react-router.config.ts`:\n\n```tsx\n// react-router.config.ts\nimport type { Config } from '@react-router/dev/config';\n\nexport default {\n  // Your config\n} satisfies Config;\n\n// This will generate the Register types that the toolkit relies on\n```\n\n## Real-World Examples\n\nThese examples are based on actual usage patterns from the router-toolkit test application. Each example is complete and can be copied directly into your project.\n\n> **🚀 Quick Copy**: Each example below is a complete, working route file. Copy the entire code block to get started immediately.\n\n### Data Loading with Refresh (Loader Test Pattern)\n\n```tsx\n// app/routes/loader-test.tsx\nimport { useDynamicFetcher, type RoutePath } from '@firtoz/router-toolkit';\n\ninterface LoaderData {\n  user: {\n    id: number;\n    name: string;\n    email: string;\n  };\n  timestamp: string;\n}\n\nexport const route: RoutePath<\"/loader-test\"> = \"/loader-test\";\n\nexport const loader = async (): Promise<LoaderData> => {\n  // Simulate API call delay\n  await new Promise((resolve) => setTimeout(resolve, 500));\n\n  return {\n    user: {\n      id: 1,\n      name: \"John Doe\",\n      email: \"john@example.com\",\n    },\n    timestamp: new Date().toISOString(),\n  };\n};\n\nexport default function LoaderTest() {\n  const fetcher = useDynamicFetcher<typeof import(\"./loader-test\")>(\"/loader-test\");\n\n  const handleRefresh = () => {\n    fetcher.load();\n  };\n\n  return (\n    <div className=\"p-6\">\n      <h1 className=\"text-2xl font-bold mb-4\">Loader Test</h1>\n      <p className=\"mb-4\">Testing React Router useFetcher hook</p>\n\n      <button\n        type=\"button\"\n        onClick={handleRefresh}\n        disabled={fetcher.state === \"loading\"}\n        className=\"bg-blue-500 text-white px-4 py-2 rounded disabled:opacity-50\"\n      >\n        {fetcher.state === \"loading\" ? \"Loading...\" : \"Refresh Data\"}\n      </button>\n\n      <div className=\"mt-6\">\n        <h2 className=\"text-lg font-semibold mb-2\">Fetcher State:</h2>\n        <pre className=\"bg-gray-200 p-3 rounded text-sm text-gray-800\">\n          {JSON.stringify({ state: fetcher.state }, null, 2)}\n        </pre>\n      </div>\n\n      {fetcher.data && (\n        <div className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold mb-2\">Fetched Data:</h2>\n          <pre className=\"bg-gray-200 p-3 rounded text-sm text-gray-800\">\n            {JSON.stringify(fetcher.data, null, 2)}\n          </pre>\n        </div>\n      )}\n\n      {fetcher.state === \"idle\" && fetcher.data && (\n        <div className=\"mt-4 p-3 bg-green-100 rounded\">\n          <p className=\"text-green-800\">✅ Data loaded successfully!</p>\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n### Form Submission (Action Test Pattern)\n\n```tsx\n// app/routes/action-test.tsx\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\nimport { z } from 'zod';\nimport type { Route } from './+types/action-test';\n\ninterface ActionData {\n  success: boolean;\n  message: string;\n  submittedData?: {\n    name: string;\n    email: string;\n  };\n}\n\nexport const route: RoutePath<\"/action-test\"> = \"/action-test\";\n\nexport const formSchema = z.object({\n  name: z.string().min(1),\n  email: z.email(),\n});\n\nexport async function action({ request }: Route.ActionArgs): Promise<ActionData> {\n  const formData = await request.formData();\n  const name = formData.get(\"name\") as string;\n  const email = formData.get(\"email\") as string;\n\n  // Simulate processing delay\n  await new Promise((resolve) => setTimeout(resolve, 1000));\n\n  // Simple validation\n  if (!name || !email) {\n    return {\n      success: false,\n      message: \"Name and email are required\",\n    };\n  }\n\n  return {\n    success: true,\n    message: \"Form submitted successfully!\",\n    submittedData: { name, email },\n  };\n}\n\nexport default function ActionTest() {\n  const path = \"/action-test\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./action-test\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <div className=\"p-6\">\n      <h1 className=\"text-2xl font-bold mb-4\">Action Test</h1>\n      <p className=\"mb-4\">Testing React Router form actions</p>\n\n      <submitter.Form method=\"post\" className=\"space-y-4 max-w-md\">\n        <div>\n          <label htmlFor=\"name\" className=\"block text-sm font-medium mb-1\">\n            Name:\n          </label>\n          <input\n            id=\"name\"\n            name=\"name\"\n            type=\"text\"\n            required\n            className=\"w-full px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500\"\n          />\n        </div>\n\n        <div>\n          <label htmlFor=\"email\" className=\"block text-sm font-medium mb-1\">\n            Email:\n          </label>\n          <input\n            id=\"email\"\n            name=\"email\"\n            type=\"email\"\n            required\n            className=\"w-full px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500\"\n          />\n        </div>\n\n        <button\n          type=\"submit\"\n          disabled={fetcher.state === \"submitting\"}\n          className=\"bg-green-500 text-white px-4 py-2 rounded disabled:opacity-50\"\n        >\n          {fetcher.state === \"submitting\" ? \"Submitting...\" : \"Submit\"}\n        </button>\n      </submitter.Form>\n\n      {fetcher.data && (\n        <div className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold mb-2\">Action Result:</h2>\n          <pre className=\"bg-gray-200 p-3 rounded text-sm text-gray-800\">\n            {JSON.stringify(fetcher.data, null, 2)}\n          </pre>\n\n          {fetcher.data.success ? (\n            <div className=\"mt-4 p-3 bg-green-100 rounded\">\n              <p className=\"text-green-800\">✅ {fetcher.data.message}</p>\n            </div>\n          ) : (\n            <div className=\"mt-4 p-3 bg-red-100 rounded\">\n              <p className=\"text-red-800\">❌ {fetcher.data.message}</p>\n            </div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n### Combined Loader and Action (Full CRUD Pattern)\n\n```tsx\n// app/routes/combined-test.tsx\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\nimport { useLoaderData } from 'react-router';\nimport { z } from 'zod';\nimport type { Route } from './+types/combined-test';\n\ninterface User {\n  id: number;\n  name: string;\n  email: string;\n  lastUpdated: string;\n}\n\ninterface LoaderData {\n  user: User;\n}\n\ntype ActionData = {\n  success: boolean;\n  message: string;\n  updatedUser?: User;\n};\n\nexport const route: RoutePath<\"/combined-test\"> = \"/combined-test\";\n\nexport const formSchema = z.object({\n  name: z.string().min(1),\n  email: z.email(),\n});\n\nexport const loader = async (): Promise<LoaderData> => {\n  await new Promise((resolve) => setTimeout(resolve, 300));\n\n  return {\n    user: {\n      id: 1,\n      name: \"John Doe\",\n      email: \"john@example.com\",\n      lastUpdated: new Date().toISOString(),\n    },\n  };\n};\n\nexport async function action({ request }: Route.ActionArgs): Promise<ActionData> {\n  const formData = await request.formData();\n  const name = formData.get(\"name\") as string;\n  const email = formData.get(\"email\") as string;\n\n  await new Promise((resolve) => setTimeout(resolve, 500));\n\n  if (!name || !email) {\n    return {\n      success: false,\n      message: \"Name and email are required\",\n    };\n  }\n\n  const updatedUser: User = {\n    id: 1,\n    name,\n    email,\n    lastUpdated: new Date().toISOString(),\n  };\n\n  return {\n    success: true,\n    message: \"User updated successfully!\",\n    updatedUser,\n  };\n}\n\nexport default function CombinedTest() {\n  const loaderData = useLoaderData<LoaderData>();\n  const path = \"/combined-test\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./combined-test\")>(path);\n  const actionFetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <div className=\"p-6\">\n      <h1 className=\"text-2xl font-bold mb-4\">Combined Test</h1>\n      <p className=\"mb-4\">Testing both loader data and form actions</p>\n\n      <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n        {/* Loader Data Section */}\n        <div>\n          <h2 className=\"text-lg font-semibold mb-3\">Current User Data</h2>\n          <div className=\"bg-blue-50 p-4 rounded\">\n            <h3 className=\"font-medium\">Loaded from Server:</h3>\n            <pre className=\"mt-2 text-sm bg-gray-200 p-3 rounded text-gray-800\">\n              {JSON.stringify(loaderData.user, null, 2)}\n            </pre>\n          </div>\n        </div>\n\n        {/* Action Form Section */}\n        <div>\n          <h2 className=\"text-lg font-semibold mb-3\">Update User</h2>\n          <submitter.Form method=\"post\" className=\"space-y-4\">\n            <div>\n              <label htmlFor=\"name\" className=\"block text-sm font-medium mb-1\">\n                Name:\n              </label>\n              <input\n                id=\"name\"\n                name=\"name\"\n                type=\"text\"\n                defaultValue={loaderData.user.name}\n                required\n                className=\"w-full px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500\"\n              />\n            </div>\n\n            <div>\n              <label htmlFor=\"email\" className=\"block text-sm font-medium mb-1\">\n                Email:\n              </label>\n              <input\n                id=\"email\"\n                name=\"email\"\n                type=\"email\"\n                defaultValue={loaderData.user.email}\n                required\n                className=\"w-full px-3 py-2 border border-gray-300 rounded focus:outline-none focus:ring-2 focus:ring-blue-500\"\n              />\n            </div>\n\n            <button\n              type=\"submit\"\n              disabled={actionFetcher.state === \"submitting\"}\n              className=\"bg-purple-500 text-white px-4 py-2 rounded disabled:opacity-50\"\n            >\n              {actionFetcher.state === \"submitting\" ? \"Updating...\" : \"Update User\"}\n            </button>\n          </submitter.Form>\n        </div>\n      </div>\n\n      {/* Status Section */}\n      <div className=\"mt-6\">\n        <h2 className=\"text-lg font-semibold mb-2\">Action Status:</h2>\n        <pre className=\"bg-gray-200 p-3 rounded text-sm text-gray-800\">\n          {JSON.stringify({ state: actionFetcher.state }, null, 2)}\n        </pre>\n      </div>\n\n      {actionFetcher.data && (\n        <div className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold mb-2\">Action Result:</h2>\n          <pre className=\"bg-gray-200 p-3 rounded text-sm text-gray-800\">\n            {JSON.stringify(actionFetcher.data, null, 2)}\n          </pre>\n\n          {actionFetcher.data.success ? (\n            <div className=\"mt-4 p-3 bg-green-100 rounded\">\n              <p className=\"text-green-800\">✅ {actionFetcher.data.message}</p>\n              {actionFetcher.data.updatedUser && (\n                <p className=\"text-sm text-green-700 mt-1\">\n                  Tip: Reload the page to see if data persists (it won't in this demo)\n                </p>\n              )}\n            </div>\n          ) : (\n            <div className=\"mt-4 p-3 bg-red-100 rounded\">\n              <p className=\"text-red-800\">❌ {actionFetcher.data.message}</p>\n            </div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n## MaybeError Utility\n\n`@firtoz/maybe-error` is a **dependency** of router-toolkit (it is installed with this package), but it is **not** re-exported from `@firtoz/router-toolkit`. Import `success`, `fail`, `MaybeError`, `exhaustiveGuard`, and related symbols **from `@firtoz/maybe-error`** so your imports match runtime and dependency boundaries stay clear.\n\nFor the full API (`MaybeError`, `success`, `fail`, `exhaustiveGuard`, `AssumeSuccess`), see the [`@firtoz/maybe-error` README](../maybe-error/README.md).\n\n### Basic Usage\n\n```tsx\nimport { success, fail, type MaybeError } from '@firtoz/maybe-error';\n\n// Define a function that may fail\nfunction divide(a: number, b: number): MaybeError<number> {\n  if (b === 0) {\n    return fail(\"Division by zero\");\n  }\n  return success(a / b);\n}\n\n// Type-safe error handling\nconst result = divide(10, 2);\nif (result.success) {\n  console.log(result.result); // 5 - TypeScript knows this is a number\n} else {\n  console.error(result.error); // \"Division by zero\" - TypeScript knows this is a string\n}\n```\n\n### Route Loader with Error Handling\n\n```tsx\n// app/routes/user-profile.tsx\nimport { success, fail, type MaybeError } from '@firtoz/maybe-error';\nimport { type RoutePath } from '@firtoz/router-toolkit';\nimport type { Route } from './+types/user-profile';\n\ninterface User {\n  id: string;\n  name: string;\n  email: string;\n}\n\ninterface ApiError {\n  code: number;\n  message: string;\n}\n\nexport const route: RoutePath<\"/user-profile/:id\"> = \"/user-profile/:id\";\n\n// Loader that returns MaybeError for type-safe error handling\nexport const loader = async ({ params }: Route.LoaderArgs): Promise<MaybeError<User, ApiError>> => {\n  try {\n    const response = await fetch(`/api/users/${params.id}`);\n    \n    if (!response.ok) {\n      return fail({\n        code: response.status,\n        message: response.status === 404 ? \"User not found\" : \"Failed to fetch user\"\n      });\n    }\n    \n    const user = await response.json();\n    return success(user);\n  } catch (error) {\n    return fail({\n      code: 500,\n      message: \"Network error occurred\"\n    });\n  }\n};\n\nexport default function UserProfile() {\n  const fetcher = useDynamicFetcher<typeof import(\"./user-profile\")>(\"/user-profile/:id\", { id: \"123\" });\n  \n  // Handle the MaybeError result\n  if (!fetcher.data) {\n    return <div>Loading...</div>;\n  }\n  \n  if (!fetcher.data.success) {\n    return (\n      <div className=\"error\">\n        <h2>Error {fetcher.data.error.code}</h2>\n        <p>{fetcher.data.error.message}</p>\n      </div>\n    );\n  }\n  \n  return (\n    <div>\n      <h1>{fetcher.data.result.name}</h1>\n      <p>Email: {fetcher.data.result.email}</p>\n    </div>\n  );\n}\n```\n\n### Action with Error Handling\n\n```tsx\n// app/routes/create-user.tsx\nimport { success, fail, type MaybeError } from '@firtoz/maybe-error';\nimport {\n  useDynamicSubmitter,\n  useDynamicSubmitterFetcher,\n  type RoutePath,\n} from '@firtoz/router-toolkit';\nimport { z } from 'zod';\nimport type { Route } from './+types/create-user';\n\nexport const route: RoutePath<\"/create-user\"> = \"/create-user\";\n\nexport const formSchema = z.object({\n  name: z.string().min(1),\n  email: z.email(),\n});\n\ninterface ValidationError {\n  field: string;\n  message: string;\n}\n\nexport async function action({ request }: Route.ActionArgs): Promise<MaybeError<User, ValidationError[]>> {\n  const formData = await request.formData();\n  const name = formData.get(\"name\") as string;\n  const email = formData.get(\"email\") as string;\n\n  // Validation\n  const errors: ValidationError[] = [];\n  if (!name) errors.push({ field: \"name\", message: \"Name is required\" });\n  if (!email) errors.push({ field: \"email\", message: \"Email is required\" });\n  if (email && !email.includes(\"@\")) errors.push({ field: \"email\", message: \"Invalid email format\" });\n\n  if (errors.length > 0) {\n    return fail(errors);\n  }\n\n  try {\n    const response = await fetch(\"/api/users\", {\n      method: \"POST\",\n      headers: { \"Content-Type\": \"application/json\" },\n      body: JSON.stringify({ name, email })\n    });\n\n    if (!response.ok) {\n      return fail([{ field: \"general\", message: \"Failed to create user\" }]);\n    }\n\n    const user = await response.json();\n    return success(user);\n  } catch (error) {\n    return fail([{ field: \"general\", message: \"Network error occurred\" }]);\n  }\n}\n\nexport default function CreateUser() {\n  const path = \"/create-user\" as const;\n  const submitter = useDynamicSubmitter<typeof import(\"./create-user\")>(path);\n  const fetcher = useDynamicSubmitterFetcher(submitter);\n\n  return (\n    <div>\n      <h1>Create User</h1>\n      \n      <submitter.Form method=\"post\">\n        <div>\n          <label htmlFor=\"name\">Name:</label>\n          <input id=\"name\" name=\"name\" type=\"text\" required />\n        </div>\n        \n        <div>\n          <label htmlFor=\"email\">Email:</label>\n          <input id=\"email\" name=\"email\" type=\"email\" required />\n        </div>\n        \n        <button type=\"submit\" disabled={fetcher.state === \"submitting\"}>\n          {fetcher.state === \"submitting\" ? \"Creating...\" : \"Create User\"}\n        </button>\n      </submitter.Form>\n\n      {fetcher.data && (\n        <div>\n          {fetcher.data.success ? (\n            <div className=\"success\">\n              <h3>User Created!</h3>\n              <p>Name: {fetcher.data.result.name}</p>\n              <p>Email: {fetcher.data.result.email}</p>\n            </div>\n          ) : (\n            <div className=\"errors\">\n              <h3>Validation Errors:</h3>\n              <ul>\n                {fetcher.data.error.map((error, index) => (\n                  <li key={index}>\n                    <strong>{error.field}:</strong> {error.message}\n                  </li>\n                ))}\n              </ul>\n            </div>\n          )}\n        </div>\n      )}\n    </div>\n  );\n}\n```\n\n### MaybeError API Reference\n\nSee [`@firtoz/maybe-error` README](../maybe-error/README.md) for type definitions and utilities.\n\n**Benefits:**\n- **Type Safety**: TypeScript enforces error handling at compile time\n- **Explicit Error Handling**: No more forgotten try-catch blocks\n- **Consistent API**: Same pattern across all operations that may fail\n- **Composable**: Easy to chain operations and handle errors at the right level\n\n## Troubleshooting\n\n### Common Issues\n\n**❌ \"Type 'string' is not assignable to type 'RoutePath<...>'\"**\n```tsx\n// ❌ Wrong - using string literal\nexport const route = \"/users\";\n\n// ✅ Correct - using RoutePath type\nexport const route: RoutePath<\"/users\"> = \"/users\";\n```\n\n**❌ \"Property 'data' does not exist on type 'any'\"**\n```tsx\n// ❌ Wrong - missing typeof import\nconst fetcher = useDynamicFetcher(\"/users\");\n\n// ✅ Correct - with typeof import for type inference\nconst fetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\n```\n\n**❌ \"Cannot find module './+types/route-name'\"**\n- Make sure you're using React Router 7.14+ or 8.x in framework mode\n- Check that your `react-router.config.ts` is properly configured\n- The `+types` directory is auto-generated by React Router\n\n**❌ \"fetcher.data is always undefined\"**\n```tsx\n// ❌ Wrong - forgot to call load()\nconst fetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\n\n// ✅ Correct - call load() to fetch data\nconst fetcher = useDynamicFetcher<typeof import(\"./users\")>(\"/users\");\nuseEffect(() => {\n  fetcher.load();\n}, []);\n```\n\n### Getting Help\n\n- Check the [React Router documentation](https://reactrouter.com) for framework mode setup\n- Look at the test application in the `tests/` directory for working examples\n- Open an issue on [GitHub](https://github.com/firtoz/fullstack-toolkit) if you find a bug\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## License\n\nMIT © [Firtina Ozbalikchi](https://github.com/firtoz)\n\n## Links\n\n- [GitHub Repository](https://github.com/firtoz/fullstack-toolkit)\n- [NPM Package](https://npmjs.com/package/@firtoz/router-toolkit)\n- [React Router Documentation](https://reactrouter.com) ","readmeFilename":"README.md"}