reserve
TypeScript icon, indicating that this package has built-in type declarations

2.0.0 • Public • Published

REserve logo

REserve 2️⃣

Node.js CI no dependencies JavaScript Style Guide Package Quality Known Vulnerabilities reserve install size PackagePhobia MIT License FOSSA Status Documentation History

A lightweight web server configurable with regular expressions. It can also be embedded and extended. The name comes from the combination of RE for regular expressions and serve.

🍁 Rational

Initially started to build a local development environment where static files are served and resources can be fetched from remote repositories, this tool is versatile and can support different scenarios :

  • A simple web server,
  • A reverse proxy,
  • A server that aggregates several sources,
  • ...

By defining an array of mappings, one can decide how the server will process the incoming requests. Each mapping associates matching criteria (method selection, url matching using regular expression) to a handler that will answer the request.

The configuration syntax favors simplicity without dropping flexibility.

For instance, the definition of a server that exposes files of the current directory but forbids access to the directory private consists in :

{
  "port": 8080,
  "mappings": [{
    "match": "^/private/",
    "status": 403
  }, {
    "match": "^/(.*)",
    "file": "./$1"
  }, {
    "status": 404
  }]
}

Example of reserve.json configuration file

💿 Usage

Command line

The package declares the executable reserve :

  • By default, it will look for a file named reserve.json in the current working directory
  • One or more configuration files name can be specified using --config <file names separated by ,>

Embedded

The server can be embedded in an application using the serve export :

const { serve } = require('reserve')

serve({
  port: 8080,
  mappings: [{
    match: /^\/(.*)/,
    file: '$1'
  }, {
    "status": 404
  }]
})
  .on('ready', ({ url }) => {
    console.log(`Server running at ${url}`)
  })

Embedding reserve in a custom application (CommonJS)

The resulting object exposes a method similar to the EventEmitter::on method and throws events with parameters, see Server events. It also exposes a close method (returning a Promise resolved when all pending requests are completed) to shutdown the server.

The package also gives access to the configuration reader :

import { read, serve } from 'reserve'

read('reserve.json')
  .then(configuration =>
    serve(configuration)
      .on('ready', ({ url }) => {
        console.log(`Server running at ${url}`)
      })
  )

Embedding reserve in a custom application (ESM)

And a default log output (verbose mode will dump all redirections) :

import { log, read, serve } from 'reserve'

read('reserve.json')
  .then(configuration =>
    log(serve(configuration), /*verbose: */ true)
  )

Embedding reserve with the default logger (ESM)

⚖️ License

The package is licensed MIT and has no dependencies.

📚 Documentation

Go to this page to access documentation and articles about REserve.

⚠️ From v1 to v2

Package Sidebar

Install

npm i reserve

Weekly Downloads

1,356

Version

2.0.0

License

MIT

Unpacked Size

44.3 kB

Total Files

8

Last publish

Collaborators

  • arnaud.buchholz