{"_id":"ws-dottie","_rev":"27-196abf620f83e4d86f6a4da57497b6d8","name":"ws-dottie","dist-tags":{"latest":"1.6.1"},"versions":{"0.1.0":{"name":"ws-dottie","version":"0.1.0","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.1.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/yourusername/ws-dottie#readme","bugs":{"url":"https://github.com/yourusername/ws-dottie/issues"},"dist":{"shasum":"ef49ce86e93d2325422251212ca4805845687ef2","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.1.0.tgz","fileCount":191,"integrity":"sha512-rqcFREOZxvoGctt9UPHa/UmoSUtOTRxQUpnNxkOtgTlg6qj/f7YzVQH4DJqKMC3oHWl41kBz6qNAZATMZ9eq0Q==","signatures":[{"sig":"MEUCIQDe2HUmrfbC33nYPzu71ZU8i8HWUWVKPNkIcsjADdZ25QIgW/zQssyu73SFK6ARxJe12wgf1bOP1Xbws+jR3opg9p8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6198108},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"3e5b03d201a0a0f55e26576f085eb3ab7f04ded5","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:fares":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-fares/","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:vessels":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-vessels/","test:e2e:schedule":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-schedule/","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:terminals":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-terminals/","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/yourusername/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.1.0_1753233418936_0.7389043219481539","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"ws-dottie","version":"0.1.1","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.1.1","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/yourusername/ws-dottie#readme","bugs":{"url":"https://github.com/yourusername/ws-dottie/issues"},"dist":{"shasum":"c99cee97ed1e6460b8405ecf1e6a1cf7b7cb61f6","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.1.1.tgz","fileCount":191,"integrity":"sha512-l/1WtCDOoSYf/41PmI4MrrtEjw4SUM7xhykJEeKZoi1dA4yPTIKlP2Kcd6obqS1xJE+0y/fWMFvT0JT+xZhe9g==","signatures":[{"sig":"MEYCIQDalWnWyqS/uwuMZTohgIRxf9Ai5HEeE4V6Jed5nBZtfQIhAJUPljx85pCUqW79vA36Z6Y/fqd55jkQUggnWaW0btWu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6198619},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"5150726ed5dc185cb43126c51b9ec4bb2d58c16e","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:fares":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-fares/","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:vessels":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-vessels/","test:e2e:schedule":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-schedule/","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:terminals":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-terminals/","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/yourusername/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.1.1_1753233952862_0.6119748419059912","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"ws-dottie","version":"0.1.2","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.1.2","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/robjacobson/ws-dottie#readme","bugs":{"url":"https://github.com/robjacobson/ws-dottie/issues"},"dist":{"shasum":"9fade2f643854ad7fe236b464675993dbc75cb1b","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.1.2.tgz","fileCount":191,"integrity":"sha512-XDOeQLw23AvsQwEy9eXriANxkQl9ylZXwF11OiXEEOpkoJprD7CWkF18aobgVSLmN2W5us4qb6y3G917e0zlOw==","signatures":[{"sig":"MEYCIQDlIxyFYbTt3Vxh3uBmCniCxMz0HUoSIAON0OpNiyUe9gIhALyX+ye9LlxWKruxKV0w5btUTK6yjt2u+cgDuN9c2fVi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6199423},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"cbcb9c2392c09f6d8f909d9842baaac22e7a723e","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:fares":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-fares/","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:vessels":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-vessels/","test:e2e:schedule":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-schedule/","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:terminals":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-terminals/","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/robjacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.1.2_1753234218413_0.13019479417905577","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"ws-dottie","version":"0.1.3","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.1.3","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"df4d27b23a982165c522bfd5a503879122ee8144","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.1.3.tgz","fileCount":191,"integrity":"sha512-cbxUkzco5/GCkiBVHPFY5437nwHaEdG0cmGdWAZe+WdpRejcjfULwK4gMyUP3h4SaLsBWY46yadO3mrW1f45wA==","signatures":[{"sig":"MEQCIGZs/r6nmGMYg9uLeUNq0a8pAGCvsZxx4eGLN33uSRT+AiBNcPz8lGA6/rSbsYbUWwsIrhyL875EX5PJ8j+tEBqgWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6214046},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"2b2abf3451236ad4a3d06034e968c7359799dbdd","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:fares":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-fares/","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:vessels":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-vessels/","test:e2e:schedule":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-schedule/","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:terminals":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsf-terminals/","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:toll-rates":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-toll-rates/","test:e2e:traffic-flow":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-traffic-flow/","test:e2e:travel-times":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-travel-times/","test:e2e:highway-alerts":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-highway-alerts/","test:e2e:highway-cameras":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-highway-cameras/","test:e2e:border-crossings":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-border-crossings/","test:e2e:weather-stations":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-weather-stations/","test:e2e:bridge-clearances":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-bridge-clearances/","test:e2e:weather-information":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-weather-information/","test:e2e:mountain-pass-conditions":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-mountain-pass-conditions/","test:e2e:weather-information-extended":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-weather-information-extended/","test:e2e:commercial-vehicle-restrictions":"vitest --config config/vitest.e2e.config.ts tests/e2e/wsdot-commercial-vehicle-restrictions/"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.1.3_1753254469683_0.4445012206007515","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"ws-dottie","version":"0.2.0","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.2.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"6078dc92cd8ed5c87f66428330b4d9521b0d2735","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.2.0.tgz","fileCount":191,"integrity":"sha512-wbRdPiUCkOkbjSImlfp9JRGE+k8uQpyh0s5z+bDxNJlyH3CoZEBuFMOOMCMXNmiy59QJQdDv/jlZonD7mlAdXg==","signatures":[{"sig":"MEUCIQDydZTBEyhEJccmQssgZcvitSV4mrRk53rjzHaE1zr9ogIgMUK446k0Y6k6pt9nca7qxYhDqfm+++ZOOa0kduuMZ4M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6417472},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"36db01bb84a7e351fc4c7aa56273b2b2d8a03c8e","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.2.0_1753418840354_0.5742478190325526","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"ws-dottie","version":"0.2.1","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.2.1","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"a87aa47f3f1a9d4bab7f9614d45b4a279fc75675","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.2.1.tgz","fileCount":27,"integrity":"sha512-TBUFtzraW/CwwI4TA2aA2FXPK/muod/zUZRc7hNCN8szeei1hcsJ0iZdZvV5u6XDEFJiLSln+CCHgBp95RdReg==","signatures":[{"sig":"MEUCIAe7Ti1qQ9/a8HeTwymVlE68OpM3I9W3OfEy1BbXMzsyAiEAk9z0agG82apo8a0h/To80b+7NBbQ8bKhCGyqtkoQTM4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1092207},"main":"dist/index.mjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"78a249dfa2da40c914b88773eba6d28480824f33","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.2.1_1753511722148_0.2422684940292701","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"ws-dottie","version":"0.2.2","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.2.2","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"71a6e7f4aa4afafc27e1c998d3fb27d860e8d3c4","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.2.2.tgz","fileCount":27,"integrity":"sha512-wvukfWgviAPLAeAOtojB7JCVwiIp6dMF4L3MmTEW+TXMJ81ns3zW0nlHgN08gv0Txpjx3iEqTXhRpSNslzvIMA==","signatures":[{"sig":"MEUCIQC1Ca9Oeqo2R7bxWt/TrAsKH1bJzBkXkGaxBAeHpwisIQIgK4/rNgTO7wMqvM/fe1Cp0oWi23aT8c2DfoPo1oD88U8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1091157},"main":"dist/index.mjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"4b363e5c821fc99b6e2e6d85ce1b7e63c00f8c95","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.2.2_1753567200683_0.5759770745933352","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"ws-dottie","version":"0.2.3","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.2.3","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"8d29fbbbf089f3dc8ec4681388cc7e3c4a5d0319","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.2.3.tgz","fileCount":26,"integrity":"sha512-xZqxxmGttJ3BziO4c916zJg0Gc8Dx/e8zgjptGlRCBap4NTZK/LMrpBzDf7nLAZnF4gDZY3o5Fr+IbIwN+di1g==","signatures":[{"sig":"MEUCIQDakBerh/O0dQkQzfbf8Hl+wTWlSYp7GX7+TG+NblKQPwIgRqtxw1E93SUZKtPIpdTDlfge51o5sN5/xqE/WkFzcX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":850791},"main":"dist/index.mjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"e67b99cd9bb25593a178254f41d1b9415052b35e","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.2.3_1753573087602_0.7895380780285479","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"ws-dottie","version":"0.2.4","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.2.4","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"ec59f174bb7bb97917b820b710b91c96a87f03b2","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.2.4.tgz","fileCount":26,"integrity":"sha512-jB20tkbMLrV+2WjH3p9WAGTnobCzmQ4jd1ai1dHnMxiF7LvbQe4yr+eG55LnGNbtbTVbKDGDF5J/RES41QS1nw==","signatures":[{"sig":"MEYCIQDRXRSRpZ2hUCkLSrCHxvDn8ToKUROMuMJGIKA8LUYbwwIhAIRkrswAGrRPWx9T5yvoT9XAaKy0cOl6yj39aB7uzOAC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":849126},"main":"dist/index.mjs","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"af70e3d23b77bf3933783841765718e619c1ae3f","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.2.4_1753579866696_0.2751886956864331","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"ws-dottie","version":"0.3.0","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.3.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"64cef3d2b5057424dc31828ef9ba4c66d7254a5e","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.3.0.tgz","fileCount":29,"integrity":"sha512-iTfSjli9ZWrpUnVNXBGQ6bzNZBQXAFqL1GPMDHiBzOWUmBbq32TziOTmlhccSWwNgK+//enh5GEVevHc8NWBag==","signatures":[{"sig":"MEYCIQDL5UPRb1Q6dWnWZSlit6gttyrpzAqdMOIG/SM/e+9JKgIhALCEo9dKFuwk6/NppQcJifiHi6JDzRKqDrX9taeUa/gu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1442896},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"43267bea58fa3f00bd6d29ddccee9dbeea981c0d","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:jsonp":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:watch":"FORCE_JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.3.0_1753591516895_0.7780979271672992","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"ws-dottie","version":"0.4.0","keywords":["wsdot","washington-state","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.4.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"211c773fadad021b29950d35d27a07d7e52c9fbc","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.4.0.tgz","fileCount":30,"integrity":"sha512-gWBQpselX+boU8yYRV7Gnx3BIWIO8S42GP8GnqNfHRV9WJyUT3vsSvJJmzQudlqvN3XMe07waA7MBvlr/y7yJw==","signatures":[{"sig":"MEQCIFqXxwLT/RPLmArDnThYEKNxm+wRqZmmuCG3aR/gocOqAiBUqYS/CVuOAL0a7fIV3I8NQhFJ7/yYp8E8dj5ZNBKHWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1488448},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"5ab3a8cd053d3bdd455fbedcf03b64fc65e702f2","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:api:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:validation:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:flag":"node scripts/test-jsonp.js --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --jsonp","test:e2e:validation:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","_hasShrinkwrap":false,"devDependencies":{"zod":"^3.22.4","tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.4.0_1753598794298_0.4118374751813907","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"ws-dottie","version":"0.5.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.5.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"24d93857c2a2fb65efde4447323871335972c232","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.5.0.tgz","fileCount":30,"integrity":"sha512-EvrnVGa3qdJGpBjQHzQzlMn02LKDFA2s4P1SCWZbToiRMXukboLINVm05MqnjA2slnD3I8Yb62fCDyUdWOWk3A==","signatures":[{"sig":"MEUCIQCmc47c+GzliZ/Qd3zcjIiMKTmpPG4N2sZ6hLlC1shXwgIgOtN1FWcunZWN6co+iYoFw4PYWxqmrWJC6+O8aarhv9c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3053926},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"f4a8121f1410cd3e3628aec574d7cdd485ef2cf0","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:api:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:validation:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:flag":"node scripts/test-jsonp.js --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --jsonp","test:e2e:validation:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.5.0_1754953439766_0.1278169623753178","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"ws-dottie","version":"0.6.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.6.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"dist":{"shasum":"01730dac4a702c689847b7901ed9b83f317dc76a","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.6.0.tgz","fileCount":30,"integrity":"sha512-aUCPLvQVTtfgHG+YnZHCdqMb1o0NPlZ9gzOJeo/ntR3UVGZ6B2KEtQM4FVRdZOTIngFy5/Rfjh5e67G4dNNOlg==","signatures":[{"sig":"MEUCIA1rVqqta/l7iNiE6DQ8M/Ngv2LDRHZUuZKQfg0EBDvjAiEAy3xFQ3KSRMgGilieuSXY7/kx4JXmrhqltoZ+1OeZegg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1984570},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"e58b62d63d166eea133e9899b84600b959147a66","scripts":{"dev":"tsup --watch","lint":"biome lint src/ tests/","test":"vitest --config config/vitest.config.ts","build":"tsup","format":"biome format --write src/ tests/","test:ui":"vitest --ui","test:e2e":"vitest --config config/vitest.e2e.config.ts","test:unit":"vitest --config config/vitest.unit.config.ts","type-check":"tsc --noEmit","test:e2e:api":"vitest --config config/vitest.e2e.api.config.ts","test:coverage":"vitest --coverage","test:e2e:hook":"vitest --config config/vitest.e2e.hook.config.ts","prepublishOnly":"npm run build","test:e2e:watch":"vitest --config config/vitest.e2e.config.ts --watch","test:e2e:api:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts","test:e2e:api:watch":"vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:hook:watch":"vitest --config config/vitest.e2e.hook.config.ts --watch","test:e2e:validation":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:api:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts --watch","test:e2e:validation:jsonp":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/","test:e2e:validation:watch":"vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch","test:e2e:validation:jsonp:flag":"node scripts/test-jsonp.js --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --jsonp","test:e2e:validation:jsonp:watch":"JSONP=true vitest --config config/vitest.e2e.api.config.ts tests/e2e/validation/ --watch"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^1.0.0","react-dom":"^19.0.0","@vitest/ui":"^1.0.0","typescript":"^5.0.0","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.0.6","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.6.0_1754980367439_0.01598838339265085","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"ws-dottie","version":"0.7.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.7.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs","fetch-native":"dist/cli/fetch-native.mjs"},"dist":{"shasum":"54db7830379508b386fab68b8eec493519d9f8f8","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.7.0.tgz","fileCount":1255,"integrity":"sha512-imaV/+cWHdv+agysWI0l5pRfoIDNhqda8wc6QJaa935BXmqrFSu/gfPGrKgXJWarxrY8BIGWvyBos/Eaqo7b+g==","signatures":[{"sig":"MEUCIH6sYXbZXka8+Zaff4jqM6DS298QDMKaYE/Z6DJjtpa3AiEAmFMj2Cyk9vNtIyP8ggKLNtmIQH7FgbZnXkVuGkSpONU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":11195901},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"1a9ad2efb36c6ba10239566e5edf8c3eb4bca7ea","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","dottie":"node dist/cli/fetch-dottie.mjs","format":"biome check --write src/","native":"node dist/cli/fetch-native.mjs","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config config/vitest.config.ts --run tests/e2e/main.test.ts --reporter=verbose","type-check":"tsc --noEmit","test:direct":"vitest --config config/vitest.config.ts --run","test:module":"vitest --config config/vitest.config.ts --run tests/e2e/main.test.ts","nuke-comments":"node scripts/nuke-jsdoc-comments.js","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","chalk":"^5.6.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.7.0_1758430215003_0.9722735924500256","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"ws-dottie","version":"0.8.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.8.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"606d5fdd548ef024b214aafd2943113756c7a6f6","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.8.0.tgz","fileCount":190,"integrity":"sha512-0ChVh/RNf1S54rlAeMp0TYaNrDP3m8d/KL5Cro3BKrGexpAlA0ZhYewt67a+Ypz2B/nfR7GrL8lS5bkw+Z88jA==","signatures":[{"sig":"MEUCIQDYeb7lr6fVLHQVFSISSZi6sRp1fPsZ4QQKNBHTLxYRAAIgS5A2boM0ZOorjLu6RXMGtibP++Bsw9HLjr3DSMPgBR8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4086299},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"cb294e06dca6e3645bab91318399f7375cf8e1ac","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config config/vitest.config.ts --run tests/e2e/tests/ --reporter=verbose","type-check":"tsc --noEmit","test:direct":"vitest --config config/vitest.config.ts --run","test:module":"vitest --config config/vitest.config.ts --run tests/e2e/tests/","fetch-dottie":"node dist/cli/fetch-dottie.mjs","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.8.0_1759888502654_0.9669184377869562","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"ws-dottie","version":"0.8.1","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.8.1","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"3832ca8bd3b7bad7263734bcc8d8f482d74bbc25","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.8.1.tgz","fileCount":194,"integrity":"sha512-GDTokFLY6PVBwTYkjJbJ7Ef/LdphNTbBdE6YnagUBCdSsFYyrBSqEwcopsjnXHobtbfLw3A8fD/0kWsYLwvG8w==","signatures":[{"sig":"MEYCIQDg4vWZSjqZxejSwPo7nTi690+ZN+QtCA3pnUwaCZvqlwIhAP6jiIpCMee+2NN+nRk03Pp2xSZID3Nm2jdqNuy9lfyS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2964267},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"cfc637564f60356637386da379aa94ce615d461a","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config config/vitest.config.ts --run tests/e2e/tests/ --reporter=verbose","type-check":"tsc --noEmit","test:direct":"vitest --config config/vitest.config.ts --run","test:module":"vitest --config config/vitest.config.ts --run tests/e2e/tests/","fetch-dottie":"node dist/cli/fetch-dottie.mjs","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.4.2","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.3.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.8.1_1759970663267_0.11912076509861658","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"ws-dottie","version":"0.9.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@0.9.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"bc0b33726216ce678b0130d90e1ce0e32efea4ba","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-0.9.0.tgz","fileCount":1734,"integrity":"sha512-0JY/2N+aTVEZFNzmrrz7nb9HmZzDzVJvNTSVvb9Qx4nS7H20oX90hJgZJRdLXnabe5FUPrjKLNdbLDjJjR+Y2g==","signatures":[{"sig":"MEUCIQDy+9ynG96uxm/oWI5+6tQxHoqcGgA7RIYnApBi/lKYJgIgHtxIDiagW7L+x70PkPDI6Fyi+ov10+WoofC/CDZGANU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32594143},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"c063a604b65259a93a0ad34ac8dbe9a7736a3e5f","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","type-check":"tsc --noEmit","test:direct":"vitest --config config/vitest.config.ts --run","fetch-dottie":"node dist/cli/fetch-dottie.mjs","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","typescript":"^5.8.3","@types/node":"^24.0.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_0.9.0_1760834379254_0.8272585468504485","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"ws-dottie","version":"1.0.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.0.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"c34355f2a1220b4e23a588abb09c15b014975535","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.0.0.tgz","fileCount":1241,"integrity":"sha512-gDxuv14XF5NwDc8l9I94ycOP2Z4RdqVoiluPvNPUA6OPZoIrGY3y4QMdWa9CLADb61T4v9eSp4tHeWy6ejQtIA==","signatures":[{"sig":"MEUCIQDupo2jkjff9XBLdJtW6m4qmGdo18SJT5xmbX/n4ZbYdAIgZ/NSL1KIAGVCOIodqNYsp6bk7QY41nvfX4UUuDwddOU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65633936},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"}},"gitHead":"fca22ca87c211f646a8a34a1f6b77905d4a9a44d","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","docs:generate":"npm run docs:openapi && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@playwright/test":"^1.56.1","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.0.0_1762309945702_0.9457893189071294","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"ws-dottie","version":"1.1.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.1.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"ed721a7f19f42db9b6f94cded750396ae7432ca5","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.1.0.tgz","fileCount":2396,"integrity":"sha512-KvFez2M5hqmZ9HWILgSt9i+riz3MCQo0zAd+hMWg1KuesY3E2pihHzGdK2DLC9rU/QUt0JXSMCeK+5NvfjeXdw==","signatures":[{"sig":"MEQCIArHK81LnbffeDwnUozS0xw3kowaYXzGZFw7EVKWbS1DAiBSCkzJ8zlxgEkAGF6dAetPMJd/9ftKs/0SlcBknc5fiQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74749239},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"},"./wsf-fares":{"types":"./dist/wsf-fares/index.d.ts","import":"./dist/wsf-fares/index.mjs","require":"./dist/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/wsf-vessels/index.d.ts","import":"./dist/wsf-vessels/index.mjs","require":"./dist/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/wsf-schedule/index.d.ts","import":"./dist/wsf-schedule/index.mjs","require":"./dist/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/wsf-terminals/index.d.ts","import":"./dist/wsf-terminals/index.mjs","require":"./dist/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/wsf-fares/core.d.ts","import":"./dist/wsf-fares/core.mjs","require":"./dist/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/wsdot-toll-rates/index.d.ts","import":"./dist/wsdot-toll-rates/index.mjs","require":"./dist/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/wsf-vessels/core.d.ts","import":"./dist/wsf-vessels/core.mjs","require":"./dist/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/wsf-fares/schemas.d.ts","import":"./dist/wsf-fares/schemas.mjs","require":"./dist/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/wsf-schedule/core.d.ts","import":"./dist/wsf-schedule/core.mjs","require":"./dist/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/wsdot-traffic-flow/index.d.ts","import":"./dist/wsdot-traffic-flow/index.mjs","require":"./dist/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/wsdot-travel-times/index.d.ts","import":"./dist/wsdot-travel-times/index.mjs","require":"./dist/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/wsf-terminals/core.d.ts","import":"./dist/wsf-terminals/core.mjs","require":"./dist/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/wsf-vessels/schemas.d.ts","import":"./dist/wsf-vessels/schemas.mjs","require":"./dist/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/wsdot-highway-alerts/index.d.ts","import":"./dist/wsdot-highway-alerts/index.mjs","require":"./dist/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/wsf-schedule/schemas.d.ts","import":"./dist/wsf-schedule/schemas.mjs","require":"./dist/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/wsdot-highway-cameras/index.d.ts","import":"./dist/wsdot-highway-cameras/index.mjs","require":"./dist/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/wsdot-toll-rates/core.d.ts","import":"./dist/wsdot-toll-rates/core.mjs","require":"./dist/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/wsf-terminals/schemas.d.ts","import":"./dist/wsf-terminals/schemas.mjs","require":"./dist/wsf-terminals/schemas.js"},"./wsdot-border-crossings":{"types":"./dist/wsdot-border-crossings/index.d.ts","import":"./dist/wsdot-border-crossings/index.mjs","require":"./dist/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/wsdot-weather-readings/index.d.ts","import":"./dist/wsdot-weather-readings/index.mjs","require":"./dist/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/wsdot-weather-stations/index.d.ts","import":"./dist/wsdot-weather-stations/index.mjs","require":"./dist/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/wsdot-bridge-clearances/index.d.ts","import":"./dist/wsdot-bridge-clearances/index.mjs","require":"./dist/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/wsdot-traffic-flow/core.d.ts","import":"./dist/wsdot-traffic-flow/core.mjs","require":"./dist/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/wsdot-travel-times/core.d.ts","import":"./dist/wsdot-travel-times/core.mjs","require":"./dist/wsdot-travel-times/core.js"},"./wsdot-toll-rates/schemas":{"types":"./dist/wsdot-toll-rates/schemas.d.ts","import":"./dist/wsdot-toll-rates/schemas.mjs","require":"./dist/wsdot-toll-rates/schemas.js"},"./wsdot-highway-alerts/core":{"types":"./dist/wsdot-highway-alerts/core.d.ts","import":"./dist/wsdot-highway-alerts/core.mjs","require":"./dist/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/wsdot-weather-information/index.d.ts","import":"./dist/wsdot-weather-information/index.mjs","require":"./dist/wsdot-weather-information/index.js"},"./wsdot-highway-cameras/core":{"types":"./dist/wsdot-highway-cameras/core.d.ts","import":"./dist/wsdot-highway-cameras/core.mjs","require":"./dist/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/wsdot-traffic-flow/schemas.d.ts","import":"./dist/wsdot-traffic-flow/schemas.mjs","require":"./dist/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/wsdot-travel-times/schemas.d.ts","import":"./dist/wsdot-travel-times/schemas.mjs","require":"./dist/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/wsdot-border-crossings/core.d.ts","import":"./dist/wsdot-border-crossings/core.mjs","require":"./dist/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/wsdot-weather-readings/core.d.ts","import":"./dist/wsdot-weather-readings/core.mjs","require":"./dist/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/wsdot-weather-stations/core.d.ts","import":"./dist/wsdot-weather-stations/core.mjs","require":"./dist/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/wsdot-bridge-clearances/core.d.ts","import":"./dist/wsdot-bridge-clearances/core.mjs","require":"./dist/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/wsdot-highway-alerts/schemas.d.ts","import":"./dist/wsdot-highway-alerts/schemas.mjs","require":"./dist/wsdot-highway-alerts/schemas.js"},"./wsdot-highway-cameras/schemas":{"types":"./dist/wsdot-highway-cameras/schemas.d.ts","import":"./dist/wsdot-highway-cameras/schemas.mjs","require":"./dist/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/wsdot-border-crossings/schemas.d.ts","import":"./dist/wsdot-border-crossings/schemas.mjs","require":"./dist/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/wsdot-weather-information/core.d.ts","import":"./dist/wsdot-weather-information/core.mjs","require":"./dist/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/wsdot-weather-readings/schemas.d.ts","import":"./dist/wsdot-weather-readings/schemas.mjs","require":"./dist/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/wsdot-weather-stations/schemas.d.ts","import":"./dist/wsdot-weather-stations/schemas.mjs","require":"./dist/wsdot-weather-stations/schemas.js"},"./wsdot-bridge-clearances/schemas":{"types":"./dist/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/wsdot-bridge-clearances/schemas.mjs","require":"./dist/wsdot-bridge-clearances/schemas.js"},"./wsdot-weather-information/schemas":{"types":"./dist/wsdot-weather-information/schemas.d.ts","import":"./dist/wsdot-weather-information/schemas.mjs","require":"./dist/wsdot-weather-information/schemas.js"},"./wsdot-mountain-pass-conditions/core":{"types":"./dist/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/wsdot-mountain-pass-conditions/core.js"},"./wsdot-commercial-vehicle-restrictions":{"types":"./dist/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/wsdot-commercial-vehicle-restrictions/index.js"},"./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/wsdot-commercial-vehicle-restrictions/core.js"},"./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/wsdot-commercial-vehicle-restrictions/schemas.js"}},"gitHead":"34c4dbbf8351bb072c94d0e7088a209072d51598","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","docs:generate":"npm run docs:openapi && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@playwright/test":"^1.56.1","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.1.0_1762593635318_0.09814642799116746","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"ws-dottie","version":"1.2.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.2.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"2322fb7ef770ed43e0f6ca820ba86451d2c6b08b","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.2.0.tgz","fileCount":2621,"integrity":"sha512-PeDfUsJMPFgszsfbFWTJldTQMxWvN8nG+dR2UUvqMv/mZR8w7SblSd/M6lVhX5bi9ijhZXLs0mfoBXCOqLJOVQ==","signatures":[{"sig":"MEUCID1lBeGMuUahBxHAcosV2T1IG06/Rt1teOGmpAKnuMfbAiEAxmv+FofF87NBmn5npxbnNjfOObsXp4isxSk2ClOjNDo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77224385},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"}},"gitHead":"6c05de679a546591b9d10e8d28387919f0dc1dfa","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","docs:generate":"npm run docs:openapi && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"typesVersions":{"*":{"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@playwright/test":"^1.56.1","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.2.0_1762642044590_0.19134206434713774","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"ws-dottie","version":"1.3.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.3.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"def859064b18b361a25fdee8b424ac6b128633c2","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.3.0.tgz","fileCount":3220,"integrity":"sha512-bbx0vxgG8TgDspXGby43bQKS/Kf+eOuPI1AWgMSGQ/iUi8cc3QVWztyLgYMq9PL9n/WkYA+VOq4CmpVc/yFM2A==","signatures":[{"sig":"MEQCIAXX+1O7garF2CQDYei3d79pwnze1SQoyIJFwtfIzxfPAiATkdJE2wajH3IA5zG6oRU6TFfa8wcKXYOfwRIlCzURqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61073126},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"}},"gitHead":"bd11246f16a5bf3b2e61b4517c2c647a9059f770","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","docs:generate":"npm run docs:openapi && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"typesVersions":{"*":{"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@playwright/test":"^1.56.1","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.3.0_1763275822174_0.9124781335472862","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"ws-dottie","version":"1.3.1","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-ferry-api","washington-state-department-of-transportation","washington-state-department-of-transportation-api","transportation","api","traffic","weather","ferries","highway-cameras","travel-times","typescript","react","react-query","tanstack-query","jsonp","cors","real-time","traffic-data","ferry-data"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.3.1","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"be52a7e0ec88d9fda6d52ceb673ee5b2fe60624d","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.3.1.tgz","fileCount":3276,"integrity":"sha512-0e2sVUjrqR6iyoMwjCsef/weaGPQwa7D3f4AsoJRaADNxIXXBse1pFuMkC3GkFVi47RdwTdXzQpunZvdnDJJ9w==","signatures":[{"sig":"MEQCIGsywN92eqa72oU+CypgML35hHJ7H8582GGdaqpbpxp3AiBqfG24so8TGDK1rGHt45ft3uYpaXWhPmdwduZDRrxQsg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":64325858},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json"},"gitHead":"473253b89ddb42d972b375352694c340a44d2811","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"npm run docs:openapi:json && tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","copy:openapi":"node -e \"const { copyFileSync, existsSync, mkdirSync, readdirSync } = require('fs'); const { join } = require('path'); const sourceDir = join(__dirname, 'docs', 'generated', 'openapi-json'); const targetDir = join(__dirname, 'dist', 'openapi'); if (!existsSync(targetDir)) mkdirSync(targetDir, { recursive: true }); if (existsSync(sourceDir)) { const files = readdirSync(sourceDir).filter(f => f.endsWith('.json')); let count = 0; files.forEach(file => { copyFileSync(join(sourceDir, file), join(targetDir, file)); count++; }); console.log(`Copied \\${count} OpenAPI JSON files to dist/openapi/`); } else { console.warn('OpenAPI JSON source directory not found. Run npm run docs:openapi:json first.'); }\"","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","test:openapi":"node scripts/test-openapi-exports.js","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","turndown":"^7.2.1","picocolors":"^1.1.1","turndown-plugin-gfm":"^1.0.2"},"typesVersions":{"*":{"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","jsdom":"^26.1.0","react":"^19.0.0","dotenv":"^17.2.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/jsdom":"^21.1.7","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@playwright/test":"^1.56.1","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.3.1_1763331765269_0.8601036319856246","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"ws-dottie","version":"1.4.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.4.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"36cb87fddfdbe265de8d5a8635d406ee33e4c9f1","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.4.0.tgz","fileCount":4196,"integrity":"sha512-9lY0rQDPwMxsEEdONR9YbAqAGPSqaNSsPHWfW3sLV/8nhi2nQt16/eifx7eODEgx1OXKpKVFpfkYJWNo+Fj+hA==","signatures":[{"sig":"MEUCIQD46xg1nl0JJkxNzXIxfTfJ6pq6w5lIn7okxnSEgQdjiQIgCDVB2El2DrJVpek/qDHBR6NzPHtT9HByke9VwQvOJbs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71768379},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./types":{"types":"./dist/index.d.ts"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json"},"gitHead":"4d147c007d6baa0a8955bcafcfeef55f19b29777","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"npm run docs:openapi:json && tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","copy:openapi":"node scripts/copy-openapi.js","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","test:openapi":"node scripts/test-openapi-exports.js","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","picocolors":"^1.1.1"},"typesVersions":{"*":{"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.4.0_1763509666158_0.8605813170805929","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"ws-dottie","version":"1.5.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.5.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"1c50096086c90ef6163b29b90bb532a0d2e8490d","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.5.0.tgz","fileCount":2205,"integrity":"sha512-KEzl1zH6SKZNbGPROxdmm+FfO8syBfyvWwhD6ZLA7lTillRtp4pzbKBXw0k8YVNYE4o/PmTsUXjCwpvdVGeByg==","signatures":[{"sig":"MEYCIQC5aoAgKm4Ei3r0GSIh9fijOhIfoss+uFGk44tvQXpNsAIhAMQRWtaT4xr0KJu1HfrzV2dXzXWQk2IfT8NIj+DDdOtO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":32552970},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./apis":{"types":"./dist/apis/index.d.ts","import":"./dist/apis/index.mjs","require":"./dist/apis/index.js"},"./types":{"types":"./dist/index.d.ts"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./openapi/wsf-fares.yaml":"./dist/openapi/wsf-fares.yaml","./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./openapi/wsf-vessels.yaml":"./dist/openapi/wsf-vessels.yaml","./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./openapi/wsf-schedule.yaml":"./dist/openapi/wsf-schedule.yaml","./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./openapi/wsf-terminals.yaml":"./dist/openapi/wsf-terminals.yaml","./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./openapi/wsdot-toll-rates.yaml":"./dist/openapi/wsdot-toll-rates.yaml","./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-traffic-flow.yaml":"./dist/openapi/wsdot-traffic-flow.yaml","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./openapi/wsdot-travel-times.yaml":"./dist/openapi/wsdot-travel-times.yaml","./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./openapi/wsdot-highway-alerts.yaml":"./dist/openapi/wsdot-highway-alerts.yaml","./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-highway-cameras.yaml":"./dist/openapi/wsdot-highway-cameras.yaml","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-border-crossings.yaml":"./dist/openapi/wsdot-border-crossings.yaml","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-readings.yaml":"./dist/openapi/wsdot-weather-readings.yaml","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./openapi/wsdot-weather-stations.yaml":"./dist/openapi/wsdot-weather-stations.yaml","./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./openapi/wsdot-bridge-clearances.yaml":"./dist/openapi/wsdot-bridge-clearances.yaml","./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./openapi/wsdot-weather-information.yaml":"./dist/openapi/wsdot-weather-information.yaml","./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./openapi/wsdot-mountain-pass-conditions.yaml":"./dist/openapi/wsdot-mountain-pass-conditions.yaml","./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json","./openapi/wsdot-commercial-vehicle-restrictions.yaml":"./dist/openapi/wsdot-commercial-vehicle-restrictions.yaml"},"gitHead":"b533488795fd25720337584f8eeb35e0a822c89e","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"node scripts/testRunner.js","build":"npm run docs:openapi:json && tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","copy:openapi":"node scripts/copy-openapi.js","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","test:openapi":"node scripts/test-openapi-exports.js","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.0.0","glob":"^11.0.3","json5":"^2.2.3","picocolors":"^1.1.1"},"typesVersions":{"*":{"apis":["dist/apis/index.d.ts"],"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.1.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.5.0_1763697558342_0.4372766963579089","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"ws-dottie","version":"1.5.1","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.5.1","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"3d5d16caaecace1c62d9987f92e00412883c0c87","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.5.1.tgz","fileCount":3337,"integrity":"sha512-bPFXHrY/pHMwTYDkVo1UUCVuC5sndoJ6+BYwftulDby0Ui6+3WJ3vBjbPAOw+aMyYTAisWDC79y7DV/t147rfg==","signatures":[{"sig":"MEYCIQDPNG1KHvvwNLxaj5qg91ouJ4rbFl7U7Wg06OMbWDu6QwIhAMLTzj3qXmDCx0vxn9ZeToTSaxd620zDzoA6TuazexXR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44713656},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./apis":{"types":"./dist/apis/index.d.ts","import":"./dist/apis/index.mjs","require":"./dist/apis/index.js"},"./types":{"types":"./dist/index.d.ts"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./openapi/wsf-fares.yaml":"./dist/openapi/wsf-fares.yaml","./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./openapi/wsf-vessels.yaml":"./dist/openapi/wsf-vessels.yaml","./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./openapi/wsf-schedule.yaml":"./dist/openapi/wsf-schedule.yaml","./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./openapi/wsf-terminals.yaml":"./dist/openapi/wsf-terminals.yaml","./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./openapi/wsdot-toll-rates.yaml":"./dist/openapi/wsdot-toll-rates.yaml","./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-traffic-flow.yaml":"./dist/openapi/wsdot-traffic-flow.yaml","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./openapi/wsdot-travel-times.yaml":"./dist/openapi/wsdot-travel-times.yaml","./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./openapi/wsdot-highway-alerts.yaml":"./dist/openapi/wsdot-highway-alerts.yaml","./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-highway-cameras.yaml":"./dist/openapi/wsdot-highway-cameras.yaml","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-border-crossings.yaml":"./dist/openapi/wsdot-border-crossings.yaml","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-readings.yaml":"./dist/openapi/wsdot-weather-readings.yaml","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./openapi/wsdot-weather-stations.yaml":"./dist/openapi/wsdot-weather-stations.yaml","./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./openapi/wsdot-bridge-clearances.yaml":"./dist/openapi/wsdot-bridge-clearances.yaml","./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./openapi/wsdot-weather-information.yaml":"./dist/openapi/wsdot-weather-information.yaml","./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./openapi/wsdot-mountain-pass-conditions.yaml":"./dist/openapi/wsdot-mountain-pass-conditions.yaml","./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json","./openapi/wsdot-commercial-vehicle-restrictions.yaml":"./dist/openapi/wsdot-commercial-vehicle-restrictions.yaml"},"gitHead":"d77dbeb320afa71cb022c2096e6d47cf11cd0fda","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"vitest --config tests/e2e/vitest.config.ts --run","build":"npm run docs:openapi:json && tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","copy:openapi":"node scripts/copy-openapi.js","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","test:openapi":"node scripts/test-openapi-exports.js","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^3.25.76","glob":"^11.0.3","json5":"^2.2.3","picocolors":"^1.1.1"},"typesVersions":{"*":{"apis":["dist/apis/index.d.ts"],"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","react":"^19.0.0","vitest":"^3.2.4","js-yaml":"^4.1.0","commander":"^14.0.0","react-dom":"^19.0.0","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.1","typescript":"^5.8.3","@types/node":"^24.0.0","@redocly/cli":"^2.10.0","@types/react":"^18.0.0","@biomejs/biome":"^2.2.4","fast-deep-equal":"^3.1.3","@types/react-dom":"^18.0.0","@tanstack/react-query":"^5.0.0","@testing-library/react":"^16.3.0","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^7.3.4"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.5.1_1763852299243_0.05291421485145564","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"ws-dottie","version":"1.6.0","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","_id":"ws-dottie@1.6.0","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"homepage":"https://github.com/RobJacobson/ws-dottie#readme","bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"dist":{"shasum":"33e3f71095e1537699647b08e54900fada6decfe","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.6.0.tgz","fileCount":1616,"integrity":"sha512-E4A5Dh+ZLIFnwpW8L7hmq63PXpW9uIbUZY2T847pdc/lEd5ql0VKQ9pQgDANFTOG9zCnotiSq6T3l1hyKj1yXA==","signatures":[{"sig":"MEUCIQCfh3Bo+vHyJEZToRjBohAT5oJH4+x4xj2A8DyNxQom/gIgeIzmEHs+x/CzKOuFNGVTAC+PwtlIoYgtPclgLPhLOo0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37338602},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","default":"./dist/index.mjs","require":"./dist/index.js"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./apis":{"types":"./dist/apis/index.d.ts","import":"./dist/apis/index.mjs","require":"./dist/apis/index.js"},"./types":{"types":"./dist/index.d.ts"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"},"./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./openapi/wsf-fares.yaml":"./dist/openapi/wsf-fares.yaml","./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./openapi/wsf-vessels.yaml":"./dist/openapi/wsf-vessels.yaml","./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./openapi/wsf-schedule.yaml":"./dist/openapi/wsf-schedule.yaml","./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./openapi/wsf-terminals.yaml":"./dist/openapi/wsf-terminals.yaml","./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./openapi/wsdot-toll-rates.yaml":"./dist/openapi/wsdot-toll-rates.yaml","./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-traffic-flow.yaml":"./dist/openapi/wsdot-traffic-flow.yaml","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./openapi/wsdot-travel-times.yaml":"./dist/openapi/wsdot-travel-times.yaml","./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./openapi/wsdot-highway-alerts.yaml":"./dist/openapi/wsdot-highway-alerts.yaml","./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-highway-cameras.yaml":"./dist/openapi/wsdot-highway-cameras.yaml","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-border-crossings.yaml":"./dist/openapi/wsdot-border-crossings.yaml","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-readings.yaml":"./dist/openapi/wsdot-weather-readings.yaml","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./openapi/wsdot-weather-stations.yaml":"./dist/openapi/wsdot-weather-stations.yaml","./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./openapi/wsdot-bridge-clearances.yaml":"./dist/openapi/wsdot-bridge-clearances.yaml","./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./openapi/wsdot-weather-information.yaml":"./dist/openapi/wsdot-weather-information.yaml","./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./openapi/wsdot-mountain-pass-conditions.yaml":"./dist/openapi/wsdot-mountain-pass-conditions.yaml","./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json","./openapi/wsdot-commercial-vehicle-restrictions.yaml":"./dist/openapi/wsdot-commercial-vehicle-restrictions.yaml"},"gitHead":"859363e22dc6b0515747ca2dc94e6add1c3bf4a0","scripts":{"dev":"tsup --watch","lint":"biome lint src/","test":"vitest --config tests/e2e/vitest.config.ts --run","build":"npm run docs:openapi:json && tsup","tests":"node scripts/run-api-tests.js","format":"biome check --write src/","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","type-check":"tsc --noEmit","test:direct":"vitest --config tests/vitest.config.ts --run","copy:openapi":"node scripts/copy-openapi.js","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","fetch-dottie":"node dist/cli/fetch-dottie.mjs","test:openapi":"node scripts/test-openapi-exports.js","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","prepublishOnly":"npm run build","type-check:test":"tsc --noEmit --project tsconfig.test.json","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts"},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"repository":{"url":"git+https://github.com/RobJacobson/ws-dottie.git","type":"git"},"_npmVersion":"11.10.0","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","directories":{},"_nodeVersion":"24.13.0","dependencies":{"zod":"^4.3.6","glob":"^11.1.0","json5":"^2.2.3","picocolors":"^1.1.1","@modelcontextprotocol/sdk":"^1.26.0"},"typesVersions":{"*":{"apis":["dist/apis/index.d.ts"],"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"]}},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.5.1","react":"^19.2.4","vitest":"^3.2.4","js-yaml":"^4.1.1","commander":"^14.0.3","react-dom":"^19.2.4","@vitest/ui":"^3.2.4","jsonrepair":"^3.13.2","typescript":"^5.9.3","@types/node":"^24.10.13","@redocly/cli":"^2.18.0","@types/react":"^19.2.14","@biomejs/biome":"^2.3.14","fast-deep-equal":"^3.1.3","@types/react-dom":"^19.2.3","@tanstack/react-query":"^5.90.21","@testing-library/react":"^16.3.2","@happy-dom/global-registrator":"^18.0.1","@asteasolutions/zod-to-openapi":"^8.4.0"},"peerDependencies":{"react":">=18.0.0","@tanstack/react-query":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/ws-dottie_1.6.0_1771008173851_0.35935744009506365","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"ws-dottie","version":"1.6.1","description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","scripts":{"build":"npm run docs:openapi:json && tsup","dev":"tsup --watch","test":"vitest --config tests/e2e/vitest.config.ts --run","test:unit":"vitest --config tests/vitest.config.ts --run tests/unit","test:direct":"vitest --config tests/vitest.config.ts --run","test:openapi":"node scripts/test-openapi-exports.js","tests":"node scripts/run-api-tests.js","test:e2e":"vitest --config tests/e2e/vitest.config.ts --run tests/e2e/ --reporter=verbose","lint":"biome lint src/","format":"biome check --write src/","type-check":"tsc --noEmit","type-check:test":"tsc --noEmit --project tsconfig.test.json","prepublishOnly":"npm run build","fetch-dottie":"node dist/cli/fetch-dottie.mjs","cli:help":"node dist/cli/fetch-dottie.mjs --help","cli:list":"node dist/cli/fetch-dottie.mjs --help | grep -A 100 'Available functions:' | head -20","docs:generate":"npm run docs:openapi:json && npm run docs:openapi:yaml && npm run docs:html","docs:openapi":"npx tsx scripts/generate-docs/generate-openapi.ts","docs:openapi:json":"npx tsx scripts/generate-docs/generate-openapi.ts --json","docs:openapi:yaml":"npx tsx scripts/generate-docs/generate-openapi.ts --yaml","docs:html":"npx tsx scripts/generate-docs/generate-docs.ts","docs:samples:fetch":"npx tsx scripts/generate-docs/fetch-sample-data.ts","build:openapi":"npm run docs:openapi:json && npm run copy:openapi","copy:openapi":"node scripts/copy-openapi.js"},"peerDependencies":{"@tanstack/react-query":">=5.0.0","react":">=18.0.0"},"devDependencies":{"@asteasolutions/zod-to-openapi":"^8.4.0","@biomejs/biome":"^2.3.14","@happy-dom/global-registrator":"^18.0.1","@redocly/cli":"^2.18.0","@tanstack/react-query":"^5.90.21","@testing-library/react":"^16.3.2","@types/node":"^24.10.13","@types/react":"^19.2.14","@types/react-dom":"^19.2.3","@vitest/ui":"^3.2.4","commander":"^14.0.3","fast-deep-equal":"^3.1.3","js-yaml":"^4.1.1","jsonrepair":"^3.13.2","react":"^19.2.4","react-dom":"^19.2.4","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.2.4"},"dependencies":{"@modelcontextprotocol/sdk":"^1.26.0","glob":"^11.1.0","json5":"^2.2.3","picocolors":"^1.1.1","zod":"^4.3.6"},"engines":{"node":">=18.0.0"},"keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/RobJacobson/ws-dottie.git"},"bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"homepage":"https://github.com/RobJacobson/ws-dottie#readme","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js","default":"./dist/index.mjs"},"./types":{"types":"./dist/index.d.ts"},"./src":{"types":"./src/index.ts","import":"./src/index.ts","default":"./src/index.ts"},"./cli":{"node":"./dist/cli/index.mjs","default":"./dist/cli/index.mjs"},"./openapi":{"types":"./dist/openapi/index.d.ts","import":"./dist/openapi/index.mjs","require":"./dist/openapi/index.js"},"./openapi/*":{"types":"./dist/openapi/*.d.ts","import":"./dist/openapi/*.mjs","require":"./dist/openapi/*.js"},"./openapi/wsf-vessels.json":"./dist/openapi/wsf-vessels.json","./openapi/wsf-terminals.json":"./dist/openapi/wsf-terminals.json","./openapi/wsf-schedule.json":"./dist/openapi/wsf-schedule.json","./openapi/wsf-fares.json":"./dist/openapi/wsf-fares.json","./openapi/wsdot-border-crossings.json":"./dist/openapi/wsdot-border-crossings.json","./openapi/wsdot-bridge-clearances.json":"./dist/openapi/wsdot-bridge-clearances.json","./openapi/wsdot-commercial-vehicle-restrictions.json":"./dist/openapi/wsdot-commercial-vehicle-restrictions.json","./openapi/wsdot-highway-alerts.json":"./dist/openapi/wsdot-highway-alerts.json","./openapi/wsdot-highway-cameras.json":"./dist/openapi/wsdot-highway-cameras.json","./openapi/wsdot-mountain-pass-conditions.json":"./dist/openapi/wsdot-mountain-pass-conditions.json","./openapi/wsdot-toll-rates.json":"./dist/openapi/wsdot-toll-rates.json","./openapi/wsdot-traffic-flow.json":"./dist/openapi/wsdot-traffic-flow.json","./openapi/wsdot-travel-times.json":"./dist/openapi/wsdot-travel-times.json","./openapi/wsdot-weather-information.json":"./dist/openapi/wsdot-weather-information.json","./openapi/wsdot-weather-readings.json":"./dist/openapi/wsdot-weather-readings.json","./openapi/wsdot-weather-stations.json":"./dist/openapi/wsdot-weather-stations.json","./openapi/wsf-vessels.yaml":"./dist/openapi/wsf-vessels.yaml","./openapi/wsf-terminals.yaml":"./dist/openapi/wsf-terminals.yaml","./openapi/wsf-schedule.yaml":"./dist/openapi/wsf-schedule.yaml","./openapi/wsf-fares.yaml":"./dist/openapi/wsf-fares.yaml","./openapi/wsdot-border-crossings.yaml":"./dist/openapi/wsdot-border-crossings.yaml","./openapi/wsdot-bridge-clearances.yaml":"./dist/openapi/wsdot-bridge-clearances.yaml","./openapi/wsdot-commercial-vehicle-restrictions.yaml":"./dist/openapi/wsdot-commercial-vehicle-restrictions.yaml","./openapi/wsdot-highway-alerts.yaml":"./dist/openapi/wsdot-highway-alerts.yaml","./openapi/wsdot-highway-cameras.yaml":"./dist/openapi/wsdot-highway-cameras.yaml","./openapi/wsdot-mountain-pass-conditions.yaml":"./dist/openapi/wsdot-mountain-pass-conditions.yaml","./openapi/wsdot-toll-rates.yaml":"./dist/openapi/wsdot-toll-rates.yaml","./openapi/wsdot-traffic-flow.yaml":"./dist/openapi/wsdot-traffic-flow.yaml","./openapi/wsdot-travel-times.yaml":"./dist/openapi/wsdot-travel-times.yaml","./openapi/wsdot-weather-information.yaml":"./dist/openapi/wsdot-weather-information.yaml","./openapi/wsdot-weather-readings.yaml":"./dist/openapi/wsdot-weather-readings.yaml","./openapi/wsdot-weather-stations.yaml":"./dist/openapi/wsdot-weather-stations.yaml","./apis":{"types":"./dist/apis/index.d.ts","import":"./dist/apis/index.mjs","require":"./dist/apis/index.js"},"./wsf-vessels":{"types":"./dist/apis/wsf-vessels/index.d.ts","import":"./dist/apis/wsf-vessels/index.mjs","require":"./dist/apis/wsf-vessels/index.js"},"./wsf-vessels/core":{"types":"./dist/apis/wsf-vessels/core.d.ts","import":"./dist/apis/wsf-vessels/core.mjs","require":"./dist/apis/wsf-vessels/core.js"},"./wsf-vessels/schemas":{"types":"./dist/apis/wsf-vessels/schemas.d.ts","import":"./dist/apis/wsf-vessels/schemas.mjs","require":"./dist/apis/wsf-vessels/schemas.js"},"./wsdot-border-crossings":{"types":"./dist/apis/wsdot-border-crossings/index.d.ts","import":"./dist/apis/wsdot-border-crossings/index.mjs","require":"./dist/apis/wsdot-border-crossings/index.js"},"./wsdot-border-crossings/core":{"types":"./dist/apis/wsdot-border-crossings/core.d.ts","import":"./dist/apis/wsdot-border-crossings/core.mjs","require":"./dist/apis/wsdot-border-crossings/core.js"},"./wsdot-border-crossings/schemas":{"types":"./dist/apis/wsdot-border-crossings/schemas.d.ts","import":"./dist/apis/wsdot-border-crossings/schemas.mjs","require":"./dist/apis/wsdot-border-crossings/schemas.js"},"./wsdot-bridge-clearances":{"types":"./dist/apis/wsdot-bridge-clearances/index.d.ts","import":"./dist/apis/wsdot-bridge-clearances/index.mjs","require":"./dist/apis/wsdot-bridge-clearances/index.js"},"./wsdot-bridge-clearances/core":{"types":"./dist/apis/wsdot-bridge-clearances/core.d.ts","import":"./dist/apis/wsdot-bridge-clearances/core.mjs","require":"./dist/apis/wsdot-bridge-clearances/core.js"},"./wsdot-bridge-clearances/schemas":{"types":"./dist/apis/wsdot-bridge-clearances/schemas.d.ts","import":"./dist/apis/wsdot-bridge-clearances/schemas.mjs","require":"./dist/apis/wsdot-bridge-clearances/schemas.js"},"./wsdot-commercial-vehicle-restrictions":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/index.js"},"./wsdot-commercial-vehicle-restrictions/core":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/core.js"},"./wsdot-commercial-vehicle-restrictions/schemas":{"types":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts","import":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.mjs","require":"./dist/apis/wsdot-commercial-vehicle-restrictions/schemas.js"},"./wsdot-highway-alerts":{"types":"./dist/apis/wsdot-highway-alerts/index.d.ts","import":"./dist/apis/wsdot-highway-alerts/index.mjs","require":"./dist/apis/wsdot-highway-alerts/index.js"},"./wsdot-highway-alerts/core":{"types":"./dist/apis/wsdot-highway-alerts/core.d.ts","import":"./dist/apis/wsdot-highway-alerts/core.mjs","require":"./dist/apis/wsdot-highway-alerts/core.js"},"./wsdot-highway-alerts/schemas":{"types":"./dist/apis/wsdot-highway-alerts/schemas.d.ts","import":"./dist/apis/wsdot-highway-alerts/schemas.mjs","require":"./dist/apis/wsdot-highway-alerts/schemas.js"},"./wsdot-highway-cameras":{"types":"./dist/apis/wsdot-highway-cameras/index.d.ts","import":"./dist/apis/wsdot-highway-cameras/index.mjs","require":"./dist/apis/wsdot-highway-cameras/index.js"},"./wsdot-highway-cameras/core":{"types":"./dist/apis/wsdot-highway-cameras/core.d.ts","import":"./dist/apis/wsdot-highway-cameras/core.mjs","require":"./dist/apis/wsdot-highway-cameras/core.js"},"./wsdot-highway-cameras/schemas":{"types":"./dist/apis/wsdot-highway-cameras/schemas.d.ts","import":"./dist/apis/wsdot-highway-cameras/schemas.mjs","require":"./dist/apis/wsdot-highway-cameras/schemas.js"},"./wsdot-mountain-pass-conditions":{"types":"./dist/apis/wsdot-mountain-pass-conditions/index.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/index.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/index.js"},"./wsdot-mountain-pass-conditions/core":{"types":"./dist/apis/wsdot-mountain-pass-conditions/core.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/core.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/core.js"},"./wsdot-mountain-pass-conditions/schemas":{"types":"./dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts","import":"./dist/apis/wsdot-mountain-pass-conditions/schemas.mjs","require":"./dist/apis/wsdot-mountain-pass-conditions/schemas.js"},"./wsdot-toll-rates":{"types":"./dist/apis/wsdot-toll-rates/index.d.ts","import":"./dist/apis/wsdot-toll-rates/index.mjs","require":"./dist/apis/wsdot-toll-rates/index.js"},"./wsdot-toll-rates/core":{"types":"./dist/apis/wsdot-toll-rates/core.d.ts","import":"./dist/apis/wsdot-toll-rates/core.mjs","require":"./dist/apis/wsdot-toll-rates/core.js"},"./wsdot-toll-rates/schemas":{"types":"./dist/apis/wsdot-toll-rates/schemas.d.ts","import":"./dist/apis/wsdot-toll-rates/schemas.mjs","require":"./dist/apis/wsdot-toll-rates/schemas.js"},"./wsdot-traffic-flow":{"types":"./dist/apis/wsdot-traffic-flow/index.d.ts","import":"./dist/apis/wsdot-traffic-flow/index.mjs","require":"./dist/apis/wsdot-traffic-flow/index.js"},"./wsdot-traffic-flow/core":{"types":"./dist/apis/wsdot-traffic-flow/core.d.ts","import":"./dist/apis/wsdot-traffic-flow/core.mjs","require":"./dist/apis/wsdot-traffic-flow/core.js"},"./wsdot-traffic-flow/schemas":{"types":"./dist/apis/wsdot-traffic-flow/schemas.d.ts","import":"./dist/apis/wsdot-traffic-flow/schemas.mjs","require":"./dist/apis/wsdot-traffic-flow/schemas.js"},"./wsdot-travel-times":{"types":"./dist/apis/wsdot-travel-times/index.d.ts","import":"./dist/apis/wsdot-travel-times/index.mjs","require":"./dist/apis/wsdot-travel-times/index.js"},"./wsdot-travel-times/core":{"types":"./dist/apis/wsdot-travel-times/core.d.ts","import":"./dist/apis/wsdot-travel-times/core.mjs","require":"./dist/apis/wsdot-travel-times/core.js"},"./wsdot-travel-times/schemas":{"types":"./dist/apis/wsdot-travel-times/schemas.d.ts","import":"./dist/apis/wsdot-travel-times/schemas.mjs","require":"./dist/apis/wsdot-travel-times/schemas.js"},"./wsdot-weather-information":{"types":"./dist/apis/wsdot-weather-information/index.d.ts","import":"./dist/apis/wsdot-weather-information/index.mjs","require":"./dist/apis/wsdot-weather-information/index.js"},"./wsdot-weather-information/core":{"types":"./dist/apis/wsdot-weather-information/core.d.ts","import":"./dist/apis/wsdot-weather-information/core.mjs","require":"./dist/apis/wsdot-weather-information/core.js"},"./wsdot-weather-information/schemas":{"types":"./dist/apis/wsdot-weather-information/schemas.d.ts","import":"./dist/apis/wsdot-weather-information/schemas.mjs","require":"./dist/apis/wsdot-weather-information/schemas.js"},"./wsdot-weather-readings":{"types":"./dist/apis/wsdot-weather-readings/index.d.ts","import":"./dist/apis/wsdot-weather-readings/index.mjs","require":"./dist/apis/wsdot-weather-readings/index.js"},"./wsdot-weather-readings/core":{"types":"./dist/apis/wsdot-weather-readings/core.d.ts","import":"./dist/apis/wsdot-weather-readings/core.mjs","require":"./dist/apis/wsdot-weather-readings/core.js"},"./wsdot-weather-readings/schemas":{"types":"./dist/apis/wsdot-weather-readings/schemas.d.ts","import":"./dist/apis/wsdot-weather-readings/schemas.mjs","require":"./dist/apis/wsdot-weather-readings/schemas.js"},"./wsdot-weather-stations":{"types":"./dist/apis/wsdot-weather-stations/index.d.ts","import":"./dist/apis/wsdot-weather-stations/index.mjs","require":"./dist/apis/wsdot-weather-stations/index.js"},"./wsdot-weather-stations/core":{"types":"./dist/apis/wsdot-weather-stations/core.d.ts","import":"./dist/apis/wsdot-weather-stations/core.mjs","require":"./dist/apis/wsdot-weather-stations/core.js"},"./wsdot-weather-stations/schemas":{"types":"./dist/apis/wsdot-weather-stations/schemas.d.ts","import":"./dist/apis/wsdot-weather-stations/schemas.mjs","require":"./dist/apis/wsdot-weather-stations/schemas.js"},"./wsf-fares":{"types":"./dist/apis/wsf-fares/index.d.ts","import":"./dist/apis/wsf-fares/index.mjs","require":"./dist/apis/wsf-fares/index.js"},"./wsf-fares/core":{"types":"./dist/apis/wsf-fares/core.d.ts","import":"./dist/apis/wsf-fares/core.mjs","require":"./dist/apis/wsf-fares/core.js"},"./wsf-fares/schemas":{"types":"./dist/apis/wsf-fares/schemas.d.ts","import":"./dist/apis/wsf-fares/schemas.mjs","require":"./dist/apis/wsf-fares/schemas.js"},"./wsf-schedule":{"types":"./dist/apis/wsf-schedule/index.d.ts","import":"./dist/apis/wsf-schedule/index.mjs","require":"./dist/apis/wsf-schedule/index.js"},"./wsf-schedule/core":{"types":"./dist/apis/wsf-schedule/core.d.ts","import":"./dist/apis/wsf-schedule/core.mjs","require":"./dist/apis/wsf-schedule/core.js"},"./wsf-schedule/schemas":{"types":"./dist/apis/wsf-schedule/schemas.d.ts","import":"./dist/apis/wsf-schedule/schemas.mjs","require":"./dist/apis/wsf-schedule/schemas.js"},"./wsf-terminals":{"types":"./dist/apis/wsf-terminals/index.d.ts","import":"./dist/apis/wsf-terminals/index.mjs","require":"./dist/apis/wsf-terminals/index.js"},"./wsf-terminals/core":{"types":"./dist/apis/wsf-terminals/core.d.ts","import":"./dist/apis/wsf-terminals/core.mjs","require":"./dist/apis/wsf-terminals/core.js"},"./wsf-terminals/schemas":{"types":"./dist/apis/wsf-terminals/schemas.d.ts","import":"./dist/apis/wsf-terminals/schemas.mjs","require":"./dist/apis/wsf-terminals/schemas.js"}},"typesVersions":{"*":{"wsf-vessels":["dist/apis/wsf-vessels/index.d.ts"],"wsf-vessels/core":["dist/apis/wsf-vessels/core.d.ts"],"wsf-vessels/schemas":["dist/apis/wsf-vessels/schemas.d.ts"],"wsdot-border-crossings":["dist/apis/wsdot-border-crossings/index.d.ts"],"wsdot-border-crossings/core":["dist/apis/wsdot-border-crossings/core.d.ts"],"wsdot-border-crossings/schemas":["dist/apis/wsdot-border-crossings/schemas.d.ts"],"wsdot-bridge-clearances":["dist/apis/wsdot-bridge-clearances/index.d.ts"],"wsdot-bridge-clearances/core":["dist/apis/wsdot-bridge-clearances/core.d.ts"],"wsdot-bridge-clearances/schemas":["dist/apis/wsdot-bridge-clearances/schemas.d.ts"],"wsdot-commercial-vehicle-restrictions":["dist/apis/wsdot-commercial-vehicle-restrictions/index.d.ts"],"wsdot-commercial-vehicle-restrictions/core":["dist/apis/wsdot-commercial-vehicle-restrictions/core.d.ts"],"wsdot-commercial-vehicle-restrictions/schemas":["dist/apis/wsdot-commercial-vehicle-restrictions/schemas.d.ts"],"wsdot-highway-alerts":["dist/apis/wsdot-highway-alerts/index.d.ts"],"wsdot-highway-alerts/core":["dist/apis/wsdot-highway-alerts/core.d.ts"],"wsdot-highway-alerts/schemas":["dist/apis/wsdot-highway-alerts/schemas.d.ts"],"wsdot-highway-cameras":["dist/apis/wsdot-highway-cameras/index.d.ts"],"wsdot-highway-cameras/core":["dist/apis/wsdot-highway-cameras/core.d.ts"],"wsdot-highway-cameras/schemas":["dist/apis/wsdot-highway-cameras/schemas.d.ts"],"wsdot-mountain-pass-conditions":["dist/apis/wsdot-mountain-pass-conditions/index.d.ts"],"wsdot-mountain-pass-conditions/core":["dist/apis/wsdot-mountain-pass-conditions/core.d.ts"],"wsdot-mountain-pass-conditions/schemas":["dist/apis/wsdot-mountain-pass-conditions/schemas.d.ts"],"wsdot-toll-rates":["dist/apis/wsdot-toll-rates/index.d.ts"],"wsdot-toll-rates/core":["dist/apis/wsdot-toll-rates/core.d.ts"],"wsdot-toll-rates/schemas":["dist/apis/wsdot-toll-rates/schemas.d.ts"],"wsdot-traffic-flow":["dist/apis/wsdot-traffic-flow/index.d.ts"],"wsdot-traffic-flow/core":["dist/apis/wsdot-traffic-flow/core.d.ts"],"wsdot-traffic-flow/schemas":["dist/apis/wsdot-traffic-flow/schemas.d.ts"],"wsdot-travel-times":["dist/apis/wsdot-travel-times/index.d.ts"],"wsdot-travel-times/core":["dist/apis/wsdot-travel-times/core.d.ts"],"wsdot-travel-times/schemas":["dist/apis/wsdot-travel-times/schemas.d.ts"],"wsdot-weather-information":["dist/apis/wsdot-weather-information/index.d.ts"],"wsdot-weather-information/core":["dist/apis/wsdot-weather-information/core.d.ts"],"wsdot-weather-information/schemas":["dist/apis/wsdot-weather-information/schemas.d.ts"],"wsdot-weather-readings":["dist/apis/wsdot-weather-readings/index.d.ts"],"wsdot-weather-readings/core":["dist/apis/wsdot-weather-readings/core.d.ts"],"wsdot-weather-readings/schemas":["dist/apis/wsdot-weather-readings/schemas.d.ts"],"wsdot-weather-stations":["dist/apis/wsdot-weather-stations/index.d.ts"],"wsdot-weather-stations/core":["dist/apis/wsdot-weather-stations/core.d.ts"],"wsdot-weather-stations/schemas":["dist/apis/wsdot-weather-stations/schemas.d.ts"],"wsf-fares":["dist/apis/wsf-fares/index.d.ts"],"wsf-fares/core":["dist/apis/wsf-fares/core.d.ts"],"wsf-fares/schemas":["dist/apis/wsf-fares/schemas.d.ts"],"wsf-schedule":["dist/apis/wsf-schedule/index.d.ts"],"wsf-schedule/core":["dist/apis/wsf-schedule/core.d.ts"],"wsf-schedule/schemas":["dist/apis/wsf-schedule/schemas.d.ts"],"wsf-terminals":["dist/apis/wsf-terminals/index.d.ts"],"wsf-terminals/core":["dist/apis/wsf-terminals/core.d.ts"],"wsf-terminals/schemas":["dist/apis/wsf-terminals/schemas.d.ts"],"openapi/wsf-vessels.json":["dist/openapi/wsf-vessels.json"],"openapi/wsf-terminals.json":["dist/openapi/wsf-terminals.json"],"openapi/wsf-schedule.json":["dist/openapi/wsf-schedule.json"],"openapi/wsf-fares.json":["dist/openapi/wsf-fares.json"],"openapi/wsdot-border-crossings.json":["dist/openapi/wsdot-border-crossings.json"],"openapi/wsdot-bridge-clearances.json":["dist/openapi/wsdot-bridge-clearances.json"],"openapi/wsdot-commercial-vehicle-restrictions.json":["dist/openapi/wsdot-commercial-vehicle-restrictions.json"],"openapi/wsdot-highway-alerts.json":["dist/openapi/wsdot-highway-alerts.json"],"openapi/wsdot-highway-cameras.json":["dist/openapi/wsdot-highway-cameras.json"],"openapi/wsdot-mountain-pass-conditions.json":["dist/openapi/wsdot-mountain-pass-conditions.json"],"openapi/wsdot-toll-rates.json":["dist/openapi/wsdot-toll-rates.json"],"openapi/wsdot-traffic-flow.json":["dist/openapi/wsdot-traffic-flow.json"],"openapi/wsdot-travel-times.json":["dist/openapi/wsdot-travel-times.json"],"openapi/wsdot-weather-information.json":["dist/openapi/wsdot-weather-information.json"],"openapi/wsdot-weather-readings.json":["dist/openapi/wsdot-weather-readings.json"],"openapi/wsdot-weather-stations.json":["dist/openapi/wsdot-weather-stations.json"],"apis":["dist/apis/index.d.ts"]}},"bin":{"fetch-dottie":"dist/cli/fetch-dottie.mjs"},"gitHead":"e82aae9e4128f19d5ccfa0d87e0749e4e064aff7","_id":"ws-dottie@1.6.1","_nodeVersion":"24.14.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-91mPpTovLkHPijSzaXLWlEbbnxvctqbmDaUB+J6gJNw67JgOwZEhVdt8ZqkcMJOMl0j/e9DTikCnY6h9n8ooUw==","shasum":"36f2f211033da45c56110e8efc6f951d75f85cd8","tarball":"https://registry.npmjs.org/ws-dottie/-/ws-dottie-1.6.1.tgz","fileCount":1928,"unpackedSize":41151343,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICMaA7BVGw5r3HReeatuQ5W51d54gv5sVPSeZ2PGqiUMAiEA8PRysrdUH0bOE6X9mQX33t+YKoxEoRM8pGZxkkYRvt8="}]},"_npmUser":{"name":"robthecoder","email":"rljacobson@outlook.com"},"directories":{},"maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ws-dottie_1.6.1_1776386054888_0.40732937815259906"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-23T01:16:58.935Z","modified":"2026-04-17T00:34:15.312Z","0.1.0":"2025-07-23T01:16:59.199Z","0.1.1":"2025-07-23T01:25:53.112Z","0.1.2":"2025-07-23T01:30:18.640Z","0.1.3":"2025-07-23T07:07:49.943Z","0.2.0":"2025-07-25T04:47:20.586Z","0.2.1":"2025-07-26T06:35:22.383Z","0.2.2":"2025-07-26T22:00:00.897Z","0.2.3":"2025-07-26T23:38:07.796Z","0.2.4":"2025-07-27T01:31:06.885Z","0.3.0":"2025-07-27T04:45:17.131Z","0.4.0":"2025-07-27T06:46:34.505Z","0.5.0":"2025-08-11T23:04:00.009Z","0.6.0":"2025-08-12T06:32:47.706Z","0.7.0":"2025-09-21T04:50:15.273Z","0.8.0":"2025-10-08T01:55:02.887Z","0.8.1":"2025-10-09T00:44:23.558Z","0.9.0":"2025-10-19T00:39:39.648Z","1.0.0":"2025-11-05T02:32:25.989Z","1.1.0":"2025-11-08T09:20:35.692Z","1.2.0":"2025-11-08T22:47:24.986Z","1.3.0":"2025-11-16T06:50:22.505Z","1.3.1":"2025-11-16T22:22:45.608Z","1.4.0":"2025-11-18T23:47:46.516Z","1.5.0":"2025-11-21T03:59:18.658Z","1.5.1":"2025-11-22T22:58:19.555Z","1.6.0":"2026-02-13T18:42:54.172Z","1.6.1":"2026-04-17T00:34:15.192Z"},"bugs":{"url":"https://github.com/RobJacobson/ws-dottie/issues"},"author":{"name":"Rob Jacobson","email":"rljacobson@outlook.com"},"license":"MIT","homepage":"https://github.com/RobJacobson/ws-dottie#readme","keywords":["wsdot","washington","washington-state","washington-state-ferry","washington-state-department-of-transportation","transportation","api","api-client","data-fetching","traffic","weather","ferries","highway-cameras","travel-times","typescript","type-safe","react","react-query","tanstack-query","zod","schema-validation","caching","state-management","nodejs","browser","esm","cjs","jsonp","cors","real-time","traffic-data","ferry-data","openapi","developer-tools"],"repository":{"type":"git","url":"git+https://github.com/RobJacobson/ws-dottie.git"},"description":"Your friendly TypeScript companion for Washington State transportation APIs - WSDOT and WSF data with smart caching and React Query integration","maintainers":[{"name":"robthecoder","email":"rljacobson@outlook.com"}],"readme":"# WS-Dottie 🚢\n\n<div align=\"center\">\n  <img src=\"assets/dottie.png\" alt=\"WS-Dottie Logo\" width=\"400\">\n</div>\n\n[![npm version](https://img.shields.io/npm/v/ws-dottie.svg)](https://www.npmjs.com/package/ws-dottie)                                                           \n[![npm downloads](https://img.shields.io/npm/dm/ws-dottie.svg)](https://www.npmjs.com/package/ws-dottie)                                                        \n[![npm license](https://img.shields.io/npm/l/ws-dottie.svg)](https://www.npmjs.com/package/ws-dottie)                                                           \n[![bundle size](https://img.shields.io/bundlephobia/min/ws-dottie.svg)](https://bundlephobia.com/result?p=ws-dottie)                                            \n[![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)                                                          \n[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/)                                                                           \n[![React](https://img.shields.io/badge/React-18+-blue.svg)](https://reactjs.org/)                                                                               \n[![TanStack Query](https://img.shields.io/badge/TanStack%20Query-5+-orange.svg)](https://tanstack.com/query)                                                    \n\n## Table of Contents\n\n- [Why WS-Dottie is Special](#why-ws-dottie-is-special)\n- [Zod-powered validation](#zod-powered-validation-zod-3)\n- [What You Can Build](#-what-you-can-build)\n- [Quick Start](#-quick-start)\n  - [Get Your Free API Key](#1-get-your-free-api-key)\n  - [Install WS-Dottie](#2-install-ws-dottie)\n  - [Configure Your API Key](#3-configure-your-api-key)\n  - [Module Format Support](#4-module-format-support)\n  - [Import Patterns](#5-import-patterns)\n  - [TypeScript Types](#typescript-types)\n  - [Start Building](#6-start-building)\n- [Command Line Interface](#-command-line-interface)\n  - [Installation](#installation)\n  - [Configuration](#configuration)\n  - [Usage](#usage)\n  - [Examples](#examples)\n  - [Available Functions](#available-functions)\n  - [CLI Options](#cli-options)\n- [Available Data Sources](#-available-data-sources-16-apis-98-endpoints)\n  - [WSDOT APIs](#wsdot-apis)\n  - [WSF APIs](#wsf-apis)\n- [Core Features](#-core-features)\n  - [Comprehensive API Coverage](#-comprehensive-api-coverage)\n  - [Smart Caching & React Integration](#-smart-caching--react-integration)\n  - [Flexible Fetching Strategies](#-flexible-fetching-strategies)\n  - [Production-Ready Developer Experience](#-production-ready-developer-experience)\n  - [Automated Documentation](#-automated-documentation)\n  - [Developer-Friendly Design](#-developer-friendly-design)\n- [Production vs Development](#-production-vs-development)\n  - [When to Use Validation](#when-to-use-validation)\n  - [Development vs Production Patterns](#development-vs-production-patterns)\n  - [Bundle Size Optimization](#bundle-size-optimization)\n- [TanStack Query Integration](#-tanstack-query-integration)\n  - [Cache Strategies](#-cache-strategies)\n  - [Parameterized Queries](#-parameterized-queries)\n  - [Advanced Query Options](#-advanced-query-options)\n  - [Cache Strategy Details](#-cache-strategy-details)\n- [Documentation](#-documentation)\n- [Implementation Examples](#-implementation-examples)\n  - [React Dashboard (Recommended)](#-react-dashboard-recommended)\n  - [Server-Side API Integration](#-server-side-api-integration)\n  - [Browser Application (CORS-Safe)](#-browser-application-cors-safe)\n  - [CLI Automation & Testing](#-cli-automation--testing)\n- [Example Projects](#-example-projects)\n  - [For Hobbyists](#-for-hobbyists)\n  - [For Developers](#-for-developers)\n  - [For Enterprise](#-for-enterprise)\n- [Testing](#-testing)\n- [Governance](#-governance)\n- [Contributing](#-contributing)\n- [License](#-license)\n\n\nMeet Dottie — your comprehensive TypeScript companion for fetching real-time Washington State transportation data. This production-ready library provides type-safe access to **16 WSDOT and WSF APIs** with **98 endpoints**, transforming complex government APIs into a modern, developer-friendly interface.\n\n## Why WS-Dottie is Special\n\n**🚀 Comprehensive Coverage**: Access full spectrum of Washington State transportation data — from real-time ferry locations and traffic cameras to weather stations, highway alerts, toll rates, and border crossings.\n\n**🎯 Production-Ready**: Built for real applications with smart caching strategies, comprehensive error handling, and environment-aware logging. Works seamlessly in browsers (JSONP), servers (native fetch), and CLI environments.c\n\n**⚡ Developer Experience**: Type-safe from end-to-end with Zod validation, automatic .NET datetime conversion, and sensible defaults. Includes a powerful CLI for debugging and testing.\n\n**🔄 Smart Caching**: TanStack Query integration with transportation-optimized cache strategies — from 5-second real-time updates for traffic cameras to daily updates for static data like terminals and vessels.\n\n**🌐 Environment Agnostic**: Same code works in React apps, Node.js servers, and command-line tools. Automatic CORS handling with JSONP support for browsers.\n\n### Zod‑powered validation (Zod 3)\n\nWS‑Dottie uses Zod 3 schemas for **optional** runtime validation and type inference across all APIs. Validation is **disabled by default** (`validate: false`) for optimal performance, but you can enable it when you need extra safety.\n\n- **With validation** (`validate: true`): Strong runtime type safety, early detection of API changes, and safe data transformations\n- **Without validation** (`validate: false` - default): Faster performance, smaller bundles, and still type-safe with TypeScript\n\nFor detailed information about validation, performance trade-offs, and best practices, see the [Validation Guide](./docs/guides/advanced/validation-guide.md).\n\n## ✨ What You Can Build\n\n- **🚢 Ferry Tracking Apps** - Real-time vessel locations, terminal wait times, and sailing schedules                                                           \n- **🚗 Traffic Monitoring Dashboards** - Live traffic flow, travel times, and highway alerts                                                                    \n- **🌤️ Weather & Road Condition Apps** - Weather station data and mountain pass conditions                                                                       \n- **📷 Camera Feeds** - Access to hundreds of traffic cameras across Washington\n- **💰 Toll Rate Calculators** - Real-time toll pricing for planning trips\n- **🚛 Commercial Vehicle Tools** - Bridge clearances and vehicle restrictions\n- **🌉 Border Crossing Apps** - Wait times and conditions at border crossings\n\n## 🚀 Quick Start\n\n### 1. Get Your Free API Key\n\nVisit [WSDOT Developer Portal](https://wsdot.wa.gov/developers/api-access) and sign up with just your email address. No credit card required — API is completely free.                                                                  \n\n### 2. Install WS-Dottie\n\n```bash\nnpm install ws-dottie\n```\n\n### 3. Configure Your API Key\n\n**Option A: Environment Variables (Recommended)**\n```bash\n# For Node.js applications\nexport WSDOT_ACCESS_TOKEN=your_api_key_here\n```\n\n**Using a .env file**\n```env\nWSDOT_ACCESS_TOKEN=your_api_key_here\n```\n\n**Option B: Runtime Configuration**\n\nFor dynamic environments or when you need to configure at runtime:\n\n```javascript\nimport { configManager } from 'ws-dottie';\n\n// Set API key only (recommended for web clients)\nconfigManager.setApiKey('your_api_key_here');\n\n// Set base URL only (optional: route through proxy)\nconfigManager.setBaseUrl('https://your-proxy-server.com');\n```\n\n### 4. Module Format Support\n\nWS‑Dottie supports both CommonJS and ES Module formats:\n\n**ES Modules (Recommended)**\n```javascript\nimport { configManager, fetchDottie } from 'ws-dottie';\nimport { useVesselLocations } from 'ws-dottie/wsf-vessels';\nimport { useAlerts } from 'ws-dottie/wsdot-highway-alerts';\n```\n\n**CommonJS**\n```javascript\nconst { configManager, fetchDottie } = require('ws-dottie');\nconst { useVesselLocations } = require('ws-dottie/wsf-vessels');\nconst { useAlerts } = require('ws-dottie/wsdot-highway-alerts');\n```\n\nModern bundlers and Node.js will choose the optimal format automatically.\n\n### 5. Import Patterns\n\nWS-Dottie provides multiple import patterns optimized for different use cases. Choose the pattern that best fits your needs:\n\n#### Shared Utilities (Main Entry)\n\nThe root package now exposes shared utilities only:\n\n```javascript\nimport { configManager, fetchDottie, datesHelper } from 'ws-dottie';\nimport type { ApiError } from 'ws-dottie';\n```\n\n**Use when**: You need global configuration, low-level fetching, or shared helpers.\n\n#### API Hooks and Types\n\nImport hooks, fetch functions, and types for a specific API from its package entry:\n\n```javascript\nimport { useVesselLocations, type VesselLocation } from 'ws-dottie/wsf-vessels';\nimport { useAlerts, type Alert } from 'ws-dottie/wsdot-highway-alerts';\n```\n\n**Use when**: You want React hooks and types for a particular API.\n\n#### Core Fetch Functions (No Hooks)\n\nImport only fetch functions and types — no React dependencies:\n\n```javascript\nimport { \n  fetchVesselLocations,   // Fetch functions only\n  type VesselLocation      // TypeScript types\n} from 'ws-dottie/wsf-vessels/core';\n```\n\n**Use when**: Building server-side code, Node.js scripts, or when you don't need React hooks. Excludes TanStack Query dependencies for smaller bundles.\n\n#### Schema Imports (Zod Schemas Only)\n\nImport Zod schemas for custom validation or type inference:\n\n```javascript\nimport { \n  vesselLocationsSchema,      // Zod schema\n  type VesselLocation         // Inferred TypeScript type\n} from 'ws-dottie/wsf-vessels/schemas';\n```\n\n**Use when**: You need Zod schemas for custom validation logic or want to build your own validation layer.\n\n### TypeScript Types\n\nWS-Dottie exports TypeScript types for all API inputs and outputs. Types are available from the same import paths as functions:\n\n**Importing Types:**\n```typescript\n// Import types along with functions\nimport {\n  fetchVesselLocations,\n  type VesselLocation,           // Output type (single item)\n  type VesselLocationsInput,     // Input type\n} from 'ws-dottie/wsf-vessels/core';\n\n// Import types without functions\nimport type { VesselLocation } from 'ws-dottie/wsf-vessels/schemas';\n```\n\n**Using Types in Your Code:**\n```typescript\nimport {\n  fetchVesselLocations,\n  type VesselLocation,\n} from 'ws-dottie/wsf-vessels/core';\n\n// Type function parameters\nasync function processVessel(vessel: VesselLocation) {\n  console.log(`Processing ${vessel.VesselName}`);\n}\n\n// Type function return values\nasync function getVesselData(): Promise<VesselLocation[]> {\n  const vessels = await fetchVesselLocations({\n    fetchMode: 'native',\n    validate: false\n  });\n  return vessels;\n}\n\n// Type variables\nconst vessel: VesselLocation = {\n  VesselID: 18,\n  VesselName: 'Chelan',\n  // ... other properties\n};\n```\n\n**Input vs Output Types:**\n- **Input types** (`*Input`): Parameters for API functions\n  - Example: `VesselLocationsByIdInput` for `fetchVesselLocationsByVesselId`\n- **Output types**: Response data from API functions\n  - Example: `VesselLocation` (single item) or `VesselLocation[]` (array)\n\n**Types with React Hooks:**\n```typescript\nimport { \n  useVesselLocations,\n  type VesselLocation \n} from 'ws-dottie/wsf-vessels';\n\nfunction VesselList() {\nconst { data: vessels } = useVesselLocations({\n  fetchMode: 'native',\n  validate: false,\n});\n  \n  // TypeScript knows vessels is VesselLocation[] | undefined\n  if (!vessels) return <div>Loading...</div>;\n  \n  return (\n    <ul>\n      {vessels.map((vessel: VesselLocation) => (\n        <li key={vessel.VesselID}>{vessel.VesselName}</li>\n      ))}\n    </ul>\n  );\n}\n```\n\n**Type Naming Convention:**\n- Output types: PascalCase singular (e.g., `VesselLocation`, `HighwayAlert`)\n- Input types: PascalCase with `Input` suffix (e.g., `VesselLocationsInput`, `VesselLocationsByIdInput`)\n- Arrays: Use TypeScript array syntax (e.g., `VesselLocation[]`)\n\n### 6. Start Building\n\n**React Application (Recommended)**\n```javascript\nimport { useVesselLocations } from 'ws-dottie/wsf-vessels';\nimport { useAlerts } from 'ws-dottie/wsdot-highway-alerts';\n\nfunction TransportationDashboard() {\n  const { data: vessels, isLoading } = useVesselLocations({\n    fetchMode: 'native',\n    validate: false,\n  });\n  const { data: alerts } = useAlerts({\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  return (\n    <div>\n      <h2>Active Ferries: {vessels?.length || 0}</h2>\n      <h2>Highway Alerts: {alerts?.length || 0}</h2>\n      {isLoading && <div>Loading...</div>}\n    </div>\n  );\n}\n```\n\n**Server-Side (Node.js)**\n```javascript\nimport {\n  fetchVesselLocationsByVesselId,\n  fetchFareLineItemsByTripDateAndTerminals,\n} from 'ws-dottie/wsf-vessels/core';\nimport { fetchAlertById } from 'ws-dottie/wsdot-highway-alerts/core';\nimport { fetchBorderCrossings } from 'ws-dottie/wsdot-border-crossings/core';\n\n// Get specific vessel location (VesselID: 18)\nconst vessel = await fetchVesselLocationsByVesselId({\n  params: { VesselID: 18 },\n  fetchMode: 'native',\n  validate: true,\n});\n\n// Get specific highway alert (AlertID: 468632)\nconst alert = await fetchAlertById({\n  params: { AlertID: 468632 },\n  fetchMode: 'native',\n  validate: true,\n});\n\n// Get ferry fare information for tomorrow's trip\nconst fares = await fetchFareLineItemsByTripDateAndTerminals({\n  params: {\n    TripDate: '2025-01-28',\n    DepartingTerminalID: 3,\n    ArrivingTerminalID: 7,\n    RoundTrip: false,\n  },\n  fetchMode: 'native',\n  validate: true,\n});\n\n// Get all border crossings\nconst crossings = await fetchBorderCrossings({\n  fetchMode: 'native',\n  validate: true,\n});\n```\n\n**Browser (CORS-Safe)**\n```javascript\nimport { fetchVesselBasicsByVesselId } from 'ws-dottie/wsf-vessels/core';\nimport { fetchBridgeClearancesByRoute } from 'ws-dottie/wsdot-bridge-clearances/core';\n\n// Get specific vessel details (VesselID: 74)\nconst vessel = await fetchVesselBasicsByVesselId({\n  params: { VesselID: 74 },\n  fetchMode: 'jsonp', // Bypasses CORS\n  validate: true\n});\n\n// Get bridge clearances for I-5 (Route: \"005\")\nconst clearances = await fetchBridgeClearancesByRoute({\n  params: { Route: \"005\" },\n  fetchMode: 'jsonp',\n  validate: true\n});\n```\n\n**Command Line (Debugging & Testing)**\n```bash\n# List all available endpoints\nfetch-dottie --list\n\n# Test specific vessel location (VesselID: 18)\nfetch-dottie fetchVesselLocationsByVesselId '{\"VesselID\": 18}'\n\n# Get ferry fares for specific trip\nfetch-dottie fetchFareLineItemsByTripDateAndTerminals '{\"TripDate\": \"2025-01-28\", \"DepartingTerminalID\": 3, \"ArrivingTerminalID\": 7, \"RoundTrip\": false}'\n\n# Fast testing without validation (raw data)\nfetch-dottie fetchVesselBasicsByVesselId '{\"VesselID\": 74}' --no-validation --pretty\n\n# Browser-compatible JSONP testing with parameters\nfetch-dottie fetchBridgeClearancesByRoute '{\"Route\": \"005\"}' --jsonp\n```\n\n## 📚 OpenAPI JSON Exports\n\nWS-Dottie exports OpenAPI 3.0 specifications for all APIs as JSON files, making them easily consumable by other tools and services like `ws-dottie-mcp`. These exports provide a complete machine-readable description of all endpoints, schemas, and documentation.\n\n### Importing OpenAPI Specifications\n\nYou can import OpenAPI specifications directly from the ws-dottie package:\n\n```javascript\n// Import a specific API specification\nimport wsfVesselsSpec from 'ws-dottie/openapi/wsf-vessels.json' assert { type: 'json' };\n\n// Use the specification in your application\nconsole.log(`API Title: ${wsfVesselsSpec.info.title}`);\nconsole.log(`Available endpoints: ${Object.keys(wsfVesselsSpec.paths).length}`);\n```\n\n### Available API Specifications\n\nAll 16 APIs have OpenAPI specifications available:\n\n**Washington State Ferries (WSF) APIs:**\n- `wsf-vessels.json` - Vessel locations, stats, and information\n- `wsf-terminals.json` - Terminal locations and information\n- `wsf-schedule.json` - Sailing schedules and routes\n- `wsf-fares.json` - Fare information and pricing\n\n**Washington State Department of Transportation (WSDOT) APIs:**\n- `wsdot-border-crossings.json` - Border crossing wait times\n- `wsdot-bridge-clearances.json` - Bridge clearance information\n- `wsdot-commercial-vehicle-restrictions.json` - Commercial vehicle restrictions\n- `wsdot-highway-alerts.json` - Highway alerts and incidents\n- `wsdot-highway-cameras.json` - Highway camera images\n- `wsdot-mountain-pass-conditions.json` - Mountain pass conditions\n- `wsdot-toll-rates.json` - Toll rate information\n- `wsdot-traffic-flow.json` - Traffic flow data\n- `wsdot-travel-times.json` - Travel time estimates\n- `wsdot-weather-information.json` - Weather information\n- `wsdot-weather-readings.json` - Weather sensor readings\n- `wsdot-weather-stations.json` - Weather station locations\n\n### Using with External Tools\n\nThe OpenAPI JSON exports are particularly useful when integrating with:\n\n- **API documentation tools** - Generate documentation sites\n- **Code generation tools** - Create client libraries\n- **Testing frameworks** - Automated API testing\n- **API gateways** - Proxy and route APIs\n- **MCP servers** - Expose APIs through Model Context Protocol\n\n### Example with ws-dottie-mcp\n\n```javascript\n// In ws-dottie-mcp configuration\nimport wsfVesselsSpec from 'ws-dottie/openapi/wsf-vessels.json' assert { type: 'json' };\n\n// Use the specification to configure MCP server\nconst mcpServer = new MCPServer({\n  name: 'wsf-vessels',\n  openapiSpec: wsfVesselsSpec\n});\n```\n\n## 📊 API Graph\n\nWS-Dottie exports a centralized API graph that serves as the single source of truth for all endpoint definitions. The graph provides structured access to API metadata, endpoint groups, and endpoint configurations, enabling programmatic introspection of available endpoints and their properties.\n\nThe API graph is available through the `./apis` package export and contains metadata for all 16 APIs, their endpoint groups, and individual endpoints with their schemas, cache strategies, and documentation. This makes it ideal for building tools that need to discover endpoints dynamically, generate documentation, or create custom integrations.\n\n```javascript\nimport { apis } from 'ws-dottie/apis';\n\n// Access a specific API\nconst vesselsApi = apis['wsf-vessels'];\n\n// Iterate through endpoint groups\nvesselsApi.endpointGroups.forEach(group => {\n  console.log(`Group: ${group.name}, Strategy: ${group.cacheStrategy}`);\n  \n  // Access endpoints in each group\n  group.endpoints.forEach(endpoint => {\n    console.log(`  Endpoint: ${endpoint.functionName}`);\n    console.log(`  Path: ${endpoint.endpoint}`);\n  });\n});\n\n// Get all endpoints across all APIs\nconst allEndpoints = Object.values(apis).flatMap(api => \n  api.endpointGroups.flatMap(group => group.endpoints)\n);\n```\n\n### Endpoint Registry\n\nWS-Dottie also exports a centralized endpoint registry that provides two complementary views of all endpoints:\n\n**`endpointsFlat`** - A flat array of all endpoints, ideal for iteration and searching:\n\n```javascript\nimport { endpointsFlat } from 'ws-dottie/apis';\n\n// Find an endpoint by function name\nconst endpoint = endpointsFlat.find(ep => ep.functionName === 'vesselBasics');\n\n// Filter by API\nconst wsfEndpoints = endpointsFlat.filter(ep => ep.api.name.startsWith('wsf-'));\n```\n\n**`endpointsByApi`** - A nested structure organized by API → Group → Function, useful for direct hierarchical access:\n\n```javascript\nimport { endpointsByApi } from 'ws-dottie/apis';\n\n// Direct access to a specific endpoint\nconst vesselEndpoint = endpointsByApi['wsf-vessels']['vesselBasics']['vesselBasics'];\n```\n\nThe registry is automatically generated from the API graph and includes complete endpoint metadata (schemas, cache strategies, URLs, etc.). It's used internally by the CLI, E2E tests, and documentation generation tools.\n\n## 🖥️ Command Line Interface\n\nWS-Dottie includes a comprehensive CLI tool (`fetch-dottie`) that provides **production-ready debugging and testing capabilities**. Access all 98 endpoints directly from your terminal with configurable transport strategies and validation options.                                                                      \n\n### Installation\n\nThe CLI is included with WS-Dottie and works in Node.js environments:\n\n```bash\n# Install ws-dottie (includes CLI)\nnpm install ws-dottie\n\n# Or use directly with npx (no installation required)\nnpx fetch-dottie --help\n```\n\n### Configuration\n\nSet your WSDOT API key as an environment variable:\n\n```bash\nexport WSDOT_ACCESS_TOKEN=your_api_key_here\n```\n\n### Usage\n\n```bash\nfetch-dottie <function-name> [params] [options]\n```\n\n### Examples\n\n**🚀 Quick Testing & Debugging**\n```bash\n# List all available endpoints\nfetch-dottie --list\n\n# Test any endpoint with full validation\nfetch-dottie fetchBorderCrossings\n\n# Fast testing without validation (raw data)\nfetch-dottie fetchVesselBasics --no-validation\n```\n\n**🌐 Environment Testing**\n```bash\n# Server-side testing (default)\nfetch-dottie fetchVesselLocations\n\n# Browser environment testing (JSONP)\nfetch-dottie fetchBorderCrossings --jsonp\n\n# Mixed: JSONP without validation (fastest)\nfetch-dottie fetchVesselBasics --jsonp --no-validation\n```\n\n**📊 Data Exploration**\n```bash\n# Get bridge clearances for I-5\nfetch-dottie fetchBridgeClearancesByRoute '{\"Route\": \"005\"}'\n\n# Get ferry fare information for specific trip\nfetch-dottie fetchFareLineItemsByTripDateAndTerminals '{\"TripDate\": \"2025-01-28\", \"DepartingTerminalID\": 3, \"ArrivingTerminalID\": 7, \"RoundTrip\": false}'\n\n# Get specific vessel location (VesselID: 18)\nfetch-dottie fetchVesselLocationsByVesselId '{\"VesselID\": 18}'\n\n# Get specific highway alert (AlertID: 468632)\nfetch-dottie fetchAlertById '{\"AlertID\": 468632}'\n\n# Get weather from specific station (StationID: 1909)\nfetch-dottie fetchWeatherInformationByStationId '{\"StationID\": 1909}'\n\n# Get vessel history for specific date range\nfetch-dottie fetchVesselHistoriesByVesselNameAndDateRange '{\"VesselName\": \"Tacoma\", \"DateStart\": \"2025-09-01\", \"DateEnd\": \"2025-10-01\"}'\n\n# Pretty-printed output\nfetch-dottie fetchBorderCrossings --pretty\n\n# Concise array output\nfetch-dottie fetchVesselLocations --concise\n\n# Silent mode (JSON only)\nfetch-dottie fetchBorderCrossings --silent\n\n# Limit output to first 5 items\nfetch-dottie fetchVesselLocations --limit 5\n```\n\n### Available Functions\n\nThe CLI supports all 98 endpoints across 16 APIs:\n\n- **WSDOT APIs**: Border Crossings, Bridge Clearances, Highway Alerts, Traffic Cameras, Weather Stations, Travel Times, Toll Rates, Mountain Passes, Commercial Vehicle Restrictions                                                            \n- **WSF APIs**: Ferry Schedules, Vessel Locations, Terminal Information, Fare Data                                                                              \n\nUse `fetch-dottie --help` to see all available functions with descriptions.\n\n### CLI Options\n\n**Transport & Validation Control**\n- `--jsonp` - Use JSONP transport for browser environments (bypasses CORS)\n- `--no-validation` - Disable Zod validation (raw fetch with .NET date conversion)\n\n**Output Formatting**\n- `--pretty` - Pretty-print JSON output with 2-space indentation (default)\n- `--concise` - Concise array output with brackets on own lines\n- `--silent` - Suppress all output except final JSON result\n- `--limit <number>` - Truncate output to first N items\n\n**Discovery**\n- `--list` - List all available endpoints with descriptions\n\n## 📊 Available Data Sources (16 APIs, 98 endpoints)\n\n### WSDOT APIs\n- **Highway Alerts** - Real-time traffic incidents and construction updates\n- **Traffic Flow** - Current traffic speeds and congestion data\n- **Travel Times** - Estimated travel times between locations\n- **Toll Rates** - Real-time toll pricing for managed lanes\n- **Weather Information** - Road weather conditions and forecasts\n- **Highway Cameras** - Live traffic camera feeds across state\n- **Bridge Clearances** - Height restrictions for commercial vehicles\n- **Mountain Pass Conditions** - Pass status and travel restrictions\n- **Commercial Vehicle Restrictions** - Truck and commercial vehicle limits\n- **Border Crossings** - Wait times and conditions at border crossings\n- **Weather Stations** - Weather station data and road conditions\n\n### WSF APIs\n- **Vessels** - Real-time vessel locations and status\n- **Terminals** - Terminal wait times and sailing space\n- **Schedules** - Ferry schedules and sailing times\n- **Fares** - Fare information and pricing\n\n## 🔧 Core Features\n\n### **🚀 Comprehensive API Coverage**\n- **16 distinct APIs** covering WSDOT (traffic, weather, tolls) and WSF (ferries, schedules)\n- **98 endpoints** with full type safety and validation\n- **Unified interface** — all APIs work consistently regardless of source\n\n### **🔄 Smart Caching & React Integration**\n- **TanStack Query integration** with transportation-optimized cache strategies:\n  - `REALTIME` (5-second updates) for traffic cameras, vessel locations\n  - `FREQUENT` (5-minute updates) for schedules, alerts  \n  - `MODERATE` (hourly updates) for weather, conditions\n  - `STATIC` (daily updates) for terminals, vessels, routes\n- **Zero-configuration React hooks** with automatic revalidation and background refresh\n- **Hooks Factory**: Automatically generates TanStack Query hooks for all API endpoints with proper caching strategies\n\n### **🌐 Flexible Fetching Strategies**\n- **Native fetch** for server-side and Node.js applications\n- **JSONP support** for browser environments (bypasses CORS restrictions)\n- **Optional Zod validation** for performance vs. safety tradeoffs (disabled by default)\n- **Unified API** — same code works in browser and server\n\n### **🛠️ Production-Ready Developer Experience**\n- **Command-line debugging tool** with all endpoints accessible via CLI\n- **Comprehensive error handling** with detailed context and helpful messages\n- **Environment-aware logging** with performance metrics\n- **Automatic .NET datetime conversion** (handles WSDOT's `/Date(timestamp)/` format)\n- **Type-safe configuration** via environment variables or runtime setup\n- **Documentation generation** with OpenAPI specs and interactive HTML docs\n\n### **📚 Automated Documentation**\n- **OpenAPI Specification Generation**: Automatically generates OpenAPI 3.1 specifications from Zod schemas\n- **Interactive HTML Documentation**: Redoc-powered documentation with examples and schema exploration\n- **Sample Data Management**: Fetches and maintains real API response samples for documentation\n- **Documentation Scripts**: `npm run docs:generate` creates complete documentation from source code\n\n### **🎯 Developer-Friendly Design**\n- **Strong TypeScript types** inferred from Zod schemas\n- **Consistent parameter patterns** across all APIs\n- **Tree-shaking support** — only import what you need\n- **Sample parameters** provided for every endpoint                 \n\n## 🎯 Production vs Development\n\n### When to Use Validation\n\n**Use validation (`validate: true`) in production when:**\n- You need to catch API response changes early\n- Data integrity is critical for your application\n- You want runtime type safety beyond TypeScript\n- You're integrating with third-party APIs that may change\n\n**Skip validation (`validate: false`) in production when:**\n- Performance is critical and API is stable\n- Bundle size matters (validation adds ~50-100KB)\n- You trust the API provider's stability\n- You're making many rapid API calls\n\n### Development vs Production Patterns\n\n```javascript\n// Development: Use validation to catch issues early\nconst vessels = await fetchVesselLocations({\n  fetchMode: 'native',\n  validate: process.env.NODE_ENV === 'development'\n});\n\n// Production: Optimize for performance\nconst vessels = await fetchVesselLocations({\n  fetchMode: 'native',\n  validate: false  // Faster, smaller bundle\n});\n\n// Conditional: Best of both worlds\nconst vessels = await fetchVesselLocations({\n  fetchMode: 'native',\n  validate: process.env.NODE_ENV !== 'production'\n});\n```\n\n### Bundle Size Optimization\n\n- **Full build with validation**: ~200-300KB (includes Zod schemas)\n- **Light build without validation**: ~100-150KB (schemas tree-shaken out)\n- **API-specific imports**: Further reduces bundle size by excluding unused APIs\n- **Core-only imports**: Excludes React/TanStack Query (~50KB savings)\n\nUse API-specific or core-only imports for optimal tree-shaking:\n\n```javascript\n// Smaller bundle - only includes wsf-vessels API\nimport { fetchVesselLocations } from 'ws-dottie/wsf-vessels/core';\n\n// Even smaller - no React hooks\nimport { fetchVesselLocations } from 'ws-dottie/wsf-vessels/core';\n```\n\n## 🔄 TanStack Query Integration\n\nWS-Dottie provides **zero-configuration React hooks** with transportation-optimized caching strategies. Each API endpoint automatically uses the appropriate cache strategy based on data update frequency.\n\nEvery hook now accepts the same `FetchFunctionParams<T>` object as its corresponding fetch function. Pass endpoint parameters with `params`, override fetching behavior with `fetchMode`, and toggle validation with `validate`—then optionally provide TanStack Query options as the second argument.\n\n### **Cache Strategies**\n\n```javascript\nimport {\n  useVesselLocations,\n  useVesselBasics,\n} from 'ws-dottie/wsf-vessels';\nimport { useAlerts } from 'ws-dottie/wsdot-highway-alerts';\n\nfunction TransportationDashboard() {\n  // REALTIME: 5-second updates for vessel locations\n  const { data: vessels, isLoading: vesselsLoading } = useVesselLocations({\n    fetchMode: 'native',\n    validate: false,\n  });\n  \n  // FREQUENT: 5-minute updates for highway alerts  \n  const { data: alerts, isLoading: alertsLoading } = useAlerts({\n    fetchMode: 'native',\n    validate: true,\n  });\n  \n  // STATIC: Daily updates for vessel information\n  const { data: vesselInfo } = useVesselBasics({\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  return (\n    <div>\n      <h2>Active Vessels: {vessels?.length || 0}</h2>\n      <h2>Highway Alerts: {alerts?.length || 0}</h2>\n      <h2>Vessel Details: {vesselInfo?.length || 0}</h2>\n    </div>\n  );\n}\n```\n\n### **Parameterized Queries**\n\n```javascript\nimport { useVesselLocationsByVesselId } from 'ws-dottie/wsf-vessels';\nimport { useAlertById } from 'ws-dottie/wsdot-highway-alerts';\nimport { useFareLineItemsByTripDateAndTerminals } from 'ws-dottie/wsf-fares';\n\nfunction SpecificDataView() {\n  // Get specific vessel location (REALTIME caching)\n  const { data: vessel } = useVesselLocationsByVesselId({\n    params: { VesselID: 18 },\n    fetchMode: 'native',\n    validate: true,\n  });\n  \n  // Get specific highway alert (FREQUENT caching)\n  const { data: alert } = useAlertById({\n    params: { AlertID: 468632 },\n    fetchMode: 'native',\n    validate: true,\n  });\n  \n  // Get ferry fares for specific trip (STATIC caching)\n  const { data: fares } = useFareLineItemsByTripDateAndTerminals({\n    params: {\n      TripDate: '2025-01-28',\n      DepartingTerminalID: 3,\n      ArrivingTerminalID: 7,\n      RoundTrip: false\n    },\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  return (\n    <div>\n      <h3>Vessel: {vessel?.VesselName}</h3>\n      <h3>Alert: {alert?.Headline}</h3>\n      <h3>Fares: {fares?.length} options</h3>\n    </div>\n  );\n}\n```\n\n### **Advanced Query Options**\n\n```javascript\nimport { useQuery } from '@tanstack/react-query';\nimport { fetchVesselBasicsByVesselId } from 'ws-dottie/wsf-vessels/core';\n\nfunction CustomQueryExample() {\n  const { data, error, isLoading } = useQuery({\n    queryKey: ['vessel', 74],\n    queryFn: () => fetchVesselBasicsByVesselId({\n      params: { VesselID: 74 },\n      fetchMode: 'native',\n      validate: true\n    }),\n    staleTime: 60 * 1000, // Custom stale time\n    refetchInterval: 30 * 1000, // Custom refetch interval\n    retry: 3,\n    retryDelay: 1000\n  });\n\n  if (isLoading) return <div>Loading...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n\n  return <div>Vessel: {data?.VesselName}</div>;\n}\n```\n\n### **Cache Strategy Details**\n\n|| Strategy | Update Frequency | Use Cases | Stale Time | Refetch Interval |\n||----------|------------------|-----------|------------|------------------|\n|| `REALTIME` | 5 seconds | Traffic cameras, vessel locations | 5s | 5s |\n|| `FREQUENT` | 5 minutes | Schedules, alerts, weather | 5m | 5m |\n|| `MODERATE` | 1 hour | Weather conditions, road status | 1h | 1h |\n|| `STATIC` | 1 day | Terminals, vessels, routes | 1d | 1d |\n\n## 📚 Quick Reference\n\n### Common Import Patterns\n```javascript\n// React hooks (recommended for UI)\nimport { useVesselLocations } from 'ws-dottie/wsf-vessels';\nimport { useAlerts } from 'ws-dottie/wsdot-highway-alerts';\n\n// Server-side functions (no React)\nimport { fetchVesselLocations } from 'ws-dottie/wsf-vessels/core';\nimport { fetchAlerts } from 'ws-dottie/wsdot-highway-alerts/core';\n\n// TypeScript types only\nimport type { VesselLocation } from 'ws-dottie/wsf-vessels';\n```\n\n### Basic Usage Examples\n```javascript\n// Get all vessel locations\nconst { data: vessels } = useVesselLocations({\n  fetchMode: 'native',\n  validate: false\n});\n\n// Get specific vessel by ID\nconst { data: vessel } = useVesselLocationsByVesselId({\n  params: { VesselID: 18 },\n  fetchMode: 'native',\n  validate: true\n});\n\n// Get highway alerts for a region\nconst { data: alerts } = useAlertsByRegionId({\n  params: { RegionID: 9 },\n  fetchMode: 'jsonp', // For browser\n  validate: true\n});\n```\n\n### Configuration Options\n```javascript\n// Set API key\nimport { configManager } from 'ws-dottie';\nconfigManager.setApiKey('your_api_key_here');\n\n// Environment variable\nexport WSDOT_ACCESS_TOKEN=your_api_key_here\n```\n\n### CLI Commands\n```bash\n# List all endpoints\nfetch-dottie --list\n\n# Get vessel locations\nfetch-dottie fetchVesselLocations\n\n# Get specific vessel with pretty output\nfetch-dottie fetchVesselLocationsByVesselId '{\"VesselID\": 18}' --pretty\n```\n\n## 📚 Documentation\n\n- **[Documentation Home](./docs/INDEX.md)** - Complete documentation index with getting started guides and API reference\n- **[Getting Started](./docs/getting-started.md)** - New to WS-Dottie? Start here\n- **[API Guide](./docs/guides/api-guide.md)** - High-level API overview and use cases\n- **[Interactive Documentation](./docs/api-reference/)** - Browse APIs with live examples\n\n### 🔗 Detailed API Documentation\nFor detailed endpoint documentation, interactive examples, and schema definitions, see our generated documentation:\n- **[OpenAPI Specifications](./docs/generated/openapi-json/)** - API specifications in JSON format\n- **[OpenAPI Specifications (YAML)](./docs/generated/openapi-yaml/)** - API specifications in YAML format\n- **[HTML Documentation](./docs/api-reference/)** - Interactive HTML documentation with examples\n\nOur documentation is automatically generated from API definitions, ensuring it stays synchronized with the latest code changes.\n\n## 🎯 Implementation Examples\n\n### **React Dashboard (Recommended)**\n```javascript\nimport {\n  useVesselLocations,\n  useVesselLocationsByVesselId,\n} from 'ws-dottie/wsf-vessels';\nimport {\n  useAlerts,\n  useAlertById,\n} from 'ws-dottie/wsdot-highway-alerts';\nimport { useFareLineItemsByTripDateAndTerminals } from 'ws-dottie/wsf-fares';\n\nfunction TransportationDashboard() {\n  // Real-time data with automatic caching\n  const { data: allVessels, isLoading: vesselsLoading } = useVesselLocations({\n    fetchMode: 'native',\n    validate: false,\n  });\n  const { data: alerts, isLoading: alertsLoading } = useAlerts({\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  // Specific vessel tracking (VesselID: 18)\n  const { data: specificVessel } = useVesselLocationsByVesselId({\n    params: { VesselID: 18 },\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  // Specific alert details (AlertID: 468632)\n  const { data: alertDetails } = useAlertById({\n    params: { AlertID: 468632 },\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  // Ferry fare calculation for tomorrow's trip\n  const { data: fares } = useFareLineItemsByTripDateAndTerminals({\n    params: {\n      TripDate: '2025-01-28',\n      DepartingTerminalID: 3,\n      ArrivingTerminalID: 7,\n      RoundTrip: false,\n    },\n    fetchMode: 'native',\n    validate: true,\n  });\n\n  return (\n    <div className=\"dashboard\">\n      <section>\n        <h2>Active Ferries: {allVessels?.length || 0}</h2>\n        {specificVessel && <p>Tracking: {specificVessel.VesselName}</p>}\n        {vesselsLoading && <div>Loading vessels...</div>}\n      </section>\n\n      <section>\n        <h2>Highway Alerts: {alerts?.length || 0}</h2>\n        {alertDetails && <p>Latest: {alertDetails.Headline}</p>}\n        {alertsLoading && <div>Loading alerts...</div>}\n      </section>\n\n      <section>\n        <h2>Trip Planning</h2>\n        <p>Ferry fares: {fares?.length || 0} options available</p>\n      </section>\n    </div>\n  );\n}\n```\n\n### **Server-Side API Integration**\n```javascript\nimport { fetchBorderCrossings } from 'ws-dottie/wsdot-border-crossings/core';\nimport { fetchVesselLocationsByVesselId } from 'ws-dottie/wsf-vessels/core';\nimport { fetchAlertById } from 'ws-dottie/wsdot-highway-alerts/core';\nimport { fetchBridgeClearancesByRoute } from 'ws-dottie/wsdot-bridge-clearances/core';\n\n// Express.js route handler with parameterized queries\napp.get('/api/transportation/:vesselId/:alertId', async (req, res) => {\n  try {\n    const { vesselId, alertId } = req.params;\n    \n    const [crossings, vessel, alert, clearances] = await Promise.all([\n      // All border crossings\n      fetchBorderCrossings({\n        fetchMode: 'native',\n        validate: true\n      }),\n      \n      // Specific vessel location\n      fetchVesselLocationsByVesselId({\n        params: { VesselID: parseInt(vesselId) },\n        fetchMode: 'native',\n        validate: true\n      }),\n      \n      // Specific highway alert\n      fetchAlertById({\n        params: { AlertID: parseInt(alertId) },\n        fetchMode: 'native',\n        validate: true\n      }),\n      \n      // Bridge clearances for I-5\n      fetchBridgeClearancesByRoute({\n        params: { Route: \"005\" },\n        fetchMode: 'native',\n        validate: true\n      })\n    ]);\n\n    res.json({ crossings, vessel, alert, clearances });\n  } catch (error) {\n    res.status(500).json({ error: error.message });\n  }\n});\n```\n\n### **Browser Application (CORS-Safe)**\n```javascript\nimport { fetchVesselBasicsByVesselId } from 'ws-dottie/wsf-vessels/core';\nimport { fetchWeatherInformationByStationId } from 'ws-dottie/wsdot-weather-information/core';\nimport { fetchAlertsByRegionId } from 'ws-dottie/wsdot-highway-alerts/core';\n\n// Browser-safe data fetching with parameters\nasync function loadTransportationData(vesselId = 74, stationId = 1909, regionId = 9) {\n  const [vessel, weather, regionalAlerts] = await Promise.all([\n    // Specific vessel details\n    fetchVesselBasicsByVesselId({\n      params: { VesselID: vesselId },\n      fetchMode: 'jsonp', // Bypasses CORS\n      validate: true\n    }),\n    \n    // Weather from specific station\n    fetchWeatherInformationByStationId({\n      params: { StationID: stationId },\n      fetchMode: 'jsonp',\n      validate: true\n    }),\n    \n    // Alerts from specific region\n    fetchAlertsByRegionId({\n      params: { RegionID: regionId },\n      fetchMode: 'jsonp',\n      validate: true\n    })\n  ]);\n\n  return { vessel, weather, regionalAlerts };\n}\n```\n\n### **CLI Automation & Testing**\n```bash\n#!/bin/bash\n# Automated monitoring script with specific parameters\n\n# Check specific vessel status (VesselID: 18)\necho \"=== Vessel Status ===\"\nfetch-dottie fetchVesselLocationsByVesselId '{\"VesselID\": 18}' --concise\n\n# Check highway alerts for specific region (RegionID: 9)\necho \"=== Regional Alerts ===\"\nfetch-dottie fetchAlertsByRegionId '{\"RegionID\": 9}' --limit 5\n\n# Check weather from specific station (StationID: 1909)\necho \"=== Weather Station ===\"\nfetch-dottie fetchWeatherInformationByStationId '{\"StationID\": 1909}'\n\n# Get ferry fares for tomorrow's trip\necho \"=== Ferry Fares ===\"\nfetch-dottie fetchFareLineItemsByTripDateAndTerminals '{\"TripDate\": \"2025-01-28\", \"DepartingTerminalID\": 3, \"ArrivingTerminalID\": 7, \"RoundTrip\": false}' --pretty\n\n# Fast testing without validation\necho \"=== Quick Test ===\"\nfetch-dottie fetchVesselBasicsByVesselId '{\"VesselID\": 74}' --no-validation --silent\n\n# Check bridge clearances for I-5\necho \"=== Bridge Clearances ===\"\nfetch-dottie fetchBridgeClearancesByRoute '{\"Route\": \"005\"}' --concise\n```\n\n## 🚀 Example Projects\n\n### **For Hobbyists**\n- **Ferry Tracker** - Real-time map showing vessel locations and wait times\n- **Traffic Camera Viewer** - Browse and view traffic cameras by region\n- **Weather Dashboard** - Road conditions and weather for your commute\n- **Toll Calculator** - Plan trips with real-time toll pricing\n\n### **For Developers**\n- **Transportation Analytics** - Analyze traffic patterns and ferry usage\n- **Route Planning** - Integrate real-time data into navigation apps\n- **Emergency Response** - Monitor highway alerts and conditions\n- **Logistics Tools** - Commercial vehicle routing with restrictions\n\n### **For Enterprise**\n- **Fleet Management** - Track vehicles with real-time traffic data\n- **Supply Chain Planning** - Optimize routes using traffic and weather data\n- **Public Safety** - Monitor transportation infrastructure\n- **Urban Planning** - Analyze transportation patterns and trends\n\n## 🧪 Testing\n\nWS-Dottie includes comprehensive testing with support for both Node.js and browser environments.                                                                \n\n```bash\n# Quick test commands\nnpm run test:e2e                    # E2E tests (Node.js)\nnpm run test:module                 # Module-specific tests\nnpm run test:direct                 # Direct vitest execution\n\n# Documentation generation\nnpm run docs:generate               # Generate all documentation (OpenAPI + HTML)\nnpm run docs:openapi                # Generate OpenAPI specifications only\nnpm run docs:html                   # Generate HTML documentation only\nnpm run docs:samples:fetch           # Fetch fresh sample data for documentation\n```\n\n**E2E Testing**: Tests all API endpoints with real data validation and error handling. Tests are organized per endpoint (one test file per endpoint, 97 files total), providing granular testing and easy filtering. Each test file uses the `createEndpointSuite` helper to automatically generate standard tests for the endpoint.\n\n**TanStack Query Testing**: Comprehensive testing of React hooks with caching strategies, error states, and loading states.\n\n**JSONP Testing**: Use `--jsonp` flag or `JSONP=true` environment variable to test browser environment compatibility.                                           \n\n📖 **For detailed testing information, see [Testing Architecture](./docs/guides/testing.md)**\n\n## 🏛️ Governance\n\nMaintained by Ferryjoy npm org. Issues and contributions welcome.\n\n## 🤝 Contributing\n\nWe welcome contributions! Please see our development guide for setup instructions.                                                 \n\n## 📄 License\n\nMIT License - see [LICENSE](./LICENSE) for details.\n\n---\n\n**Made with ❤️ for Washington State travelers**\n","readmeFilename":"README.md"}