/n9-node-conf

Conf node module loader.

Primary LanguageTypeScriptGNU General Public License v3.0GPL-3.0

n9-node-conf

Conf node module loader.

npm version Travis Coverage license

Installation

yarn add @neo9/n9-node-conf

or

npm install --save @neo9/n9-node-conf

V2 Upgrade

  • Drop Node.js V 16 support as it has reached end of life
  • Change extendConfig setting from string to object. Example :
Before (V1) After (V2)
{
	...,
	extendConfig: {
		key: 'appName'
	}
}
{
	...,
	extendConfig: {
		key: {
			name: 'appName'
		}
	}
}

Usage

n9NodeConf([options])

Options:

  • path: String, default: process.env.NODE_CONF_PATH || './conf/'

Example:

import n9NodeConf from '@neo9/n9-node-conf';
import { join } from 'path';

const conf = n9NodeConf({
	path: join(__dirname, 'conf'),
});

Options :

N9ConfOptions :

path

Type: string
Required
Path to the folder containing the configuration files. See the structure for more details.

extendConfig

Type: object
Default: undefined To describe extension configuration. Extension configuration ca be a json, yaml or yml file.
In the order, it will try to load the path given, then the same file changing the extension to another supported.

given 2nd try 3rd try
json yaml yml
yaml yml json
yml json yaml
path

Type: object
Required
To describe where to find extension configuration. One of absolute or relative is required.

absolute

Type: string
Required if relative is not filled
Absolute path to the extension configuration.
Example : Path.join(__dirname, 'conf/env.json')

relative

Type: string
Required if absolute is not filled
Relative path to the conf folder path
Example : './env.json'

key
name

Type: string
Default the app name from package.json.name
The key to use in configuration extension. The path to load the conf will be {env}.{app name}

format

Type: ExtendConfigKeyFormat
Default to undefined.
The format to apply to the packageJSON.name to find the key name. The path to load the conf will be {env}.{format}({app name})

mergeStrategy

Type: N9ConfMergeStrategy (v1 or v2)
Default: v2
The merge strategy to use to merge extension configuration with the other.

  • v1 : Use lodash merge function. Mainly, merge deeper in arrays
    [a, b] + [c, d] → [merge(a, c), merge(b, d)]
  • v2 : Use built in mechanism. It replace array is any
    [a, b] + [c, d] → [c, d]

overridePackageJsonDirPath

Type: string
Default: undefined, use npm module app-root-dir to find package.json Used to load package.json, to find app name, app version and with app name to build the path to load the conf extension.

override

Type: object
Default undefined, no override Override the conf at the end of loading.

value

Type: object
Default: undefined, not applied
Value to override the conf at the end of loading. Merge strategy used is defined bellow. Useful for tests.

mergeStrategy

Type: N9ConfMergeStrategy
Default : N9ConfMergeStrategy.V2
Merge strategy to use to merge override.

Structure

conf/
  application.ts
  development.ts
  integration.ts
  local.ts # should be in .gitignore
  preproduction.ts
  production.ts
  staging.ts
package.json

The module will load these files, every file overwrites the one before:

application.js + ${process.env.NODE_ENV}.js + local.js

  1. If process.env.NODE_ENV is not defined, default to 'development'
  2. If local.js does not exists, it will be ignored.
  3. It will also fetch the package.json of the app to fill its name & version

This module can use a configuration extension, see here for more information.

Example

package.json

{
	"name": "my-app",
	"version": "0.1.2"
}

conf/application.ts

export default {
	http: {
		port: 6686,
	},
};

conf/development.ts

export default {};

conf/production.ts

export default {
	http: {
		port: 80,
	},
};

loadConf.ts

import n9NodeConf from '@neo9/n9-node-conf';

const conf = n9NodeConf();
console.log('const conf =', conf);

node loadConf.ts

const conf = {
	name: 'my-app',
	version: '0.1.2',
	env: 'development',
	http: {
		port: 5000,
	},
};

NODE_ENV=production node loadConf.ts

const conf = {
	name: 'my-app',
	version: '0.1.2',
	env: 'production',
	http: {
		port: 80,
	},
};

Logs

To display the logs of the module, you can use DEBUG=n9-node-conf.