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 () => {