npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@gildembergleite/fetch-kit

v1.0.5

Published

![npm](https://img.shields.io/npm/v/@gildembergleite/fetch-kit) ![npm bundle size](https://img.shields.io/bundlephobia/min/@gildembergleite/fetch-kit) ![npm](https://img.shields.io/npm/dt/@gildembergleite/fetch-kit)

Downloads

4

Readme

@gildembergleite/fetch-kit

npm npm bundle size npm

A TypeScript library for building and managing HTTP requests with ease. This library provides a flexible and extensible way to interact with APIs using a BaseApi class and customizable HttpClient implementations.

Features

  • Simple and flexible API for making HTTP requests (GET, POST, PATCH, DELETE).
  • Customizable HTTP client (default is fetch).
  • URL construction with query parameters.
  • Default headers management.
  • Error handling for HTTP requests.

Installation

You can install the library via npm:

npm install @gildembergleite/fetch-kit

Usage

Basic Setup

Here’s how you can set up and use the BaseApi class with the default FetchHttpClient:

import { BaseApi } from '@gildembergleite/fetch-kit';
import { FetchHttpClient } from '@gildembergleite/fetch-kit';

const api = new BaseApi({
  baseURL: 'https://api.example.com',
  defaultHeaders: {
    'Content-Type': 'application/json',
  },
  httpClient: new FetchHttpClient(),
});

// Making a GET request
api.get('/endpoint').then(response => {
  console.log(response);
}).catch(error => {
  console.error('Request failed', error);
});

// Making a POST request
api.post('/endpoint', {
  body: { key: 'value' },
}).then(response => {
  console.log(response);
}).catch(error => {
  console.error('Request failed', error);
});

Available Methods

The BaseApi class provides the following methods for making HTTP requests:

  • get<T>(endpoint: string, options?: RequestOptions): Promise<T>: Makes a GET request to the specified endpoint.
  • post<T>(endpoint: string, options?: RequestOptions): Promise<T>: Makes a POST request to the specified endpoint.
  • patch<T>(endpoint: string, options?: RequestOptions): Promise<T>: Makes a PATCH request to the specified endpoint.
  • delete<T>(endpoint: string, options?: RequestOptions): Promise<T>: Makes a DELETE request to the specified endpoint.

URL Parameters

You can pass query parameters to the get, post, patch, and delete methods using the params option:

api.get('/endpoint', {
  params: { search: 'query', page: 1 }
}).then(response => {
  console.log(response);
});

Custom HTTP Client

By default, the library uses the native fetch API, but you can implement and use your own HTTP client by following the HttpClient interface:

import { HttpClient, RequestOptions } from '@gildembergleite/fetch-kit';

class CustomHttpClient implements HttpClient {
  async request<T>(url: string, options: RequestOptions): Promise<T> {
    // Custom implementation here
    return fetch(url, {
      method: options.method || 'GET',
      headers: options.headers,
      body: options.body ? JSON.stringify(options.body) : null,
    }).then(response => response.json());
  }
}

const api = new BaseApi({
  baseURL: 'https://api.example.com',
  httpClient: new CustomHttpClient(),
});

Error Handling

The BaseApi class automatically handles non-2xx HTTP responses by throwing an error. You can catch these errors using a try-catch block or the catch method on the returned Promise:

try {
  const response = await api.get('/endpoint');
  console.log(response);
} catch (error) {
  console.error('Request failed', error);
}

Testing

This library includes unit tests for all core functionalities. To run the tests, use the following command:

npm test

Contributing

Contributions are welcome! Please feel free to submit a Pull Request or open an Issue.

License

This library is licensed under the MIT License. See the LICENSE file for more details.