Skip to content

roxiness/configent

Repository files navigation

configent

Configent

Confident configurations

No fuzz config compilation from (ordered by ascending precedence)

  • defaults
  • package.json
  • [name].config.js
  • .env
  • environment
  • input
/** 
 * package.json {"foobar": {"city": "Portsmouth"}}
 * foobar.config.js {lastSeen: 'Liverpool'}
 * process.env.foobar_last_seen = London
 * options = { name: 'Sherlock Holmes' }
*/

const defaults = { name: 'John Doe', city: 'N/A', lastSeen: 'N/A' }

const config = configent('foobar', defaults, options)

/**
 * console.log(config)
 * {
 *   name: 'Sherlock Holmes',
 *   city: 'Portsmouth',
 *   lastSeen: 'London'  
 * }
 * /

Auto detect defaults

Configent supports multiple default configs. These are added to ./configs.

/** ./configs/routify2.config.js */

module.exports = {
    supersedes: ['svelte'],
    condition: ({ pkgjson }) => pkgjson.dependencies['@roxi/routify'],
    config: () => ({ 
        /** the config object used as default */
        myAppName: 'Routify App' 
    })
}
/** ./configs/svelte.config.js */

module.exports = {
    condition: ({ pkgjson }) => pkgjson.dependencies['svelte'],
    config: () => ({ 
        /** the config object used as default */
        myAppName: 'Svelte App' 
    })
}

The first config with a true condition is used. To avoid conflicts, configs using the supersedes option, will run before their superseded targets.

To change the location of default configs, refer to detectDefaultsConfigPath.

API

Table of Contents

configent

Parameters
  • defaults options default options
  • input Partial<options>? provided input (optional, default {})
  • configentOptions object? configent options
    • configentOptions.name string name to use for configs. If left empty, name from package.json is used (optional, default '')
    • configentOptions.cacheConfig boolean calling configent twice with same parameters will return the same instance (optional, default true)
    • configentOptions.cacheDetectedDefaults boolean calling configent twice from the same module will return the same defaults (optional, default true)
    • configentOptions.useDotEnv boolean include config from .env files (optional, default true)
    • configentOptions.useEnv boolean include config from process.env (optional, default true)
    • configentOptions.usePackageConfig boolean include config from package.json (optional, default true)
    • configentOptions.useConfig boolean include config from [name].config.js (optional, default true)
    • configentOptions.useDetectDefaults boolean detect defaults from context (package.json and file stucture) (optional, default true)
    • configentOptions.detectDefaultsConfigPath string detect defaults from context (package.json and file stucture) (optional, default 'configs')
    • configentOptions.sanitizeEnvValue function sanitize environment values. Convert snake_case to camelCase by default. (optional, default str=>str.replace(/[-_][a-z]/g,str=>str.substr(1).toUpperCase()))
    • configentOptions.module NodeModule? required if multiple modules are using configent

Returns options


Vintage vector created by macrovector - www.freepik.com