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

faast

v0.3.3

Published

A fast FaaS web framework

Downloads

12

Readme

NOTE: This project is in a pre-release state; this documentation is incomplete.

Faast

A fast FaaS web framework

Faast is a very light weight framework designed specifically for FaaS (function-as-a-service) environments. It is optimized for quick cold starts. Primarily, it does this by loading endpoints as needed.

Install/Setup

Faast is an npm module, so you probably already know how to install it:

> npm i faast

Quickstart

Faast was inspired by ExpressJS, and some effort was made to follow API conventions from that project. Here is a simple example Faast application:

const http = require('http');
const faast = require('faast');
const services = require('faast/middleware/services');

const app = faast();

app.use(services('registry.json'));
app.use(json.write());

const PORT = 3000;
http.createServer(app.serve).listen(PORT, ()=>{
  console.log(`Now listening on port ${PORT}...`);
});

The registry JSON file referenced in the code above is a pre-compiled registry of your web application's endpoints. The 'services' middleware is at the core of Faast's optimization. It uses the registry file to find and load endpoints when needed. Because this requires a build step (see here for how to build a registry file), Faast provides a prototyping option that runs the build step dynamically for each request. Here is an example of that options:

const http = require('http');
const faast = require('faast');
const services = require('faast/middleware/services');
const json = require('faast/middleware/json');

const app = faast();

app.use(services('./endpoints/**/*.js'));
app.use(json.write());

const PORT = 3000;
http.createServer(app.serve).listen(PORT, ()=>{
  console.log(`Now listening on port ${PORT}...`);
});

Notice that the only change here is that instead of passing a JSON registry file to the services middleware, we are now passing a glob that points to all javascript files in a particular directory.

Proxies

Proxies allow you to convert input from the environment to a standardized request/response format that Faast applications recognize. By default, Faast uses the built-in node proxy. This proxies the standard request and response objects provided by the node http library to Faast request and response objects (see here for the API specs of these objects). There is also a built-in proxy for AWS. You can use this proxy by passing in the string 'aws' to the Faast function like so: const app = faast('aws'). You can also pass in your own custom function that proxies from whatever input you want.

Writing your own proxy function

...TODO...

Building a registry file

...TODO...

Other middleware

Static Files

JSON

URL-encoded

Errors

Auth

Cookies

Writing middleware

...TODO...