1 | import { Readable } from 'stream'
|
2 | import { CommonLogger } from '@naturalcycles/js-lib'
|
3 |
|
4 | export function pipelineClose(
|
5 | name: string,
|
6 | readableDownstream: Readable,
|
7 | sourceReadable: Readable | undefined,
|
8 | streamDone: Promise<void> | undefined,
|
9 | logger: CommonLogger,
|
10 | ): void {
|
11 | readableDownstream.push(null)
|
12 |
|
13 | if (!sourceReadable) {
|
14 | logger.warn(`${name} sourceReadable is not provided, readable stream will not be stopped`)
|
15 | } else {
|
16 | logger.log(`${name} is calling readable.unpipe() to pause the stream`)
|
17 | sourceReadable.unpipe()
|
18 |
|
19 | if (!streamDone) {
|
20 | logger.log(`${name} streamDone is not provided, will do readable.destroy right away`)
|
21 | sourceReadable.destroy()
|
22 | } else {
|
23 | void streamDone.then(() => {
|
24 | logger.log(`${name} streamDone, calling readable.destroy()`)
|
25 | sourceReadable.destroy()
|
26 | })
|
27 | }
|
28 | }
|
29 | }
|