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 🙏

© 2024 – Pkg Stats / Ryan Hefner

taskcluster-lib-config

v0.9.1

Published

Configuration loader that injects env variables into YAML

Downloads

26

Readme

YAML Configuration Loader

This modules makes it easy to load configuration from YAML files, and allows these YAML files to specify environment variables to substitute into the configuration.

The configuration format looks as follows.

Defaults:
  hostname:     localhost
  port:         8080
Profiles:
  production:
    hostname:   !env HOSTNAME
    port:       !env:number PORT
  test:
    hostname:   localhost
    port:       1234

The syntax extensions !env <name> is replaced with the value of the environment variable <name>. This is further extended to support loading types other than strings from environment variables. In the example above !env:number PORT will be replaced by the value of the environment variable PORT parsed as a number. If parsing the environment variable fails, it'll instead be replaced with undefined.

This library support for the following syntax extensions:

  • !env <NAME>, load string from env variable <NAME>,
  • !env:string <NAME>, load string from env variable <NAME>.
  • !env:number <NAME>, load number from env variable <NAME>.
  • !env:flag <NAME>, load true if env variable <NAME> is defined,
  • !env:bool <NAME>, load boolean as /true/i or /false/i from env variable <NAME>,
  • !env:json <NAME>, load JSON object from env variable <NAME>, and,
  • !env:list <NAME>, load list of space separated strings from env variable <NAME>.

When loading configuration you may specify which files, profile and environment variables to load from. But default the following is options is given. So if you name your files config.yml and user-config.yml you can load configuration with config({profile: 'my-profile'}).

var config = require('taskcluster-lib-config');

var cfg = config({
  files: [                // Files to load configuration from
   'config.yml',          // These defaults are relative to process.cwd
   'user-config.yml'
  ]
  profile:  undefined,    // Profile to apply (default to none)
  env:      process.env   // Environment variables (mapping string to strings)
});

// cfg is now an object...

The configuration loader will not complain about missing or ill formated environment variables, instead it'll just evaluate them to undefined. Nor will the configuration loader complain about missing files, but it will complain about ill formated files and missing profiles.

If you specify {profile: 'test'} when loading the example configuration file listed at the top of this document, the loader will first load the Defaults section and then merge in values from the Profiles.test section overwriting values set in Defaults.

If there is both a config.yml and user-config.yml file, the config.yml will be loaded first and have the profile merged, before the user-config.yml file is loaded and has it profile merged in on top of the config.yml file. Obviously, you can reverse the order and specify other file names using the files option for the config loader.