config
Version:
Configuration control for production node deployments
369 lines (368 loc) • 13.9 kB
TypeScript
declare namespace _exports {
export { Util, Load, LoadOptions, Parser, Config };
}
declare const _exports: Config;
export = _exports;
type Util = import("./util").Util;
type Load = import("./util").Load;
type LoadOptions = import("./util").LoadOptions;
type Parser = typeof import("./../parser");
/**
* The exported configuration instance type.
* This is here because the Config class is not a named export and this is how we get
* the exported configuration instance type.
*/
type Config = ConfigClass;
/**
* <p>Application Configurations</p>
* @class
*/
declare class ConfigClass {
/**
* <p>Get the configuration object.</p>
*
* <p>
* The configuration object is a shared singleton object within the application,
* attained by calling require('config').
* </p>
*
* <p>
* Usually you'll specify a CONFIG variable at the top of your .js file
* for file/module scope. If you want the root of the object, you can do this:
* </p>
* <pre>
* const CONFIG = require('config');
* </pre>
*
* <p>
* Sometimes you only care about a specific sub-object within the CONFIG
* object. In that case you could do this at the top of your file:
* </p>
* <pre>
* const CONFIG = require('config').customer;
* or
* const CUSTOMER_CONFIG = require('config').customer;
* </pre>
*
* <script type="text/javascript">
* document.getElementById("showProtected").style.display = "block";
* </script>
*
* @method constructor
*/
constructor(load: any);
/**
* Non-enumerable field for util functions
*
* @type {ConfigUtils}
*/
util: ConfigUtils;
/**
* <p>Get a configuration value</p>
*
* <p>
* This will return the specified property value, throwing an exception if the
* configuration isn't defined. It is used to assure configurations are defined
* before being used, and to prevent typos.
* </p>
*
* @template T
* @param {string} property - The configuration property to get. Can include '.' sub-properties.
* @returns {T} The property value
*/
get<T>(property: string): T;
/**
* Test that a configuration parameter exists
*
* <pre>
* const config = require('config');
* if (config.has('customer.dbName')) {
* console.log('Customer database name: ' + config.customer.dbName);
* }
* </pre>
*
* @method has
* @param {string} property - The configuration property to test. Can include '.' sub-properties.
* @return {boolean} - True if the property is defined, false if not defined.
*/
has(property: string): boolean;
[LOAD_SYMBOL]: any;
}
/**
* The exported configuration instance type.
* This is here because the Config class is not a named export and this is how we get
* the exported configuration instance type.
* @typedef {ConfigClass} Config
*/
/**
* Source of config.util utility functions.
*
* In general, lib/util.js is what you are looking for.
*
* @class ConfigUtils
*/
declare class ConfigUtils {
/**
* @param {Config} config
*/
constructor(config: Config);
/**
* <p>
* Set default configurations for a node.js module.
* </p>
*
* <p>
* This allows module developers to attach their configurations onto the
* default configuration object so they can be configured by the consumers
* of the module.
* </p>
*
* <p>Using the function within your module:</p>
* <pre>
* const CONFIG = require("config");
* CONFIG.util.setModuleDefaults("MyModule", {
* templateName: "t-50",
* colorScheme: "green"
* });
* <br>
* // Template name may be overridden by application config files
* console.log("Template: " + CONFIG.MyModule.templateName);
* </pre>
*
* <p>
* The above example results in a "MyModule" element of the configuration
* object, containing an object with the specified default values.
* </p>
*
* @method setModuleDefaults
* @param {string} moduleName - Name of your module.
* @param {any} defaultProperties - The default module configuration.
* @return {any} moduleConfig - The module level configuration object.
* @see Load.scan() for loading more robust defaults
*/
setModuleDefaults(moduleName: string, defaultProperties: any): any;
/**
* Set default configurations for a node.js module.
*
* This variant is provided to support handling loading of multiple versions
* of a library. This is meant for module developers to create a config snapshot
* for an old version of the code, particularly during a staged upgrade.
* Instead of adding the values to the configuration, it creates a new Config
* instance that contains the provided defaults.
*
* Note: This feature is primarily useful for adding, removing, or renaming
* properties. It will struggle to deal with changing the semantics of
* existing fields if you need to override those fields in your top level
* config/ directory. It is always best when versioning an API to change the
* names of fields when you change the meaning of the field.
*
* <p>Using the function within your module:</p>
* <pre>
* const configModule = require("config");
* const config = configModule.withModuleDefaults("MyModule", {
* templateName: "t-50",
* colorScheme: "green"
* });
* <br>
* // Template name may be overridden by application config files
* console.log("Template: " + config.MyModule.templateName);
* </pre>
*
* <p>
* The above example results in a "MyModule" element of the configuration
* object, containing an object with the specified default values.
* </p>
*
* @method withModuleDefaults
* @param moduleName {string} - Name of your module.
* @param defaultProperties {Object} - The default module configuration.
* @returns {Config}
* @see Load.scan() for loading more robust defaults
*/
withModuleDefaults(moduleName: string, defaultProperties: any): Config;
/**
* <p>Make a javascript object property immutable (assuring it cannot be changed
* from the current value).</p>
* <p>
* If the specified property is an object, all attributes of that object are
* made immutable, including properties of contained objects, recursively.
* If a property name isn't supplied, the object and all of its properties
* are made immutable.
* </p>
* <p>
* This operation cannot be undone.
* </p>
*
* <p>Example:</p>
* <pre>
* const config = require('config');
* const myObject = {hello:'world'};
* config.util.makeImmutable(myObject);
* </pre>
*
* @method makeImmutable
* @deprecated see Util.makeImmutable()
* @param {any} object - The object to specify immutable properties for
* @param {string | string[]=} property - The name of the property (or array of names) to make immutable.
* If not provided, the entire object is marked immutable.
* @param {any=} value - Property value (or array of values) to set
* the property to before making immutable. Only used when setting a single
* property. Retained for backward compatibility.
* @return {any} - The original object is returned - for chaining.
*/
makeImmutable(object: any, property?: (string | string[]) | undefined, value?: any | undefined): any;
/**
* <p>Make a javascript object property immutable (assuring it cannot be changed
* from the current value).</p>
* <p>
* If the specified property is an object, all attributes of that object are
* made immutable, including properties of contained objects, recursively.
* If a property name isn't supplied, the object and all of its properties
* are made immutable.
* </p>
* <p>
* This operation cannot be undone.
* </p>
*
* <p>Example:</p>
* <pre>
* const config = require('config');
* const myObject = {hello:'world'};
* config.util.makeImmutable(myObject);
* </pre>
*
* @method makeImmutable
* @protected
* @deprecated - partial immutability will no longer be supported by this project
* @param object {Object} - The object to specify immutable properties for
* @param property {string | [string]} - The name of the property (or array of names) to make immutable.
* If not provided, the entire object is marked immutable.
* @param [value] {* | [*]} - Property value (or array of values) to set
* the property to before making immutable. Only used when setting a single
* property. Retained for backward compatibility.
* @return object {Object} - The original object is returned - for chaining.
*/
protected makeImmutablePartial(object: any, property: string | [string], value?: any | [any]): any;
/**
* Return the sources for the configurations
*
* <p>
* All sources for configurations are stored in an array of objects containing
* the source name (usually the filename), the original source (as a string),
* and the parsed source as an object.
* </p>
*
* @method getConfigSources
* @return {import('./util').ConfigSource[]} configSources - An array of objects containing
* name, original, and parsed elements
*/
getConfigSources(): import("./util").ConfigSource[];
/**
* Load the individual file configurations.
*
* <p>
* This method builds a map of filename to the configuration object defined
* by the file. The search order is:
* </p>
*
* <pre>
* default.EXT
* (deployment).EXT
* (hostname).EXT
* (hostname)-(deployment).EXT
* local.EXT
* local-(deployment).EXT
* </pre>
*
* <p>
* EXT can be yml, yaml, coffee, iced, json, jsonc, cson or js signifying the file type.
* yaml (and yml) is in YAML format, coffee is a coffee-script, iced is iced-coffee-script,
* json is in JSON format, jsonc is in JSONC format, cson is in CSON format, properties is
* in .properties format (http://en.wikipedia.org/wiki/.properties), and js is a javascript
* executable file that is require()'d with module.exports being the config object.
* </p>
*
* <p>
* hostname is the $HOST environment variable (or --HOST command line parameter)
* if set, otherwise the $HOSTNAME environment variable (or --HOSTNAME command
* line parameter) if set, otherwise the hostname found from
* require('os').hostname().
* </p>
*
* <p>
* Once a hostname is found, everything from the first period ('.') onwards
* is removed. For example, abc.example.com becomes abc
* </p>
*
* <p>
* (deployment) is the deployment type, found in the $NODE_ENV environment
* variable (which can be overridden by using $NODE_CONFIG_ENV
* environment variable). Defaults to 'development'.
* </p>
*
* <p>
* If the $NODE_APP_INSTANCE environment variable (or --NODE_APP_INSTANCE
* command line parameter) is set, then files with this appendage will be loaded.
* See the Multiple Application Instances section of the main documentation page
* for more information.
* </p>
*
* @see Util.loadFileConfigs for discrete execution of most of this functionality
* @method loadFileConfigs
* @param {string=} configDir the path to the directory containing the configurations to load
* @param {LoadOptions=} options parsing options
* @return {Record<string, any>} The configuration object
*/
loadFileConfigs(configDir?: string | undefined, options?: LoadOptions | undefined): Record<string, any>;
/**
* Attach the Config class prototype to all config objects recursively.
*
* <p>
* This allows you to do anything with CONFIG sub-objects as you can do with
* the top-level CONFIG object. It's so you can do this:
* </p>
*
* <pre>
* const CUST_CONFIG = require('config').Customer;
* CUST_CONFIG.get(...)
* </pre>
*
* @method attachProtoDeep
* @param {object} toObject
* @param {number} [depth=20]
* @return {object}
*/
attachProtoDeep(toObject: object, depth?: number): object;
/**
* <p>Get a Config Environment Variable Value</p>
*
* <p>
* This method returns the value of the specified config environment variable,
* including any defaults or overrides.
* </p>
*
* @method getEnv
* @param varName {String} The environment variable name
* @return {String} The value of the environment variable
*/
getEnv(varName: string): string;
/**
* Returns a new deep copy of the current config object, or any part of the config if provided.
*
* @param {object} [config] The part of the config to copy and serialize. Omit this argument to return the entire config.
* @returns {object} The cloned config or part of the config
*/
toObject(config?: object): object;
/**
* Run strictness checks on NODE_ENV and NODE_APP_INSTANCE and throw an error if there's a problem.
* @param {Config} [config]
*/
runStrictnessChecks(config?: Config): void;
/**
* @deprecated please use Parser.stripYamlComments
* @param {string} fileStr The string to strip comments from
*/
stripYamlComments(fileStr: string): any;
#private;
}
declare const LOAD_SYMBOL: unique symbol;