stdin.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. const readline = require('readline')
  2. // const xstdin = (prompt, input) => {
  3. // const rl = readline.createInterface({
  4. // input: input || process.stdin
  5. // })
  6. // return async function* () {
  7. // return await new Promise((resolve) => {
  8. // rl.question(prompt, resolve)
  9. // })
  10. // }
  11. // }
  12. // stdin = () => async function* stdin() {
  13. // const done = new Promise(resolve => process.stdin.once('end', x => resolve(null)))
  14. // let data
  15. // do {
  16. // data = await Promise.race([
  17. // new Promise(resolve => process.stdin.once('data', resolve)),
  18. // done
  19. // ])
  20. // console.log(data)
  21. // if (data) yield data
  22. // } while (data)
  23. // }
  24. const stdin = () => {
  25. return async function*() {
  26. return await new Promise(resolve => {
  27. const onData = (data) => {
  28. resolve(data.toString().trim())
  29. cleanup()
  30. }
  31. const onEnd = () => {
  32. resolve('')
  33. cleanup()
  34. }
  35. const cleanup = () => {
  36. process.stdin.off('data', onData)
  37. process.stdin.off('end', onEnd)
  38. }
  39. process.stdin.on('data', onData)
  40. process.stdin.on('end', onEnd)
  41. })
  42. }
  43. }
  44. const stdout = () => async function* stdout(output, scripting) {
  45. process.stdout.write(output)
  46. }
  47. module.exports = {stdin, stdout}