diff --git a/src/server.ts b/src/server.ts index 21d289c..a1041d3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -4,6 +4,8 @@ import http from 'node:http' import { tmpdir } from 'node:os' import { dirname, join, relative, resolve, sep } from 'node:path' import { platform } from 'node:process' +import stream from 'node:stream' +import { promisify } from 'node:util' import { ListResponse } from './backend/list.ts' import { decodeMetadata, encodeMetadata, METADATA_HEADER_INTERNAL } from './metadata.ts' @@ -21,6 +23,10 @@ export enum Operation { SET = 'set', } +// TODO: Replace with `promises` import of `node:stream` once we can drop +// support for Node 14. +const pipeline = promisify(stream.pipeline) + interface BlobsServerOptions { /** * Whether debug-level information should be logged, such as internal errors @@ -271,12 +277,7 @@ export class BlobsServer { const tempDataPath = join(tempDirectory, relativeDataPath) await fs.mkdir(dirname(tempDataPath), { recursive: true }) - - await new Promise((resolve, reject) => { - req.pipe(createWriteStream(tempDataPath)) - req.on('end', resolve) - req.on('error', reject) - }) + await pipeline(req, createWriteStream(tempDataPath)) await fs.mkdir(dirname(dataPath), { recursive: true }) await fs.copyFile(tempDataPath, dataPath)