application-services v7.0.2
application-services
Out of the box application environment and configuration service.
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_ENVvalues:test,development,production, - managing application environment in a clean and separate
APP_ENVenvironment variable, - leverage
dotenvto read environment variables, - manage separate and type checked applications configurations for each
deployment environments and allows loading it automatically (in the
./configs/${APP_ENV}/indexfile).
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
Functions
PROCESS_ENV
Provides the PROCESS_ENV service : Object
Kind: global constant
extractAppEnv(appEnv, availableAppEnvs) ⇒
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,
});