53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
const { Parser } = require('./lib/SparqlParser');
|
|
const { Generator } = require('./lib/SparqlGenerator');
|
|
const { Wildcard } = require('./lib/Wildcard');
|
|
const { DataFactory } = require('rdf-data-factory');
|
|
|
|
/**
|
|
* Creates a SPARQL parser with the given pre-defined prefixes and base IRI
|
|
* @param options {
|
|
* prefixes?: { [prefix: string]: string },
|
|
* baseIRI?: string,
|
|
* factory?: import('rdf-js').DataFactory,
|
|
* sparqlStar?: boolean,
|
|
* skipValidation?: boolean,
|
|
* skipUngroupedVariableCheck?: boolean
|
|
* }
|
|
*/
|
|
function _Parser({
|
|
prefixes,
|
|
baseIRI,
|
|
factory,
|
|
pathOnly,
|
|
sparqlStar,
|
|
skipValidation,
|
|
skipUngroupedVariableCheck,
|
|
} = {}) {
|
|
// Create a copy of the prefixes
|
|
const prefixesCopy = {};
|
|
for (const prefix in prefixes ?? {})
|
|
prefixesCopy[prefix] = prefixes[prefix];
|
|
|
|
// Create a new parser with the given prefixes
|
|
// (Workaround for https://github.com/zaach/jison/issues/241)
|
|
const parser = new Parser();
|
|
parser.parse = function () {
|
|
Parser.base = baseIRI || '';
|
|
Parser.prefixes = Object.create(prefixesCopy);
|
|
Parser.factory = factory || new DataFactory();
|
|
Parser.sparqlStar = Boolean(sparqlStar);
|
|
Parser.pathOnly = Boolean(pathOnly);
|
|
// We keep skipUngroupedVariableCheck for compatibility reasons.
|
|
Parser.skipValidation = Boolean(skipValidation) || Boolean(skipUngroupedVariableCheck)
|
|
return Parser.prototype.parse.apply(parser, arguments);
|
|
};
|
|
parser._resetBlanks = Parser._resetBlanks;
|
|
return parser;
|
|
}
|
|
|
|
module.exports = {
|
|
Parser: _Parser,
|
|
Generator,
|
|
Wildcard,
|
|
};
|