Compare commits

...

10 Commits

Author SHA1 Message Date
d9d96b8bb7 3.0.34 2024-03-16 18:29:45 +01:00
a961eea431 fix(core): update 2024-03-16 18:29:44 +01:00
edb58ade28 3.0.33 2024-02-29 12:15:01 +01:00
753a481765 fix(core): update 2024-02-29 12:15:00 +01:00
bbbd1b73b9 3.0.32 2024-02-25 20:14:33 +01:00
271d0be106 fix(core): update 2024-02-25 20:14:33 +01:00
0ceeacd5a0 3.0.31 2024-02-25 20:14:20 +01:00
287695e445 fix(core): update 2024-02-25 20:14:19 +01:00
60f9e541a5 3.0.30 2023-11-14 10:51:23 +01:00
96ea67e135 fix(core): update 2023-11-14 10:51:23 +01:00
7 changed files with 708 additions and 1496 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@push.rocks/smartstream",
"version": "3.0.29",
"version": "3.0.34",
"private": false,
"description": "simplifies access to node streams",
"main": "dist_ts/index.js",
@ -22,15 +22,15 @@
},
"homepage": "https://gitlab.com/push.rocks/smartstream#readme",
"devDependencies": {
"@git.zone/tsbuild": "^2.1.66",
"@git.zone/tsbuild": "^2.1.72",
"@git.zone/tsrun": "^1.2.44",
"@git.zone/tstest": "^1.0.84",
"@push.rocks/smartfile": "^11.0.0",
"@push.rocks/tapbundle": "^5.0.15",
"@types/node": "^20.9.0"
"@git.zone/tstest": "^1.0.88",
"@push.rocks/smartfile": "^11.0.4",
"@push.rocks/tapbundle": "^5.0.17",
"@types/node": "^20.11.28"
},
"dependencies": {
"@push.rocks/lik": "^6.0.12",
"@push.rocks/lik": "^6.0.14",
"@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartrx": "^3.0.7"
},

2148
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -44,7 +44,4 @@ hi+wow
hi+wow
hi+wow
hi+wow
hi+wow
hi+wow
hi+wow
hi+wow
hi

View File

@ -20,7 +20,7 @@ tap.test('should run backpressure test', async (toolsArg) => {
await new Promise((resolve) => setTimeout(resolve, 20)); // Slow processing
console.log(`processed chunk ${chunk} in stream 2`);
await tools.push(chunk);
// return chunk;
// return chunk, optionally return ;
},
}); // This stream processes data more slowly
const stream3 = new SmartDuplex({

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@push.rocks/smartstream',
version: '3.0.29',
version: '3.0.34',
description: 'simplifies access to node streams'
}

View File

@ -3,7 +3,7 @@ import { Duplex, type DuplexOptions } from 'stream';
export interface IStreamTools {
truncate: () => void;
push: (pipeObject: any) => Promise<void>;
push: (pipeObject: any) => Promise<boolean>;
}
export interface IStreamWriteFunction<T, rT> {
@ -15,12 +15,30 @@ export interface IStreamFinalFunction<rT> {
}
export interface ISmartDuplexOptions<TInput, TOutput> extends DuplexOptions {
/**
* wether to print debug logs
*/
debug?: boolean;
/**
* the name of the stream
*/
name?: string;
/**
* a function that is being called to read more stuff from whereever to be processed by the stream
* @returns
*/
readFunction?: () => Promise<void>;
/**
* the write function is called for every chunk that is being written to the stream
* it can push or return chunks (but does not have to) to be written to the readable side of the stream
*/
writeFunction?: IStreamWriteFunction<TInput, TOutput>;
/**
* a final function that is run at the end of the stream
*/
finalFunction?: IStreamFinalFunction<TOutput>;
// Add other custom options if necessary
}
export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
@ -46,10 +64,10 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
constructor(optionsArg?: ISmartDuplexOptions<TInput, TOutput>) {
super(Object.assign({
highWaterMark: 4,
highWaterMark: 1,
}, optionsArg));
this.options = optionsArg;
this.backpressuredArray = new plugins.lik.BackpressuredArray<TOutput>(this.options.highWaterMark || 4)
this.backpressuredArray = new plugins.lik.BackpressuredArray<TOutput>(this.options.highWaterMark || 1)
}
public async _read(size: number): Promise<void> {
@ -73,6 +91,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
await this.backpressuredArray.waitForSpace();
this.debugLog(`${this.options.name}: can push more again`);
}
return canPushMore;
};
private asyncWritePromiseObjectmap = new plugins.lik.ObjectMap<Promise<any>>();
@ -90,7 +109,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
callback();
},
push: async (pushArg: TOutput) => {
await this.backpressuredPush(pushArg);
return await this.backpressuredPush(pushArg);
}
};
@ -120,7 +139,7 @@ export class SmartDuplex<TInput = any, TOutput = any> extends Duplex {
const tools: IStreamTools = {
truncate: () => callback(),
push: async (pipeObject) => {
this.backpressuredArray.push(pipeObject);
return this.backpressuredArray.push(pipeObject);
},
};

View File

@ -27,4 +27,4 @@ export const createPassThrough = () => {
return chunkArg;
}
})
}
}