diff --git a/src/cli.js b/src/cli.js index 4772995f1bfd..f4d26d1288e3 100644 --- a/src/cli.js +++ b/src/cli.js @@ -50,6 +50,21 @@ async function outputFile(file, contents) { await fs.promises.writeFile(file, contents, 'utf8') } +function drainStdin() { + return new Promise((resolve, reject) => { + let result = '' + process.stdin.on('readable', () => { + let chunk + while ((chunk = process.stdin.read()) !== null) { + result += chunk + } + }) + + process.stdin.on('end', () => resolve(result)) + process.stdin.on('error', (err) => reject(err)) + }) +} + function help({ message, usage, commands, options }) { let indent = 2 @@ -558,9 +573,21 @@ async function build() { }) } - let css = input - ? fs.readFileSync(path.resolve(input), 'utf8') - : '@tailwind base; @tailwind components; @tailwind utilities' + let css = await (async () => { + // Input file has been provided + if (input) { + fs.readFileSync(path.resolve(input), 'utf8') + } + + // Piping in data, let's drain the stdin + if (!process.stdin.isTTY) { + return await drainStdin() + } + + // No input file provided, fallback to default atrules + return '@tailwind base; @tailwind components; @tailwind utilities' + })() + return processCSS(css) } @@ -694,9 +721,21 @@ async function build() { }) } - let css = input - ? fs.readFileSync(path.resolve(input), 'utf8') - : '@tailwind base; @tailwind components; @tailwind utilities' + let css = await (async () => { + // Input file has been provided + if (input) { + fs.readFileSync(path.resolve(input), 'utf8') + } + + // Piping in data, let's drain the stdin + if (!process.stdin.isTTY) { + return await drainStdin() + } + + // No input file provided, fallback to default atrules + return '@tailwind base; @tailwind components; @tailwind utilities' + })() + let result = await processCSS(css) env.DEBUG && console.timeEnd('Finished in') return result