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

koaw-js

v0.1.0

Published

Cloudflare Worker version of Koa web application framework, customized, well documented.

Downloads

16

Readme

Koaw

NPM latest version MIT License Minified Gzip Github Action Test Coverage Status

A Koa-like web framework designed for Cloudflare Worker.

If you are using my old package called cf-worker-gateway or worker-scaffold, I suggest switching to this package. Using ctx is more easily to maintain.

English is not my native language; please forgive my typing errors. Improvement about documents is also welcomed!

Installation

Install the core first,

npm install koaw-js
# or
yarn add koaw-js

Usage

Koaw core and KoawRouter all support "Chaining".

Without additional packages, you can use some internal plugins, just like this,

import Koaw, { KoawRouter, cors } from "koaw-js";

addEventListener("fetch", (event) => {
  const app = new Koaw(event);
  const router = new KoawRouter();
  // KoawRouter's handlers
  router.get("/example", (ctx) => {
    ctx.res.body = "hello example";
    ctx.res.status = 200;
    ctx.end(); // The `ctx` must call `.end()` to stop middlewares' execution.
    // If not called at last, the `ctx.res` will be an `unfinished` response.
  });
  // Actually inject middlewares in `Koaw` core
  app.use(cors(true));
  app.use(router.route());

  event.respondWith(app.run());
});

Constructor

const app = new Koaw(event: FetchEvent, options?: object)

The options accept these configurations,

| Params | Type | Description | | :------ | :-------- | :--------------------------------------------------------- | | debug | boolean | If set true, errors and debug infomation will be printed |

Plugins (Internal)

KoawRouter

The KoawRouter is an middleware which manage handlers with path and method.

The match result is generated from package path-to-regexp, you can make a more complicate use.

const router = new KoawRouter();
router.get("/a/:id", (ctx, match) => {
  // Router's handler has additional param `match` for dynamic route.
  ctx.res.body = match.params.id;
  ctx.res.status = 200;
  ctx.end();
});
// other routes
app.use(router.route());

event.respondWith(app.run());

cors

The function cors is just so simple, you can pass only true, and all CORS configuration will work as default. If you want additional config, you can refer cors in express.js

Transformer

Transformer.responseToCtx

Convert an exist Response to ctx.res

app.use(async (ctx) => {
  let response = await fetch("https://github.com");
  ctx.res = await Transformer.responseToCtx(response);
});

Plugin Packages

| Package | Description | | :------ | :---------- | | - | - |

Q & A

Q: Why not continuous maintain @arctome/worker-scaffold ?

A: The reason is very simple. WorkerScaffold is based on Response type detection, every step you need construct a new Response, which needs a lot of code. Also, construct a Response is not an easy way for a Router package, plenty of detection, plenty of clone and re-construction, made the code of core very difficult to maintain. Therefore, I create this package to replace the "old way".

Another reason is that I want to extract the plugins not indispensable. That will allow more plugins developed by community.

Q: Performance ?

A: Not test for now. Will be added soon.