UNPKG

@northscaler/config-custom-environment-variables-generator

Version:

Generator of config/custom-environment-variables.json File for config-Based Projects

163 lines (131 loc) 16.4 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: generator.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: generator.js</h1> <section> <article> <pre class="prettyprint source linenums"><code>'use strict'; const path = require('path'); const DEFAULT_PREFIX = 'NODE_APP'; const DEFAULT_NO_PREFIX = false; const PACKAGE_NAME_PREFIX_PLACEHOLDER = '@'; const DEFAULT_SEPARATOR = '_'; const CASING_UPPER = 'upper'; const CASING_LOWER = 'lower'; const CASING_UNCHANGED = 'unchanged'; const DEFAULT_CASING = CASING_UPPER; const DEFAULT_EMPTIES = false; /** * Generates an object suitable for use with [config](https://npmjs.com/package/config)'s `config/custom-environment-variables.json`, skipping any functions encountered in the given object. * Example: * ``` * const fs = require('fs'); * const config = require('config'); * const cev = require('config-custom-environment-variables-generator'); * fs.writeFileSync('config/custom-environment-variables.json', JSON.stringify(cev.generate(config, { prefix: 'MYAPP' }), null, 2))); * ``` * @param {object} obj An object, most likely the one returned by `require('config')`. * @param {string} [opts.prefix='NODE_APP'] Prefix to use on environment variables. Use `@` to use the name of your application (see exported `DEFAULT_PREFIX`). * @param {boolean} [opts.noPrefix=false] Overrides use of any prefix (see exported `DEFAULT_NO_PREFIX`). * @param {separator} [opts.separator='_'] The word separator in environment variables (see exported `DEFAULT_SEPARATOR`). * @param {'upper'|'lower'|undefined} [opts.casing='upper'] The case to use. `upper` forces upper case, `lower` forces lower case, else case is unchanged (see exported `DEFAULT_CASING`, `CASING_UPPER`, `CASING_LOWER`, and `CASING_UNCHANGED`). * @param {boolean} [opts.empties=false] If `true`, preserves empty objects that didn't have any environment variables, else skips entries that wouldn't have any environment variables (functions are always skipped). * @param {object} [opts.formats={}] If given, must be an object that specifies the __format value for the corresponding key of the first argument, * @returns {object} An object containing the generated environment variables for each key in the input object. */ const generate = function generate(obj, opts) { obj = obj || {}; opts = opts || {}; opts.formats = opts.formats || {}; let prefix = ''; const noPrefix = opts.noPrefix; if (!noPrefix) { prefix = opts.prefix || module.exports.DEFAULT_PREFIX; if (prefix === PACKAGE_NAME_PREFIX_PLACEHOLDER) { prefix = require(path.resolve('package.json')).name; } } const separator = opts.separator || module.exports.DEFAULT_SEPARATOR; const keys = Object.keys(opts); const casing = keys.indexOf('casing') === -1 ? DEFAULT_CASING : opts.casing.toString().toLowerCase(); const empties = keys.indexOf('empties') === -1 ? DEFAULT_EMPTIES : !!opts.empties; const vars = {}; Object.keys(obj).forEach(function (key) { if (obj[key] instanceof Function) { return null; // skip } if (obj[key] instanceof Object) { // recurse const pre = applyCasing((prefix ? prefix + separator : '') + key, casing); vars[key] = generate(obj[key], { prefix: pre, separator: separator, casing: casing, empties: empties, formats: opts.formats[key] }); if (!Object.keys(vars[key]).length &amp;&amp; !empties) delete vars[key]; } else { // add const v = applyCasing((prefix ? prefix + separator : '') + key, casing); // support __format feature if (opts.formats[key]) { vars[key] = { __name: v, __format: opts.formats[key] }; } else { vars[key] = v; } } }); return vars; }; function applyCasing(value, casing) { value = value.toString(); switch (casing) { case CASING_UPPER: return value.toUpperCase(); case CASING_LOWER: return value.toLowerCase(); default: // CASING_UNCHANGED return value; } } module.exports = generate; module.exports.generate = generate; module.exports.DEFAULT_PREFIX = DEFAULT_PREFIX; module.exports.DEFAULT_NO_PREFIX = DEFAULT_NO_PREFIX; module.exports.DEFAULT_SEPARATOR = DEFAULT_SEPARATOR; module.exports.DEFAULT_EMPTIES = DEFAULT_EMPTIES; module.exports.DEFAULT_CASING = DEFAULT_CASING; module.exports.CASING_UPPER = CASING_UPPER; module.exports.CASING_LOWER = CASING_LOWER; module.exports.CASING_UNCHANGED = CASING_UNCHANGED; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9nZW5lcmF0b3IuanMiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJERUZBVUxUX1BSRUZJWCIsIkRFRkFVTFRfTk9fUFJFRklYIiwiUEFDS0FHRV9OQU1FX1BSRUZJWF9QTEFDRUhPTERFUiIsIkRFRkFVTFRfU0VQQVJBVE9SIiwiQ0FTSU5HX1VQUEVSIiwiQ0FTSU5HX0xPV0VSIiwiQ0FTSU5HX1VOQ0hBTkdFRCIsIkRFRkFVTFRfQ0FTSU5HIiwiREVGQVVMVF9FTVBUSUVTIiwiZ2VuZXJhdGUiLCJvYmoiLCJvcHRzIiwiZm9ybWF0cyIsInByZWZpeCIsIm5vUHJlZml4IiwibW9kdWxlIiwiZXhwb3J0cyIsInJlc29sdmUiLCJuYW1lIiwic2VwYXJhdG9yIiwia2V5cyIsIk9iamVjdCIsImNhc2luZyIsImluZGV4T2YiLCJ0b1N0cmluZyIsInRvTG93ZXJDYXNlIiwiZW1wdGllcyIsInZhcnMiLCJmb3JFYWNoIiwia2V5IiwiRnVuY3Rpb24iLCJwcmUiLCJhcHBseUNhc2luZyIsImxlbmd0aCIsInYiLCJfX25hbWUiLCJfX2Zvcm1hdCIsInZhbHVlIiwidG9VcHBlckNhc2UiXSwibWFwcGluZ3MiOiJBQUFBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRUEsTUFBTUMsY0FBYyxHQUFHLFVBQXZCO0FBQ0EsTUFBTUMsaUJBQWlCLEdBQUcsS0FBMUI7QUFDQSxNQUFNQywrQkFBK0IsR0FBRyxHQUF4QztBQUNBLE1BQU1DLGlCQUFpQixHQUFHLEdBQTFCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLE9BQXJCO0FBQ0EsTUFBTUMsWUFBWSxHQUFHLE9BQXJCO0FBQ0EsTUFBTUMsZ0JBQWdCLEdBQUcsV0FBekI7QUFDQSxNQUFNQyxjQUFjLEdBQUdILFlBQXZCO0FBQ0EsTUFBTUksZUFBZSxHQUFHLEtBQXhCO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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TSxDQUFDQyxPQUFQLENBQWVYLFlBQWYsR0FBOEJBLFlBQTlCO0FBQ0FVLE1BQU0sQ0FBQ0MsT0FBUCxDQUFlVixnQkFBZixHQUFrQ0EsZ0JBQWxDIiwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuY29uc3QgREVGQVVMVF9QUkVGSVggPSAnTk9ERV9BUFAnXG5jb25zdCBERUZBVUxUX05PX1BSRUZJWCA9IGZhbHNlXG5jb25zdCBQQUNLQUdFX05BTUVfUFJFRklYX1BMQUNFSE9MREVSID0gJ0AnXG5jb25zdCBERUZBVUxUX1NFUEFSQVRPUiA9ICdfJ1xuY29uc3QgQ0FTSU5HX1VQUEVSID0gJ3VwcGVyJ1xuY29uc3QgQ0FTSU5HX0xPV0VSID0gJ2xvd2VyJ1xuY29uc3QgQ0FTSU5HX1VOQ0hBTkdFRCA9ICd1bmNoYW5nZWQnXG5jb25zdCBERUZBVUxUX0NBU0lORyA9IENBU0lOR19VUFBFUlxuY29uc3QgREVGQVVMVF9FTVBUSUVTID0gZmFsc2VcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gb2JqZWN0IHN1aXRhYmxlIGZvciB1c2Ugd2l0aCBbY29uZmlnXShodHRwczovL25wbWpzLmNvbS9wYWNrYWdlL2NvbmZpZykncyBgY29uZmlnL2N1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMuanNvbmAsIHNraXBwaW5nIGFueSBmdW5jdGlvbnMgZW5jb3VudGVyZWQgaW4gdGhlIGdpdmVuIG9iamVjdC5cbiAqIEV4YW1wbGU6XG4gKiBgYGBcbiAqICAgY29uc3QgZnMgPSByZXF1aXJlKCdmcycpO1xuICogICBjb25zdCBjb25maWcgPSByZXF1aXJlKCdjb25maWcnKTtcbiAqICAgY29uc3QgY2V2ID0gcmVxdWlyZSgnY29uZmlnLWN1c3RvbS1lbnZpcm9ubWVudC12YXJpYWJsZXMtZ2VuZXJhdG9yJyk7XG4gKiAgIGZzLndyaXRlRmlsZVN5bmMoJ2NvbmZpZy9jdXN0b20tZW52aXJvbm1lbnQtdmFyaWFibGVzLmpzb24nLCBKU09OLnN0cmluZ2lmeShjZXYuZ2VuZXJhdGUoY29uZmlnLCB7IHByZWZpeDogJ01ZQVBQJyB9KSwgbnVsbCwgMikpKTtcbiAqIGBgYFxuICogQHBhcmFtIHtvYmplY3R9IG9iaiBBbiBvYmplY3QsIG1vc3QgbGlrZWx5IHRoZSBvbmUgcmV0dXJuZWQgYnkgYHJlcXVpcmUoJ2NvbmZpZycpYC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5wcmVmaXg9J05PREVfQVBQJ10gUHJlZml4IHRvIHVzZSBvbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBVc2UgYEBgIHRvIHVzZSB0aGUgbmFtZSBvZiB5b3VyIGFwcGxpY2F0aW9uIChzZWUgZXhwb3J0ZWQgYERFRkFVTFRfUFJFRklYYCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLm5vUHJlZml4PWZhbHNlXSBPdmVycmlkZXMgdXNlIG9mIGFueSBwcmVmaXggKHNlZSBleHBvcnRlZCBgREVGQVVMVF9OT19QUkVGSVhgKS5cbiAqIEBwYXJhbSB7c2VwYXJhdG9yfSBbb3B0cy5zZXBhcmF0b3I9J18nXSBUaGUgd29yZCBzZXBhcmF0b3IgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzIChzZWUgZXhwb3J0ZWQgYERFRkFVTFRfU0VQQVJBVE9SYCkuXG4gKiBAcGFyYW0geyd1cHBlcid8J2xvd2VyJ3x1bmRlZmluZWR9IFtvcHRzLmNhc2luZz0ndXBwZXInXSBUaGUgY2FzZSB0byB1c2UuICBgdXBwZXJgIGZvcmNlcyB1cHBlciBjYXNlLCBgbG93ZXJgIGZvcmNlcyBsb3dlciBjYXNlLCBlbHNlIGNhc2UgaXMgdW5jaGFuZ2VkIChzZWUgZXhwb3J0ZWQgYERFRkFVTFRfQ0FTSU5HYCwgYENBU0lOR19VUFBFUmAsIGBDQVNJTkdfTE9XRVJgLCBhbmQgYENBU0lOR19VTkNIQU5HRURgKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuZW1wdGllcz1mYWxzZV0gSWYgYHRydWVgLCBwcmVzZXJ2ZXMgZW1wdHkgb2JqZWN0cyB0aGF0IGRpZG4ndCBoYXZlIGFueSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGVsc2Ugc2tpcHMgZW50cmllcyB0aGF0IHdvdWxkbid0IGhhdmUgYW55IGVudmlyb25tZW50IHZhcmlhYmxlcyAoZnVuY3Rpb25zIGFyZSBhbHdheXMgc2tpcHBlZCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdHMuZm9ybWF0cz17fV0gSWYgZ2l2ZW4sIG11c3QgYmUgYW4gb2JqZWN0IHRoYXQgc3BlY2lmaWVzIHRoZSBfX2Zvcm1hdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcga2V5IG9mIHRoZSBmaXJzdCBhcmd1bWVudCxcbiAqIEByZXR1cm5zIHtvYmplY3R9IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBnZW5lcmF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBlYWNoIGtleSBpbiB0aGUgaW5wdXQgb2JqZWN0LlxuICovXG5jb25zdCBnZW5lcmF0ZSA9IGZ1bmN0aW9uIGdlbmVyYXRlIChvYmosIG9wdHMpIHtcbiAgb2JqID0gb2JqIHx8IHt9XG4gIG9wdHMgPSBvcHRzIHx8IHt9XG4gIG9wdHMuZm9ybWF0cyA9IG9wdHMuZm9ybWF0cyB8fCB7fVxuXG4gIGxldCBwcmVmaXggPSAnJ1xuICBjb25zdCBub1ByZWZpeCA9IG9wdHMubm9QcmVmaXhcbiAgaWYgKCFub1ByZWZpeCkge1xuICAgIHByZWZpeCA9IG9wdHMucHJlZml4IHx8IG1vZHVsZS5leHBvcnRzLkRFRkFVTFRfUFJFRklYXG4gICAgaWYgKHByZWZpeCA9PT0gUEFDS0FHRV9OQU1FX1BSRUZJWF9QTEFDRUhPTERFUikge1xuICAgICAgcHJlZml4ID0gcmVxdWlyZShwYXRoLnJlc29sdmUoJ3BhY2thZ2UuanNvbicpKS5uYW1lXG4gICAgfVxuICB9XG4gIGNvbnN0IHNlcGFyYXRvciA9IG9wdHMuc2VwYXJhdG9yIHx8IG1vZHVsZS5leHBvcnRzLkRFRkFVTFRfU0VQQVJBVE9SXG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRzKVxuICBjb25zdCBjYXNpbmcgPSBrZXlzLmluZGV4T2YoJ2Nhc2luZycpID09PSAtMVxuICAgID8gREVGQVVMVF9DQVNJTkdcbiAgICA6IG9wdHMuY2FzaW5nLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICBjb25zdCBlbXB0aWVzID0ga2V5cy5pbmRleE9mKCdlbXB0aWVzJykgPT09IC0xXG4gICAgPyBERUZBVUxUX0VNUFRJRVNcbiAgICA6ICghIW9wdHMuZW1wdGllcylcblxuICBjb25zdCB2YXJzID0ge31cblxuICBPYmplY3Qua2V5cyhvYmopLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICgob2JqW2tleV0gaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiBudWxsIC8vIHNraXBcbiAgICB9XG5cbiAgICBpZiAob2JqW2tleV0gaW5zdGFuY2VvZiBPYmplY3QpIHsgLy8gcmVjdXJzZVxuICAgICAgY29uc3QgcHJlID0gYXBwbHlDYXNpbmcoKHByZWZpeCA/IChwcmVmaXggKyBzZXBhcmF0b3IpIDogJycpICsga2V5LCBjYXNpbmcpXG4gICAgICB2YXJzW2tleV0gPSBnZW5lcmF0ZShvYmpba2V5XSwge1xuICAgICAgICBwcmVmaXg6IHByZSxcbiAgICAgICAgc2VwYXJhdG9yOiBzZXBhcmF0b3IsXG4gICAgICAgIGNhc2luZzogY2FzaW5nLFxuICAgICAgICBlbXB0aWVzOiBlbXB0aWVzLFxuICAgICAgICBmb3JtYXRzOiBvcHRzLmZvcm1hdHNba2V5XVxuICAgICAgfSlcbiAgICAgIGlmICgoIU9iamVjdC5rZXlzKHZhcnNba2V5XSkubGVuZ3RoKSAmJiAhZW1wdGllcykgZGVsZXRlIHZhcnNba2V5XVxuICAgIH0gZWxzZSB7IC8vIGFkZFxuICAgICAgY29uc3QgdiA9IGFwcGx5Q2FzaW5nKChwcmVmaXggPyBwcmVmaXggKyBzZXBhcmF0b3IgOiAnJykgKyBrZXksIGNhc2luZylcbiAgICAgIC8vIHN1cHBvcnQgX19mb3JtYXQgZmVhdHVyZVxuICAgICAgaWYgKG9wdHMuZm9ybWF0c1trZXldKSB7XG4gICAgICAgIHZhcnNba2V5XSA9IHtcbiAgICAgICAgICBfX25hbWU6IHYsXG4gICAgICAgICAgX19mb3JtYXQ6IG9wdHMuZm9ybWF0c1trZXldXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhcnNba2V5XSA9IHZcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiB2YXJzXG59XG5cbmZ1bmN0aW9uIGFwcGx5Q2FzaW5nICh2YWx1ZSwgY2FzaW5nKSB7XG4gIHZhbHVlID0gdmFsdWUudG9TdHJpbmcoKVxuICBzd2l0Y2ggKGNhc2luZykge1xuICAgIGNhc2UgQ0FTSU5HX1VQUEVSOlxuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKClcbiAgICBjYXNlIENBU0lOR19MT1dFUjpcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpXG4gICAgZGVmYXVsdDogLy8gQ0FTSU5HX1VOQ0hBTkdFRFxuICAgICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZW5lcmF0ZVxubW9kdWxlLmV4cG9ydHMuZ2VuZXJhdGUgPSBnZW5lcmF0ZVxubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9QUkVGSVggPSBERUZBVUxUX1BSRUZJWFxubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9OT19QUkVGSVggPSBERUZBVUxUX05PX1BSRUZJWFxubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TRVBBUkFUT1IgPSBERUZBVUxUX1NFUEFSQVRPUlxubW9kdWxlLmV4cG9ydHMuREVGQVVMVF9FTVBUSUVTID0gREVGQVVMVF9FTVBUSUVTXG5tb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0NBU0lORyA9IERFRkFVTFRfQ0FTSU5HXG5tb2R1bGUuZXhwb3J0cy5DQVNJTkdfVVBQRVIgPSBDQVNJTkdfVVBQRVJcbm1vZHVsZS5leHBvcnRzLkNBU0lOR19MT1dFUiA9IENBU0lOR19MT1dFUlxubW9kdWxlLmV4cG9ydHMuQ0FTSU5HX1VOQ0hBTkdFRCA9IENBU0lOR19VTkNIQU5HRURcbiJdfQ==</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#generate">generate</a></li></ul> </nav> <br class="clear"> <footer> Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a> on Sat Jan 15 2022 05:15:30 GMT+0000 (Coordinated Universal Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>