UNPKG

2.76 kBJavaScriptView Raw
1var fs = require('fs');
2var glob = require('glob');
3var logSymbols = require('log-symbols');
4var mapAsync = require('map-async');
5var stdin = require('get-stdin');
6var path = require('path');
7
8var leasot = require('../index');
9var DEFAULT_EXTENSION = '.js';
10
11function getFiletype(specified, file) {
12 return specified || path.extname(file) || DEFAULT_EXTENSION;
13}
14
15function run(content, params) {
16 params = params || {};
17 var file = params.file;
18 var ext = getFiletype(params.ext, file);
19 var associateParser = params.associateParser;
20
21 leasot.associateExtWithParser(associateParser);
22
23 if (!leasot.isExtSupported(ext)) {
24 if (params.skipUnsupported) {
25 return [];
26 }
27 console.log(logSymbols.error, 'Filetype ' + ext + ' is unsupported.');
28 process.exit(1);
29 }
30 return leasot.parse({
31 content: content,
32 customTags: params.tags,
33 ext: ext,
34 fileName: file,
35 withInlineFiles: params.inlineFiles,
36 });
37}
38
39function outputTodos(todos, reporter) {
40 try {
41 var output = leasot.reporter(todos, {
42 reporter: reporter
43 });
44 console.log(output);
45 } catch (e) {
46 console.log(logSymbols.error, e.toString());
47 }
48 process.exit(todos.length ? 1 : 0);
49}
50
51function readFiles(program) {
52 var files = program.args;
53 // Get all files and their resolved globs
54 files = files.reduce(function (newFiles, file) {
55 return newFiles.concat(glob(file, {
56 sync: true,
57 nodir: true,
58 cwd: process.cwd()
59 }));
60 }, []);
61
62 if (!files || !files.length) {
63 console.log(logSymbols.warning, 'No files found for parsing');
64 return process.exit(1);
65 }
66
67 var cwd = process.cwd();
68
69 // Async read all of the given files
70 mapAsync(files, function (file, cb) {
71 fs.readFile(path.resolve(cwd, file), 'utf8', cb);
72 }, function (err, results) {
73 if (err) {
74 console.log(err);
75 return process.exit(1);
76 }
77 var todos = results.map(function (content, i) {
78 return run(content, Object.assign({
79 file: files[i]
80 }, program));
81 }).filter(function (item) {
82 return item && item.length;
83 }).reduce(function (items, item) {
84 return items.concat(item);
85 }, []);
86
87 outputTodos(todos, program.reporter);
88 });
89}
90
91module.exports = function (program) {
92 if (!process.stdin.isTTY) {
93 return stdin(function (content) {
94 var todos = run(content, program);
95 outputTodos(todos, program.reporter);
96 });
97 }
98 if (!program.args.length) {
99 return program.help();
100 }
101 readFiles(program);
102};