@zazuko/rdf-utils-fs
Version:
RDF/JS file system utils
32 lines (31 loc) • 1.17 kB
JavaScript
import { createReadStream } from 'fs';
import { extname } from 'path';
import url from 'url';
import defaults from './defaults.js';
export default function fromFile(env, pathOrUrl, { implicitBaseIRI, extensions = {}, ...options } = {}) {
const combinedExtensions = {
...defaults.extensions,
...extensions,
};
let baseIRI;
if (implicitBaseIRI) {
baseIRI = typeof pathOrUrl === 'string' ? url.pathToFileURL(pathOrUrl).toString() : pathOrUrl.toString();
}
const filename = typeof pathOrUrl === 'string' ? pathOrUrl : url.fileURLToPath(pathOrUrl);
const extension = extname(filename).split('.').pop();
const mediaType = combinedExtensions[extension];
if (!mediaType) {
throw new Error(`Unknown file extension: ${extension}`);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const parser = env.formats.parsers.get(mediaType);
if (!parser) {
throw new Error(`No parser available for media type: ${mediaType}`);
}
return parser.import(createReadStream(filename), {
baseIRI,
...options,
factory: env,
dataFactory: env,
});
}