#!/usr/bin/env node var fs = require('fs'); var path = require('path'); var command, directory, file; var yargs = require('yargs') .usage('Usage: $0 [options] [file]') // .demand(1) .command('ancestors', 'Output the ancestors') .command('descendents', 'Output the descendents') .example('$0 ancestors -I src src/ src/_footer.scss', 'outputs the ancestors of src/_footer.scss') .option('I', { alias: 'load-path', default: [process.cwd()], describe: 'Add directories to the sass load path', type: 'array', }) .option('e', { alias: 'extensions', default: ['scss', 'css', 'sass'], describe: 'File extensions to include in the graph', type: 'array', }) .option('f', { alias: 'follow', default: false, describe: 'Follow symbolic links', type: 'bool', }) .option('j', { alias: 'json', default: false, describe: 'Output the index in json', type: 'bool', }) .version(function() { return require('../package').version; }) .alias('v', 'version') .help('h') .alias('h', 'help'); var argv = yargs.argv; if (argv._.length === 0) { yargs.showHelp(); process.exit(1); } if (['ancestors', 'descendents'].indexOf(argv._[0]) !== -1) { command = argv._.shift(); } if (argv._ && path.extname(argv._[0]) === '') { directory = argv._.shift(); } if (argv._ && path.extname(argv._[0])) { file = argv._.shift(); } try { if (!directory) { throw new Error('Missing directory'); } if (!command && !argv.json) { throw new Error('Missing command'); } if (!file && (command === 'ancestors' || command === 'descendents')) { throw new Error(command + ' command requires a file'); } var loadPaths = argv.loadPath; if(process.env.SASS_PATH) { loadPaths = loadPaths.concat(process.env.SASS_PATH.split(/:/).map(function(f) { return path.resolve(f); })); } var graph = require('../').parseDir(directory, { extensions: argv.extensions, loadPaths: loadPaths, follow: argv.follow, }); if(argv.json) { console.log(JSON.stringify(graph.index, null, 4)); process.exit(0); } if (command === 'ancestors') { graph.visitAncestors(path.resolve(file), function(f) { console.log(f); }); } if (command === 'descendents') { graph.visitDescendents(path.resolve(file), function(f) { console.log(f); }); } } catch(e) { if (e.code === 'ENOENT') { console.error('Error: no such file or directory "' + e.path + '"'); } else { console.log('Error: ' + e.message); } // console.log(e.stack); process.exit(1); }