quadstore
Version:
Quadstore is a LevelDB-backed RDF graph database / triplestore for JavaScript runtimes (browsers, Node.js, Deno, Bun, ...) that implements the RDF/JS interfaces and supports SPARQL queries and querying across named graphs.
47 lines • 1.57 kB
JavaScript
import SortedSet from 'js-sorted-set';
import { AsyncIterator } from 'asynciterator';
export class SortingIterator extends AsyncIterator {
constructor(source, compare, digest, emit) {
super();
let iterator;
const startBuffering = () => {
const set = new SortedSet({ comparator: compare });
const cleanup = () => {
source.removeListener('data', onData);
source.removeListener('error', onError);
source.removeListener('end', onEnd);
source.destroy();
};
const onData = (item) => {
set.insert(digest(item));
};
const onError = (err) => {
cleanup();
this.emit('error', err);
};
const onEnd = () => {
cleanup();
iterator = set.beginIterator();
this.readable = true;
};
source.on('data', onData);
source.on('error', onError);
source.on('end', onEnd);
};
this.read = () => {
if (iterator) {
const value = iterator.value();
if (value === null) {
this.close();
return null;
}
iterator = iterator.next();
return emit(value);
}
this.readable = false;
return null;
};
queueMicrotask(startBuffering);
}
}
//# sourceMappingURL=sortingiterator.js.map