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

painless-config-resolver

v4.0.5

Published

Yet another opinionated Node.js configuration library providing a set of default resolvers to enable rapid, rich configuration object graphs powered by the deployment environment, config-as-code, and Azure KeyVault secrets.

Downloads

73

Readme

painless-config-resolver

Yet another opinionated Node.js configuration library providing a set of default resolvers to enable rapid, rich configuration object graphs powered by the deployment environment, config-as-code, and Azure KeyVault secrets.

This library now requires a modern Node LTS+ version and uses native promises.

Resolving variables into a simple configuration graph

This library takes an object (a configuration graph) containing simple variables or script and uses configuration providers, in order, to try and resolve.

As configured by default this means variables can come from:

  • environment variables always win
  • mounted volume files
  • .env dotfile
  • painless-config development environment env.json file outside an app's root
  • configuration-as-code JSON file, per-environment

Variables themselves will be sent to other resolvers, so the values can be:

  • direct values from variables
  • values read from a Kubernetes mounted volume
  • KeyVault secrets to resolve at runtime from Azure KeyVault

In lieu of a configuration graph object, a special config/ directory structure with JSON and JS files can be used to build the configuration object at startup, making it easy to compartmentalize values.

Built on painless-config

This module is a part of the painless-config family of configuration libraries.

  • painless-config: resolving a variable from an env.json file or the environment with a simple get(key) method

How to use

Resolve a simple set of variables from the environment.

const resolver = require('painless-config-resolver');

const graph = {
  hostname: 'env://HOSTNAME',
  app: 'my app',
};

async function myApp() {
  const config = await resolver.resolve(graph);
  // ... config has the resolved values ...
}

After calling resolve the config object might look like:

{
  hostname: 'JMWORKMACHINE',
  app: 'my app',
}

Consolidation

As of v2.0.0, this library has merged in the painless-config-as-code, environment, and keyvault environment providers to make it easier to keep the library up-to-date. This admits that this library is really coupled with KeyVault enough that it is OK to include those dependencies.

Unofficial but useful

This component was developed by the Open Source Programs Office at Microsoft. The OSPO team uses Node.js for some of its applications and has found this component to be useful. We are sharing this in the hope that others may find it useful.

It's important to understand that this library was developed for use by a team at Microsoft, but that this is not an official library or module built by the KeyVault team.

License

MIT

Contributing

Pull requests will gladly be considered! A CLA may be needed.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Changes

4.0.5

  • Dependency update for object-path package

4.0.4

  • Application name for config-as-code also supports environment resolution of APPLICATION_NAME

4.0.3

  • Adds support for volumefile: for resolving mounted volume secrets in some environments

3.0.0

  • Adds support for .env (dotfiles) in a manner similar to painless-config

2.0.1

  • Node >= 10.x required (suggest LTS 12+)
  • Callbacks removed. The library is built on native Promises now.
  • Merges dependent modules painless-config-as-code, environment-configuration-resolver, keyvault-configuration-resolver as native capabilities to reduce the package count and improve updates, publishing and debugging

1.1.4

  • Updated dependencies

1.1.3

  • Updated dependencies

1.1.2

  • Updated dependencies

1.1.1

  • Moves to newer config-as-code, supporting app-based env overrides

1.1.0

  • Deep merge is configured to overwrite arrays instead of merging them

1.0.3

  • Newer KeyVault client refreshes the dependency chain

1.0.1

  • Newer KeyVault dependency version caches responses for a performance win in heavily-configured apps

1.0.0

  • Configuration folder ./config is no longer implicit.
  • Automatic graph configuration must be specified through package.json properties under painlessConfigObjectPackages and/or environment variables pointing at config-containing npm and/or directories. To maintain the previous behavior, configure an environment or config-as-code variable named CONFIGURATION_GRAPH_DIRECTORY or the option directoryName with the value config.
  • Adds CONFIGURATION_PACKAGES support for dynamic/environment-based configuration package inclusion

0.1.4

  • Able to instantiate without calling the module as a function
  • No longer requires the presence of a ./config graph folder

0.1.3

  • First stable release