Newer
Older
CVSS_3.0_GUI / node_modules / nwjs-builder-phoenix / node_modules / yargs / lib / apply-extends.js
root on 7 May 2019 1 KB Initial commit
var fs = require('fs')
var path = require('path')
var assign = require('./assign')
var YError = require('./yerror')

var previouslyVisitedConfigs = []

function checkForCircularExtends (path) {
  if (previouslyVisitedConfigs.indexOf(path) > -1) {
    throw new YError("Circular extended configurations: '" + path + "'.")
  }
}

function getPathToDefaultConfig (cwd, pathToExtend) {
  return path.resolve(cwd, pathToExtend)
}

function applyExtends (config, cwd, subKey) {
  var defaultConfig = {}

  if (config.hasOwnProperty('extends')) {
    var pathToDefault = getPathToDefaultConfig(cwd, config.extends)

    checkForCircularExtends(pathToDefault)

    previouslyVisitedConfigs.push(pathToDefault)
    delete config.extends

    defaultConfig = JSON.parse(fs.readFileSync(pathToDefault, 'utf8'))
    if (subKey) {
      defaultConfig = defaultConfig[subKey] || {}
    }
    defaultConfig = applyExtends(defaultConfig, path.dirname(pathToDefault), subKey)
  }

  previouslyVisitedConfigs = []

  return assign(defaultConfig, config)
}

module.exports = applyExtends