1234567891011121314151617181920212223242526272829303132333435363738394041 |
- 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
|