From b04295688ea9bdf2de8897e559294c70ef784841 Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Tue, 4 Jan 2022 17:12:49 +0100 Subject: [PATCH] allow to pipe in data to the CLI --- src/cli.js | 51 +++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 45 insertions(+), 6 deletions(-) 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