Nothing's plumb meaningless

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

    1.0.1 • Public • Published

    abstract-app

    An Abstract Application Class that handles kill signals (SIGINT and SIGTERM) and enforces stop timeout

    Installation

    npm i --save abstract-app

    Usage

    Supports both ESM and CommonJS

    // esm
    import AbstractStartable from 'abstract-startable`
    // commonjs
    const AbstractStartable = require('abstract-startable')

    Define a AppClass and start the app

    import { createServer } from 'http'
     
    class MyApp extends AbstractApp {
      constructor() {
        super({
          // required opts
          logger: console,
          stopTimeout: 15*1000
        })
        this.handle
        this.server = createServer((req, res) => {
          res.statusCode = 200;
          res.end('Hello World');
        })
      }
      protected async _start() {
        return new Promise((resolve, reject) => {
          this.server.once('error', reject)
          this.server.listen(3000, () => {
            this.server.removeListener('error', reject)
            resolve()
          })
        })
      }
      protected async _stop() {
        return new Promise((resolve, reject) => {
          this.server.close((err) => {
            if (err) return reject(err)
            resolve()
          })
        })
      }
    }
     
    const app = new MyApp()
    await app.start()
    console.log(`app pid: ${process.pid}`)

    Stop the app

    /* ... see example above ... */
    const app = new MyApp()
    await app.start()
    console.log(`app pid: ${process.pid}`)
    await app.stop()

    Stop failures

    • If the app fails to stop the app will be forced to shutdown (force: true)
    • If the app fails to stop within the stopTimeout it will be force shutdown

    Signals and Logging

    Start the app

    > node app.js
    starting app...
    app started
    app pid: 98850

    Send the app SIGINT

    > kill -SIGINT 98850

    App logs after stop

    stopping app...
    app stopped

    App logs if stop errors

    stopping app...
    error stopping app {
      err: Error: boom
          at filename:10:17
    }

    License

    MIT

    Install

    npm i abstract-app

    DownloadsWeekly Downloads

    6

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    37.7 kB

    Total Files

    16

    Last publish

    Collaborators

    • avatar