UNPKG

rdf-dataset-fragmenter

Version:
67 lines 2.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.QuadTransformStream = void 0; const node_stream_1 = require("node:stream"); /** * A transform stream that runs quads through an array of transformers. */ class QuadTransformStream extends node_stream_1.Transform { transformers; transformCallback; constructor(transformers, callback) { super({ objectMode: true }); this.transformers = transformers; this.transformCallback = callback; } runTransformers(quad) { let quads = [quad]; for (const transformer of this.transformers) { const newQuads = []; for (const quadIn of quads) { for (const quadOut of transformer.transform(quadIn)) { newQuads.push(quadOut); } } quads = newQuads; } return quads; } // eslint-disable-next-line ts/naming-convention _transform(quad, encoding, callback) { const transformedQuads = this.runTransformers(quad); // If we have a transformCallback, we need to gather the // promises run them and only indicate we're done // with the _transform call after they resolve if (this.transformCallback) { const promises = this.transformCallback.map(cb => cb.run(quad, transformedQuads)); Promise.all(promises) .then(() => { for (const transformedQuad of transformedQuads) { this.push(transformedQuad); } callback(); }) .catch((error) => { const err = error instanceof Error ? error : new Error(String(error)); callback(err); }); } else { for (const transformedQuad of transformedQuads) { this.push(transformedQuad); } callback(); } } // eslint-disable-next-line ts/naming-convention _flush(callback) { for (const transformer of this.transformers) { if (transformer.end) { transformer.end(); } } callback(); } } exports.QuadTransformStream = QuadTransformStream; //# sourceMappingURL=QuadTransformStream.js.map