json-processing
Version:
JSON Processing Tool
19 lines (18 loc) • 704 B
text/typescript
import _ from "lodash";
import { MonoTypeOperatorFunction, Observable, Observer, pipe } from "rxjs";
import { reduce, mergeMap } from "rxjs/operators";
import TinyQueue, { Comparator } from "tinyqueue";
export default function sort(comparator: Comparator<any>): MonoTypeOperatorFunction<any> {
return pipe(
reduce((queue: any, value: any) => {
queue.push(value);
return queue;
}, new TinyQueue([], comparator)),
mergeMap((queue: any) => new Observable((observer: Observer<any>) => {
for (let i = queue.length - 1; i >= 0; i--) {
observer.next(queue.pop());
}
observer.complete();
}))
)
}