Guest User

Untitled

a guest
Mar 24th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.16 KB | None | 0 0
  1. import { Readable } from 'stream'
  2.  
  3. const createReadable = generator => {
  4. const readable = new Readable()
  5. let iterator
  6. readable._read = size => {
  7. iterator = generator(size)
  8. readable._destroy = error => {
  9. iterator.throw(error)
  10. }
  11. const read = readable._read = async size => {
  12. try {
  13. const cursor = await iterator.next(size)
  14. if (cursor.done) {
  15. return readable.push(null)
  16. }
  17. readable.push(cursor.value)
  18. } catch (error) {
  19. readable.destroy(error)
  20. }
  21. }
  22. return read(size)
  23. }
  24.  
  25. return readable
  26. }
  27.  
  28. {
  29. const { close, open, read } = require('fs')
  30. const { fromCallback } = require('promise-toolbox')
  31.  
  32. const stream = createReadable(async function * (size) {
  33. const fd = await fromCallback(cb => open(__filename, 'r', cb))
  34. try {
  35. while (true) {
  36. const buf = Buffer.allocUnsafe(size)
  37. const n = await fromCallback(cb => read(fd, buf, 0, size, null, cb))
  38. if (n < size) {
  39. yield buf.slice(0, n)
  40. break
  41. }
  42. size = yield buf
  43. }
  44. } finally {
  45. await fromCallback(cb => close(fd, cb))
  46. }
  47. })
  48.  
  49. stream.pipe(process.stdout)
  50. }
Add Comment
Please, Sign In to add comment