Files
anonymous_github/src/core/response-stream.ts
T
Thomas Durieux 6434337923 perf: bound request work and resource usage (#866)
* perf: bound request work and resource usage

* fix: address performance review regressions

* fix: guard content expiration and dashboard state

* fix: tolerate cache outages and retire derived paths

* fix: revalidate expiration claims and status pagination

* fix: retry interrupted repository metadata cleanup

* fix: retire obsolete content cache storage

* fix: activate tree metadata and recheck expiration claims

* fix: fence cache publication across expiration

* fix: recover staged trees and enforce cache lifecycle cleanup

* fix: prune expired transforms during database outages

* fix: finish conference removals and reload expiration candidates
2026-10-08 03:38:19 +01:00

25 lines
1020 B
TypeScript

import { Readable, Writable } from "stream";
/** Cancel upstream on every response terminal event, including a pre-header close. */
export function streamResponse(source: Readable, response: Writable,
onError: (error: Error) => void): Promise<void> {
return new Promise((resolve, reject) => {
const cleanup = () => {
response.removeListener("close", done);
response.removeListener("finish", done);
response.removeListener("error", failed);
source.removeListener("error", upstreamFailed);
source.unpipe(response);
source.destroy();
};
const done = () => { cleanup(); resolve(); };
const failed = (error: Error) => { cleanup(); reject(error); };
const upstreamFailed = (error: Error) => { onError(error); done(); };
response.once("close", done);
response.once("finish", done);
response.once("error", failed);
source.once("error", upstreamFailed);
if (response.destroyed || response.writableEnded) done(); else source.pipe(response);
});
}