123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- #!/usr/bin/env node
- var 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);
- }
|