node-ssestream icon indicating copy to clipboard operation
node-ssestream copied to clipboard

I don't know why it not work if I not call stream.write('') with unjs/h3 server

Open Maxttier opened this issue 1 year ago • 0 comments

Work without call of stream.write if run with bun dev not work if run with bun -b dev. To work need to add stream.write().

const sse = require('https://github.com/EventSource/node-ssestream/blob/master/index.ts');
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");



const stream = new sse.SseStream(request);
stream.pipe(response, options);

// stream.write('');

const subscription = result
    .pipe((0, operators_1.map)((message) => {
    if ((0, shared_utils_1.isObject)(message)) {
        return message;
    }
    return { data: message };
}), (0, operators_1.concatMap)(message => 
    new Promise(resolve => stream.writeMessage(
        message, 
        () => resolve()))), 
        (0, operators_1.catchError
    )(err => {
    const data = err instanceof Error ? err.message : err;
    stream.writeMessage({ type: 'error', data }, writeError => {
        if (writeError) {
            this.logger.error(writeError);
        }
    });
    return rxjs_1.EMPTY;
}))
    .subscribe({
    complete: () => {
        response.end();
    },
});

request.on('close', () => {
    subscription.unsubscribe();
    if (!stream.writableEnded) {
        stream.end();
    }
});

Maxttier avatar Dec 29 '24 20:12 Maxttier