"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getAwsChunkedEncodingStream = getAwsChunkedEncodingStream; const node_stream_1 = require("node:stream"); const getAwsChunkedEncodingStream_browser_1 = require("./getAwsChunkedEncodingStream.browser"); const stream_type_check_1 = require("./stream-type-check"); function getAwsChunkedEncodingStream(stream, options) { const readable = stream; const readableStream = stream; if ((0, stream_type_check_1.isReadableStream)(readableStream)) { return (0, getAwsChunkedEncodingStream_browser_1.getAwsChunkedEncodingStream)(readableStream, options); } const { base64Encoder, bodyLengthChecker, checksumAlgorithmFn, checksumLocationName, streamHasher } = options; const checksumRequired = base64Encoder !== undefined && checksumAlgorithmFn !== undefined && checksumLocationName !== undefined && streamHasher !== undefined; const digest = checksumRequired ? streamHasher(checksumAlgorithmFn, readable) : undefined; const awsChunkedEncodingStream = new node_stream_1.Readable({ read: () => { }, }); readable.on("data", (data) => { const length = bodyLengthChecker(data) || 0; if (length === 0) { return; } awsChunkedEncodingStream.push(`${length.toString(16)}\r\n`); awsChunkedEncodingStream.push(data); awsChunkedEncodingStream.push("\r\n"); }); readable.on("end", async () => { awsChunkedEncodingStream.push(`0\r\n`); if (checksumRequired) { const checksum = base64Encoder(await digest); awsChunkedEncodingStream.push(`${checksumLocationName}:${checksum}\r\n`); awsChunkedEncodingStream.push(`\r\n`); } awsChunkedEncodingStream.push(null); }); return awsChunkedEncodingStream; }