forked from tailwindlabs/tailwindcss
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcli.js
executable file
·95 lines (76 loc) · 2.22 KB
/
cli.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/usr/bin/env node
import fs from 'fs-extra'
import _ from 'lodash'
import path from 'path'
import postcss from 'postcss'
import defaultConfig from '../defaultConfig'
import program from 'commander'
import tailwind from '..'
function loadConfig(configPath) {
if (configPath === undefined) {
return undefined
}
if (! fs.existsSync(path.resolve(configPath))) {
console.error(`Config file [${configPath}] does not exist.`)
process.exit(1)
}
return require(path.resolve(configPath))
}
function writeStrategy(program) {
if (program.output === undefined) {
return (output) => {
process.stdout.write(output)
}
}
return (output) => {
fs.outputFileSync(program.output, output)
}
}
function buildTailwind(inputFile, config, write) {
console.log('Building Tailwind!')
const input = fs.readFileSync(inputFile, 'utf8')
return postcss([tailwind(config)])
.process(input)
.then(result => {
write(result.css)
console.log('Finished building Tailwind!')
})
.catch(error => console.log(error))
}
program.version('0.1.0').usage('<command> [<args>]')
program.command('init [filename]')
.usage('[options] [filename]')
.action(function (filename = 'tailwind.js') {
const destination = path.resolve(filename)
if (fs.existsSync(destination)) {
console.log(`Destination ${destination} already exists, aborting.`)
process.exit(1)
}
const output = fs.readFileSync(path.resolve(__dirname + '/../defaultConfig.js'), 'utf8')
fs.outputFileSync(destination, output.replace('// var defaultConfig', 'var defaultConfig'))
process.exit()
})
program.command('build')
.usage('[options] <file ...>')
.option('-c, --config [path]', 'Path to config file')
.option('-o, --output [path]', 'Output file')
.action(function () {
let inputFile = program.args[0]
if (! inputFile) {
console.error('No input file given!')
process.exit(1)
}
buildTailwind(inputFile, loadConfig(program.config), writeStrategy(program))
.then(function () {
process.exit()
})
})
program.command('*')
.action(function () {
program.help()
})
program.parse(process.argv)
if (program.args.length === 0 ) {
program.help()
process.exit()
}