fix(core): update
This commit is contained in:
parent
851a96c014
commit
16c5c89662
@ -123,7 +123,7 @@ pages:
|
||||
stage: metadata
|
||||
script:
|
||||
- npmci node install lts
|
||||
- npmci command npm install -g @gitzone/tsdoc
|
||||
- npmci command npm install -g @git.zone/tsdoc
|
||||
- npmci npm prepare
|
||||
- npmci npm install
|
||||
- npmci command tsdoc
|
||||
|
16
package.json
16
package.json
@ -21,17 +21,17 @@
|
||||
},
|
||||
"homepage": "https://gitlab.com/pushrocks/smartstream#README",
|
||||
"devDependencies": {
|
||||
"@gitzone/tsbuild": "^2.1.66",
|
||||
"@gitzone/tsrun": "^1.2.42",
|
||||
"@gitzone/tstest": "^1.0.74",
|
||||
"@push.rocks/smartfile": "^10.0.28",
|
||||
"@push.rocks/tapbundle": "^5.0.3"
|
||||
"@git.zone/tsbuild": "^2.1.66",
|
||||
"@git.zone/tsrun": "^1.2.44",
|
||||
"@git.zone/tstest": "^1.0.77",
|
||||
"@push.rocks/smartfile": "^10.0.33",
|
||||
"@push.rocks/tapbundle": "^5.0.15"
|
||||
},
|
||||
"dependencies": {
|
||||
"@push.rocks/smartpromise": "^4.0.3",
|
||||
"@push.rocks/smartrx": "^3.0.3",
|
||||
"@types/from2": "^2.3.2",
|
||||
"@types/through2": "^2.0.38",
|
||||
"@push.rocks/smartrx": "^3.0.7",
|
||||
"@types/from2": "^2.3.4",
|
||||
"@types/through2": "^2.0.40",
|
||||
"from2": "^2.3.0",
|
||||
"through2": "^4.0.2"
|
||||
},
|
||||
|
3009
pnpm-lock.yaml
3009
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
44
test/test.smartstream.ts
Normal file
44
test/test.smartstream.ts
Normal file
@ -0,0 +1,44 @@
|
||||
import { expect, tap } from '@push.rocks/tapbundle';
|
||||
import { SmartStream } from '../ts/smartstream.classes.smartstream.js'; // Adjust the import to your file structure
|
||||
import * as smartrx from '@push.rocks/smartrx';
|
||||
import * as fs from 'fs';
|
||||
|
||||
tap.test('should create a SmartStream from a Buffer', async () => {
|
||||
const bufferData = Buffer.from('This is a test buffer');
|
||||
const smartStream = SmartStream.fromBuffer(bufferData);
|
||||
|
||||
let receivedData = Buffer.alloc(0);
|
||||
|
||||
return new Promise<void>((resolve) => {
|
||||
smartStream.on('data', (chunk: Buffer) => {
|
||||
receivedData = Buffer.concat([receivedData, chunk]);
|
||||
});
|
||||
|
||||
smartStream.on('end', () => {
|
||||
expect(receivedData.toString()).toEqual(bufferData.toString());
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
tap.test('should create a SmartStream from an Observable', async () => {
|
||||
const observableData = 'Observable test data';
|
||||
const testObservable = smartrx.rxjs.of(Buffer.from(observableData));
|
||||
|
||||
const smartStream = SmartStream.fromObservable(testObservable);
|
||||
|
||||
let receivedData = Buffer.alloc(0);
|
||||
|
||||
return new Promise<void>((resolve) => {
|
||||
smartStream.on('data', (chunk: Buffer) => {
|
||||
receivedData = Buffer.concat([receivedData, chunk]);
|
||||
});
|
||||
|
||||
smartStream.on('end', () => {
|
||||
expect(receivedData.toString()).toEqual(observableData);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
tap.start();
|
@ -3,6 +3,6 @@
|
||||
*/
|
||||
export const commitinfo = {
|
||||
name: '@push.rocks/smartstream',
|
||||
version: '2.0.4',
|
||||
version: '2.0.5',
|
||||
description: 'simplifies access to node streams'
|
||||
}
|
||||
|
@ -1,3 +1,4 @@
|
||||
export * from './smartstream.classes.smartstream.js';
|
||||
export * from './smartstream.classes.streamwrapper.js';
|
||||
export * from './smartstream.classes.streamintake.js';
|
||||
export * from './smartstream.duplex.js';
|
55
ts/smartstream.classes.smartstream.ts
Normal file
55
ts/smartstream.classes.smartstream.ts
Normal file
@ -0,0 +1,55 @@
|
||||
import * as plugins from './smartstream.plugins.js';
|
||||
import { Duplex, type DuplexOptions } from 'stream';
|
||||
|
||||
export class SmartStream extends Duplex {
|
||||
private observableSubscription?: plugins.smartrx.rxjs.Subscription;
|
||||
|
||||
constructor(options?: DuplexOptions) {
|
||||
super(options);
|
||||
}
|
||||
|
||||
_read(size: number) {
|
||||
// Implement if you need custom behavior, otherwise leave it empty
|
||||
}
|
||||
|
||||
_write(chunk: any, encoding: string, callback: (error?: Error | null) => void) {
|
||||
// Implement if you need custom behavior
|
||||
callback();
|
||||
}
|
||||
|
||||
static fromBuffer(buffer: Buffer, options?: DuplexOptions): SmartStream {
|
||||
const smartStream = new SmartStream(options);
|
||||
process.nextTick(() => {
|
||||
smartStream.push(buffer);
|
||||
smartStream.push(null); // Signal the end of the data
|
||||
});
|
||||
return smartStream;
|
||||
}
|
||||
|
||||
static fromObservable(observable: plugins.smartrx.rxjs.Observable<any>, options?: DuplexOptions): SmartStream {
|
||||
const smartStream = new SmartStream(options);
|
||||
smartStream.observableSubscription = observable.subscribe({
|
||||
next: (data) => {
|
||||
if (!smartStream.push(data)) {
|
||||
// Pause the observable if the stream buffer is full
|
||||
smartStream.observableSubscription?.unsubscribe();
|
||||
smartStream.once('drain', () => {
|
||||
// Resume the observable when the stream buffer is drained
|
||||
smartStream.observableSubscription?.unsubscribe();
|
||||
smartStream.observableSubscription = observable.subscribe(data => {
|
||||
smartStream.push(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
},
|
||||
error: (err) => {
|
||||
smartStream.emit('error', err);
|
||||
},
|
||||
complete: () => {
|
||||
smartStream.push(null); // Signal the end of the data
|
||||
}
|
||||
});
|
||||
|
||||
return smartStream;
|
||||
}
|
||||
}
|
@ -3,7 +3,12 @@
|
||||
"experimentalDecorators": true,
|
||||
"useDefineForClassFields": false,
|
||||
"target": "ES2022",
|
||||
"module": "ES2022",
|
||||
"moduleResolution": "nodenext"
|
||||
}
|
||||
"module": "NodeNext",
|
||||
"moduleResolution": "NodeNext",
|
||||
"esModuleInterop": true,
|
||||
"verbatimModuleSyntax": true
|
||||
},
|
||||
"exclude": [
|
||||
"dist_*/**/*.d.ts"
|
||||
]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user