@push.rocks/smartstream 3.0.13 → 3.0.15
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 +2 -0
- package/dist_ts/smartstream.classes.smartduplex.js +8 -3
- package/dist_ts/smartstream.functions.d.ts +3 -2
- package/dist_ts/smartstream.functions.js +7 -13
- package/package.json +4 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/smartstream.classes.smartduplex.ts +9 -2
- package/ts/smartstream.functions.ts +8 -13
|
@@ -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.15',
|
|
7
7
|
description: 'simplifies access to node streams'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLG1DQUFtQztDQUNqRCxDQUFBIn0=
|
|
@@ -13,6 +13,7 @@ export interface IStreamFinalFunction<rT> {
|
|
|
13
13
|
(toolsArg: IStreamTools): Promise<rT>;
|
|
14
14
|
}
|
|
15
15
|
export interface SmartStreamOptions<TInput, TOutput> extends DuplexOptions {
|
|
16
|
+
handleBackpressure?: boolean;
|
|
16
17
|
readFunction?: () => Promise<void>;
|
|
17
18
|
writeFunction?: IStreamWriteFunction<TInput, TOutput>;
|
|
18
19
|
finalFunction?: IStreamFinalFunction<TOutput>;
|
|
@@ -22,6 +23,7 @@ export declare class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
22
23
|
static fromObservable(observable: plugins.smartrx.rxjs.Observable<any>, options?: DuplexOptions): SmartDuplex;
|
|
23
24
|
static fromReplaySubject(replaySubject: plugins.smartrx.rxjs.ReplaySubject<any>, options?: DuplexOptions): SmartDuplex;
|
|
24
25
|
private readFunction?;
|
|
26
|
+
private handleBackpressure;
|
|
25
27
|
private writeFunction?;
|
|
26
28
|
private finalFunction?;
|
|
27
29
|
private observableSubscription?;
|
|
@@ -78,6 +78,7 @@ export class SmartDuplex extends Duplex {
|
|
|
78
78
|
this.readFunction = optionsArg?.readFunction;
|
|
79
79
|
this.writeFunction = optionsArg?.writeFunction;
|
|
80
80
|
this.finalFunction = optionsArg?.finalFunction;
|
|
81
|
+
this.handleBackpressure = optionsArg?.handleBackpressure ?? true;
|
|
81
82
|
}
|
|
82
83
|
async _read(size) {
|
|
83
84
|
if (this.readFunction) {
|
|
@@ -99,8 +100,12 @@ export class SmartDuplex extends Duplex {
|
|
|
99
100
|
try {
|
|
100
101
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
101
102
|
if (modifiedChunk) {
|
|
102
|
-
if (!this.push(modifiedChunk)) {
|
|
103
|
-
|
|
103
|
+
if (!this.push(modifiedChunk) && this.handleBackpressure) {
|
|
104
|
+
this.pause();
|
|
105
|
+
// Listen for 'drain' event to resume
|
|
106
|
+
this.once('drain', () => {
|
|
107
|
+
this.resume(); // Resume the source of data
|
|
108
|
+
});
|
|
104
109
|
}
|
|
105
110
|
}
|
|
106
111
|
callback();
|
|
@@ -132,4 +137,4 @@ export class SmartDuplex extends Duplex {
|
|
|
132
137
|
callback();
|
|
133
138
|
}
|
|
134
139
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0uY2xhc3Nlcy5zbWFydGR1cGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RyZWFtLmNsYXNzZXMuc21hcnRkdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFzQixNQUFNLFFBQVEsQ0FBQztBQXVCcEQsTUFBTSxPQUFPLFdBQXlDLFNBQVEsTUFBTTtJQUNsRSxTQUFTO0lBQ1QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBdUI7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQ25CLFVBQWdELEVBQ2hELE9BQXVCO1FBRXZCLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3hELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO29CQUMzQixvREFBb0Q7b0JBQ3BELFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDbEQsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO3dCQUM3QiwwREFBMEQ7d0JBQzFELFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsQ0FBQzt3QkFDbEQsV0FBVyxDQUFDLHNCQUFzQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTs0QkFDakUsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDekIsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2IsV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakMsQ0FBQztZQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDZCQUE2QjtZQUN2RCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxpQkFBaUIsQ0FDdEIsYUFBc0QsRUFDdEQsT0FBdUI7UUFFdkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBRTVCLGlDQUFpQztRQUNqQyxNQUFNLFlBQVksR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQzNDLElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ1osd0VBQXdFO29CQUN4RSxlQUFlLEdBQUcsSUFBSSxDQUFDO29CQUN2QixZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7aUJBQzVCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pDLENBQUM7WUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrREFBa0Q7WUFDNUUsQ0FBQztTQUNGLENBQUMsQ0FBQztRQUVILHVFQUF1RTtRQUN2RSxXQUFXLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDM0IsSUFBSSxlQUFlLEVBQUU7Z0JBQ25CLGVBQWUsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLDhEQUE4RDtnQkFDOUQsV0FBVyxDQUFDLHNCQUFzQixHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUM7b0JBQzNELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUMzQixXQUFXLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7NEJBQ2xELGVBQWUsR0FBRyxJQUFJLENBQUM7eUJBQ3hCO29CQUNILENBQUM7b0JBQ0QsdUZBQXVGO2lCQUN4RixDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQVNELFlBQVksVUFBZ0Q7UUFDMUQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xCLElBQUksQ0FBQyxZQUFZLEdBQUcsVUFBVSxFQUFFLFlBQVksQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLFVBQVUsRUFBRSxhQUFhLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLEVBQUUsYUFBYSxDQUFDO1FBQy9DLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxVQUFVLEVBQUUsa0JBQWtCLElBQUksSUFBSSxDQUFDO0lBQ25FLENBQUM7SUFFTSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQVk7UUFDN0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELHlFQUF5RTtJQUNsRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQWEsRUFBRSxRQUFnQixFQUFFLFFBQXdDO1FBQzNGLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU8sUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUVELE1BQU0sS0FBSyxHQUFpQjtZQUMxQixRQUFRLEVBQUUsR0FBRyxFQUFFO2dCQUNiLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLFFBQVEsRUFBRSxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksRUFBRSxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQy9DLENBQUM7UUFFRixJQUFJO1lBQ0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3RCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUN4RCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ2IscUNBQXFDO29CQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7d0JBQ3RCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLDRCQUE0QjtvQkFDN0MsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7YUFDRjtZQUNELFFBQVEsRUFBRSxDQUFDO1NBQ1o7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVNLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBd0M7UUFDMUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLE1BQU0sS0FBSyxHQUFpQjtnQkFDMUIsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRTtnQkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1lBRUYsSUFBSTtnQkFDRixNQUFNLFVBQVUsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ25ELElBQUksVUFBVSxFQUFFO29CQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ3ZCO2FBQ0Y7WUFBQyxPQUFPLEdBQUcsRUFBRTtnQkFDWixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDZjtTQUNGO2FBQU07WUFDTCxlQUFlO1NBQ2hCO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixRQUFRLEVBQUUsQ0FBQztJQUNiLENBQUM7Q0FDRiJ9
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import {
|
|
2
|
+
import { type TransformOptions } from 'stream';
|
|
3
|
+
import { SmartDuplex } from './smartstream.classes.smartduplex.js';
|
|
3
4
|
export interface AsyncTransformFunction<TInput, TOutput> {
|
|
4
5
|
(chunkArg: TInput): Promise<TOutput>;
|
|
5
6
|
}
|
|
6
|
-
export declare function createTransformFunction<TInput, TOutput>(asyncFunction: AsyncTransformFunction<TInput, TOutput>, options?: TransformOptions):
|
|
7
|
+
export declare function createTransformFunction<TInput, TOutput>(asyncFunction: AsyncTransformFunction<TInput, TOutput>, options?: TransformOptions): SmartDuplex;
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
import { Transform } from 'stream';
|
|
2
|
+
import { SmartDuplex } from './smartstream.classes.smartduplex.js';
|
|
2
3
|
export function createTransformFunction(asyncFunction, options) {
|
|
3
|
-
const
|
|
4
|
+
const smartDuplexStream = new SmartDuplex({
|
|
4
5
|
...options,
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const transformed = await asyncFunction(chunk);
|
|
9
|
-
this.push(transformed);
|
|
10
|
-
callback();
|
|
11
|
-
}
|
|
12
|
-
catch (error) {
|
|
13
|
-
callback(error instanceof Error ? error : new Error(String(error)));
|
|
14
|
-
}
|
|
6
|
+
writeFunction: async (chunkArg, toolsArg) => {
|
|
7
|
+
const result = await asyncFunction(chunkArg);
|
|
8
|
+
return result;
|
|
15
9
|
}
|
|
16
10
|
});
|
|
17
|
-
return
|
|
11
|
+
return smartDuplexStream;
|
|
18
12
|
}
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0uZnVuY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvc21hcnRzdHJlYW0uZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWlELE1BQU0sUUFBUSxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQU1uRSxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLGFBQXNELEVBQ3RELE9BQTBCO0lBRTFCLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxXQUFXLENBQUM7UUFDeEMsR0FBRyxPQUFPO1FBQ1YsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartstream",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.15",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "simplifies access to node streams",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@git.zone/tsbuild": "^2.1.66",
|
|
26
26
|
"@git.zone/tsrun": "^1.2.44",
|
|
27
|
-
"@git.zone/tstest": "^1.0.
|
|
28
|
-
"@push.rocks/smartfile": "^
|
|
27
|
+
"@git.zone/tstest": "^1.0.84",
|
|
28
|
+
"@push.rocks/smartfile": "^11.0.0",
|
|
29
29
|
"@push.rocks/tapbundle": "^5.0.15",
|
|
30
|
-
"@types/node": "^20.
|
|
30
|
+
"@types/node": "^20.9.0"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@push.rocks/smartpromise": "^4.0.3",
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -15,6 +15,7 @@ export interface IStreamFinalFunction<rT> {
|
|
|
15
15
|
}
|
|
16
16
|
|
|
17
17
|
export interface SmartStreamOptions<TInput, TOutput> extends DuplexOptions {
|
|
18
|
+
handleBackpressure?: boolean;
|
|
18
19
|
readFunction?: () => Promise<void>;
|
|
19
20
|
writeFunction?: IStreamWriteFunction<TInput, TOutput>;
|
|
20
21
|
finalFunction?: IStreamFinalFunction<TOutput>;
|
|
@@ -109,6 +110,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
109
110
|
|
|
110
111
|
// INSTANCE
|
|
111
112
|
private readFunction?: () => Promise<void>;
|
|
113
|
+
private handleBackpressure: boolean;
|
|
112
114
|
private writeFunction?: IStreamWriteFunction<TInput, TOutput>;
|
|
113
115
|
private finalFunction?: IStreamFinalFunction<TOutput>;
|
|
114
116
|
private observableSubscription?: plugins.smartrx.rxjs.Subscription;
|
|
@@ -118,6 +120,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
118
120
|
this.readFunction = optionsArg?.readFunction;
|
|
119
121
|
this.writeFunction = optionsArg?.writeFunction;
|
|
120
122
|
this.finalFunction = optionsArg?.finalFunction;
|
|
123
|
+
this.handleBackpressure = optionsArg?.handleBackpressure ?? true;
|
|
121
124
|
}
|
|
122
125
|
|
|
123
126
|
public async _read(size: number): Promise<void> {
|
|
@@ -143,8 +146,12 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
143
146
|
try {
|
|
144
147
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
145
148
|
if (modifiedChunk) {
|
|
146
|
-
if (!this.push(modifiedChunk)) {
|
|
147
|
-
|
|
149
|
+
if (!this.push(modifiedChunk) && this.handleBackpressure) {
|
|
150
|
+
this.pause();
|
|
151
|
+
// Listen for 'drain' event to resume
|
|
152
|
+
this.once('drain', () => {
|
|
153
|
+
this.resume(); // Resume the source of data
|
|
154
|
+
});
|
|
148
155
|
}
|
|
149
156
|
}
|
|
150
157
|
callback();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Transform, type TransformCallback, type TransformOptions } from 'stream';
|
|
2
|
+
import { SmartDuplex } from './smartstream.classes.smartduplex.js';
|
|
2
3
|
|
|
3
4
|
export interface AsyncTransformFunction<TInput, TOutput> {
|
|
4
5
|
(chunkArg: TInput): Promise<TOutput>;
|
|
@@ -7,20 +8,14 @@ export interface AsyncTransformFunction<TInput, TOutput> {
|
|
|
7
8
|
export function createTransformFunction<TInput, TOutput>(
|
|
8
9
|
asyncFunction: AsyncTransformFunction<TInput, TOutput>,
|
|
9
10
|
options?: TransformOptions
|
|
10
|
-
):
|
|
11
|
-
const
|
|
11
|
+
): SmartDuplex {
|
|
12
|
+
const smartDuplexStream = new SmartDuplex({
|
|
12
13
|
...options,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const transformed = await asyncFunction(chunk);
|
|
17
|
-
this.push(transformed);
|
|
18
|
-
callback();
|
|
19
|
-
} catch (error) {
|
|
20
|
-
callback(error instanceof Error ? error : new Error(String(error)));
|
|
21
|
-
}
|
|
14
|
+
writeFunction: async (chunkArg, toolsArg) => {
|
|
15
|
+
const result = await asyncFunction(chunkArg);
|
|
16
|
+
return result;
|
|
22
17
|
}
|
|
23
|
-
})
|
|
18
|
+
})
|
|
24
19
|
|
|
25
|
-
return
|
|
20
|
+
return smartDuplexStream;
|
|
26
21
|
}
|