# hyperbun

> A fast http framework for Bun runtimes.

Latest version **0.4.6** (published 2022-08-21) · MIT license · 0 weekly downloads

## Install

```sh
npm install hyperbun
pnpm add hyperbun
yarn add hyperbun
bun add hyperbun
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.4.6 |
| Published | 2022-08-21 |
| First published | 2022-07-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Node | >=16 |
| Dependencies | 2 |
| Unpacked size | 21.9 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| Author | Eckhardt Dreyer |
| Maintainers | eckidevs |
| Keywords | bun, router, http |

## Links

- npm: https://www.npmjs.com/package/hyperbun
- npm.io page: https://npm.io/package/hyperbun

## Dependencies (2)

- [tsup](https://npm.io/package/tsup.md) ^6.1.3
- [radix3](https://npm.io/package/radix3.md) ^0.1.2

## Alternatives

- [express-promise-router](https://npm.io/package/express-promise-router.md) — 736.1K weekly downloads
- [next-usequerystate](https://npm.io/package/next-usequerystate.md) — 29.8K weekly downloads
- [@bitkyc08/opencodex](https://npm.io/package/@bitkyc08/opencodex.md) — 4.6K weekly downloads
- [lynkr](https://npm.io/package/lynkr.md) — 575 weekly downloads
- [baremetal.js](https://npm.io/package/baremetal.js.md) — 42 weekly downloads

## Recent versions

- 0.4.6 (latest) — 2022-08-21
- 0.4.5 — 2022-08-21
- 0.4.4 — 2022-07-11
- 0.4.3 — 2022-07-11
- 0.4.2 — 2022-07-11
- 0.4.1 — 2022-07-11
- 0.3.1 — 2022-07-11
- 0.3.0 — 2022-07-11
- 0.2.2 — 2022-07-08
- 0.2.1 — 2022-07-08
- 0.2.0 — 2022-07-08
- 0.1.8 — 2022-07-08
- 0.1.7 — 2022-07-08
- 0.1.6 — 2022-07-08
- 0.1.5 — 2022-07-08
- … 3 more at https://npm.io/package/hyperbun/versions

## README

# HyperBun is meant for Bun runtimes, it will not work in Node / Deno.

A simple HTTP routing library built on top of Bun's built in HTTP solution.

## Getting started

    bun add hyperbun

## Example

```ts
import {createServer} from 'hyperbun';

const server = createServer();

server.middleware((request, context) => {
  console.log('Just a simple middleware...');
});

server.middleware((request, context) => {
  return Error('Oops, I returned a 500.');
});

server.get('/json', (request, context) => {
  return {
    hello: 'I will automatically become a JSON response...'
  }
});

server.get('/text', (request, context) => {
  return "Hello, I will be a text/html response...";
});

server.listen({
  port: 3000,
  hostname: '0.0.0.0'
});
```

## Request Context

Includes `{params: {}, query: {}}` by default. More to come.

```ts
import {createServer} from 'hyperbun'

const server = createServer();

server.middleware((request, context) => {
  context.auth = {user: '1234'};
});

// /home?search=movies
server.get('/home', (_, context) => {
  console.log(context.query) // { search: "movies" }
  return 'OK';
})

server.get('/private', (_, context) => {
  if (context.auth?.user !== '1234') {
    // Return your own custom responses too.
    return new Response('unauthorized', {
      status: 401,
    })
  }

  return {
    private: 'data',
  }
})

server.listen({port: 3000});

```

## Dynamic routes with params

```ts
import {createServer} from 'hyperbun';
const server = createServer();

server.post('/users/:userId', async (request, context) => {
  const {userId} = context.params;
  const updatePayload = await request.json();

  await UserModel.updateById(userId, updatePayload);
  return { success: "true" };
});

server.listen({
  port: 3000,
  hostname: "0.0.0.0",
});

```

## Send a file response

```ts
import {createServer, asAttachment} from 'hyperbun';

const server = createServer();

server.get('/file', () => {
  return Bun.file('./test-file.txt'); // Inline
})

server.get('/file', () => {
  return asAttachment('./test-file.txt', { // Attachment (download)
    name: 'helloworld.txt'
  });
})

server.listen({
  port: 3000,
  hostname: '0.0.0.0',
});

```

## Consuming a request body

```ts
import {createServer} from 'hyperbun'

const server = createServer();

server.post('/users/add', async (request, context) => {
  const user = await request.json();
  const result = await database.create(user);
  return result;
});
```

## Create multiple Routers and use on base path

```ts
import {createServer, createRouter} from 'hyperbun';

const server = createServer();
const router1 = createRouter();
const router2 = createRouter();

server.get('/', () => new Response('/ server main router'));

router1.get('/', () => new Response('/users router'));
router2.get('/', () => new Response('/posts router'));

server.use('/users', router1);
server.use('/posts', router2);

server.listen({
  port: 3000,
})
```

## Available methods

These listeners will automatically match the route and method that you setup and respond with a 404 for ones you don't have.

`server.get`
`server.post`
`server.put`
`server.delete`
`server.patch`

---
_Source: https://npm.io/package/hyperbun · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
