.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / prettier-stylelint / src / cli.js
1 #!/usr/bin/env node
2 /* eslint-disable import/unambiguous */
3 'use strict';
4
5 const fs = require('fs');
6 const updateNotifier = require('update-notifier');
7 const meow = require('meow');
8 const globby = require('globby');
9 const getStdin = require('get-stdin');
10 const pify = require('pify');
11 const { arrify, ignore } = require('./utils');
12 const { format } = require('./index');
13
14 const cli = meow(
15     `
16 Usage
17   $ prettier-stylelint [<file|glob> ...]
18
19 Options
20   --ignore          Additional paths to ignore  [Can be set multiple times]
21   --extension       Additional extension to lint [Can be set multiple times]
22   --cwd=<dir>       Working directory for files
23   --stdin           Validate/fix code from stdin ('prettier-stylelint -' also works)
24   --write           Edit files in place (DRAGONS AHEAD !!)
25   --quiet -q        Only log std.err
26
27 Examples
28   $ prettier-stylelint
29   $ prettier-stylelint index.js
30   $ prettier-stylelint *.js !foo.js
31   $ echo 'a[id="foo"] { content: "x"; }' | prettier-stylelint --stdin
32
33 Default pattern when no arguments:
34   **/*.{css,scss,less,sss}
35 `,
36     {
37         string: ['_', 'ignore', 'extension', 'cwd'],
38         boolean: ['stdin', 'write'],
39         default: {
40             cwd: process.cwd(),
41             write: false,
42             quiet: false
43         },
44         alias: { q: 'quiet' }
45     }
46 );
47
48 updateNotifier({ pkg: cli.pkg }).notify();
49
50 let input = cli.input;
51 const opts = cli.flags;
52 const DEFAULT_EXTENSION = ['css', 'scss', 'less', 'sss'];
53 const DEFAULT_PATTERN = `**/*.{${DEFAULT_EXTENSION.join(',')}}`;
54 const DEFAULT_IGNORE = [
55     '**/node_modules/**',
56     '**/bower_components/**',
57     'flow-typed/**',
58     'coverage/**',
59     '{tmp,temp}/**',
60     '**/*.min.{css,scss,less,sss}',
61     '**/bundle.{css,scss,less,sss}',
62     'fixture{-*,}.{css,scss,less,sss}',
63     'fixture{s,}/**',
64     '{test,tests,spec,__tests__}/fixture{s,}/**',
65     'vendor/**',
66     'dist/**'
67 ];
68
69 const options = {
70     ignore: DEFAULT_IGNORE.concat(arrify(opts.ignore)),
71     extensions: DEFAULT_EXTENSION.concat(arrify(opts.extension)),
72     cwd: opts.cwd,
73     write: opts.write,
74     quiet: opts.quiet
75 };
76
77 if (input[0] === '-') {
78     opts.stdin = true;
79     input.shift();
80 }
81 if (opts.stdin) {
82     getStdin()
83         .then(str =>
84             format({
85                 filepath: opts.cwd,
86                 text: str
87             }).then(source => process.stdout.write(source))
88         )
89         .catch((err) => {
90             console.error(err.stack || err);
91             process.exitCode = 1;
92         });
93 } else {
94     const isEmptyPatterns = input.length === 0;
95
96     input = isEmptyPatterns ? [DEFAULT_PATTERN] : arrify(input);
97
98     globby(input, {
99         ignore: options.ignore,
100         nodir: true,
101         cwd: options.cwd
102     })
103         .then((paths) => {
104             paths = ignore(paths, options);
105
106             return Promise.all(
107                 paths.map(path =>
108                     format({
109                         text: fs.readFileSync(path, 'utf8'),
110                         filePath: path,
111                         quiet: options.quiet
112                     })
113                         .then((formatted) => {
114                             if (!options.quiet) {
115                                 console.log(formatted);
116                             }
117                             if (options.write) {
118                                 return pify(fs.writeFile)(path, formatted);
119                             }
120
121                             return formatted;
122                         })
123                         .catch((err) => {
124                             console.error(
125                                 `prettier-stylelint [ERROR]: There was an error formatting "${path}"\n`
126                             );
127                             console.error(err.stack || err);
128                             console.error('\n');
129                             process.exitCode = 1;
130                         })
131                 )
132             );
133         })
134         .catch((err) => {
135             console.error(err.stack || err);
136             process.exitCode = 1;
137         });
138 }