@cloudpss/ubjson
Version:
Opinionated UBJSON encoder/decoder for CloudPSS.
30 lines (28 loc) • 1.06 kB
text/typescript
import { Observable, type OperatorFunction } from 'rxjs';
import { StreamEncoderHelper } from '../stream-helper/encoder.js';
import type { EncodeOptions } from '../options.js';
/** 流式编码 UBJSON */
export function encode(options?: EncodeOptions): OperatorFunction<unknown, Uint8Array> {
return (observable) => {
return new Observable<Uint8Array>((subscriber) => {
const helper = new StreamEncoderHelper(options, (chunk: Uint8Array): void => subscriber.next(chunk));
const sub = observable.subscribe({
next(value) {
try {
helper.encode(value);
} catch (ex) {
subscriber.error(ex as Error);
}
},
error(err) {
subscriber.error(err);
},
complete() {
subscriber.complete();
},
});
sub.add(() => helper.destroy());
return sub;
});
};
}