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

    1.0.1 • Public • Published

    abstract-startable

    Abstract Class to represent entities that can be started and stopped

    Installation

    npm i --save abstract-startable

    Usage

    Supports both ESM and CommonJS

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

    Define a StartableClass and start an instance

    import AbstractStartable from 'abstract-startable`
     
    class Car extends AbstractStartable {
      protected async _start() {
        await this._startEngine()
        await this._startHeadlights()
        await this._startRadio()
      }
      protected async _stop() {
        await timeout(100)
        console.log('stopped')
      }
      protected async _startEngine() {
        await timeout(100)
        console.log('vroom')
      }
      protected async _startHeadlights() {
        await timeout(100)
        console.log('flash')
      }
      protected async _startRadio() {
        await timeout(100)
        console.log('bass')
      }
    }
     
    const tesla = new Car()
    console.log(tesla.started) // log: false
    await tesla.start()
    // log: vroom
    // log: flash
    // log: bass
    console.log(tesla.started) // log: true

    Multiple starts/stops in parallel

    const tesla = new Car()
    console.log(tesla.started) // log: false
    tesla.start().catch((err) => {
      console.log(tesla.started) // log: true
      console.error(err) // log: Error: server started successfully, but is stopping now
    })
    tesla.stop().then(() => {
      console.log(tesla.started) // log: false
    })
    tesla.start().catch((err) => {
      console.error(err) // log: Error: cannot start server, server is stopping
    })
    tesla.stop().then(() => {
      console.log(tesla.started) // log: false
    })

    License

    MIT

    Install

    npm i abstract-startable

    DownloadsWeekly Downloads

    18

    Version

    1.0.1

    License

    MIT

    Unpacked Size

    36 kB

    Total Files

    17

    Last publish

    Collaborators

    • tjmehta