UNPKG

@cloudpss/ubjson

Version:

Opinionated UBJSON encoder/decoder for CloudPSS.

30 lines (28 loc) 1.06 kB
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; }); }; }