| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 | #!/usr/bin/env nodevar fs = require('fs');var path = require('path');var command, directory, file;var yargs = require('yargs')    .usage('Usage: $0 <command> [options] <dir> [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);}
 |