|
|
/******************************* Set-up *******************************/
var extend = require('extend'), fs = require('fs'), path = require('path'),
defaults = require('../defaults') ;
/******************************* Exports *******************************/
module.exports = {
getPath: function(file, directory) { var configPath, walk = function(directory) { var nextDirectory = path.resolve( path.join(directory, path.sep, '..') ), currentPath = path.normalize( path.join(directory, file) ) ; if( fs.existsSync(currentPath) ) { // found file
configPath = path.normalize(directory); return; } else { // reached file system root, let's stop
if(nextDirectory == directory) { return; } // otherwise recurse
walk(nextDirectory, file); } } ;
// start walk from outside require-dot-files directory
file = file || defaults.files.config; directory = directory || path.join(__dirname, path.sep, '..'); walk(directory); return configPath || ''; },
// adds additional derived values to a config object
addDerivedValues: function(config) {
config = config || extend(false, {}, defaults);
/*-------------- File Paths ---------------*/
var configPath = this.getPath(), sourcePaths = {}, outputPaths = {}, folder ;
// resolve paths (config location + base + path)
for(folder in config.paths.source) { if(config.paths.source.hasOwnProperty(folder)) { sourcePaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.source[folder])); } } for(folder in config.paths.output) { if(config.paths.output.hasOwnProperty(folder)) { outputPaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.output[folder])); } }
// set config paths to full paths
config.paths.source = sourcePaths; config.paths.output = outputPaths;
// resolve "clean" command path
config.paths.clean = path.resolve( path.join(configPath, config.base, config.paths.clean) );
/*-------------- CSS URLs ---------------*/
// determine asset paths in css by finding relative path between themes and output
// force forward slashes
config.paths.assets = { source : '../../themes', // source asset path is always the same
uncompressed : '.' + path.sep + path.relative(config.paths.output.uncompressed, config.paths.output.themes).replace(/\\/g, '/'), compressed : '.' + path.sep + path.relative(config.paths.output.compressed, config.paths.output.themes).replace(/\\/g, '/'), packaged : '.' + path.sep + path.relative(config.paths.output.packaged, config.paths.output.themes).replace(/\\/g, '/') };
/*-------------- Permission ---------------*/
if(config.permission) { config.hasPermissions = true; } else { // pass blank object to avoid causing errors
config.permission = {}; config.hasPermissions = false; }
/*-------------- Globs ---------------*/
if(!config.globs) { config.globs = {}; }
// remove duplicates from component array
if(config.components instanceof Array) { config.components = config.components.filter(function(component, index) { return config.components.indexOf(component) == index; }); }
// takes component object and creates file glob matching selected components
config.globs.components = (typeof config.components == 'object') ? (config.components.length > 1) ? '{' + config.components.join(',') + '}' : config.components[0] : '{' + defaults.components.join(',') + '}' ;
return config;
}
};
|