Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

typed-configs

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

typed-configs

Library for accessing your config variables in a typed manner, with runtime checking and a definition exporter. Supports .yml and enviroment variables.

latest
Source
npmnpm
Version
0.3.0
Version published
Weekly downloads
1
-75%
Maintainers
1
Weekly downloads
 
Created
Source

Typed Config

Library for accessing your config variables in a typed manner, with runtime checking and a definition exporter. Supports .yml and enviroment variables.

NOTE: Current version of this package is dependent on 'old' decorators, this will change in the close future.

How to use

  • In your index.ts of your project, add import "reflect-metadata";

  • Create a config file like this:

    import { Config, ConfigValue } from "typed-configs";
    
    @Config({ configYmlPath: "configs/test.yml", ignoreEmptyValues: false })
    export class Communicator {
        @ConfigValue({
            name: "GREETING",
            description: "They way you say hi to others",
            required: true,
            recommendedValue: "Hello"
        })
        greeting!: string;
    
        @ConfigValue({
            name: "GOODBYE_MESSAGE",
            description: "The way you say goodbye. Optional.",
            required: false
        })
        goodbye: string = "/me left the chat";
    
        @ConfigValue({
            name: "IDLE_SOUND",
            description: "What do you say when doing nothing?",
            required: false
        })
        idleMessage?: string;
    
        @ConfigValue({
            name: "AGE",
            description: "The driver age. should be greater than 18.",
            required: false,
            validate: (age: number) => age >= 18
        })
        age?: number;
    
        nonConfigProperty = "I don't need a type because I don't matter.";
    }
    
  • Use the config class somewhere in your code so the decorators get a chance to register the class and its properties.

    import { Configs } from "typed-configs";
    
    console.log(`User says: ${Configs.get(Communicator).greeting}`);
    
  • Export the config definition to an actual file (optional but kinda the goal of this library to support this). The Configs.getConfigsDefinitions() method is to know for sure all the decorators have been processed.

    import * as fs from "fs";
    import { Configs } from "./ConfigManager";
    
    Configs.getConfigsDefinitions().then(definitions => {
        fs.writeFileSync("configDefinitions.json", JSON.stringify(definitions));
    });
    

Important notes:

  • You're required to explicitly set the type of each field with Typescript. This is the only way we can make sure we know the required type before setting any (default) value. Only string, number and boolean are currently supported.
  • For setting the type of a field, goodbye?: string; is allowed, but goodbye: string | undefined; isn't. reflect-metadata will give the first one type String and the latter Object (which isn't allowed by the library).
  • When having a value that's required but doesn't have a default value (like greeting in our example), you can use an exclamation mark (like greeting!: string;) to make the types still work. The library will prevent your program to start if the value isn't provided.

Keywords

env

FAQs

Package last updated on 22 May 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts