@sim.perelli/dot-conf

Simple .conf file parser for Nodejs

Usage no npm install needed!

<script type="module">
  import simPerelliDotConf from 'https://cdn.skypack.dev/@sim.perelli/dot-conf';
</script>

README

dot-conf

Simple .conf file parser for Nodejs

This is mostly done with educational purposes.

npm install @sim.perelli/dot-conf

Let's write a simple configuration file

# main.conf
# this is a comment 
log_level = debug

server_name = _hostname_ # this is a symbol

# this is a namespace
@database
username = alfred # this is an inline comment
host = _localhost_
database = wayne_mansion

dot-conf will try its best to retrieve all the configuration files and serve them in a useful way

// somewhere else
const conf = await dotConf('main.conf')

conf('log_level')
// debug

conf('server_name')
// nightwing01.batcave.com

conf('database.username')
// 'alfred'

conf('mislept.or.undefined')
// undefined

conf('*')
// { log_level: 'warn', database: { username: 'alfred' ...

conf('database')
// { host: '127.0.0.1', username: 'alfred' ...

If you're organizing your application in submodules and don't feel like letting know the persistence module what an eventbus or an email server are, you can always detach a namespace from the main conf

const databaseConf = conf.detach('database')

//somewhere in the persistence module
const username = databaseConf('username')

Maybe you would like to define default values for missing configuration variables

const defaultTo = {
    log_level: 'info',
    server_name: 'nightwing01.batcave.com'
}

const conf = dotConf('main.conf',{ defaultTo })

Ehy what is this symbol thingy?

// some.conf
server_name = _hostname_
timeout = _timeout_

dot-conf let's you define placeholders (sorrounded by _) to access dynamically computed or very common values

// a symbol is essentially a function
const symbols = {
    timeout: () => 5*1000
}

const conf = dotConf('main.file', { symbols })

Any suggestion is of course very welcome.