(function () { 'use strict'; var path = require('path'), fs = require('fs'), con = console; exports.setConsole = function (c) { con = c; }; function merge(source, add) { var result = source || {}; if (!add) { return result; } Object.keys(add).forEach(function (prop) { if (!result.hasOwnProperty(prop)) { result[prop] = add[prop]; } }); return result; } exports.merge = merge; function loadAndParseConfig(filePath) { try { /*jslint stupid: true*/ return JSON.parse(fs.readFileSync(filePath, "utf-8")); } catch (err) { if (filePath && err.code !== "ENOENT") { con.warn('Error reading config file "' + filePath + '": ' + err); } } } exports.loadAndParseConfig = loadAndParseConfig; function addDefaults(options) { options = merge(options, {node: true, es5: true}); return options; } function notFalsy(n) { return n; } function splitPredefs(options) { if (!options.predef) { return options; } if (Array.isArray(options.predef)) { return options; } options.predef = options.predef.split(',').filter(notFalsy); return options; } function preprocessOptions(options, config) { options = merge({}, options); options = merge(options, config); options = addDefaults(options); options = splitPredefs(options); return options; } function mergeConfigs(home, project) { var homeConfig, cwdConfig, config; home.some(function (file) { homeConfig = loadAndParseConfig(file); return homeConfig; }); project.some(function (file) { cwdConfig = loadAndParseConfig(file); return cwdConfig; }); config = merge(cwdConfig, homeConfig); return config; } exports.mergeConfigs = mergeConfigs; function loadConfig(h, configFile) { var home = h || '', homeConfigs = [], projectConfigs = []; if (configFile) { // explicitly specified config file overrides default config file name, path homeConfigs = [ configFile ]; } else { homeConfigs.push(path.join(home, '.jslint.conf')); homeConfigs.push(path.join(home, '.jslintrc')); } projectConfigs = ['jslint.conf', '.jslint.conf', 'jslintrc', '.jslintrc'].map(function (file) { return path.join(process.cwd(), file); }); return mergeConfigs(homeConfigs, projectConfigs); } exports.loadConfig = loadConfig; function options_getOptions(homedir, options) { var config = loadConfig(homedir, options.config); return preprocessOptions(options, config); } exports.preprocessOptions = preprocessOptions; exports.getOptions = options_getOptions; exports.splitPredefs = splitPredefs; exports.addDefaults = addDefaults; }());