{"_id":"@camilaprav/xfetch","_rev":"7-c7d55b10b8e59a1a7e0bce3eb94180f8","name":"@camilaprav/xfetch","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.0":{"name":"@camilaprav/xfetch","version":"0.0.0","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.0","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"ad501c33e5e97cdc009ab128366471585bde96c6","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.0.tgz","fileCount":4,"integrity":"sha512-8zHnl5bddUZoeHJNPnDHNzngMjz8m+RoJHeJ0uPCJHlHR2GhWpp9vxB3s8K9Ckhcu6xnMm49lwGkio0PWCPKGQ==","signatures":[{"sig":"MEUCIQDOu4t4SqFOZDjFFZD34fEnicRAuTnik0DDPMdJZ84S6wIgHBmQojhbJis3ZWW4eYe3R9EUVgyYIej/70cTMGN5x3U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42443},"browser":"xfetch.js","gitHead":"59ac8f06e514f666b2570ef9e4f3c0fa301fd4df","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"10.9.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.0_1744579902051_0.655734374762263","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@camilaprav/xfetch","version":"0.0.1","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.1","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"23eeec1abaaf4d3ce83a4598e380d0893abb355b","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.1.tgz","fileCount":4,"integrity":"sha512-CSK58EteItplHqekPruF2YYivi8t6xb0nxtXAr5mxeD/styWUFelEDovURME4MiN+XZg0tbgbYMKh3HCRWqZsw==","signatures":[{"sig":"MEYCIQD5VRZH7JFGUyaCQK72gQr5g9zYuep1MkuboF4p641eTQIhANqQrFDM+JyUYpc9D8c6RYuQYgo8Vb1vuqkttRRC0QgJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42466},"browser":"xfetch.js","gitHead":"3a8ec87f80acfcbc267721a87aa852be18e4a3d4","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"10.9.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.1_1744580114528_0.4769049736940445","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@camilaprav/xfetch","version":"0.0.2","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.2","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"a230008119851adc62196c7301e3eba1d2d9f379","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.2.tgz","fileCount":4,"integrity":"sha512-qX1EFlyIy98dRK9iwwOQm8ikQKz1+hC54+gm9bJ0uTE6mT5oxIGtsx2u1AdmgSrGs79ZUKjCDTP/1dF7o27pZQ==","signatures":[{"sig":"MEUCIEJ/jbKbd1iT5cBK5D2aiOti7eXNvguA84cF03iG2TLCAiEAos/HkXd08sd4oDIu2ih2P1wMbXqu1WE58idf95dtaNg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42498},"browser":"xfetch.js","gitHead":"d071b52bc47e4578972b9e3a00aec76bca434291","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"10.9.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.2_1744599400792_0.3203285274185059","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@camilaprav/xfetch","version":"0.0.3","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.3","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"aec7d575dd8954cd3102175f599254817507af9f","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.3.tgz","fileCount":4,"integrity":"sha512-pY+Y89JyNDhA1/lzzCGjKK6Zxn98AC3Ux1Z56VnAM2cMbziCNxoyiUcrnZpdg2BBlK+4RyVWNkSiWeleAWCiJg==","signatures":[{"sig":"MEYCIQCOU2m+lTJPepYdq4bXfAqmE1TWuQnD2RdRGPtKT2bs8QIhALnqsvQH9KJh+vbtPaDjG61BQ23BLCp+QhXlw8i+2NpS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42509},"browser":"xfetch.js","gitHead":"9e718ac22a52d0e3b33898f6040778e93c8fa789","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"10.9.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.3_1744599515965_0.9718613389426627","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@camilaprav/xfetch","version":"0.0.4","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.4","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"50c5801f5a97b0ec3ef5e571e9b064e8aa8026d3","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.4.tgz","fileCount":4,"integrity":"sha512-Jlf5ibC8webX8UVAEoCLuRogIbAYoDZ+VOeXtlqnK5v5szUts+OI/FJqyxfnBiOLjQIY/Ohd7MKRSroIaZ0yWA==","signatures":[{"sig":"MEUCIQCqRTKpAxjoNO8cmILgP1iuCdCVbE5TgEPT/0ln2OUgpgIgXMiSvmMjvUw0RpMHgluzmhg8dt7OGgAxONDlFhEO+co=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42455},"browser":"xfetch.js","gitHead":"aa100854f8a565e82d8673d39ea02cb3b0c60c95","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"10.9.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"23.11.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.4_1744601689600_0.4241750784567324","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@camilaprav/xfetch","version":"0.0.5","author":{"name":"Camila Prá"},"license":"GPLv3+","_id":"@camilaprav/xfetch@0.0.5","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"dist":{"shasum":"c1c51f3063be3b1516abc9d39724206007bf48a9","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.5.tgz","fileCount":4,"integrity":"sha512-zl+0pOPn2+H86K6vy/05OrMzrMAcWQ1cxSC153imDeupGnkDDZZLBBGBGIauep5ODdmL71c/l2cd4ieZIyTNGA==","signatures":[{"sig":"MEUCIQDcSGk4zl/yWYE/qpUynzsZ56lofw5pw0kdA9xyaAszZAIgJ9cUD22TTFsGE81xCWFU5joSkJFh0PM6cjgfHPksbUY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42801},"browser":"xfetch.js","gitHead":"6b9913594c6516f1ad344a48b79b08544d4f7868","_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"_npmVersion":"9.7.2","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","directories":{},"_nodeVersion":"20.4.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/xfetch_0.0.5_1744614985062_0.1291876126221021","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@camilaprav/xfetch","version":"0.0.6","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","browser":"xfetch.js","author":{"name":"Camila Prá"},"license":"GPLv3+","gitHead":"8d09c348ddcca047837880ac14d127eddc7d9394","_id":"@camilaprav/xfetch@0.0.6","_nodeVersion":"20.4.0","_npmVersion":"9.7.2","dist":{"integrity":"sha512-RYJWVEw5oNyi915lI9XNhkiwBPvYYN9ARzdmiZNNlRPL5qi6YIOCWFmkXTGW042yidhlijpy/JNx7YmjeXtJXg==","shasum":"1d57903333360f0ae6993352672a58f23564febd","tarball":"https://registry.npmjs.org/@camilaprav/xfetch/-/xfetch-0.0.6.tgz","fileCount":4,"unpackedSize":42867,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD5yCpMJ/T5Br2Ug/vGgb4JdrWAkl3+Wnw1y9iitdmC3wIhAKFduJi5jkH+I9+Q7y77RTljtbvpkx9GftGkVUi0Vv+D"}]},"_npmUser":{"name":"camilaprav","email":"camila@guiprav.com"},"directories":{},"maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/xfetch_0.0.6_1744619859993_0.42092588889295923"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-13T21:31:41.989Z","modified":"2025-04-14T08:37:40.394Z","0.0.0":"2025-04-13T21:31:42.231Z","0.0.1":"2025-04-13T21:35:15.058Z","0.0.2":"2025-04-14T02:56:40.982Z","0.0.3":"2025-04-14T02:58:36.153Z","0.0.4":"2025-04-14T03:34:49.781Z","0.0.5":"2025-04-14T07:16:25.265Z","0.0.6":"2025-04-14T08:37:40.201Z"},"author":{"name":"Camila Prá"},"license":"GPLv3+","description":"Drop-in wrapper for native fetch with smart defaults and powerful middleware support.","maintainers":[{"name":"camilaprav","email":"camila@guiprav.com"}],"readme":"# ⚡ xfetch\n\n**xfetch** is a drop-in wrapper for native `fetch` with smart defaults and powerful middleware support. It offers a modern, ergonomic API that improves day-to-day fetch usage and supports full control over request/response flow.\n\nIt can also serve as a lightweight alternative to libraries like Axios when you need Express-like middleware-style interceptors without the extra overhead.\n\n---\n\n## ✨ Features\n\n- **Smart Defaults**\n  - Defaults to `POST` when a body is provided and no method is specified.\n  - Automatically sets `Content-Type: application/json` when `body` is an object or array.\n  - Built-in support for query parameters via `init.query` (objects are serialized and appended to the URL using `query-string`).\n\n- **Middleware System**\n  - Express-style interceptor middlewares for request/response lifecycle control.\n  - Easily inject headers, log requests, or short-circuit with mock responses.\n  - Middleware logic can run isomorphically in browser and Node/Express.\n\n---\n\n## 🚀 Quick Start\n\n```js\nimport xfetch from 'https://esm.sh/@camilaprav/xfetch';\n\n// Register middleware before making requests\nxfetch.middlewares.push(async (req, res, next) => {\n  req.headers['Authorization'] = 'Bearer my-token';\n  await next();\n});\n\nconst res = await xfetch('/api/user', {\n  query: { id: 123 },\n  body: { name: 'Alice' },\n});\n\nconst data = await res.json();\n```\n\n---\n\n## 🧩 Middleware API\n\nMiddlewares receive three arguments: `req`, `res`, and `next`.\nThey can modify the request, send a response early, or allow the request to proceed.\n\n```js\nxfetch.middlewares.push((req, res, next) => {\n  if (req.url.startsWith('/dev')) return res.json({ mocked: true });\n  next();\n});\n```\n\n`req` includes:\n- `method`, `url`, `protocol`, `headers`, `query`, `body`\n\n`res` includes:\n- `status()`, `setHeader()`, `getHeader()`, `json()`, `send()`, `write()`, `end()`\n\n---\n\n## 🧠 When to Use\n\n- You want better defaults than native `fetch`.\n- You want a lightweight alternative to Axios-style interceptors.\n- You want to simulate or mock APIs during local development.\n- You want to share middleware logic between client and server (with Express).\n\n---\n\n## 📜 License\n\nGNU General Public License v3.0 or later (GPLv3+)\n\nYou are free to use, modify, and redistribute this software under the terms of the GPLv3+.\n","readmeFilename":"README.md"}