| /******************************* |
| 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.relative(config.paths.output.uncompressed, config.paths.output.themes).replace(/\\/g, '/'), |
| compressed : './' + path.relative(config.paths.output.compressed, config.paths.output.themes).replace(/\\/g, '/'), |
| packaged : './' + 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; |
| |
| } |
| |
| }; |
| |