27 lines
		
	
	
	
		
			672 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			27 lines
		
	
	
	
		
			672 B
			
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|   | // Copyright 2024 Signal Messenger, LLC
 | ||
|  | // SPDX-License-Identifier: AGPL-3.0-only
 | ||
|  | 
 | ||
|  | import { Transform } from 'node:stream'; | ||
|  | 
 | ||
|  | /** | ||
|  |  * Truncates the stream to the target size. | ||
|  |  */ | ||
|  | export function trimPadding(size: number): Transform { | ||
|  |   let total = 0; | ||
|  |   return new Transform({ | ||
|  |     transform(chunk, _encoding, callback) { | ||
|  |       const chunkSize = chunk.byteLength; | ||
|  |       const sizeLeft = size - total; | ||
|  |       if (sizeLeft >= chunkSize) { | ||
|  |         total += chunkSize; | ||
|  |         callback(null, chunk); | ||
|  |       } else if (sizeLeft > 0) { | ||
|  |         total += sizeLeft; | ||
|  |         callback(null, chunk.subarray(0, sizeLeft)); | ||
|  |       } else { | ||
|  |         callback(null, null); | ||
|  |       } | ||
|  |     }, | ||
|  |   }); | ||
|  | } |