Created
August 6, 2021 00:47
-
-
Save euxn23/2d276ff01711fbecb5f52a330205fa67 to your computer and use it in GitHub Desktop.
benri.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { | |
exec, | |
spawn, | |
SpawnOptionsWithoutStdio, | |
} from 'child_process' | |
import { createInterface } from 'readline' | |
import { promisify } from 'util' | |
process.stdin.setEncoding('utf8') | |
export const execAsync = promisify(exec) | |
export const spawnAsync = async (command: string, option?: SpawnOptionsWithoutStdio) => new Promise((resolve, reject) => { | |
const _process = spawn(command, option) | |
if (_process.stdout === null) { | |
return reject(new Error('stdout is not defined')) | |
} | |
if (_process.stderr === null) { | |
return reject(new Error('stderr is not defined')) | |
} | |
_process.stderr.pipe(process.stderr) | |
_process.stdout.pipe(process.stdout) | |
_process.on('error', (err) => { | |
return reject(err) | |
}) | |
_process.on('disconnect', () => { | |
return reject(new Error('disconnected')) | |
}) | |
_process.on('message', (message) => { | |
console.log(message) | |
}) | |
_process.on('exit', (code) => { | |
return resolve(code) | |
}) | |
_process.on('close', (code) => { | |
return resolve(code) | |
}) | |
}) | |
export const scan = async (): Promise<string> => { | |
const _buffers = [] | |
for await (const chunk of process.stdin) { | |
_buffers.push(chunk) | |
} | |
const buffer = Buffer.concat(_buffers) | |
return buffer.toString() | |
} | |
export const scan_ = async (): Promise<string[]> => new Promise((resolve) => { | |
const lines: string[] = [] | |
const reader = createInterface({ | |
input: process.stdin, | |
}) | |
reader.on('line', (line) => { | |
lines.push(line) | |
}) | |
reader.on('close', () => { | |
resolve(lines) | |
}) | |
}) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment