Giter Site home page Giter Site logo

siyul-park / conev Goto Github PK

View Code? Open in Web Editor NEW

This project forked from coursedesign/conev

2.0 0.0 0.0 28 KB

Conev is a module that build environment variables from a source into config.

Home Page: https://www.npmjs.com/package/conev

JavaScript 28.71% TypeScript 71.29%

conev's Introduction

conev

Conev is a module that build environment variables from a source into config. Storing configuration in the environment separate from code is based on The Twelve-Factor App methodology.

Install

# with npm 
npm install conev
 
# or with Yarn 
yarn add conev

Usage

Get ConfigBuilder from conev and one or more Sources to use. In this example, the built-in JsonSource is used.

import { ConfigBuilder, JsonSource } from 'conev';

And create Source and set up.

const jsonSource = new JsonSource();

jsonSource    
    .setConfig('basic', basic) // basic is JSON
    .setConfig('dev', dev) // dev is JSON
    .setConfig('prd', prd); // prd is JSON

Create ConfigBuilder and set Environment, add source. (highest priority is added first).

const builder = new ConfigBuilder();

builder
    .setEnv('dev', 'basic')
    .addSource(jsonSource);

Build configuration

const config = await builder.build().refresh(); // This is the result of combining dev and basic.

Use configuration

config.get() // The whole configuration created comes out
config.get('a.b.c'); // Is same as config.get().a.b.c

Config Builder

class ConfigBuilder {
    setEnv(...env: string[]): ConfigBuilder;
    addEnv(...env: string[]): ConfigBuilder;
    addSource(source: Source, priority?: number): ConfigBuilder;

    build(): Config;
}

ConfigBuilder takes a configuration from the source and creates a new configuration according to the environment. Env and Source have priority. If priority is not defined, highest priority is added first.

Config

class Config {
    constructor(sources: Source[], env: string[]);
    
    setEnv(...env: string[]): Config;
    addEnv(...env: string[]): Config;
    addSource(source: Source, priority?: number): Config;
    
    refresh(): Promise<Config>;
    validate(): void;
    
    get(key?: string): object;
    set(key: string, value: any): void;
}

config is a container for configuration. config is provided by creating a new configuration from the configuration and environment obtained from source.

Source

interface Source {
    export(): Promise<Map<string, object>>;
}

Source defines the source from which to get the configuration. Map is returned as the result value of export. The key of this map is environment and the value is the configuration when environment.

Json Source

class JsonSource {
    constructor(map?: Map<string, object>);
    setConfig(env: string, ...values: object[]): JsonSource
    addConfig(env: string, ...values: object[]): JsonSource;
    removeConfig(env: string): JsonSource;
    export(): Promise<Map<string, object>>;
}

JsonSource defines the source from JSON. Use setConfig to add a configuration for a new environment or removeConfig to delete a configuration. Map is returned as the result value of export. The key of this map is environment and the value is the configuration when environment.

Json File Source

class JsonFileSource {
    constructor(fileMap?: Map<string, string>);
    setConfig(env: string, ...filenames: string[]): JsonFileSource;
    addConfig(env: string, ...filename: string[]): JsonFileSource;
    removeConfig(env: string): JsonFileSource;
    export(): Promise<Map<string, object>>;
}

JsonFileSource defines the source from JSON file. Use setConfig to add a configuration for a new environment or removeConfig to delete a configuration. Map is returned as the result value of export. The key of this map is environment and the value is the configuration when environment.

Expansion

It can be extended by defining a new Source.

conev's People

Contributors

dependabot-preview[bot] avatar siyul-park avatar

Stargazers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.