promises.js 1008 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. 'use strict'
  2. const { ArrayPrototypePop, Promise } = require('../ours/primordials')
  3. const { isIterable, isNodeStream, isWebStream } = require('../internal/streams/utils')
  4. const { pipelineImpl: pl } = require('../internal/streams/pipeline')
  5. const { finished } = require('../internal/streams/end-of-stream')
  6. require('../../lib/stream.js')
  7. function pipeline(...streams) {
  8. return new Promise((resolve, reject) => {
  9. let signal
  10. let end
  11. const lastArg = streams[streams.length - 1]
  12. if (
  13. lastArg &&
  14. typeof lastArg === 'object' &&
  15. !isNodeStream(lastArg) &&
  16. !isIterable(lastArg) &&
  17. !isWebStream(lastArg)
  18. ) {
  19. const options = ArrayPrototypePop(streams)
  20. signal = options.signal
  21. end = options.end
  22. }
  23. pl(
  24. streams,
  25. (err, value) => {
  26. if (err) {
  27. reject(err)
  28. } else {
  29. resolve(value)
  30. }
  31. },
  32. {
  33. signal,
  34. end
  35. }
  36. )
  37. })
  38. }
  39. module.exports = {
  40. finished,
  41. pipeline
  42. }