This package has been deprecated

Author message:

Use @adonisjs/config instead

@poppinss/config
TypeScript icon, indicating that this package has built-in type declarations

1.0.7 • Public • Published

Config

circleci-image npm-image license-image

Extremely simple module to decouple application config from the file system, which has handful of benefits.

  1. Can rely on more sources to feed configuration.
  2. Easy to define fake values during testing.
  3. A much nicer API to read nested values.

Table of contents

Usage

Install the package from npm as follows

npm i @poppinss/config

# yarn
yarn add @poppinss/config

and then use the class as follows:

import { Config } from '@poppinss/config'

const initialConfiguration = {
  app: {
    name: 'adonis',
  },
  database: {
    connection: 'mysql',
  },
  logger: {
    level: 'debug',
  },
}

const config = new Config(initialConfiguration)

config.get('app.name') // adonis
config.get('database.connection') // mysql
config.get('database.user', 'root') // root

Why not simply create the config files?

Majority of projects create config files next to the source files or inside a dedicated config directory and require those files wherever needed.

However, with AdonisJs, we make the process of config management a little bit better over manually requiring config files and it has handful of benefits.

AdonisJs recommends to save all configuration inside the config directory and then behind the scenes it read those files and feed it's content to the Config class and later the application developer can get rid of importing config files and rely on the Config class instance instead.

Multiple config sources

We virtually decouple the config from the filesystem, which means your app can read the configuration from anywhere and pass it to the Config class. For example:

const { db } from 'some-db-module'
import { Config } from '@poppinss/config'

const settings = await db.table('settings').select('*')

const config = new Config({}) // start with empty store
settings.forEach((row) => {
  config.set(row.key, JSON.parse(row.value))
})

Easy to fake during tests

Now since, you are not requiring the config files directly inside your application code, you can easily provide fake values during tests.

Config file

export const db = {
  connection: 'pg'
}

Config module

import { Config } from '@poppinss/config'
import { db } from './config/database'

export default new Config({ db })

Application code

import { Db } from 'some-db-module'
import config from './config'

const db = new Db(config.get('db'))

class UserController {
  async store () {
    // perform insert
  }
}

Test code

import config from './config'
config.set('db.connection', 'sqlite')

// now run tests and connection will be sqlite over pg

Reading nested values

Reading nested values in Javascript isn't fun. You have to ensure that top level object is actually an object before accessing it's child.

However, with this module, you can pull nested values without worrying about the intermediate parents being undefined or null.

config.get('database.mysql.connection.host', '127.0.0.1')

The get method will return 127.0.0.1 if any of the parents or the value of host itself is non-existent.

API

Following are the autogenerated files via Typedoc

Maintainers

Harminder virk

Readme

Keywords

Package Sidebar

Install

npm i @poppinss/config

Weekly Downloads

1

Version

1.0.7

License

MIT

Unpacked Size

9.66 kB

Total Files

9

Last publish

Collaborators

  • julien-r44
  • romainlanz
  • virk