rumkin / plant

๐ŸŒณ JS web server charged with WebAPI and neat HTTP2 support

Home Page:https://npmjs.com/package/@plant/plant

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Plant logo

Plant

npm npm

NPM ยท Source ยท Readme

Plant is WebAPI standards based HTTP2 web server, created with modular architecture and functional design in mind. Also it's pure and less coupled.

Plant supports HTTP 1 and HTTP 2 protocols. But it's transport agnostic and can work right in the browser over WebSockets, WebRTC, or PostMessage.

Features

  • โ˜๏ธ Lightweight: only 8 KiB minified and gzipped.
  • โœจ Serverless ready: works even in browser.
  • ๐Ÿ›ก Security oriented: uses the most strict Content Securiy Policy (CSP) by default.
  • ๐Ÿ“ Standards based: uses WebAPI interfaces.
  • ๐Ÿ›ณ Transport agnostic: no HTTP or platform coupling, ship requests via everything.

Table of Contents

Install

# Install plant web server
npm i @plant/plant
# Install node HTTP2 transport
npm i @plant/http2

Examples

Hello World

Hello world with HTTP2 as transport.

โš ๏ธ Note that default CSP header value is default-src localhost; form-action localhost. This will prevent web page from loading any external resource at all. Set minimal required CSP on your own. Read about CSP on Mozilla Developer Network

// Build request handler
const createServer = require('@plant/http2');
const Plant = require('@plant/plant');

const plant = new Plant();
plant.use(({res}) => {
  res.body = 'Hello, World!'
})

createServer(plant)
.listen(8080)

Router

Plant's builtin router is extremely simple and works only with exact strings. But there is more powerful router package which brings named params and regular expressions into routing.

const Plant = require('@plant/plant');
const Router = require('@plant/router');

const plant = new Plant()
const router = new Router()

router.get('/user/:name', async function({res, route}) {
  res.body = `Hello, ${route.params.name}!`
})

plant.use('/api/v1/*', router)

HTTP2 pushes

Hello world with HTTP2 as transport.

// Build request handler
const createServer = require('@plant/http2');
const Plant = require('@plant/plant');

const plant = new Plant();

plant.use('/script.js', ({res}) => {
  res.headers.set('content-type', 'application/javascript')
  res.body = 'console.log("Hello")'
})

plant.use('/index.html', ({res, fetch}) => {
  // Push '/script.js' URL to pushed resources.
  // It will be requested before sending main response.
  res.push('/script.js')
  // ... or ...
  // Push complete response from subrequest
  res.push(
    await fetch('/script.js')
  )

  res.body = '<html><script src="/script.js"></script></html>'
})

createServer(plant)
.listen(8080)

Packages

Router @plant/router

NPM ยท Source ยท Readme

Plant standalone router.

HTTP(S) Packages

HTTP2 @plant/http2

NPM ยท Source ยท Readme

Plant adapter for native node.js http2 module server. It creates server listener from Plant instance and http2.createServer() options. It's usage is the same as https module.

HTTPS2 @plant/https2

NPM ยท Source ยท Readme

Plant adapter for native node.js http2 module SSL server. It creates server listener from Plant instance and http2.createSecureServer() options. It's usage is the same as https module.

HTTP @plant/http

NPM ยท Source ยท Readme

Plant adapter for native node.js http module. It creates server listener from plant instance.

HTTPS @plant/https

NPM ยท Source ยท Readme

Plant adapter for native node.js https module. It creates server listener from plant instance and https options.

HTTP Adapter @plant/http-adapter

NPM ยท Source ยท Readme

This package is using to connect Plant and native Node's HTTP server. Modules http, https, http2, and https2 use it under the hood.

Electron Packages

Electron @plant/electron

NPM ยท Source ยท Readme

This package is using to connect Plant and with current Electron instance protocols API. It's using electron-adapter under the hood.

Electron Adapter @plant/electron-adapter

NPM ยท Source ยท Readme

This package is using to connect Plant and with Electron protocols API.

Utility Packages

Flow @plant/flow

NPM ยท Source ยท Readme

This is library for cascades. This is where contexts manage take place and requests pass from one handler to another.

Node Stream Utils @plant/node-stream-utils

NPM ยท Source ยท Readme

Node <-> WebAPI streams adapters. Useful for wrapping Node.js streams to work with Plant.

Tests Packages

Test HTTP Suite @plant/test-http

NPM ยท Source ยท Readme

Tiny package with tools for HTTP testing. It simplify server creation and request sending and receiving.

License

MIT ยฉ Rumkin

About

๐ŸŒณ JS web server charged with WebAPI and neat HTTP2 support

https://npmjs.com/package/@plant/plant


Languages

Language:JavaScript 98.7%Language:Shell 0.9%Language:HTML 0.3%Language:CSS 0.1%