Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@hazae41/fleche

hazae41191MIT1.4.5TypeScript support: included

Zero-copy HTTP protocol for the web

http, https, protocol, browser, packets, compression, messaging, encoding, decoding, connexion, webassembly, typescript, esmodules, tested, unit-tested

readme

npm i @hazae41/fleche

Node Package 📦

Features

Goals

  • 100% TypeScript and ESM
  • Zero-copy reading and writing
  • Transport agnostic (TCP, TLS, Tor)
  • Supports backpressure

HTTP

  • HTTP 1.1
  • Native Gzip and Deflate compression
  • Compatible with code using fetch
  • Reusable underlying connection

WebSocket

  • Relies on the above HTTP
  • Powered by WebAssembly
  • Same API than native
  • Only 0.3ms slower than native

Upcoming features

  • More HTTP 1.1 features
  • HTTP 2, HTTP 3 (QUIC)

Usage

import { Opaque, Writable } from "@hazae41/binary"
import { fetch } from "@hazae41/fleche"

function example(stream: ReadableWritablePair<Opaque, Writable>) {
  /**
   * Fetch using the underlying TCP or TLS stream
   */
  const res = await fetch("https://example.com", { stream })

  if (!res.ok)
    throw new Error(await res.text())

  return await res.json()
}

`tsx import { Opaque, Writable } from "@hazae41/binary" import { WebSocket } from "@hazae41/fleche"

function example(stream: ReadableWritablePair<Opaque, Writable>) { const socket = new WebSocket("wss://example.com")

/**

  • Pipe TCP or TLS input to WebSocket input */ stream.readable .pipeTo(socket.inner.writable, { preventCancel: true }) .catch(() => {})

    /**

  • Pipe WebSocket output to TCP or TLS output */ socket.inner.readable .pipeTo(stream.writable, { preventClose: true, preventAbort: true }) .catch(() => {})

    await new Promise((ok, err) => { socket.addEventListener("open", ok) socket.addEventListener("error", err) })

    socket.addEventListener("message", e => console.log(e.data)) socket.send("Hello world") }