/typeconfig

Configuration file for Typescript

Primary LanguageTypeScriptMIT LicenseMIT

typeconfig

npm version Language grade: JavaScript Build Status Coverage Status dependencies Status

Configuration file for Typescript. Useful for separating frontend (public) and backend (private) config Features:

  • Creating Configuration in Typescript file with types
  • Loading configuration from file, command line arguments, environmental variables
  • Support config file hierarchy

#Install

npm install typeconfig

#Usage

  @SubConfigClass()
      class S {

        @ConfigProperty({envAlias: 'numAlias'})
        num: number = 5;

        @ConfigProperty({type: 'ratio',
          onNewValue: (v, c: C) => {
            c.temperature=v*100;
          }})
        temperatureRatio: number = 0.2;

      }

      @ConfigClass()
      class C {


        @ConfigProperty()
        sub: S = new S();

        @ConfigProperty({type: 'integer'})
        num: number = 5;

        @ConfigProperty({type: 'integer', constraint: {assert: v => v < 100 && v >0}})
        temperature: number = 5;


      }

Legacy usage

Legacy usage is still supported and can be accessed like the following way:

backend

let Config = {
    Private:{
        something:5,
        PORT:1234
    },
    Public:{
        a:6
    }
};
 

ConfigLoader.loadBackendConfig(Config, //Config object to load the data to
    path.join(__dirname, './../../../config.json'), // configuration file path
    [["PORT", "Private-PORT"]]); //environmental variable mapping to config variable

frontend

let Config = {
    Public:{
        a:6
    }
};

if (typeof ServerInject !== "undefined" && typeof ServerInject.ConfigInject !== "undefined") {
    WebConfigLoader.loadFrontendConfig(Config.Public, ServerInject.ConfigInject);
}

config changing

  • updating config file (if not exist, it will be created)
  • setting environmental variable
  • Command line arguments
    • node index.js --Private-something=3 --Public-a=10

Recommended Usage

See example/legacy folder.

The architecture helps separating public and private configuration. Private config will be only available at server side, while Public config at front and backend side too. The up-to-date public config is sent to the frontend with ejs template.