Home / Function/ sendWebStream() — fastify Function Reference

sendWebStream() — fastify Function Reference

Architecture documentation for the sendWebStream() function in reply.js from the fastify codebase.

Entity Profile

Dependency Diagram

graph TD
  e86de8a4_fcf2_726c_6613_1273524e94e2["sendWebStream()"]
  4bcd71dc_1ec2_5fe8_b8ff_4a371e392925["reply.js"]
  e86de8a4_fcf2_726c_6613_1273524e94e2 -->|defined in| 4bcd71dc_1ec2_5fe8_b8ff_4a371e392925
  8460cb7c_51e5_baba_0f16_9ea8d190d139["onSendEnd()"]
  8460cb7c_51e5_baba_0f16_9ea8d190d139 -->|calls| e86de8a4_fcf2_726c_6613_1273524e94e2
  18ed21df_f31c_a1a7_f5d2_fd033a6e96bc["logStreamError()"]
  e86de8a4_fcf2_726c_6613_1273524e94e2 -->|calls| 18ed21df_f31c_a1a7_f5d2_fd033a6e96bc
  944c1a61_ec49_25f7_bdf7_a5b89cd52706["sendTrailer()"]
  e86de8a4_fcf2_726c_6613_1273524e94e2 -->|calls| 944c1a61_ec49_25f7_bdf7_a5b89cd52706
  f26bdb28_b830_3aec_800b_087055150c6c["then()"]
  e86de8a4_fcf2_726c_6613_1273524e94e2 -->|calls| f26bdb28_b830_3aec_800b_087055150c6c
  d1d39f22_2d9a_4ca3_4bbe_11322ac6d36b["onErrorHook()"]
  e86de8a4_fcf2_726c_6613_1273524e94e2 -->|calls| d1d39f22_2d9a_4ca3_4bbe_11322ac6d36b
  style e86de8a4_fcf2_726c_6613_1273524e94e2 fill:#6366f1,stroke:#818cf8,color:#fff

Relationship Graph

Source Code

lib/reply.js lines 683–754

function sendWebStream (payload, res, reply) {
  if (payload.locked) {
    throw new FST_ERR_REP_READABLE_STREAM_LOCKED()
  }

  let sourceOpen = true
  let errorLogged = false
  let waitingDrain = false
  const reader = payload.getReader()

  eos(res, function (err) {
    if (sourceOpen) {
      if (err != null && res.headersSent && !errorLogged) {
        errorLogged = true
        logStreamError(reply.log, err, res)
      }
      reader.cancel().catch(noop)
    }
  })

  if (!res.headersSent) {
    for (const key in reply[kReplyHeaders]) {
      res.setHeader(key, reply[kReplyHeaders][key])
    }
  } else {
    reply.log.warn('response will send, but you shouldn\'t use res.writeHead in stream mode')
  }

  function onRead (result) {
    if (result.done) {
      sourceOpen = false
      sendTrailer(null, res, reply)
      return
    }
    /* c8 ignore next 5 - race condition: eos handler typically fires first */
    if (res.destroyed) {
      sourceOpen = false
      reader.cancel().catch(noop)
      return
    }
    const shouldContinue = res.write(result.value)
    if (shouldContinue === false) {
      waitingDrain = true
      res.once('drain', onDrain)
      return
    }
    reader.read().then(onRead, onReadError)
  }

  function onDrain () {
    if (!waitingDrain || !sourceOpen || res.destroyed) {
      return
    }
    waitingDrain = false
    reader.read().then(onRead, onReadError)
  }

  function onReadError (err) {
    sourceOpen = false
    if (res.headersSent || reply.request.raw.aborted === true) {
      if (!errorLogged) {
        errorLogged = true
        logStreamError(reply.log, err, reply)
      }
      res.destroy()
    } else {
      onErrorHook(reply, err)
    }
  }

  reader.read().then(onRead, onReadError)
}

Domain

Subdomains

Defined In

Called By

Frequently Asked Questions

What does sendWebStream() do?
sendWebStream() is a function in the fastify codebase, defined in lib/reply.js.
Where is sendWebStream() defined?
sendWebStream() is defined in lib/reply.js at line 683.
What does sendWebStream() call?
sendWebStream() calls 4 function(s): logStreamError, onErrorHook, sendTrailer, then.
What calls sendWebStream()?
sendWebStream() is called by 1 function(s): onSendEnd.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free