UNPKG

tripledoc

Version:

Library to read, create and update documents on a Solid Pod

54 lines (48 loc) 1.87 kB
import { DataFactory, Writer, Parser } from 'n3'; import { Quad, Triple } from 'rdf-js'; import { Reference } from '.'; /** * @param quads Triples that should be serialised to Turtle * @internal Utility method for internal use by Tripledoc; not part of the public API. */ export async function triplesToTurtle(quads: Quad[]): Promise<string> { const format = 'text/turtle'; const writer = new Writer({ format: format }); // Remove any potentially lingering references to Documents in Quads; // they'll be determined by the URL the Turtle will be sent to: const triples = quads.map(quad => DataFactory.triple(quad.subject, quad.predicate, quad.object)); writer.addQuads(triples); const writePromise = new Promise<string>((resolve, reject) => { writer.end((error, result) => { /* istanbul ignore if [n3.js doesn't actually pass an error nor a result, apparently: https://github.com/rdfjs/N3.js/blob/62682e48c02d8965b4d728cb5f2cbec6b5d1b1b8/src/N3Writer.js#L290] */ if (error) { return reject(error); } resolve(result); }); }); const rawTurtle = await writePromise; return rawTurtle; } /** * @param raw Turtle that should be parsed into Triples * @internal Utility method for internal use by Tripledoc; not part of the public API. */ export async function turtleToTriples(raw: string, documentRef: Reference): Promise<Triple[]> { const format = 'text/turtle'; const parser = new Parser({ format: format, baseIRI: documentRef }); const parsingPromise = new Promise<Triple[]>((resolve, reject) => { const parsedTriples: Triple[] = []; parser.parse(raw, (error, triple, _prefixes) => { if (error) { return reject(error); } if (triple) { parsedTriples.push(triple); } else { resolve(parsedTriples); } }); }); return parsingPromise; }