1.1.3 • Published 6 months ago

siujeless v1.1.3

Weekly downloads
-
License
BSD Source Code
Repository
-
Last release
6 months ago

Siujeless

A serverless version for siuje, the middleware used in siuje can be reused in siujeless without modification.

How to Use

Generally you can create a fetch event listener. For example, in Bun, you can use code like:

import siuje from "siujeless"

// sample for middleware, copy from siuje
const set_header = headers => {
  return (req, ctrl) => next => {
    ctrl( headers );
    return next(req, ctrl);
  }
}

Bun.serve({
  port: 10001,
  fetch: siuje([
    set_header({"server": "siujeless"}),
    async (req, ctrl) => {
      ctrl(200);
      return "hello,world";
    }
  ]),
});

With siujeless, your code in siuje can be easily migrated to a serverless environment.

Presets

You can use siujeless.seq to embed multiple middlewares into one middleware.

import siuje from "siujeless"

// sample for middleware, copy from siuje
const set_header = headers => {
  return (req, ctrl) => next => {
    ctrl( headers );
    return next(req, ctrl);
  }
}

const my_headers = siuje.seq(
  set_header({"connection": "keep-alive"}),
  set_header({"access-control-allow-origin": "*"})
);

Bun.serve({
  port: 10001,
  fetch: siuje([
    set_header({"server": "siujeless"}),
    my_headers,
    async (req, ctrl) => {
      ctrl(200);
      return "hello,world";
    }
  ]),
});

Why No Router

Siujeless is designed for use with Cloudflare Page Functions, which utilize a folder-based routing system. If you need a router for a runtime environment like service workder, find-my-way should work well.

import siuje from "siujeless";
import fmw from "find-my-way";

const set_header = headers => {
  return (req, ctrl) => next => {
    ctrl( headers );
    return next(req, ctrl);
  }
}

const router = fmw();
router.on("GET", "/hello/:name", siuje(
  set_header({server: "siujeless"}),
  async (req, ctrl) => (ctrl(200), `hello, ${req.params.name}!!`)
));

Bun.serve({
  port: 10001,
  fetch: async req => {
    const url = new URL(req.url);
    const result = router.find(req.method, url.pathname);
    if (result) {
      req.params = result.params;
      return await result.handler( req );
    }
    else return new Response("not found", {status: 404});
  }
});

Of course, if you want a smaller router for saving size, @medley/router also work.

import siuje from "siujeless"
import Router from "@medley/router"

const router = new Router();
// sample for middleware, you may use import to get some custom middleware
const set_header = headers => {
  return (req, ctrl) => next => {
    ctrl( headers );
    return next(req, ctrl);
  }
}

function addRoute(method, path, handler) {
  const store = router.register(path);
  store[method] = handler;
}

addRoute("GET", "/hello/:name", siuje(
  set_header({"server": "siujeless"}),
  async (req, ctrl) => (ctrl(200), `hello, ${req.params.name}`)
));

Bun.serve({
  port: 10001,
  fetch: async req => {
    const url = new URL(req.url);
    const result = router.find(url.pathname);
    if (result) {
      req.params = result.params;
      return await result.store[req.method]( req );
    }
    else return new Response("not found", {status: 404});
  }
});
1.1.3

6 months ago

1.1.1

8 months ago

1.1.0

8 months ago

1.0.12

8 months ago

1.0.11

9 months ago

1.0.10

9 months ago

1.0.9

9 months ago

1.0.8

9 months ago

1.0.7

9 months ago

1.0.6

9 months ago