undici-shim

1.5.3 • Public • Published

undici-shim Codacy Badge GitHub repo size

A small ESM/UMD library providing the fast request function from Undici within Node, otherwise window.fetch is utilized when running in a browser environment.

Why?

Upon trying to distribute a project, I found Undici could not be used on the client-side.
As such, this is a drop-in replacement for Undici when using bundlers like webpack/rollup.

Without the overhead of WHATWG Streams, the request method proves much faster than fetch in both latency and throughput.

Tests Samples Results Tolerance Difference with slowest
undici - fetch 20 1028.31 req/sec ± 2.71 % -
http - no keepalive 10 3891.51 req/sec ± 2.00 % + 278.44 %
undici - pipeline 95 6034.47 req/sec ± 2.95 % + 486.83 %
http - keepalive 50 6382.57 req/sec ± 2.98 % + 520.68 %
undici - request 15 8528.35 req/sec ± 2.11 % + 729.35 %

Install

npm i undici-shim

Usage

ESM

import request from 'undici-shim'
const res = await request('https://jsonplaceholder.typicode.com/posts/1')

console.log(await res.body.json())

You can also use Undici fetch instead of request for consistency across environments.

import { fetch } from 'undici-shim'
const res = await fetch('https://jsonplaceholder.typicode.com/posts/1')

console.log(await res.json())

CommonJS

const { fetch } = require('undici-shim')

fetch('https://jsonplaceholder.typicode.com/posts/1')
    .then(res => res.json())
    .then(console.log)

Named Exports

Node
Starting from v1.3.2, named exports are identical to Undici.

import { request, Dispatcher, Headers, ... } = from 'undici-shim'

Browser

import { fetch, Request, Response, Headers } = from 'undici-shim'

Package Sidebar

Install

npm i undici-shim

Weekly Downloads

30

Version

1.5.3

License

MIT

Unpacked Size

10.6 kB

Total Files

15

Last publish

Collaborators

  • owen77stubbs