shager
v0.1.0
Published
A wrapper around Node's fetch with Axios-like API
Readme
Shager
A lightweight wrapper around Node's native fetch API that provides an Axios-like experience.
Features
- 🚀 Axios-like API for easy migration
- ⏱️ Request timeouts support
- 🔄 Automatic JSON parsing
- 🛑 Built-in error handling
- 💪 Written in TypeScript for type safety
- 🪶 Lightweight with no dependencies (uses built-in Node.js fetch)
- 🔗 Support for baseURL to simplify API requests
Installation
npm install shager
# or
yarn add shager
# or
pnpm add shagerUsage
import shager from 'shager';
// Simple GET request
const response = await shager.get('https://api.example.com/data');
console.log(response.data); // Already parsed JSON
// POST request with data
const createResponse = await shager.post('https://api.example.com/users', {
name: 'John Doe',
email: '[email protected]'
});
// PUT request
const updateResponse = await shager.put('https://api.example.com/users/1', {
name: 'John Updated'
});
// DELETE request
const deleteResponse = await shager.delete('https://api.example.com/users/1');
// Request with custom config
const customResponse = await shager.get('https://api.example.com/data', {
headers: {
'Authorization': 'Bearer token123'
},
timeout: 5000 // 5 seconds timeout
});
// Using an instance with baseURL
const api = shager.create({
baseURL: 'https://api.example.com',
headers: {
'Authorization': 'Bearer token123'
},
timeout: 3000 // Default timeout for this instance
});
// Now you can use relative URLs
const users = await api.get('/users');
const user = await api.get('/users/1');
const newUser = await api.post('/users', { name: 'New User' });API
Request Methods
shager.get(url, config)shager.post(url, data, config)shager.put(url, data, config)shager.patch(url, data, config)shager.delete(url, config)shager.options(url, config)
Request Config
{
baseURL?: string; // Base URL for the request
headers?: Record<string, string>;
timeout?: number; // in milliseconds
params?: Record<string, string | number | boolean | null | undefined>;
// ... other fetch options are also supported
}Response Object
{
data: any; // Automatically parsed JSON or raw response
status: number;
statusText: string;
headers: Headers;
config: RequestConfig; // The config that was provided for the request
request: Request; // The request object
}Creating an Instance
const instance = shager.create({
baseURL: 'https://api.example.com', // All requests will use this as the base URL
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer token123'
},
timeout: 5000
});
// Now you can make requests with relative URLs
const users = await instance.get('/users');
const user = await instance.get('/users/1');
// You can still use absolute URLs to override the baseURL
const externalData = await instance.get('https://external-api.com/data');Testing
The library includes comprehensive tests for all CRUD operations and features. To run the tests:
# Run all tests once
npm test
# Run tests in watch mode during development
npm run test:watch
# Run tests with coverage report
npm run test:coverageLicense
MIT
