Skip to content

nfroidure/application-services

Repository files navigation

application-services

Out of the box application environment and configuration service.

GitHub license Coverage Status

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

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

Authors

License

MIT