Skip to content

Commit 072fc43

Browse files
committed
Avoid events.once use
1 parent 2b8a13e commit 072fc43

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

src/index.ts

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import readline from 'node:readline'
77

88
import abortSignal from '@socketsecurity/registry/lib/constants/abort-signal'
99

10-
// @ts-ignore
10+
// @ts-ignore: Avoid TS import attributes error.
1111
import rootPkgJson from '../package.json' with { type: 'json' }
1212

1313
import type { operations } from '../types/api'
@@ -192,7 +192,10 @@ async function createUploadRequest(
192192
part.pipe(req, { end: false })
193193
// Wait for file streaming to complete.
194194
// eslint-disable-next-line no-await-in-loop
195-
await events.once(part, 'end')
195+
await new Promise<void>((resolve, reject) => {
196+
part.once('end', resolve)
197+
part.once('error', reject)
198+
})
196199
if (!aborted) {
197200
// Ensure a new line after file content.
198201
req.write('\r\n')
@@ -221,7 +224,10 @@ async function getErrorResponseBody(
221224
const chunks: Buffer[] = []
222225
response.on('data', (chunk: Buffer) => chunks.push(chunk))
223226
try {
224-
await events.once(response, 'end')
227+
await new Promise<void>((resolve, reject) => {
228+
response.once('end', resolve)
229+
response.once('error', reject)
230+
})
225231
return Buffer.concat(chunks).toString('utf8')
226232
} catch {
227233
return '(there was an error reading the body content)'
@@ -235,9 +241,29 @@ function getHttpModule(baseUrl: string): typeof http | typeof https {
235241

236242
async function getResponse(req: ClientRequest): Promise<IncomingMessage> {
237243
try {
238-
const { 0: res } = (await events.once(req, 'response', {
239-
signal: abortSignal
240-
})) as [IncomingMessage]
244+
const res = await new Promise<IncomingMessage>((resolve, reject) => {
245+
const cleanup = () => {
246+
req.off('response', onResponse)
247+
req.off('error', onError)
248+
abortSignal?.removeEventListener('abort', onAbort)
249+
}
250+
const onAbort = () => {
251+
cleanup()
252+
req.destroy()
253+
reject(new Error('Request aborted by signal'))
254+
}
255+
const onError = (e: Error) => {
256+
cleanup()
257+
reject(e)
258+
}
259+
const onResponse = (res: IncomingMessage) => {
260+
cleanup()
261+
resolve(res)
262+
}
263+
req.on('response', onResponse)
264+
req.on('error', onError)
265+
abortSignal?.addEventListener('abort', onAbort)
266+
})
241267
if (!isResponseOk(res)) {
242268
throw new ResponseError(res, `${req.method} request failed`)
243269
}

0 commit comments

Comments
 (0)