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

@golevelup/profiguration

v0.2.1

Published

## About

Downloads

10,893

Readme

@golevelup/profiguration

About

Profiguration is currently built on top of the rock solid Convict configuration library from Mozilla. It helps you acheive 12Factor compliant application configuration by putting a focus on leveraging environment variables in a type safe way while enabling you to load configuration from .env and .json files for convenience during development.

Features

  • Load configuration from .env files or json files automatically with hierarchical overriding
  • Easily control which configuration files get loaded based on your Node Environment
  • Built in support for validation of different types
  • Intellisense and Type Safety
  • Simple testing utilties for when you want to mock your configuration

Usage

Install

npm install ---save @golevelup/profiguration

or

yarn add @golevelup/profiguration

Define an interface to represent your Profiguration

The interface should represent the object stucture for you you would like to access the configuration for your app. It can be a complex object with nested values and different types

For example:

interface Config {
  db: {
    password: string;
    host: {
      url: string;
      port: number;
    };
  };
  appPort: number;
  globalPrefix: string;
  controllerPrefix: string;
  showWelcomeMessage: boolean;
}

Create a Profiguration instance

The createProfiguration factory method takes a schema that indicates how the various properties of your configuration interface should be loaded from the process environment. See the convict documentation for additional options and documentation.

The second argument configures profiguration with options for logging, validation and relative file loading paths as well as a user provided function configureEnv which allows for per environment overriding of the profiguration options as well as files that should be loaded which contain configuration values.

import { createProfiguration } from '@golevelup/profiguration';

export const config = createProfiguration<Config>(
  {
    appPort: {
      default: 3333,
      env: 'APP_PORT'
    },
    db: {
      password: {
        default: null,
        format: String,
        env: 'DB_PASSWORD'
      },
      host: {
        url: {
          default: '',
          env: 'DB_HOST_URL'
        },
        port: {
          default: -1,
          format: 'port',
          env: 'DB_HOST_PORT'
        }
      }
    },
    globalPrefix: {
      default: 'api',
      env: 'GLOBAL_PREFIX'
    },
    controllerPrefix: {
      default: '',
      env: 'CONTROLLER_PREFIX'
    },
    showWelcomeMessage: {
      default: true,
      env: 'WELCOME_MESSAGE'
    }
  },
  {
    strict: true,
    verbose: true,
    loadRelativeTo: 'parent-module',
    configureEnv: env => ({
      files: `${env}.env`
    })
  }
);