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

@rapidui/quiver-http

v0.0.0-beta.24

Published

Rapid UI HTTP Module

Downloads

6

Readme

HttpInterceptorService

API Summary

Methods:

| Name | Type | Description | | --- | --- | 650--- | | delete | function(url: string, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a DELETE method to a URL, executing the interceptors as part of the request pipeline. | get | function(url: string, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a GET method to a URL, executing the interceptors as part of the request pipeline. | head | function(url: string, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a HEAD method to a URL, executing the interceptors as part of the request pipeline. | patch | function(url: string, data: any, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a PATCH method to a URL, executing the interceptors as part of the request pipeline. | post | function(url: string, data: any, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a POST method to a URL, executing the interceptors as part of the request pipeline. | put | function(url: string, data: any, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a PUT method to a URL, executing the interceptors as part of the request pipeline. | request | function(url: string | Request, options: RequestOptionsArgs) | Uses underlying @angular [http] to request a generic request to a URL, executing the interceptors as part of the request pipeline.

Usage

Service provided with methods that wrap the @angular [Http] service and provide an easier experience for interceptor implementation.

To add a desired interceptor, it needs to implement the [IHttpInterceptor] interface.

export interface IHttpInterceptor {
  onRequest?: (requestOptions: RequestOptionsArgs) => RequestOptionsArgs;
  onRequestError?: (requestOptions: RequestOptionsArgs) => RequestOptionsArgs;
  onResponse?: (response: Response) => Response;
  onResponseError?: (error: Response) => Response;
}

Every method is optional, so you can just implement the ones that are needed.

Setup

Create your custom interceptors by implementing [IHttpInterceptor]:

import { Injectable } from '@angular/core';
import { IHttpInterceptor } from '@covalent/http';

@Injectable()
export class CustomInterceptor implements IHttpInterceptor {

   onRequest(requestOptions: RequestOptionsArgs): RequestOptionsArgs {
    ... // do something to requestOptions before a request
    ... // if something is wrong, throw an error to execute onRequestError (if there is an onRequestError hook)
    if (/*somethingWrong*/) {
      throw new Error('error message for subscription error callback');
    }
    return requestOptions;
  }

  onRequestError(requestOptions: RequestOptionsArgs): RequestOptionsArgs {
    ... // do something to try and recover from an error thrown `onRequest` 
    ... // and return the requestOptions needed for the request
    ... // else return 'undefined' or throw an error to execute the error callback of the subscription
    if (cantRecover) {
      throw new Error('error message for subscription error callback'); // or return undefined;
    }
    return requestOptions;
  }

  onResponse(response: Response): Response {
    ... // check response status and do something
    return response;
  }

  onResponseError(error: Response): Response {
    ... // check error status and do something
    return error;
  }
}

Then, import the [QuiverHttpModule] using the forRoot() method with the desired interceptors and paths to intercept in your NgModule:

import { NgModule, Type } from '@angular/core';
import { HttpModule } from '@angular/http';
import { QuiverHttpModule, IHttpInterceptor } from '@covalent/http';
import { CustomInterceptor } from 'dir/to/interceptor';

const httpInterceptorProviders: Type<IHttpInterceptor>[] = [
  CustomInterceptor,
  ...
];

@NgModule({
  imports: [
    HttpModule,
    QuiverHttpModule.forRoot({
      interceptors: [{
        interceptor: CustomInterceptor, paths: ['**'],
      }],
    }),
    ...
  ],
  providers: [
    httpInterceptorProviders,
    ...
  ],
  ...
})
export class MyModule {}

After that, just inject [HttpInterceptorService] and use it for your requests.

Paths

The following characters are accepted as a path to intercept

  • ** is a wildcard for [a-zA-Z0-9-_] (including /)
  • * is a wildcard for [a-zA-Z0-9-_] (excluding /)
  • [a-zA-Z0-9-_]

Examples

Example 1

/users/*/groups intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups

/users/*/groups DOES NOT intercept:

  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/groups

Example 2

/users/**/groups intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups

/users/**/groups DOES NOT intercept:

  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups

Example 3

/users/** intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups

/users/** DOES NOT intercept:

  • www.url.com/users

Example 4

/users** intercepts:

  • www.url.com/users/id-of-user/groups
  • www.url.com/users/id/groups
  • www.url.com/users/id-of-user/path/groups
  • www.url.com/users/id-of-user/groups/path
  • www.url.com/users/groups
  • www.url.com/users

RESTService

API Summary

Methods:

| Name | Type | Description | | --- | --- | 650--- | | query | function(query?: IRestQuery, transform?: IRestTransform) | Creates a GET request to the generated endpoint URL. | get | function(id: string | number, transform?: IRestTransform) | Creates a GET request to the generated endpoint URL, adding the ID at the end. | create | function(obj: T, transform?: IRestTransform) | Creates a POST request to the generated endpoint URL. | update | function(id: string | number, obj: T, transform?: IRestTransform) | Creates a PATCH request to the generated endpoint URL, adding the ID at the end. | delete | function(id: string | number, transform?: IRestTransform) | Creates a DELETE request to the generated endpoint URL, adding the ID at the end. | buildUrl | function(id?: string | number, query?: IRestQuery) | Builds the endpoint URL with the configured properties and arguments passed in the method.

Usage

Abstract class provided with methods that wraps http services to facilitate REST API calls.

Example:

import { Injectable } from '@angular/core';
import { Response, Http, Headers } from '@angular/http';
import { RESTService, HttpInterceptorService } from '@covalent/http';

@Injectable()
export class CustomRESTService extends RESTService<any> {

  constructor(private _http: Http /* or HttpInterceptorService */) {
    super(_http, {
      baseUrl: 'www.api.com',
      path: '/path/to/endpoint',
      headers: new Headers(),
      dynamicHeaders: () => new Headers(),
      transform: (res: Response): any => res.json(),
    });
  }
}

Note: the constructor takes any object that implements the methods in [IHttp] interface. This can be the @angular [Http] service, the covalent [HttpInterceptorService] or a custom service.

export interface IHttp {
  delete: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  get: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  head: (url: string, options?: RequestOptionsArgs) => Observable<Response>;
  patch: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  post: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  put: (url: string, body: any, options?: RequestOptionsArgs) => Observable<Response>;
  request: (url: string | Request, options: RequestOptionsArgs) => Observable<Response>;
}