rdf-dataset-fragmenter
Version:
Fragments an RDF dataset into multiple parts
54 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuadSinkCsv = void 0;
const fs = require("node:fs");
const node_path_1 = require("node:path");
const mkdirp_1 = require("mkdirp");
const rdf_string_1 = require("rdf-string");
/**
* A quad sink that writes quads to a CSV file.
*/
class QuadSinkCsv {
/**
* @param file The file to write to.
* @param columns The quad term names that will be serialized as columns.
*/
constructor(file, columns) {
this.file = file;
this.columns = columns;
}
close() {
return new Promise((resolve, reject) => {
if (this.fileStream) {
this.fileStream.close((error) => {
if (error) {
return reject(error);
}
return resolve();
});
}
else {
resolve();
}
});
}
async push(iri, quad) {
if (!this.fileStream) {
// Ensure output directory exists
const folder = (0, node_path_1.dirname)(this.file);
await (0, mkdirp_1.mkdirp)(folder);
// Open file stream
this.fileStream = fs.createWriteStream(this.file);
await new Promise((resolve) => {
this.fileStream.on('open', () => {
// Write CSV header
this.fileStream.write(`${this.columns.join(',')}\n`);
resolve();
});
});
}
this.fileStream.write(`${this.columns.map(column => (0, rdf_string_1.termToString)(quad[column])).join(',')}\n`);
}
}
exports.QuadSinkCsv = QuadSinkCsv;
//# sourceMappingURL=QuadSinkCsv.js.map