/** * Throttles the chunks of this stream according to the given bandwidth * parameters using the token bucket algorithm. Allows for burst in the * processing of elements by allowing the token bucket to accumulate tokens up * to a `units + burst` threshold. Chunks that do not meet the bandwidth * constraints are dropped. The weight of each chunk is determined by the * `costFn` function. * * @tsplus static effect/core/stream/Stream.Aspects throttleEnforce * @tsplus pipeable effect/core/stream/Stream throttleEnforce */ export function throttleEnforce( units: number, duration: Duration, costFn: (input: Chunk) => number, burst = 0 ) { return (self: Stream): Stream => self.throttleEnforceEffect( units, duration, (input) => Effect.succeed(costFn(input)), burst ) }