singular v2.4.2
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
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago