UNPKG

rdf-dataset-fragmenter

Version:
54 lines 1.77 kB
"use strict"; 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