2.1.0 • Published 4 months ago

reserve v2.1.0

Weekly downloads
316
License
MIT
Repository
github
Last release
4 months ago

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

2.0.5

8 months ago

2.1.0

4 months ago

2.0.3

8 months ago

2.0.4

8 months ago

2.0.2

12 months ago

2.0.1

1 year ago

2.0.0

1 year ago

2.0.0-beta.2

1 year ago

2.0.0-beta.1

1 year ago

1.15.9

1 year ago

1.15.8

1 year ago

1.15.7

1 year ago

1.15.6

1 year ago

1.15.4

2 years ago

1.15.5

2 years ago

1.15.3

2 years ago

1.15.2

3 years ago

1.15.1

3 years ago

1.15.0

3 years ago

1.14.0

3 years ago

1.13.1

3 years ago

1.13.0

3 years ago

1.12.1

4 years ago

1.12.0

4 years ago

1.11.7

4 years ago

1.11.6

4 years ago

1.11.5

4 years ago

1.11.4

4 years ago

1.11.3

4 years ago

1.11.2

4 years ago

1.11.1

4 years ago

1.11.0

4 years ago

1.10.1

4 years ago

1.10.0

4 years ago

1.9.3

4 years ago

1.9.2

5 years ago

1.9.1

5 years ago

1.9.0

5 years ago

1.8.2

5 years ago

1.8.1

5 years ago

1.8.0

5 years ago

1.7.1

5 years ago

1.7.0

5 years ago

1.6.1

5 years ago

1.6.0

5 years ago

1.5.0

5 years ago

1.4.0

5 years ago

1.3.0

5 years ago

1.2.1

5 years ago

1.2.0

5 years ago

1.1.7

5 years ago

1.1.6

5 years ago

1.1.5

5 years ago

1.1.4

5 years ago

1.1.3

5 years ago

1.1.2

5 years ago

1.1.1

6 years ago

1.1.0

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.0.1

12 years ago