2.4.2 • Published 5 years ago

singular v2.4.2

Weekly downloads
193
License
-
Repository
github
Last release
5 years ago

Singular is dependency manager for modular applications. Its' modules are CommonJS-alike classes.

Singular can load modules in runtime for example WASM modules or mock any module in test environment.

Installation

  • Install from NPM:

    npm i singular
  • Inject using unpkg.com:

    <script src="https://unpkg.com/singular@3/dist/singular.js"></script>
    <script src="https://unpkg.com/singular@3/dist/singular.min.js"></script>

    ⚠️ Remember about security! Add subresource integrity (SRI) checksum from checksum.txt.

Example

Singular is made for simple configuration and initialization:

import Singular from 'singular'

const singular = new Singular({
  modules: {
    mongo: new MongoModule(),
    sqlite: new SqliteModule(),
    user: new UserModule({
      // User module layout requires mongo `db` which is `mongo` in current app
      db: 'mongo',
    }),
    transactions: new TransactionsModule({
      // Transactions module layout requires sqlite `db` which is `sqlite`
      // in current app
      db: 'sqlite',
    }),
  },
})

Usage and API

Instantiate and configure new singular instance.

import Singular from 'singular'

const config = {
  logger: {
    level: 'INFO',
  },
  mongo: {
    connect: 'mongodb://...'
  },
  sql: {
    type: 'sqlite',
    dbPath: './db.sqlite',
  },
}

const singular = new Singular({
  config,
})

Inject dependencies with start method.

// Inject logger and log something
singular.start()
.then(({ mongo, sqlite }) => {

})

Module Example

Define module using ES2019 syntax:

class GreetingModule extends Singular.Module {
  deps = {
    // Logger is required
    logger: true,
  }

  defaults = {
    name: 'World'
  }

  async start(config, scope, exports) {
    const {logger} = scope

    exports.greet = function(name) {
      logger.log('Hello, %s!', name || config.name)
    }

    // Or

    return {
      greet(name) {
        logger.log('Hello, %s!', name || config.name)
      },
    }
  }

  async stop() {
    // ... Do something to shutdown module gracefully ...
  }
}

License

MIT © Rumkin

3.7.1-beta1

5 years ago

3.5.1-beta1

5 years ago

4.3.0-b0

5 years ago

4.2.1-beta1

5 years ago

4.2.0-beta1

5 years ago

4.1.2-beta1

5 years ago

4.1.1-beta1

5 years ago

4.1.0-beta1

5 years ago

4.0.0-beta1

5 years ago

3.7.0-beta1

5 years ago

3.6.0-beta1

5 years ago

3.5.0-beta1

5 years ago

3.4.3-beta1

5 years ago

3.4.2-beta1

5 years ago

3.4.1-beta1

5 years ago

3.4.0-beta1

5 years ago

3.3.0-beta1

5 years ago

3.2.1-beta1

5 years ago

3.2.0-beta1

5 years ago

3.1.0-beta1

5 years ago

3.0.0-beta1

5 years ago

2.4.2

7 years ago

2.4.1

7 years ago

2.4.0

8 years ago

2.3.0

8 years ago

2.2.0

8 years ago

2.1.1

8 years ago

2.1.0

8 years ago

1.0.7

8 years ago

1.0.6

8 years ago

1.0.5

8 years ago

1.0.4

9 years ago

1.0.3

9 years ago

1.0.1

9 years ago

1.0.0

9 years ago

0.2.4

10 years ago

0.2.3

10 years ago

0.2.2

10 years ago

0.2.1

10 years ago

0.2.0

10 years ago

0.1.8

10 years ago

0.1.6

10 years ago

0.1.5

10 years ago

0.1.4

10 years ago

0.1.3

10 years ago

0.1.2

10 years ago

0.1.1

10 years ago

0.1.0

10 years ago