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