@push.rocks/smartstream 3.0.18 → 3.0.19
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 -4
- package/dist_ts/smartstream.classes.smartduplex.js +23 -27
- package/dist_ts/smartstream.plugins.d.ts +2 -1
- package/dist_ts/smartstream.plugins.js +3 -2
- package/package.json +3 -1
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/smartstream.classes.smartduplex.ts +23 -26
- package/ts/smartstream.plugins.ts +2 -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.19',
|
|
7
7
|
description: 'simplifies access to node streams'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx5QkFBeUI7SUFDL0IsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLG1DQUFtQztDQUNqRCxDQUFBIn0=
|
|
@@ -29,9 +29,7 @@ export declare class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
29
29
|
private observableSubscription?;
|
|
30
30
|
constructor(optionsArg?: ISmartDuplexOptions<TInput, TOutput>);
|
|
31
31
|
_read(size: number): Promise<void>;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
push(chunkArg?: TOutput | null): boolean;
|
|
35
|
-
_write(chunk: TInput, encoding: string, callback: (error?: Error | null) => void): Promise<boolean | void>;
|
|
32
|
+
private asyncWritePromiseObjectmap;
|
|
33
|
+
_write(chunk: TInput, encoding: string, callback: (error?: Error | null) => void): Promise<void>;
|
|
36
34
|
_final(callback: (error?: Error | null) => void): Promise<void>;
|
|
37
35
|
}
|
|
@@ -75,7 +75,7 @@ export class SmartDuplex extends Duplex {
|
|
|
75
75
|
}
|
|
76
76
|
constructor(optionsArg) {
|
|
77
77
|
super(optionsArg);
|
|
78
|
-
this.
|
|
78
|
+
this.asyncWritePromiseObjectmap = new plugins.lik.ObjectMap();
|
|
79
79
|
this.readFunction = optionsArg?.readFunction;
|
|
80
80
|
this.writeFunction = optionsArg?.writeFunction;
|
|
81
81
|
this.finalFunction = optionsArg?.finalFunction;
|
|
@@ -86,22 +86,6 @@ export class SmartDuplex extends Duplex {
|
|
|
86
86
|
await this.readFunction();
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
|
-
get backpressured() {
|
|
90
|
-
return !this.notBackpressured;
|
|
91
|
-
}
|
|
92
|
-
push(chunkArg) {
|
|
93
|
-
const result = super.push(chunkArg);
|
|
94
|
-
if (!result && this.handleBackpressure) {
|
|
95
|
-
this.notBackpressured = false;
|
|
96
|
-
this.pause();
|
|
97
|
-
// Listen for 'drain' event to resume
|
|
98
|
-
this.once('drain', () => {
|
|
99
|
-
this.notBackpressured = true;
|
|
100
|
-
this.resume(); // Resume the source of data
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
89
|
// Ensure the _write method types the chunk as TInput and encodes TOutput
|
|
106
90
|
async _write(chunk, encoding, callback) {
|
|
107
91
|
if (!this.writeFunction) {
|
|
@@ -115,28 +99,41 @@ export class SmartDuplex extends Duplex {
|
|
|
115
99
|
push: (pushArg) => this.push(pushArg),
|
|
116
100
|
};
|
|
117
101
|
try {
|
|
102
|
+
const writeDeferred = plugins.smartpromise.defer();
|
|
103
|
+
this.asyncWritePromiseObjectmap.add(writeDeferred.promise);
|
|
118
104
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
119
105
|
if (modifiedChunk) {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
106
|
+
const drainDeferred = plugins.smartpromise.defer();
|
|
107
|
+
this.once('drain', () => {
|
|
108
|
+
drainDeferred.resolve();
|
|
109
|
+
});
|
|
110
|
+
const canPushMore = this.push(modifiedChunk);
|
|
111
|
+
if (!canPushMore) {
|
|
112
|
+
await drainDeferred.promise;
|
|
113
|
+
console.log('jojojo');
|
|
114
|
+
callback();
|
|
115
|
+
writeDeferred.resolve();
|
|
125
116
|
}
|
|
126
117
|
else {
|
|
127
118
|
callback();
|
|
119
|
+
writeDeferred.resolve();
|
|
128
120
|
}
|
|
129
121
|
}
|
|
130
122
|
else {
|
|
131
123
|
callback();
|
|
124
|
+
writeDeferred.resolve();
|
|
132
125
|
}
|
|
126
|
+
writeDeferred.resolve();
|
|
127
|
+
writeDeferred.promise.then(() => {
|
|
128
|
+
this.asyncWritePromiseObjectmap.remove(writeDeferred.promise);
|
|
129
|
+
});
|
|
133
130
|
}
|
|
134
131
|
catch (err) {
|
|
135
132
|
callback(err);
|
|
136
133
|
}
|
|
137
|
-
return this.notBackpressured;
|
|
138
134
|
}
|
|
139
135
|
async _final(callback) {
|
|
136
|
+
await Promise.all(this.asyncWritePromiseObjectmap.getArray());
|
|
140
137
|
if (this.finalFunction) {
|
|
141
138
|
const tools = {
|
|
142
139
|
truncate: () => callback(),
|
|
@@ -149,14 +146,13 @@ export class SmartDuplex extends Duplex {
|
|
|
149
146
|
}
|
|
150
147
|
}
|
|
151
148
|
catch (err) {
|
|
149
|
+
this.push(null);
|
|
152
150
|
callback(err);
|
|
151
|
+
return;
|
|
153
152
|
}
|
|
154
153
|
}
|
|
155
|
-
else {
|
|
156
|
-
// nothing here
|
|
157
|
-
}
|
|
158
154
|
this.push(null);
|
|
159
155
|
callback();
|
|
160
156
|
}
|
|
161
157
|
}
|
|
162
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0uY2xhc3Nlcy5zbWFydGR1cGxleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RyZWFtLmNsYXNzZXMuc21hcnRkdXBsZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsTUFBTSxFQUFzQixNQUFNLFFBQVEsQ0FBQztBQXVCcEQsTUFBTSxPQUFPLFdBQXlDLFNBQVEsTUFBTTtJQUNsRSxTQUFTO0lBQ1QsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFjLEVBQUUsT0FBdUM7UUFDdkUsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN6QixXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQ25CLFVBQWdELEVBQ2hELE9BQXVDO1FBRXZDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLFdBQVcsQ0FBQyxzQkFBc0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDO1lBQ3hELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRTtvQkFDN0Qsb0RBQW9EO29CQUNwRCxXQUFXLENBQUMsc0JBQXNCLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ2xELFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcs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
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as stream from 'stream';
|
|
2
2
|
export { stream };
|
|
3
|
+
import * as lik from '@push.rocks/lik';
|
|
3
4
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
4
5
|
import * as smartrx from '@push.rocks/smartrx';
|
|
5
|
-
export { smartpromise, smartrx };
|
|
6
|
+
export { lik, smartpromise, smartrx };
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import * as stream from 'stream';
|
|
3
3
|
export { stream };
|
|
4
4
|
// pushrocks scope
|
|
5
|
+
import * as lik from '@push.rocks/lik';
|
|
5
6
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
6
7
|
import * as smartrx from '@push.rocks/smartrx';
|
|
7
|
-
export { smartpromise, smartrx };
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
export { lik, smartpromise, smartrx };
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0ucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RyZWFtLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYztBQUNkLE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRWpDLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztBQUVsQixrQkFBa0I7QUFDbEIsT0FBTyxLQUFLLEdBQUcsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEtBQUssWUFBWSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sS0FBSyxPQUFPLE1BQU0scUJBQXFCLENBQUM7QUFFL0MsT0FBTyxFQUFFLEdBQUcsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@push.rocks/smartstream",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.19",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "simplifies access to node streams",
|
|
6
6
|
"main": "dist_ts/index.js",
|
|
@@ -25,11 +25,13 @@
|
|
|
25
25
|
"@git.zone/tsbuild": "^2.1.66",
|
|
26
26
|
"@git.zone/tsrun": "^1.2.44",
|
|
27
27
|
"@git.zone/tstest": "^1.0.84",
|
|
28
|
+
"@push.rocks/smartdelay": "^3.0.5",
|
|
28
29
|
"@push.rocks/smartfile": "^11.0.0",
|
|
29
30
|
"@push.rocks/tapbundle": "^5.0.15",
|
|
30
31
|
"@types/node": "^20.9.0"
|
|
31
32
|
},
|
|
32
33
|
"dependencies": {
|
|
34
|
+
"@push.rocks/lik": "^6.0.6",
|
|
33
35
|
"@push.rocks/smartpromise": "^4.0.3",
|
|
34
36
|
"@push.rocks/smartrx": "^3.0.7"
|
|
35
37
|
},
|
package/ts/00_commitinfo_data.ts
CHANGED
|
@@ -129,23 +129,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
133
|
-
public get backpressured(): boolean {
|
|
134
|
-
return !this.notBackpressured;
|
|
135
|
-
}
|
|
136
|
-
public push(chunkArg?: TOutput | null): boolean {
|
|
137
|
-
const result = super.push(chunkArg);
|
|
138
|
-
if (!result && this.handleBackpressure) {
|
|
139
|
-
this.notBackpressured = false;
|
|
140
|
-
this.pause();
|
|
141
|
-
// Listen for 'drain' event to resume
|
|
142
|
-
this.once('drain', () => {
|
|
143
|
-
this.notBackpressured = true;
|
|
144
|
-
this.resume(); // Resume the source of data
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
return result;
|
|
148
|
-
}
|
|
132
|
+
private asyncWritePromiseObjectmap = new plugins.lik.ObjectMap<Promise<any>>();
|
|
149
133
|
|
|
150
134
|
// Ensure the _write method types the chunk as TInput and encodes TOutput
|
|
151
135
|
public async _write(chunk: TInput, encoding: string, callback: (error?: Error | null) => void) {
|
|
@@ -162,26 +146,39 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
162
146
|
};
|
|
163
147
|
|
|
164
148
|
try {
|
|
149
|
+
const writeDeferred = plugins.smartpromise.defer();
|
|
150
|
+
this.asyncWritePromiseObjectmap.add(writeDeferred.promise);
|
|
165
151
|
const modifiedChunk = await this.writeFunction(chunk, tools);
|
|
166
152
|
if (modifiedChunk) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
153
|
+
const drainDeferred = plugins.smartpromise.defer();
|
|
154
|
+
this.once('drain', () => {
|
|
155
|
+
drainDeferred.resolve();
|
|
156
|
+
});
|
|
157
|
+
const canPushMore = this.push(modifiedChunk);
|
|
158
|
+
if (!canPushMore) {
|
|
159
|
+
await drainDeferred.promise;
|
|
160
|
+
console.log('jojojo');
|
|
161
|
+
callback();
|
|
162
|
+
writeDeferred.resolve();
|
|
172
163
|
} else {
|
|
173
164
|
callback();
|
|
174
|
-
|
|
165
|
+
writeDeferred.resolve();
|
|
166
|
+
}
|
|
175
167
|
} else {
|
|
176
168
|
callback();
|
|
169
|
+
writeDeferred.resolve();
|
|
177
170
|
}
|
|
171
|
+
writeDeferred.resolve();
|
|
172
|
+
writeDeferred.promise.then(() => {
|
|
173
|
+
this.asyncWritePromiseObjectmap.remove(writeDeferred.promise);
|
|
174
|
+
});
|
|
178
175
|
} catch (err) {
|
|
179
176
|
callback(err);
|
|
180
177
|
}
|
|
181
|
-
return this.notBackpressured;
|
|
182
178
|
}
|
|
183
179
|
|
|
184
180
|
public async _final(callback: (error?: Error | null) => void) {
|
|
181
|
+
await Promise.all(this.asyncWritePromiseObjectmap.getArray());
|
|
185
182
|
if (this.finalFunction) {
|
|
186
183
|
const tools: IStreamTools = {
|
|
187
184
|
truncate: () => callback(),
|
|
@@ -194,10 +191,10 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
|
|
|
194
191
|
this.push(finalChunk);
|
|
195
192
|
}
|
|
196
193
|
} catch (err) {
|
|
194
|
+
this.push(null);
|
|
197
195
|
callback(err);
|
|
196
|
+
return;
|
|
198
197
|
}
|
|
199
|
-
} else {
|
|
200
|
-
// nothing here
|
|
201
198
|
}
|
|
202
199
|
this.push(null);
|
|
203
200
|
callback();
|
|
@@ -4,8 +4,9 @@ import * as stream from 'stream';
|
|
|
4
4
|
export { stream };
|
|
5
5
|
|
|
6
6
|
// pushrocks scope
|
|
7
|
+
import * as lik from '@push.rocks/lik';
|
|
7
8
|
import * as smartpromise from '@push.rocks/smartpromise';
|
|
8
9
|
import * as smartrx from '@push.rocks/smartrx';
|
|
9
10
|
|
|
10
|
-
export { smartpromise, smartrx };
|
|
11
|
+
export { lik, smartpromise, smartrx };
|
|
11
12
|
|