@push.rocks/smartstream 3.0.15 → 3.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/smartstream.classes.smartduplex.d.ts +5 -4
- package/dist_ts/smartstream.classes.smartduplex.js +18 -13
- package/dist_ts/smartstream.functions.js +1 -1
- package/package.json +1 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/smartstream.classes.smartduplex.ts +22 -16
- package/ts/smartstream.functions.ts +1 -1
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartstream',
|
|
6
|
-
version: '3.0.
|
|
6
|
+
version: '3.0.16',
|
|
7
7
|
description: 'simplifies access to node streams'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLG1DQUFtQztDQUNqRCxDQUFBIn0=
|
|
@@ -12,23 +12,24 @@ export interface IStreamWriteFunction<T, rT> {
|
|
|
12
12
|
export interface IStreamFinalFunction<rT> {
|
|
13
13
|
(toolsArg: IStreamTools): Promise<rT>;
|
|
14
14
|
}
|
|
15
|
-
export interface
|
|
15
|
+
export interface ISmartDuplexOptions<TInput, TOutput> extends DuplexOptions {
|
|
16
16
|
handleBackpressure?: boolean;
|
|
17
17
|
readFunction?: () => Promise<void>;
|
|
18
18
|
writeFunction?: IStreamWriteFunction<TInput, TOutput>;
|
|
19
19
|
finalFunction?: IStreamFinalFunction<TOutput>;
|
|
20
20
|
}
|
|
21
21
|
export declare class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
22
|
-
static fromBuffer(buffer: Buffer, options?:
|
|
23
|
-
static fromObservable(observable: plugins.smartrx.rxjs.Observable<any>, options?:
|
|
22
|
+
static fromBuffer(buffer: Buffer, options?: ISmartDuplexOptions<any, any>): SmartDuplex;
|
|
23
|
+
static fromObservable(observable: plugins.smartrx.rxjs.Observable<any>, options?: ISmartDuplexOptions<any, any>): SmartDuplex;
|
|
24
24
|
static fromReplaySubject(replaySubject: plugins.smartrx.rxjs.ReplaySubject<any>, options?: DuplexOptions): SmartDuplex;
|
|
25
25
|
private readFunction?;
|
|
26
26
|
private handleBackpressure;
|
|
27
27
|
private writeFunction?;
|
|
28
28
|
private finalFunction?;
|
|
29
29
|
private observableSubscription?;
|
|
30
|
-
constructor(optionsArg?:
|
|
30
|
+
constructor(optionsArg?: ISmartDuplexOptions<TInput, TOutput>);
|
|
31
31
|
_read(size: number): Promise<void>;
|
|
32
|
+
push(chunkArg?: TOutput | null): boolean;
|
|
32
33
|
_write(chunk: TInput, encoding: string, callback: (error?: Error | null) => void): Promise<void>;
|
|
33
34
|
_final(callback: (error?: Error | null) => void): Promise<void>;
|
|
34
35
|
}
|
|
@@ -3,18 +3,18 @@ import { Duplex } from 'stream';
|
|
|
3
3
|
export class SmartDuplex extends Duplex {
|
|
4
4
|
// STATIC
|
|
5
5
|
static fromBuffer(buffer, options) {
|
|
6
|
-
const
|
|
6
|
+
const smartDuplex = new SmartDuplex(options);
|
|
7
7
|
process.nextTick(() => {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
smartDuplex.push(buffer);
|
|
9
|
+
smartDuplex.push(null); // Signal the end of the data
|
|
10
10
|
});
|
|
11
|
-
return
|
|
11
|
+
return smartDuplex;
|
|
12
12
|
}
|
|
13
13
|
static fromObservable(observable, options) {
|
|
14
14
|
const smartStream = new SmartDuplex(options);
|
|
15
15
|
smartStream.observableSubscription = observable.subscribe({
|
|
16
16
|
next: (data) => {
|
|
17
|
-
if (!smartStream.push(data)) {
|
|
17
|
+
if (!smartStream.push(data) && smartStream.handleBackpressure) {
|
|
18
18
|
// Pause the observable if the stream buffer is full
|
|
19
19
|
smartStream.observableSubscription?.unsubscribe();
|
|
20
20
|
smartStream.once('drain', () => {
|
|
@@ -85,6 +85,17 @@ export class SmartDuplex extends Duplex {
|
|
|
85
85
|
await this.readFunction();
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
+
push(chunkArg) {
|
|
89
|
+
const result = super.push(chunkArg);
|
|
90
|
+
if (!result && this.handleBackpressure) {
|
|
91
|
+
this.pause();
|
|
92
|
+
// Listen for 'drain' event to resume
|
|
93
|
+
this.once('drain', () => {
|
|
94
|
+
this.resume(); // Resume the source of data
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
88
99
|
// Ensure the _write method types the chunk as TInput and encodes TOutput
|
|
89
100
|
async _write(chunk, encoding, callback) {
|
|
90
101
|
if (!this.writeFunction) {
|
|
@@ -100,13 +111,7 @@ export class SmartDuplex extends Duplex {
|
|
|
100
111
|
try {
|
|
101
112
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
102
113
|
if (modifiedChunk) {
|
|
103
|
-
|
|
104
|
-
this.pause();
|
|
105
|
-
// Listen for 'drain' event to resume
|
|
106
|
-
this.once('drain', () => {
|
|
107
|
-
this.resume(); // Resume the source of data
|
|
108
|
-
});
|
|
109
|
-
}
|
|
114
|
+
this.push(modifiedChunk);
|
|
110
115
|
}
|
|
111
116
|
callback();
|
|
112
117
|
}
|
|
@@ -137,4 +142,4 @@ export class SmartDuplex extends Duplex {
|
|
|
137
142
|
callback();
|
|
138
143
|
}
|
|
139
144
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0uY2xhc3Nlcy5zbWFydGR1cGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RyZWFtLmNsYXNzZXMuc21hcnRkdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFzQixNQUFNLFFBQVEsQ0FBQztBQXVCcEQsTUFBTSxPQUFPLFdBQXlDLFNBQVEsTUFBTTtJQUNsRSxTQUFTO0lBQ1QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBdUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQ25CLFVBQWdELEVBQ2hELE9BQXVDO1FBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3hELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtvQkFDN0Qsb0RBQW9EO29CQUNwRCxXQUFXLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ2xELFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTt3QkFDN0IsMERBQTBEO3dCQUMxRCxXQUFXLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7d0JBQ2xELFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7NEJBQ2pFLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3pCLENBQUMsQ0FBQyxDQUFDO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNKO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw2QkFBNkI7WUFDdkQsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxNQUFNLENBQUMsaUJBQWlCLENBQ3RCLGFBQXNELEVBQ3RELE9BQXVCO1FBRXZCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU1QixpQ0FBaUM7UUFDakMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLFNBQVMsQ0FBQztZQUMzQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDYixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNaLHdFQUF3RTtvQkFDeEUsZUFBZSxHQUFHLElBQUksQ0FBQztvQkFDdkIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUM1QjtZQUNILENBQUM7WUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDYixXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0RBQWtEO1lBQzVFLENBQUM7U0FDRixDQUFDLENBQUM7UUFFSCx1RUFBdUU7UUFDdkUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQzNCLElBQUksZUFBZSxFQUFFO2dCQUNuQixlQUFlLEdBQUcsS0FBSyxDQUFDO2dCQUN4Qiw4REFBOEQ7Z0JBQzlELFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO29CQUMzRCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDM0IsV0FBVyxDQUFDLHNCQUFzQixFQUFFLFdBQVcsRUFBRSxDQUFDOzRCQUNsRCxlQUFlLEdBQUcsSUFBSSxDQUFDO3lCQUN4QjtvQkFDSCxDQUFDO29CQUNELHVGQUF1RjtpQkFDeEYsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFTRCxZQUFZLFVBQWlEO1FBQzNELEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsRUFBRSxZQUFZLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxFQUFFLGFBQWEsQ0FBQztRQUMvQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsVUFBVSxFQUFFLGtCQUFrQixJQUFJLElBQUksQ0FBQztJQUNuRSxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFZO1FBQzdCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFTSxJQUFJLENBQUMsUUFBeUI7UUFDbkMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN0QyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyw0QkFBNEI7WUFDN0MsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFDbEUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFhLEVBQUUsUUFBZ0IsRUFBRSxRQUF3QztRQUMzRixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN2QixPQUFPLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7U0FDM0Q7UUFFRCxNQUFNLEtBQUssR0FBaUI7WUFDMUIsUUFBUSxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNoQixRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztTQUMvQyxDQUFDO1FBRUYsSUFBSTtZQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0QsSUFBSSxhQUFhLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDMUI7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNaO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDZjtJQUNILENBQUM7SUFFTSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQXdDO1FBQzFELElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixNQUFNLEtBQUssR0FBaUI7Z0JBQzFCLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Z0JBQzFCLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7YUFDNUMsQ0FBQztZQUVGLElBQUk7Z0JBQ0YsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLFVBQVUsRUFBRTtvQkFDZCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUN2QjthQUNGO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2Y7U0FDRjthQUFNO1lBQ0wsZUFBZTtTQUNoQjtRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsUUFBUSxFQUFFLENBQUM7SUFDYixDQUFDO0NBQ0YifQ==
|
|
@@ -10,4 +10,4 @@ export function createTransformFunction(asyncFunction, options) {
|
|
|
10
10
|
});
|
|
11
11
|
return smartDuplexStream;
|
|
12
12
|
}
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0uZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzdHJlYW0uZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlELE1BQU0sUUFBUSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU1uRSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLGFBQXNELEVBQ3RELE9BQTBCO0lBRTFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDeEMsR0FBRyxPQUFPO1FBQ1YsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUMsQ0FBQztJQUVILE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyJ9
|
package/package.json
CHANGED
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -14,7 +14,7 @@ export interface IStreamFinalFunction<rT> {
|
|
|
14
14
|
(toolsArg: IStreamTools): Promise<rT>;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
export interface
|
|
17
|
+
export interface ISmartDuplexOptions<TInput, TOutput> extends DuplexOptions {
|
|
18
18
|
handleBackpressure?: boolean;
|
|
19
19
|
readFunction?: () => Promise<void>;
|
|
20
20
|
writeFunction?: IStreamWriteFunction<TInput, TOutput>;
|
|
@@ -24,23 +24,23 @@ export interface SmartStreamOptions<TInput, TOutput> extends DuplexOptions {
|
|
|
24
24
|
|
|
25
25
|
export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
26
26
|
// STATIC
|
|
27
|
-
static fromBuffer(buffer: Buffer, options?:
|
|
28
|
-
const
|
|
27
|
+
static fromBuffer(buffer: Buffer, options?: ISmartDuplexOptions<any, any>): SmartDuplex {
|
|
28
|
+
const smartDuplex = new SmartDuplex(options);
|
|
29
29
|
process.nextTick(() => {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
smartDuplex.push(buffer);
|
|
31
|
+
smartDuplex.push(null); // Signal the end of the data
|
|
32
32
|
});
|
|
33
|
-
return
|
|
33
|
+
return smartDuplex;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
static fromObservable(
|
|
37
37
|
observable: plugins.smartrx.rxjs.Observable<any>,
|
|
38
|
-
options?:
|
|
38
|
+
options?: ISmartDuplexOptions<any, any>
|
|
39
39
|
): SmartDuplex {
|
|
40
40
|
const smartStream = new SmartDuplex(options);
|
|
41
41
|
smartStream.observableSubscription = observable.subscribe({
|
|
42
42
|
next: (data) => {
|
|
43
|
-
if (!smartStream.push(data)) {
|
|
43
|
+
if (!smartStream.push(data) && smartStream.handleBackpressure) {
|
|
44
44
|
// Pause the observable if the stream buffer is full
|
|
45
45
|
smartStream.observableSubscription?.unsubscribe();
|
|
46
46
|
smartStream.once('drain', () => {
|
|
@@ -115,7 +115,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
115
115
|
private finalFunction?: IStreamFinalFunction<TOutput>;
|
|
116
116
|
private observableSubscription?: plugins.smartrx.rxjs.Subscription;
|
|
117
117
|
|
|
118
|
-
constructor(optionsArg?:
|
|
118
|
+
constructor(optionsArg?: ISmartDuplexOptions<TInput, TOutput>) {
|
|
119
119
|
super(optionsArg);
|
|
120
120
|
this.readFunction = optionsArg?.readFunction;
|
|
121
121
|
this.writeFunction = optionsArg?.writeFunction;
|
|
@@ -129,6 +129,18 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
public push(chunkArg?: TOutput | null): boolean {
|
|
133
|
+
const result = super.push(chunkArg);
|
|
134
|
+
if (!result && this.handleBackpressure) {
|
|
135
|
+
this.pause();
|
|
136
|
+
// Listen for 'drain' event to resume
|
|
137
|
+
this.once('drain', () => {
|
|
138
|
+
this.resume(); // Resume the source of data
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
}
|
|
143
|
+
|
|
132
144
|
// Ensure the _write method types the chunk as TInput and encodes TOutput
|
|
133
145
|
public async _write(chunk: TInput, encoding: string, callback: (error?: Error | null) => void) {
|
|
134
146
|
if (!this.writeFunction) {
|
|
@@ -146,13 +158,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
146
158
|
try {
|
|
147
159
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
148
160
|
if (modifiedChunk) {
|
|
149
|
-
|
|
150
|
-
this.pause();
|
|
151
|
-
// Listen for 'drain' event to resume
|
|
152
|
-
this.once('drain', () => {
|
|
153
|
-
this.resume(); // Resume the source of data
|
|
154
|
-
});
|
|
155
|
-
}
|
|
161
|
+
this.push(modifiedChunk);
|
|
156
162
|
}
|
|
157
163
|
callback();
|
|
158
164
|
} catch (err) {
|