await flushFunctionToExecuteWhilePaused()

in gh-actions-artifact-client/src/upload-http-client.js [76:142]


            await flushFunctionToExecuteWhilePaused()
            inputStream.resume()
          }
        )
      })
      inputStream.on('end', async () => {
        await streamUploader.flush()
        resolve()
      })
    })

    await this.patchArtifactSize(streamUploader.totalSize, name)
  }
}

class StreamUploader {
  artifactName
  fileContainerResourceUrl
  partBuffer
  partBufferIndex = 0
  partNumber = 0
  chunkSize
  totalSize = 0
  uploadChunkFunction

  constructor(
    artifactName,
    fileContainerResourceUrl,
    partSize,
    chunkSize,
    uploadChunkFunction
  ) {
    this.artifactName = artifactName
    this.fileContainerResourceUrl = new url.URL(fileContainerResourceUrl)
    this.partBuffer = Buffer.alloc(partSize)
    this.chunkSize = chunkSize
    this.uploadChunkFunction = uploadChunkFunction
    this.updateResourceUrl()
  }

  updateResourceUrl() {
    this.fileContainerResourceUrl.searchParams.set(
      'itemPath',
      `${this.artifactName}/part${this.partNumber.toString().padStart(3, 0)}`
    )
    this.resourceUrl = this.fileContainerResourceUrl.toString()
  }

  async onData(data, pauseWhileExecuting) {
    let remainingBytes = data.length
    let dataIndex = 0
    while (remainingBytes > 0) {
      const readBytes = Math.min(
        remainingBytes,
        this.partBuffer.length - this.partBufferIndex
      )
      data.copy(
        this.partBuffer,
        this.partBufferIndex,
        dataIndex,
        dataIndex + readBytes
      )
      this.partBufferIndex += readBytes
      dataIndex += readBytes
      remainingBytes -= readBytes
      if (this.partBufferIndex == this.partBuffer.length) {
        await pauseWhileExecuting(async () => {