fix(core): update
This commit is contained in:
parent
851a96c014
commit
16c5c89662
@ -123,7 +123,7 @@ pages:
|
|||||||
stage: metadata
|
stage: metadata
|
||||||
script:
|
script:
|
||||||
- npmci node install lts
|
- npmci node install lts
|
||||||
- npmci command npm install -g @gitzone/tsdoc
|
- npmci command npm install -g @git.zone/tsdoc
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command tsdoc
|
- npmci command tsdoc
|
||||||
|
16
package.json
16
package.json
@ -21,17 +21,17 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://gitlab.com/pushrocks/smartstream#README",
|
"homepage": "https://gitlab.com/pushrocks/smartstream#README",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.66",
|
"@git.zone/tsbuild": "^2.1.66",
|
||||||
"@gitzone/tsrun": "^1.2.42",
|
"@git.zone/tsrun": "^1.2.44",
|
||||||
"@gitzone/tstest": "^1.0.74",
|
"@git.zone/tstest": "^1.0.77",
|
||||||
"@push.rocks/smartfile": "^10.0.28",
|
"@push.rocks/smartfile": "^10.0.33",
|
||||||
"@push.rocks/tapbundle": "^5.0.3"
|
"@push.rocks/tapbundle": "^5.0.15"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@push.rocks/smartpromise": "^4.0.3",
|
"@push.rocks/smartpromise": "^4.0.3",
|
||||||
"@push.rocks/smartrx": "^3.0.3",
|
"@push.rocks/smartrx": "^3.0.7",
|
||||||
"@types/from2": "^2.3.2",
|
"@types/from2": "^2.3.4",
|
||||||
"@types/through2": "^2.0.38",
|
"@types/through2": "^2.0.40",
|
||||||
"from2": "^2.3.0",
|
"from2": "^2.3.0",
|
||||||
"through2": "^4.0.2"
|
"through2": "^4.0.2"
|
||||||
},
|
},
|
||||||
|
3009
pnpm-lock.yaml
generated
3009
pnpm-lock.yaml
generated
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 = {
|
export const commitinfo = {
|
||||||
name: '@push.rocks/smartstream',
|
name: '@push.rocks/smartstream',
|
||||||
version: '2.0.4',
|
version: '2.0.5',
|
||||||
description: 'simplifies access to node streams'
|
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.streamwrapper.js';
|
||||||
export * from './smartstream.classes.streamintake.js';
|
export * from './smartstream.classes.streamintake.js';
|
||||||
export * from './smartstream.duplex.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,
|
"experimentalDecorators": true,
|
||||||
"useDefineForClassFields": false,
|
"useDefineForClassFields": false,
|
||||||
"target": "ES2022",
|
"target": "ES2022",
|
||||||
"module": "ES2022",
|
"module": "NodeNext",
|
||||||
"moduleResolution": "nodenext"
|
"moduleResolution": "NodeNext",
|
||||||
}
|
"esModuleInterop": true,
|
||||||
|
"verbatimModuleSyntax": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist_*/**/*.d.ts"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user