application-services
Out of the box application environment and configuration service.
![Coverage Status](https://coveralls.io/repos/github/nfroidure/application-services/badge.svg?branch=main)
Need to manage several environment and configurations for your
knifecycle
based app? This module
is all what your need.
Features
Out of the box, standard compliant, application environment:
- accepting only
standard
NODE_ENV
values: test
, development
, production
, - managing application environment in a clean and separate
APP_ENV
environment
variable, - leverage
dotenv
to read environment variables, - manage separate and type checked applications configurations for each
deployment environments and allows loading it automatically (in the
./configs/${APP_ENV}/index
file).
It requires log
and importer
services to be passed in, you can find
implementations in the
common-services
project.
It also relies on constant services you will have to provide: APP_ENV
,
NODE_ENV
and the MAIN_FILE_URL
(directory where actual code is).
API
Constants
- PROCESS_ENV
Provides the PROCESS_ENV service :
Object
Functions
- extractAppEnv(appEnv, availableAppEnvs) ⇒
Cast any string into an application environment
- initAppConfig(services) ⇒
Promise.<Object>
Initialize the APP_CONFIG service according to the APP_ENV
- initENV(services) ⇒
Promise.<Object>
Initialize the ENV service using process env plus dotenv files
loaded in .env.node.${ENV.NODE_ENV}
and .env.app.${APP_ENV}
.
- initProcess(services) ⇒
Promise.<Object>
Instantiate the process service
- initProjectDirectory(services) ⇒
Promise.<Object>
Initialize the PROJECT_DIR service
- initTimeMock(services) ⇒
Promise.<function()>
Instantiate the time mock service
PROCESS_ENV
Provides the PROCESS_ENV service : Object
Kind: global constant
Cast any string into an application environment
Kind: global function
Returns: string
Param | Description |
---|
appEnv | string |
availableAppEnvs | string[] |
initAppConfig(services) ⇒ Promise.<Object>
Initialize the APP_CONFIG service according to the APP_ENV
Kind: global function
Returns: Promise.<Object>
- A promise of a an object the actual configuration properties.
Param | Type | Default | Description |
---|
services | Object | | The services APP_CONFIG depends on |
services.APP_ENV | Object | | The injected APP_ENV value |
services.MAIN_FILE_URL | String | | An URL pointing to the main file run |
services.importer | Object | | A service allowing to dynamically import ES modules |
[services.log] | Object | noop | An optional logging service |
initENV(services) ⇒ Promise.<Object>
Initialize the ENV service using process env plus dotenv files
loaded in .env.node.${ENV.NODE_ENV}
and .env.app.${APP_ENV}
.
Kind: global function
Returns: Promise.<Object>
- A promise of an object containing the actual env vars.
Param | Type | Default | Description |
---|
services | Object | | The services ENV depends on |
[services.BASE_ENV] | Object | | Base env vars that will be added to the environment |
services.APP_ENV | Object | | The injected APP_ENV value |
services.PROCESS_ENV | Object | | The injected process.env value |
services.PROJECT_DIR | Object | | The NodeJS project directory |
[services.log] | Object | noop | An optional logging service |
initProcess(services) ⇒ Promise.<Object>
Instantiate the process service
Kind: global function
Returns: Promise.<Object>
- A promise of the process object
Param | Type | Default | Description |
---|
services | Object | | The services process depends on |
services.APP_ENV | Object | | The injected APP_ENV value |
[services.PROCESS_NAME] | Object | | The process name to display |
[services.SIGNALS] | Object | | The process signals that interrupt the process |
[services.exit] | Object | | A process.exit like function |
services.$instance | Object | | The Knifecycle instance |
services.$fatalError | Object | | The Knifecycle fatal error manager |
[services.log] | Object | noop | An optional logging service |
initProjectDirectory(services) ⇒ Promise.<Object>
Initialize the PROJECT_DIR service
Kind: global function
Returns: Promise.<Object>
- A promise of a an object the actual configuration properties.
Param | Type | Default | Description |
---|
services | Object | | The services PROJECT_DIR depends on |
[services.log] | Object | noop | An optional logging service |
initTimeMock(services) ⇒ Promise.<function()>
Instantiate the time mock service
Kind: global function
Returns: Promise.<function()>
- A promise of the time function
Param | Type | Default | Description |
---|
services | Object | | The services to inject |
services.CLOCK_MOCK | Object | | An object to store the time mock state |
[services.time] | Object | noop | A time function |
[services.log] | Object | noop | A logging function |
Example
import {
DEFAULT_LOGGER,
initLog,
} from 'common-services';
import {
initTimeMock,
} from 'application-services';
const CLOCK_MOCK = {
referenceTime: Date.now(),
mockedTime: Date.parse('2012-12-20T20:20:20Z'),
isFixed: false,
};
const log = await initLog({
logger: DEFAULT_LOGGER,
});
const time = await initTimeMock({
log,
});
Authors
License
MIT