npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

config-loader-ts

v0.1.8

Published

Configuration loader for environment specific cnfigurations

Readme

Config Loader (TS)

This is a config loader, available in JS ES6, written in Typescript. The Goal:

  • support environment based configurations
  • support a default configuration for all environments
  • override default settings with environment based settings and keep all the other settings from default

Getting Started

  • install the package via npm npm install config-loader-ts --save .
  • create a folder structure using the folders default for the default settings and one for each of your environments. Note that the default environment will be set to production.
  • if the folder for the current environment is not set, the settings from default will be used.
  • place your settings as ts/js-file or json file in those subfolders for your environment and the default dir.
  • make sure you use the naming convention <name>.config.<ext> e.g. my-conf.config.ts or my-conf.config.json.
  • the current environment is primarily read from process.env.environment so you can set it independent fron your Node.js environment if needed. alternatively it is read from process.env.NODE_ENV which is the default environment setting for node.js.
  • create a subclass of ConfigLoader and override the configDir() method so that it returns the location of the parent directory of all your environment specific config folders if its not the same as where this subclass is located.
  • write your own settings access function like shown below.
  • Please check the test directory. It contains an example in itself and has additional info in comments.
// folder structure example (see test directory for example):

/app
    /configs
        /default
            my-conf.config.ts
        /development
            // missing here, so default will be used
        /staging
            my-conf.config.ts
        /production
            my-conf.config.ts
export class MyConfig extends ConfigLoader{

    // overridden
    // return the directoty that has your config directories
    configDir():string
    {
        let dir =  __dirname, loadJson = process.env['json'];

        if ( parseInt(loadJson) === 1 ) {
            dir = dir.replace('dist/', '');
        }

        return dir;
    }

    // will return an instance of ConfigObject containning all your config 
    // merged from default and environment
    get myConfig(): ConfigObject
    {
        return this.configForName('my-conf'); // the string parameter is the <name> part in the file name convention (see above)
    }
}

ConfigLoader

Methods:

static getInstance() // return singleton instance

static destroyInstance() // reset singleton instance

configDir():string // return location of the config base-dir (see getting started instructions!)

protected configForName( name: string): ConfigObject // return the config object for a specific file name (see above for conventions)

loadedConfigData(): ConfigObject // return combined config object of all loaded configs (will be loaded only when used)

Properties:

environment: string; // the name of the anvironment (override this with a getter in your subclass if you need to set it manually)

ConfigObject

Methods:

get( key: string, defaultValue?: any): any // get a setting for a specified key. if default value is given, the default will be returned if setting is not found for this key.

License

This project is licensed under the MIT License - see the LICENSE.md file for details