rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
44 lines • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Fragmenter = void 0;
const QuadTransformStream_1 = require("./transform/QuadTransformStream");
/**
* Fragments quads from a given source into a given sink.
*/
class Fragmenter {
quadSource;
transformers;
fragmentationStrategy;
quadSink;
transformCallBack;
constructor(options) {
this.quadSource = options.quadSource;
this.transformers = options.transformers;
this.fragmentationStrategy = options.fragmentationStrategy;
this.quadSink = options.quadSink;
this.transformCallBack = options.transformCallback;
}
static getTransformedQuadStream(quadSource, transformers, transformCallback) {
const quadStream = quadSource.getQuads();
if (transformers.length > 0) {
const transformedQuadStream = new QuadTransformStream_1.QuadTransformStream(transformers, transformCallback);
quadStream.on('error', (error) => transformedQuadStream.emit('error', error));
quadStream.pipe(transformedQuadStream);
return transformedQuadStream;
}
return quadStream;
}
/**
* Read quads from a given source, fragment it into the sink, and close the sink.
*/
async fragment() {
if (this.transformCallBack) {
await Promise.all(this.transformCallBack.map(callback => callback.initializeCallback()));
}
await this.fragmentationStrategy.fragment(Fragmenter.getTransformedQuadStream(this.quadSource, this.transformers ?? [], this.transformCallBack), this.quadSink);
await this.quadSink.close();
this.transformCallBack?.map(callback => callback.end());
}
}
exports.Fragmenter = Fragmenter;
//# sourceMappingURL=Fragmenter.js.map