@traqula/parser-sparql-1-2 0.0.20 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Parser_exports = {};
20
+ __export(Parser_exports, {
21
+ Parser: () => Parser,
22
+ sparql12ParserBuilder: () => sparql12ParserBuilder
23
+ });
24
+ module.exports = __toCommonJS(Parser_exports);
25
+ var import_core = require("@traqula/core");
26
+ var import_parser_sparql_1_1 = require("@traqula/parser-sparql-1-1");
27
+ var import_rules_sparql_1_1 = require("@traqula/rules-sparql-1-1");
28
+ var import_rules_sparql_1_2 = require("@traqula/rules-sparql-1-2");
29
+ const sparql12ParserBuilder = import_core.ParserBuilder.create(import_parser_sparql_1_1.sparql11ParserBuilder).widenContext().typePatch().addMany(import_rules_sparql_1_2.gram.reifiedTripleBlock, import_rules_sparql_1_2.gram.reifiedTripleBlockPath, import_rules_sparql_1_2.gram.reifier, import_rules_sparql_1_2.gram.varOrReifierId, import_rules_sparql_1_2.gram.annotation, import_rules_sparql_1_2.gram.annotationPath, import_rules_sparql_1_2.gram.annotationBlockPath, import_rules_sparql_1_2.gram.annotationBlock, import_rules_sparql_1_2.gram.reifiedTriple, import_rules_sparql_1_2.gram.reifiedTripleSubject, import_rules_sparql_1_2.gram.reifiedTripleObject, import_rules_sparql_1_2.gram.tripleTerm, import_rules_sparql_1_2.gram.tripleTermSubject, import_rules_sparql_1_2.gram.tripleTermObject, import_rules_sparql_1_2.gram.tripleTermData, import_rules_sparql_1_2.gram.tripleTermDataSubject, import_rules_sparql_1_2.gram.tripleTermDataObject, import_rules_sparql_1_2.gram.exprTripleTerm, import_rules_sparql_1_2.gram.exprTripleTermSubject, import_rules_sparql_1_2.gram.exprTripleTermObject).addMany(import_rules_sparql_1_2.gram.versionDecl, import_rules_sparql_1_2.gram.versionSpecifier).addMany(import_rules_sparql_1_2.gram.buildInLangDir, import_rules_sparql_1_2.gram.buildInLangStrDir, import_rules_sparql_1_2.gram.buildInHasLang, import_rules_sparql_1_2.gram.buildInHasLangDir, import_rules_sparql_1_2.gram.buildInIsTriple, import_rules_sparql_1_2.gram.buildInTriple, import_rules_sparql_1_2.gram.buildInSubject, import_rules_sparql_1_2.gram.buildInPredicate, import_rules_sparql_1_2.gram.buildInObject).patchRule(import_rules_sparql_1_2.gram.dataBlockValue).patchRule(import_rules_sparql_1_2.gram.triplesSameSubject).patchRule(import_rules_sparql_1_2.gram.triplesSameSubjectPath).patchRule(import_rules_sparql_1_2.gram.object).patchRule(import_rules_sparql_1_2.gram.objectPath).patchRule(import_rules_sparql_1_2.gram.graphNode).patchRule(import_rules_sparql_1_2.gram.graphNodePath).patchRule(import_rules_sparql_1_2.gram.varOrTerm).deleteRule(import_rules_sparql_1_1.gram.graphTerm.name).patchRule(import_rules_sparql_1_2.gram.primaryExpression).patchRule(import_rules_sparql_1_2.gram.builtInCall).patchRule(import_rules_sparql_1_2.gram.rdfLiteral).patchRule(import_rules_sparql_1_2.gram.unaryExpression).patchRule(import_rules_sparql_1_2.gram.prologue);
30
+ class Parser {
31
+ parser;
32
+ F = new import_rules_sparql_1_2.AstFactory();
33
+ constructor(args = {}) {
34
+ this.parser = sparql12ParserBuilder.build({
35
+ ...args,
36
+ queryPreProcessor: import_rules_sparql_1_1.sparqlCodepointEscape,
37
+ tokenVocabulary: import_rules_sparql_1_2.lex.sparql12LexerBuilder.tokenVocabulary
38
+ });
39
+ }
40
+ parse(query, context = {}) {
41
+ return this.parser.queryOrUpdate(query, (0, import_rules_sparql_1_2.completeParseContext)(context));
42
+ }
43
+ parsePath(query, context = {}) {
44
+ const res = this.parser.path(query, (0, import_rules_sparql_1_2.completeParseContext)(context));
45
+ if (this.F.isPathPure(res)) {
46
+ return {
47
+ ...res,
48
+ prefixes: {}
49
+ };
50
+ }
51
+ return res;
52
+ }
53
+ }
54
+ // Annotate the CommonJS export names for ESM import in node:
55
+ 0 && (module.exports = {
56
+ Parser,
57
+ sparql12ParserBuilder
58
+ });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var lib_exports = {};
17
+ module.exports = __toCommonJS(lib_exports);
18
+ __reExport(lib_exports, require("./Parser.js"), module.exports);
19
+ // Annotate the CommonJS export names for ESM import in node:
20
+ 0 && (module.exports = {
21
+ ...require("./Parser.js")
22
+ });
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var parser_exports = {};
20
+ __export(parser_exports, {
21
+ parse: () => parse,
22
+ query: () => query,
23
+ update: () => update
24
+ });
25
+ module.exports = __toCommonJS(parser_exports);
26
+ var import_rdf_test_suite = require("rdf-test-suite");
27
+ var import_lib = require("../lib/index.js");
28
+ function parse(query2, context = {}) {
29
+ const parser = new import_lib.Parser();
30
+ parser.parse(query2, context);
31
+ }
32
+ function query() {
33
+ return Promise.reject(new import_rdf_test_suite.ErrorSkipped("Querying is not supported"));
34
+ }
35
+ function update() {
36
+ return Promise.reject(new import_rdf_test_suite.ErrorSkipped("Updating is not supported"));
37
+ }
38
+ // Annotate the CommonJS export names for ESM import in node:
39
+ 0 && (module.exports = {
40
+ parse,
41
+ query,
42
+ update
43
+ });
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var import_test_utils = require("@traqula/test-utils");
3
+ var import_sparqljs = require("sparqljs");
4
+ var import_vitest = require("vitest");
5
+ var import_lib = require("../lib/index.js");
6
+ (0, import_vitest.describe)("query 1.2, exclude construction", () => {
7
+ const traqulaParser = new import_lib.Parser();
8
+ const sparqlJSparser = new import_sparqljs.Parser();
9
+ (0, import_vitest.describe)("general queries", async () => {
10
+ const allQueries = await Promise.all([...(0, import_test_utils.positiveTest)("sparql-1-1")].map((x) => x.statics().then((x2) => x2.query)));
11
+ (0, import_vitest.bench)("traqula parse 1.2", () => {
12
+ for (const query of allQueries) {
13
+ traqulaParser.parse(query);
14
+ }
15
+ });
16
+ (0, import_vitest.bench)("sparqljs", () => {
17
+ for (const query of allQueries) {
18
+ sparqlJSparser.parse(query);
19
+ }
20
+ });
21
+ });
22
+ });
@@ -0,0 +1,113 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ var import_node_fs = __toESM(require("node:fs"), 1);
25
+ var import_node_path = __toESM(require("node:path"), 1);
26
+ var import_rules_sparql_1_2 = require("@traqula/rules-sparql-1-2");
27
+ var import_test_utils = require("@traqula/test-utils");
28
+ var import_rdf_data_factory = require("rdf-data-factory");
29
+ var import_vitest = require("vitest");
30
+ var import_lib = require("../lib/index.js");
31
+ (0, import_vitest.describe)("a SPARQL 1.2 parser", () => {
32
+ const parser = new import_lib.Parser();
33
+ const F = new import_rules_sparql_1_2.AstFactory();
34
+ const context = { prefixes: { ex: "http://example.org/" } };
35
+ function _sinkAst(suite, test, response) {
36
+ const dir = (0, import_test_utils.getStaticFilePath)();
37
+ const fileLoc = import_node_path.default.join(dir, suite, `${test}.json`);
38
+ import_node_fs.default.writeFileSync(fileLoc, JSON.stringify(response, null, 2));
39
+ }
40
+ (0, import_vitest.it)("passes chevrotain validation", () => {
41
+ import_lib.sparql12ParserBuilder.build({
42
+ tokenVocabulary: import_rules_sparql_1_2.lex.sparql12LexerBuilder.tokenVocabulary,
43
+ lexerConfig: {
44
+ skipValidations: false,
45
+ ensureOptimizations: true
46
+ },
47
+ parserConfig: {
48
+ skipValidations: false
49
+ }
50
+ });
51
+ });
52
+ (0, import_vitest.describe)("positive paths", () => {
53
+ for (const { name, statics } of (0, import_test_utils.positiveTest)("paths")) {
54
+ (0, import_vitest.it)(`can parse ${name}`, async ({ expect }) => {
55
+ const { query, ast } = await statics();
56
+ const res = parser.parsePath(query, context);
57
+ expect(res).toEqualParsedQuery(ast);
58
+ });
59
+ }
60
+ });
61
+ (0, import_vitest.describe)("positive sparql 1.1", () => {
62
+ for (const { name, statics } of (0, import_test_utils.positiveTest)("sparql-1-1")) {
63
+ (0, import_vitest.it)(`can parse ${name}`, async ({ expect }) => {
64
+ const { query, ast } = await statics();
65
+ const res = parser.parse(query, context);
66
+ expect(res).toEqualParsedQueryIgnoring((obj) => F.isTriple(obj), ["annotations"], ast);
67
+ });
68
+ }
69
+ });
70
+ (0, import_vitest.describe)("negative SPARQL 1.1", () => {
71
+ for (const { name, statics } of (0, import_test_utils.negativeTest)("sparql-1-1-invalid")) {
72
+ (0, import_vitest.it)(`should NOT parse ${name}`, async ({ expect }) => {
73
+ const { query } = await statics();
74
+ expect(() => parser.parse(query, context)).toThrow();
75
+ });
76
+ }
77
+ });
78
+ (0, import_vitest.describe)("positive sparql 1.2", () => {
79
+ for (const { name, statics } of (0, import_test_utils.positiveTest)("sparql-1-2")) {
80
+ (0, import_vitest.it)(`can parse ${name}`, async ({ expect }) => {
81
+ const { query, ast } = await statics();
82
+ const res = parser.parse(query, context);
83
+ expect(res).toEqualParsedQuery(ast);
84
+ });
85
+ }
86
+ });
87
+ (0, import_vitest.it)(`should NOT parse $only thing}`, async ({ expect }) => {
88
+ const query = `
89
+ PREFIX : <http://example.com/ns#>
90
+
91
+ SELECT * WHERE {
92
+ <<( ?s ?p ?o )>> .
93
+ }
94
+ `;
95
+ expect(() => parser.parse(query)).toThrow();
96
+ });
97
+ (0, import_vitest.describe)("negative sparql 1.2", () => {
98
+ const skip = /* @__PURE__ */ new Set([
99
+ "sparql-1-2-syntax-basic-tripleterm-subject",
100
+ "sparql-1-2-syntax-compound-tripleterm-subject",
101
+ "sparql-1-2-syntax-subject-tripleterm"
102
+ ]);
103
+ for (const { name, statics } of (0, import_test_utils.negativeTest)("sparql-1-2-invalid", (name2) => !skip.has(name2))) {
104
+ (0, import_vitest.it)(`should NOT parse ${name}`, async ({ expect }) => {
105
+ const { query } = await statics();
106
+ expect(() => parser.parse(query, context)).toThrow();
107
+ });
108
+ }
109
+ });
110
+ (0, import_vitest.describe)("specific sparql 1.1 tests", () => {
111
+ (0, import_test_utils.importSparql11NoteTests)(parser, new import_rdf_data_factory.DataFactory());
112
+ });
113
+ });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Parser.js","sourceRoot":"","sources":["../../../lib/Parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EACL,IAAI,IAAI,GAAG,EAEX,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,UAAU,EAAE,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,MAAM,2BAA2B,CAAC;AAGtG,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC,MAAM,CAAC,qBAAqB,CAAC;KAC7E,YAAY,EAAqB;KACjC,SAAS,EAqMN;KACH,OAAO,CACN,GAAG,CAAC,kBAAkB,EACtB,GAAG,CAAC,sBAAsB,EAC1B,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,oBAAoB,EACxB,GAAG,CAAC,mBAAmB,EACvB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,oBAAoB,EACxB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,qBAAqB,EACzB,GAAG,CAAC,oBAAoB,CACzB;KACA,OAAO,CACN,GAAG,CAAC,WAAW,EACf,GAAG,CAAC,gBAAgB,CACrB;KACA,OAAO,CACN,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,iBAAiB,EACrB,GAAG,CAAC,eAAe,EACnB,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,cAAc,EAClB,GAAG,CAAC,gBAAgB,EACpB,GAAG,CAAC,aAAa,CAClB;KACA,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC;KAC7B,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;KACjC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC;KACrC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC;KACrB,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;KACzB,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;KACxB,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;KAC5B,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC;KACxB,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;KAC9B,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC;KAChC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;KAC1B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;KACzB,SAAS,CAAC,GAAG,CAAC,eAAe,CAAC;KAC9B,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAI3B,MAAM,OAAO,MAAM;IACA,MAAM,CAAe;IAErB,CAAC,GAAG,IAAI,UAAU,EAAE,CAAC;IAEtC,YAAmB,OAA8D,EAAE;QACjF,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAC,KAAK,CAAC;YACxC,GAAG,IAAI;YACP,iBAAiB,EAAE,qBAAqB;YACxC,eAAe,EAAE,GAAG,CAAC,oBAAoB,CAAC,eAAe;SAC1D,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAa,EAAE,UAAsC,EAAE;QAClE,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;IACzE,CAAC;IAEM,SAAS,CACd,KAAa,EACjB,UAAsC,EAAE;QAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,GAAG,GAAG;gBACN,QAAQ,EAAE,EAAE;aACb,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;CACF","sourcesContent":["import { ParserBuilder } from '@traqula/core';\nimport type { Patch, Wrap, ParserBuildArgs } from '@traqula/core';\nimport { sparql11ParserBuilder } from '@traqula/parser-sparql-1-1';\nimport {\n gram as g11,\n type TermIri,\n sparqlCodepointEscape,\n} from '@traqula/rules-sparql-1-1';\nimport { completeParseContext, AstFactory, gram as S12, lex as l12 } from '@traqula/rules-sparql-1-2';\nimport type * as T12 from '@traqula/rules-sparql-1-2';\n\nexport const sparql12ParserBuilder = ParserBuilder.create(sparql11ParserBuilder)\n .widenContext<T12.SparqlContext>()\n .typePatch<{\n /// GeneralFile\n queryOrUpdate: [ T12.SparqlQuery];\n /// Query Unit file\n [g11.selectQuery.name]: [Omit<T12.QuerySelect, g11.HandledByBase>];\n [g11.subSelect.name]: [ Omit<T12.SubSelect, 'prefixes'>];\n [g11.selectClause.name]: [Wrap<Pick<T12.QuerySelect, 'variables' | 'distinct' | 'reduced'>>];\n [g11.constructQuery.name]: [Omit<T12.QueryConstruct, g11.HandledByBase>];\n [g11.describeQuery.name]: [Omit<T12.QueryDescribe, g11.HandledByBase>];\n [g11.askQuery.name]: [Omit<T12.QueryAsk, g11.HandledByBase>];\n [g11.valuesClause.name]: [T12.PatternValues[] | undefined];\n [g11.constructTemplate.name]: [Wrap<T12.PatternBgp>];\n [g11.constructTriples.name]: [T12.PatternBgp];\n /// Update Unit file\n [g11.update1.name]: [T12.UpdateOperation];\n [g11.load.name]: [T12.UpdateOperationLoad];\n [g11.clear.name]: [T12.UpdateOperationClear];\n [g11.drop.name]: [T12.UpdateOperationDrop];\n [g11.create.name]: [T12.UpdateOperationCreate];\n [g11.add.name]: [T12.UpdateOperationAdd];\n [g11.move.name]: [T12.UpdateOperationMove];\n [g11.copy.name]: [T12.UpdateOperationCopy];\n [g11.quadPattern.name]: [Wrap<T12.Quads[]>];\n [g11.quadData.name]: [Wrap<T12.Quads[]>];\n [g11.insertData.name]: [T12.UpdateOperationInsertData];\n [g11.deleteData.name]: [T12.UpdateOperationDeleteData];\n [g11.deleteWhere.name]: [T12.UpdateOperationDeleteWhere];\n [g11.modify.name]: [T12.UpdateOperationModify];\n [g11.deleteClause.name]: [Wrap<T12.Quads[]>];\n [g11.insertClause.name]: [Wrap<T12.Quads[]>];\n [g11.graphOrDefault.name]: [T12.GraphRefDefault | T12.GraphRefSpecific];\n [g11.graphRef.name]: [T12.GraphRefSpecific];\n [g11.graphRefAll.name]: [T12.GraphRef];\n [g11.quads.name]: [Wrap<T12.Quads[]>];\n [g11.quadsNotTriples.name]: [T12.GraphQuads];\n /// Built-in functions\n [g11.builtInStr.name]: [T12.ExpressionOperation];\n [g11.builtInLang.name]: [T12.ExpressionOperation];\n [g11.builtInLangmatches.name]: [T12.ExpressionOperation];\n [g11.builtInDatatype.name]: [T12.ExpressionOperation];\n [g11.builtInBound.name]: [T12.ExpressionOperation];\n [g11.builtInIri.name]: [T12.ExpressionOperation];\n [g11.builtInUri.name]: [T12.ExpressionOperation];\n [g11.builtInBnodeSparqlJs.name]: [T12.ExpressionOperation];\n [g11.builtInRand.name]: [T12.ExpressionOperation];\n [g11.builtInAbs.name]: [T12.ExpressionOperation];\n [g11.builtInCeil.name]: [T12.ExpressionOperation];\n [g11.builtInFloor.name]: [T12.ExpressionOperation];\n [g11.builtInRound.name]: [T12.ExpressionOperation];\n [g11.builtInConcat.name]: [T12.ExpressionOperation];\n [g11.substringExpression.name]: [T12.ExpressionOperation];\n [g11.builtInStrlen.name]: [T12.ExpressionOperation];\n [g11.strReplaceExpression.name]: [T12.ExpressionOperation];\n [g11.builtInUcase.name]: [T12.ExpressionOperation];\n [g11.builtInLcase.name]: [T12.ExpressionOperation];\n [g11.builtInEncode_for_uri.name]: [T12.ExpressionOperation];\n [g11.builtInContains.name]: [T12.ExpressionOperation];\n [g11.builtInStrstarts.name]: [T12.ExpressionOperation];\n [g11.builtInStrends.name]: [T12.ExpressionOperation];\n [g11.builtInStrbefore.name]: [T12.ExpressionOperation];\n [g11.builtInStrafter.name]: [T12.ExpressionOperation];\n [g11.builtInYear.name]: [T12.ExpressionOperation];\n [g11.builtInMonth.name]: [T12.ExpressionOperation];\n [g11.builtInDay.name]: [T12.ExpressionOperation];\n [g11.builtInHours.name]: [T12.ExpressionOperation];\n [g11.builtInMinutes.name]: [T12.ExpressionOperation];\n [g11.builtInSeconds.name]: [T12.ExpressionOperation];\n [g11.builtInTimezone.name]: [T12.ExpressionOperation];\n [g11.builtInTz.name]: [T12.ExpressionOperation];\n [g11.builtInNow.name]: [T12.ExpressionOperation];\n [g11.builtInUuid.name]: [T12.ExpressionOperation];\n [g11.builtInStruuid.name]: [T12.ExpressionOperation];\n [g11.builtInMd5.name]: [T12.ExpressionOperation];\n [g11.builtInSha1.name]: [T12.ExpressionOperation];\n [g11.builtInSha256.name]: [T12.ExpressionOperation];\n [g11.builtInSha384.name]: [T12.ExpressionOperation];\n [g11.builtInSha512.name]: [T12.ExpressionOperation];\n [g11.builtInCoalesce.name]: [T12.ExpressionOperation];\n [g11.builtInIf.name]: [T12.ExpressionOperation];\n [g11.builtInStrlang.name]: [T12.ExpressionOperation];\n [g11.builtInStrdt.name]: [T12.ExpressionOperation];\n [g11.builtInSameterm.name]: [T12.ExpressionOperation];\n [g11.builtInIsiri.name]: [T12.ExpressionOperation];\n [g11.builtInIsuri.name]: [T12.ExpressionOperation];\n [g11.builtInIsblank.name]: [T12.ExpressionOperation];\n [g11.builtInIsliteral.name]: [T12.ExpressionOperation];\n [g11.builtInIsnumeric.name]: [T12.ExpressionOperation];\n [g11.existsFunc.name]: [T12.ExpressionPatternOperation];\n [g11.notExistsFunc.name]: [T12.ExpressionPatternOperation];\n [g11.aggregateCount.name]: [T12.ExpressionAggregateOnWildcard | T12.ExpressionAggregateDefault];\n [g11.aggregateSum.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateMin.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateMax.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateAvg.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateSample.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateGroup_concat.name]: [T12.ExpressionAggregateDefault | T12.ExpressionAggregateSeparator];\n [g11.aggregate.name]: [T12.ExpressionAggregate];\n [g11.builtInCall.name]: [T12.Expression];\n /// DatasetClause\n [g11.datasetClause.name]: [Wrap<T12.DatasetClauses['clauses'][0]>];\n [g11.defaultGraphClause.name]: [T12.TermIri];\n [g11.usingClause.name]: [Wrap<T12.DatasetClauses['clauses'][0]>];\n [g11.datasetClauseStar.name]: [T12.DatasetClauses];\n [g11.usingClauseStar.name]: [T12.DatasetClauses];\n [g11.namedGraphClause.name]: [Wrap<T12.TermIri>];\n [g11.sourceSelector.name]: [T12.TermIri];\n // Expression file\n [g11.argList.name]: [Wrap<Patch<g11.IArgList, { args: T12.Expression[] }>>];\n [g11.expressionList.name]: [Wrap<T12.Expression[]>];\n [g11.expression.name]: [T12.Expression];\n [g11.conditionalOrExpression.name]: [T12.ExpressionOperation | T12.Expression];\n [g11.conditionalAndExpression.name]: [T12.Expression];\n [g11.valueLogical.name]: [T12.Expression];\n [g11.relationalExpression.name]: [T12.ExpressionOperation | T12.Expression];\n [g11.numericExpression.name]: [T12.Expression];\n [g11.additiveExpression.name]: [T12.Expression];\n [g11.multiplicativeExpression.name]: [T12.Expression];\n [g11.unaryExpression.name]: [T12.Expression];\n [g11.primaryExpression.name]: [T12.Expression];\n [g11.brackettedExpression.name]: [T12.Expression];\n [g11.iriOrFunction.name]: [T12.TermIri | T12.ExpressionFunctionCall];\n /// General\n [g11.prologue.name]: [T12.ContextDefinition[]];\n [g11.baseDecl.name]: [T12.ContextDefinition];\n [g11.prefixDecl.name]: [T12.ContextDefinition];\n [g11.verb.name]: [T12.TermVariable | T12.TermIri];\n [g11.varOrTerm.name]: [T12.Term];\n [g11.varOrIri.name]: [T12.TermIri | T12.TermVariable];\n [g11.var_.name]: [T12.TermVariable];\n [g11.graphTerm.name]: [T12.GraphTerm];\n /// Literals\n [g11.rdfLiteral.name]: [T12.TermLiteral];\n [g11.numericLiteral.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralUnsigned.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralPositive.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralNegative.name]: [T12.TermLiteralTyped];\n [g11.booleanLiteral.name]: [T12.TermLiteralTyped];\n [g11.string.name]: [T12.TermLiteralStr];\n [g11.iri.name]: [T12.TermIri];\n [g11.iriFull.name]: [T12.TermIriFull];\n [g11.prefixedName.name]: [T12.TermIriPrefixed];\n [g11.blankNode.name]: [T12.TermBlank];\n [g11.verbA.name]: [T12.TermIriFull];\n /// / Paths: unchanged\n /// / SolutionModifiers\n [g11.solutionModifier.name]: [T12.SolutionModifiers];\n [g11.groupClause.name]: [T12.SolutionModifierGroup];\n [g11.groupCondition.name]: [T12.Expression | T12.SolutionModifierGroupBind];\n [g11.havingClause.name]: [T12.SolutionModifierHaving];\n [g11.havingCondition.name]: [T12.Expression];\n [g11.orderClause.name]: [T12.SolutionModifierOrder];\n [g11.orderCondition.name]: [T12.Ordering];\n [g11.limitOffsetClauses.name]: [T12.SolutionModifierLimitOffset];\n [g11.limitClause.name]: [Wrap<number>];\n [g11.offsetClause.name]: [ Wrap<number>];\n /// tripleBlock\n [g11.triplesBlock.name]: [T12.PatternBgp];\n [g11.triplesSameSubject.name]: [T12.BasicGraphPattern];\n [g11.triplesSameSubjectPath.name]: [T12.BasicGraphPattern];\n [g11.triplesTemplate.name]: [T12.PatternBgp];\n [g11.propertyList.name]: [T12.TripleNesting[]];\n [g11.propertyListPath.name]: [T12.TripleNesting[]];\n [g11.propertyListNotEmpty.name]: [T12.TripleNesting[]];\n [g11.propertyListPathNotEmpty.name]: [T12.TripleNesting[]];\n [g11.verbPath.name]: [T12.Path];\n [g11.verbSimple.name]: [T12.TermVariable];\n [g11.objectList.name]: [T12.TripleNesting[], [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.objectListPath.name]: [T12.TripleNesting, [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.object.name]: [T12.TripleNesting, [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.objectPath.name]: [T12.TripleNesting[], [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.collection.name]: [T12.TripleCollectionList];\n [g11.collectionPath.name]: [T12.TripleCollectionList];\n [g11.triplesNode.name]: [T12.TripleCollection];\n [g11.triplesNodePath.name]: [T12.TripleCollection];\n [g11.blankNodePropertyList.name]: [T12.TripleCollectionBlankNodeProperties];\n [g11.blankNodePropertyListPath.name]: [T12.TripleCollectionBlankNodeProperties];\n [g11.graphNode.name]: [T12.Term | T12.TripleCollection];\n [g11.graphNodePath.name]: [T12.Term | T12.TripleCollection];\n /// WhereClause\n [g11.whereClause.name]: [Wrap<T12.PatternGroup>];\n [g11.groupGraphPattern.name]: [T12.PatternGroup];\n [g11.groupGraphPatternSub.name]: [T12.Pattern[]];\n [g11.graphPatternNotTriples.name]: [Exclude<T12.Pattern, T12.SubSelect | T12.PatternBgp>];\n [g11.optionalGraphPattern.name]: [T12.PatternOptional];\n [g11.graphGraphPattern.name]: [T12.PatternGraph];\n [g11.serviceGraphPattern.name]: [T12.PatternService];\n [g11.bind.name]: [T12.PatternBind];\n [g11.inlineData.name]: [T12.PatternValues];\n [g11.dataBlock.name]: [T12.PatternValues];\n [g11.inlineDataOneVar.name]: [T12.PatternValues];\n [g11.inlineDataFull.name]: [T12.PatternValues];\n [g11.dataBlockValue.name]: [T12.TermIri | T12.TermLiteral | undefined];\n [g11.minusGraphPattern.name]: [T12.PatternMinus];\n [g11.groupOrUnionGraphPattern.name]: [T12.PatternGroup | T12.PatternUnion];\n [g11.filter.name]: [T12.PatternFilter];\n [g11.constraint.name]: [T12.Expression];\n [g11.functionCall.name]: [T12.ExpressionFunctionCall];\n }>()\n .addMany(\n S12.reifiedTripleBlock,\n S12.reifiedTripleBlockPath,\n S12.reifier,\n S12.varOrReifierId,\n S12.annotation,\n S12.annotationPath,\n S12.annotationBlockPath,\n S12.annotationBlock,\n S12.reifiedTriple,\n S12.reifiedTripleSubject,\n S12.reifiedTripleObject,\n S12.tripleTerm,\n S12.tripleTermSubject,\n S12.tripleTermObject,\n S12.tripleTermData,\n S12.tripleTermDataSubject,\n S12.tripleTermDataObject,\n S12.exprTripleTerm,\n S12.exprTripleTermSubject,\n S12.exprTripleTermObject,\n )\n .addMany(\n S12.versionDecl,\n S12.versionSpecifier,\n )\n .addMany(\n S12.buildInLangDir,\n S12.buildInLangStrDir,\n S12.buildInHasLang,\n S12.buildInHasLangDir,\n S12.buildInIsTriple,\n S12.buildInTriple,\n S12.buildInSubject,\n S12.buildInPredicate,\n S12.buildInObject,\n )\n .patchRule(S12.dataBlockValue)\n .patchRule(S12.triplesSameSubject)\n .patchRule(S12.triplesSameSubjectPath)\n .patchRule(S12.object)\n .patchRule(S12.objectPath)\n .patchRule(S12.graphNode)\n .patchRule(S12.graphNodePath)\n .patchRule(S12.varOrTerm)\n .deleteRule(g11.graphTerm.name)\n .patchRule(S12.primaryExpression)\n .patchRule(S12.builtInCall)\n .patchRule(S12.rdfLiteral)\n .patchRule(S12.unaryExpression)\n .patchRule(S12.prologue);\n\nexport type SparqlParser = ReturnType<typeof sparql12ParserBuilder.build>;\n\nexport class Parser {\n private readonly parser: SparqlParser;\n\n private readonly F = new AstFactory();\n\n public constructor(args: Pick<ParserBuildArgs, 'parserConfig' | 'lexerConfig'> = {}) {\n this.parser = sparql12ParserBuilder.build({\n ...args,\n queryPreProcessor: sparqlCodepointEscape,\n tokenVocabulary: l12.sparql12LexerBuilder.tokenVocabulary,\n });\n }\n\n public parse(query: string, context: Partial<T12.SparqlContext> = {}): T12.SparqlQuery {\n return this.parser.queryOrUpdate(query, completeParseContext(context));\n }\n\n public parsePath(\n query: string,\ncontext: Partial<T12.SparqlContext> = {},\n ): (T12.Path & { prefixes: object }) | TermIri {\n const res = this.parser.path(query, completeParseContext(context));\n if (this.F.isPathPure(res)) {\n return {\n ...res,\n prefixes: {},\n };\n }\n return res;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC","sourcesContent":["export * from './Parser.js';\nexport type { SparqlContext } from '@traqula/rules-sparql-1-1';\n"]}
@@ -0,0 +1,4 @@
1
+ import type { SparqlContext } from '@traqula/rules-sparql-1-2';
2
+ export declare function parse(query: string, context?: Partial<SparqlContext>): void;
3
+ export declare function query(): Promise<never>;
4
+ export declare function update(): Promise<never>;
@@ -0,0 +1,13 @@
1
+ import { ErrorSkipped } from 'rdf-test-suite';
2
+ import { Parser } from '../lib/index.js';
3
+ export function parse(query, context = {}) {
4
+ const parser = new Parser();
5
+ parser.parse(query, context);
6
+ }
7
+ export function query() {
8
+ return Promise.reject(new ErrorSkipped('Querying is not supported'));
9
+ }
10
+ export function update() {
11
+ return Promise.reject(new ErrorSkipped('Updating is not supported'));
12
+ }
13
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../spec/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,UAAU,KAAK,CAAC,KAAa,EAAE,UAAkC,EAAE;IACvE,MAAM,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC/B,CAAC;AACD,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,MAAM;IACpB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,2BAA2B,CAAC,CAAC,CAAC;AACvE,CAAC","sourcesContent":["import type { SparqlContext } from '@traqula/rules-sparql-1-2';\nimport { ErrorSkipped } from 'rdf-test-suite';\nimport { Parser } from '../lib/index.js';\n\nexport function parse(query: string, context: Partial<SparqlContext> = {}): void {\n const parser = new Parser();\n parser.parse(query, context);\n}\nexport function query(): Promise<never> {\n return Promise.reject(new ErrorSkipped('Querying is not supported'));\n}\n\nexport function update(): Promise<never> {\n return Promise.reject(new ErrorSkipped('Updating is not supported'));\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { positiveTest } from '@traqula/test-utils';
2
+ import { Parser as SparqlJSparser } from 'sparqljs';
3
+ import { describe, bench } from 'vitest';
4
+ import { Parser as TraqulaParser } from '../lib/index.js';
5
+ describe('query 1.2, exclude construction', () => {
6
+ const traqulaParser = new TraqulaParser();
7
+ const sparqlJSparser = new SparqlJSparser();
8
+ describe('general queries', async () => {
9
+ const allQueries = await Promise.all([...positiveTest('sparql-1-1')]
10
+ .map(x => x.statics().then(x => x.query)));
11
+ bench('traqula parse 1.2', () => {
12
+ for (const query of allQueries) {
13
+ traqulaParser.parse(query);
14
+ }
15
+ });
16
+ bench('sparqljs', () => {
17
+ for (const query of allQueries) {
18
+ sparqlJSparser.parse(query);
19
+ }
20
+ });
21
+ });
22
+ });
23
+ //# sourceMappingURL=query.bench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.bench.js","sourceRoot":"","sources":["../../../test/query.bench.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,UAAU,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAE1D,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IAC1C,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,QAAQ,CAAC,iBAAiB,EAAE,KAAK,IAAG,EAAE;QACpC,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAE,GAAG,YAAY,CAAC,YAAY,CAAC,CAAE;aACnE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7C,KAAK,CAAC,mBAAmB,EAAE,GAAG,EAAE;YAC9B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE;YACrB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { positiveTest } from '@traqula/test-utils';\nimport { Parser as SparqlJSparser } from 'sparqljs';\nimport { describe, bench } from 'vitest';\nimport { Parser as TraqulaParser } from '../lib/index.js';\n\ndescribe('query 1.2, exclude construction', () => {\n const traqulaParser = new TraqulaParser();\n const sparqlJSparser = new SparqlJSparser();\n\n describe('general queries', async() => {\n const allQueries = await Promise.all([ ...positiveTest('sparql-1-1') ]\n .map(x => x.statics().then(x => x.query)));\n\n bench('traqula parse 1.2', () => {\n for (const query of allQueries) {\n traqulaParser.parse(query);\n }\n });\n bench('sparqljs', () => {\n for (const query of allQueries) {\n sparqlJSparser.parse(query);\n }\n });\n });\n});\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,93 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { AstFactory, lex as l12 } from '@traqula/rules-sparql-1-2';
4
+ import { positiveTest, importSparql11NoteTests, negativeTest, getStaticFilePath } from '@traqula/test-utils';
5
+ import { DataFactory } from 'rdf-data-factory';
6
+ import { describe, it } from 'vitest';
7
+ import { Parser, sparql12ParserBuilder } from '../lib/index.js';
8
+ describe('a SPARQL 1.2 parser', () => {
9
+ const parser = new Parser();
10
+ const F = new AstFactory();
11
+ const context = { prefixes: { ex: 'http://example.org/' } };
12
+ function _sinkAst(suite, test, response) {
13
+ const dir = getStaticFilePath();
14
+ const fileLoc = path.join(dir, suite, `${test}.json`);
15
+ // eslint-disable-next-line no-sync
16
+ fs.writeFileSync(fileLoc, JSON.stringify(response, null, 2));
17
+ }
18
+ it('passes chevrotain validation', () => {
19
+ sparql12ParserBuilder.build({
20
+ tokenVocabulary: l12.sparql12LexerBuilder.tokenVocabulary,
21
+ lexerConfig: {
22
+ skipValidations: false,
23
+ ensureOptimizations: true,
24
+ },
25
+ parserConfig: {
26
+ skipValidations: false,
27
+ },
28
+ });
29
+ });
30
+ describe('positive paths', () => {
31
+ for (const { name, statics } of positiveTest('paths')) {
32
+ it(`can parse ${name}`, async ({ expect }) => {
33
+ const { query, ast } = await statics();
34
+ const res = parser.parsePath(query, context);
35
+ expect(res).toEqualParsedQuery(ast);
36
+ });
37
+ }
38
+ });
39
+ describe('positive sparql 1.1', () => {
40
+ for (const { name, statics } of positiveTest('sparql-1-1')) {
41
+ it(`can parse ${name}`, async ({ expect }) => {
42
+ const { query, ast } = await statics();
43
+ const res = parser.parse(query, context);
44
+ expect(res).toEqualParsedQueryIgnoring(obj => F.isTriple(obj), ['annotations'], ast);
45
+ });
46
+ }
47
+ });
48
+ describe('negative SPARQL 1.1', () => {
49
+ for (const { name, statics } of negativeTest('sparql-1-1-invalid')) {
50
+ it(`should NOT parse ${name}`, async ({ expect }) => {
51
+ const { query } = await statics();
52
+ expect(() => parser.parse(query, context)).toThrow();
53
+ });
54
+ }
55
+ });
56
+ describe('positive sparql 1.2', () => {
57
+ for (const { name, statics } of positiveTest('sparql-1-2')) {
58
+ it(`can parse ${name}`, async ({ expect }) => {
59
+ const { query, ast } = await statics();
60
+ const res = parser.parse(query, context);
61
+ // _sinkAst('sparql-1-2', name, <object> res);
62
+ expect(res).toEqualParsedQuery(ast);
63
+ });
64
+ }
65
+ });
66
+ it(`should NOT parse $only thing}`, async ({ expect }) => {
67
+ const query = `
68
+ PREFIX : <http://example.com/ns#>
69
+
70
+ SELECT * WHERE {
71
+ <<( ?s ?p ?o )>> .
72
+ }
73
+ `;
74
+ expect(() => parser.parse(query)).toThrow();
75
+ });
76
+ describe('negative sparql 1.2', () => {
77
+ const skip = new Set([
78
+ 'sparql-1-2-syntax-basic-tripleterm-subject',
79
+ 'sparql-1-2-syntax-compound-tripleterm-subject',
80
+ 'sparql-1-2-syntax-subject-tripleterm',
81
+ ]);
82
+ for (const { name, statics } of negativeTest('sparql-1-2-invalid', name => !skip.has(name))) {
83
+ it(`should NOT parse ${name}`, async ({ expect }) => {
84
+ const { query } = await statics();
85
+ expect(() => parser.parse(query, context)).toThrow();
86
+ });
87
+ }
88
+ });
89
+ describe('specific sparql 1.1 tests', () => {
90
+ importSparql11NoteTests(parser, new DataFactory());
91
+ });
92
+ });
93
+ //# sourceMappingURL=statics.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"statics.test.js","sourceRoot":"","sources":["../../../test/statics.test.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport type { BaseQuad } from '@rdfjs/types';\nimport { AstFactory, lex as l12 } from '@traqula/rules-sparql-1-2';\nimport { positiveTest, importSparql11NoteTests, negativeTest, getStaticFilePath } from '@traqula/test-utils';\nimport { DataFactory } from 'rdf-data-factory';\nimport { describe, it } from 'vitest';\nimport { Parser, sparql12ParserBuilder } from '../lib/index.js';\n\ndescribe('a SPARQL 1.2 parser', () => {\n const parser = new Parser();\n const F = new AstFactory();\n const context = { prefixes: { ex: 'http://example.org/' }};\n\n function _sinkAst(suite: string, test: string, response: object): void {\n const dir = getStaticFilePath();\n const fileLoc = path.join(dir, suite, `${test}.json`);\n // eslint-disable-next-line no-sync\n fs.writeFileSync(fileLoc, JSON.stringify(response, null, 2));\n }\n\n it('passes chevrotain validation', () => {\n sparql12ParserBuilder.build({\n tokenVocabulary: l12.sparql12LexerBuilder.tokenVocabulary,\n lexerConfig: {\n skipValidations: false,\n ensureOptimizations: true,\n },\n parserConfig: {\n skipValidations: false,\n },\n });\n });\n\n describe('positive paths', () => {\n for (const { name, statics } of positiveTest('paths')) {\n it(`can parse ${name}`, async({ expect }) => {\n const { query, ast } = await statics();\n const res: unknown = parser.parsePath(query, context);\n expect(res).toEqualParsedQuery(ast);\n });\n }\n });\n\n describe('positive sparql 1.1', () => {\n for (const { name, statics } of positiveTest('sparql-1-1')) {\n it(`can parse ${name}`, async({ expect }) => {\n const { query, ast } = await statics();\n const res: unknown = parser.parse(query, context);\n expect(res).toEqualParsedQueryIgnoring(obj => F.isTriple(obj), [ 'annotations' ], ast);\n });\n }\n });\n\n describe('negative SPARQL 1.1', () => {\n for (const { name, statics } of negativeTest('sparql-1-1-invalid')) {\n it(`should NOT parse ${name}`, async({ expect }) => {\n const { query } = await statics();\n expect(() => parser.parse(query, context)).toThrow();\n });\n }\n });\n\n describe('positive sparql 1.2', () => {\n for (const { name, statics } of positiveTest('sparql-1-2')) {\n it(`can parse ${name}`, async({ expect }) => {\n const { query, ast } = await statics();\n const res: unknown = parser.parse(query, context);\n // _sinkAst('sparql-1-2', name, <object> res);\n expect(res).toEqualParsedQuery(ast);\n });\n }\n });\n\n it(`should NOT parse $only thing}`, async({ expect }) => {\n const query = `\n PREFIX : <http://example.com/ns#>\n\nSELECT * WHERE {\n <<( ?s ?p ?o )>> .\n}\n `;\n expect(() => parser.parse(query)).toThrow();\n });\n\n describe('negative sparql 1.2', () => {\n const skip = new Set([\n 'sparql-1-2-syntax-basic-tripleterm-subject',\n 'sparql-1-2-syntax-compound-tripleterm-subject',\n 'sparql-1-2-syntax-subject-tripleterm',\n ]);\n for (const { name, statics } of negativeTest('sparql-1-2-invalid', name => !skip.has(name))) {\n it(`should NOT parse ${name}`, async({ expect }) => {\n const { query } = await statics();\n expect(() => parser.parse(query, context)).toThrow();\n });\n }\n });\n\n describe('specific sparql 1.1 tests', () => {\n importSparql11NoteTests(parser, new DataFactory<BaseQuad>());\n });\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@traqula/parser-sparql-1-2",
3
3
  "type": "module",
4
- "version": "0.0.20",
4
+ "version": "0.0.22",
5
5
  "description": "SPARQL 1.2 parser",
6
6
  "lsd:module": true,
7
7
  "license": "MIT",
@@ -17,32 +17,29 @@
17
17
  "exports": {
18
18
  "./package.json": "./package.json",
19
19
  ".": {
20
- "types": "./lib/index.d.ts",
21
- "import": "./lib/index.js",
22
- "require": "./lib/index.cjs"
20
+ "types": "./dist/esm/lib/index.d.ts",
21
+ "import": "./dist/esm/lib/index.js",
22
+ "require": "./dist/cjs/lib/index.js"
23
23
  }
24
24
  },
25
- "main": "lib/index.js",
25
+ "main": "dist/esm/lib/index.js",
26
26
  "publishConfig": {
27
27
  "access": "public"
28
28
  },
29
29
  "files": [
30
- "lib/**/*.cjs",
31
- "lib/**/*.d.ts",
32
- "lib/**/*.js",
33
- "lib/**/*.js.map"
30
+ "dist/**/*.d.ts",
31
+ "dist/**/*.js",
32
+ "dist/**/*.js.map"
34
33
  ],
35
34
  "engines": {
36
35
  "node": "^20.19.0 || >=22.12.0"
37
36
  },
38
- "typings": "lib/index",
39
37
  "scripts": {
40
38
  "build": "yarn build:ts && yarn build:transpile && yarn build:transpile-spec",
41
- "build:ts": "node \"../../node_modules/typescript/bin/tsc\"",
42
- "build:transpile": " node \"../../node_modules/esbuild/bin/esbuild\" --format=cjs --bundle --log-level=error --outfile=lib/index.cjs lib/index.ts",
43
- "build:transpile-spec": " node \"../../node_modules/esbuild/bin/esbuild\" --format=cjs --platform=node --bundle --log-level=error --outfile=spec/parser.cjs spec/parser.ts",
44
- "spec:base-1-1": "rdf-test-suite spec/parser.cjs http://w3c.github.io/rdf-tests/sparql/sparql11/manifest-all.ttl -c ../../.rdf-test-suite-cache/",
45
- "spec:base-1-2": "rdf-test-suite spec/parser.cjs https://w3c.github.io/rdf-tests/sparql/sparql12/manifest.ttl -c ../../.rdf-test-suite-cache/",
39
+ "build:ts": "node \"../../node_modules/typescript/bin/tsc\" -b",
40
+ "build:transpile": "esbuild \"dist/esm/**/*.js\" --outdir=dist/cjs --platform=node --format=cjs",
41
+ "spec:base-1-1": "rdf-test-suite dist/cjs/spec/parser.js http://w3c.github.io/rdf-tests/sparql/sparql11/manifest-all.ttl -c ../../.rdf-test-suite-cache/",
42
+ "spec:base-1-2": "rdf-test-suite dist/cjs/spec/parser.js https://w3c.github.io/rdf-tests/sparql/sparql12/manifest.ttl -c ../../.rdf-test-suite-cache/",
46
43
  "spec:query-1-1": "yarn spec:base-1-1 -- -s http://www.w3.org/TR/sparql11-query/",
47
44
  "spec:query-1-2": "yarn run spec:base-1-2",
48
45
  "spec:update-1-1": "yarn spec:base-1-1 -- -s http://www.w3.org/TR/sparql11-update/",
@@ -53,18 +50,18 @@
53
50
  "spec:earl": "yarn spec:earl:query-1-1 && yarn spec:earl:update-1-1"
54
51
  },
55
52
  "dependencies": {
56
- "@traqula/core": "^0.0.20",
57
- "@traqula/parser-sparql-1-1": "^0.0.20",
58
- "@traqula/rules-sparql-1-1": "^0.0.20",
59
- "@traqula/rules-sparql-1-2": "^0.0.20",
53
+ "@traqula/core": "^0.0.22",
54
+ "@traqula/parser-sparql-1-1": "^0.0.22",
55
+ "@traqula/rules-sparql-1-1": "^0.0.22",
56
+ "@traqula/rules-sparql-1-2": "^0.0.22",
60
57
  "rdf-data-factory": "^2.0.1"
61
58
  },
62
59
  "devDependencies": {
63
60
  "@rdfjs/types": "^2.0.1",
64
- "@traqula/test-utils": "^0.0.20",
61
+ "@traqula/test-utils": "^0.0.22",
65
62
  "rdf-data-factory": "^2.0.1",
66
63
  "rdf-test-suite": "^2.0.0",
67
64
  "sparqljs": "^3.7.3"
68
65
  },
69
- "gitHead": "caf35c28d4ddbfec5947566b697d34f38c1e6e31"
66
+ "gitHead": "e0cf04a50b3558229ebcc5992cf9562b14f9a077"
70
67
  }
package/lib/Parser.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Parser.js","sourceRoot":"","sources":["Parser.ts"],"names":[],"mappings":"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","sourcesContent":["import { ParserBuilder } from '@traqula/core';\nimport type { Patch, Wrap, ParserBuildArgs } from '@traqula/core';\nimport { sparql11ParserBuilder } from '@traqula/parser-sparql-1-1';\nimport {\n gram as g11,\n type TermIri,\n sparqlCodepointEscape,\n} from '@traqula/rules-sparql-1-1';\nimport { completeParseContext, AstFactory, gram as S12, lex as l12 } from '@traqula/rules-sparql-1-2';\nimport type * as T12 from '@traqula/rules-sparql-1-2';\n\nexport const sparql12ParserBuilder = ParserBuilder.create(sparql11ParserBuilder)\n .widenContext<T12.SparqlContext>()\n .typePatch<{\n /// GeneralFile\n queryOrUpdate: [ T12.SparqlQuery];\n /// Query Unit file\n [g11.selectQuery.name]: [Omit<T12.QuerySelect, g11.HandledByBase>];\n [g11.subSelect.name]: [ Omit<T12.SubSelect, 'prefixes'>];\n [g11.selectClause.name]: [Wrap<Pick<T12.QuerySelect, 'variables' | 'distinct' | 'reduced'>>];\n [g11.constructQuery.name]: [Omit<T12.QueryConstruct, g11.HandledByBase>];\n [g11.describeQuery.name]: [Omit<T12.QueryDescribe, g11.HandledByBase>];\n [g11.askQuery.name]: [Omit<T12.QueryAsk, g11.HandledByBase>];\n [g11.valuesClause.name]: [T12.PatternValues[] | undefined];\n [g11.constructTemplate.name]: [Wrap<T12.PatternBgp>];\n [g11.constructTriples.name]: [T12.PatternBgp];\n /// Update Unit file\n [g11.update1.name]: [T12.UpdateOperation];\n [g11.load.name]: [T12.UpdateOperationLoad];\n [g11.clear.name]: [T12.UpdateOperationClear];\n [g11.drop.name]: [T12.UpdateOperationDrop];\n [g11.create.name]: [T12.UpdateOperationCreate];\n [g11.add.name]: [T12.UpdateOperationAdd];\n [g11.move.name]: [T12.UpdateOperationMove];\n [g11.copy.name]: [T12.UpdateOperationCopy];\n [g11.quadPattern.name]: [Wrap<T12.Quads[]>];\n [g11.quadData.name]: [Wrap<T12.Quads[]>];\n [g11.insertData.name]: [T12.UpdateOperationInsertData];\n [g11.deleteData.name]: [T12.UpdateOperationDeleteData];\n [g11.deleteWhere.name]: [T12.UpdateOperationDeleteWhere];\n [g11.modify.name]: [T12.UpdateOperationModify];\n [g11.deleteClause.name]: [Wrap<T12.Quads[]>];\n [g11.insertClause.name]: [Wrap<T12.Quads[]>];\n [g11.graphOrDefault.name]: [T12.GraphRefDefault | T12.GraphRefSpecific];\n [g11.graphRef.name]: [T12.GraphRefSpecific];\n [g11.graphRefAll.name]: [T12.GraphRef];\n [g11.quads.name]: [Wrap<T12.Quads[]>];\n [g11.quadsNotTriples.name]: [T12.GraphQuads];\n /// Built-in functions\n [g11.builtInStr.name]: [T12.ExpressionOperation];\n [g11.builtInLang.name]: [T12.ExpressionOperation];\n [g11.builtInLangmatches.name]: [T12.ExpressionOperation];\n [g11.builtInDatatype.name]: [T12.ExpressionOperation];\n [g11.builtInBound.name]: [T12.ExpressionOperation];\n [g11.builtInIri.name]: [T12.ExpressionOperation];\n [g11.builtInUri.name]: [T12.ExpressionOperation];\n [g11.builtInBnodeSparqlJs.name]: [T12.ExpressionOperation];\n [g11.builtInRand.name]: [T12.ExpressionOperation];\n [g11.builtInAbs.name]: [T12.ExpressionOperation];\n [g11.builtInCeil.name]: [T12.ExpressionOperation];\n [g11.builtInFloor.name]: [T12.ExpressionOperation];\n [g11.builtInRound.name]: [T12.ExpressionOperation];\n [g11.builtInConcat.name]: [T12.ExpressionOperation];\n [g11.substringExpression.name]: [T12.ExpressionOperation];\n [g11.builtInStrlen.name]: [T12.ExpressionOperation];\n [g11.strReplaceExpression.name]: [T12.ExpressionOperation];\n [g11.builtInUcase.name]: [T12.ExpressionOperation];\n [g11.builtInLcase.name]: [T12.ExpressionOperation];\n [g11.builtInEncode_for_uri.name]: [T12.ExpressionOperation];\n [g11.builtInContains.name]: [T12.ExpressionOperation];\n [g11.builtInStrstarts.name]: [T12.ExpressionOperation];\n [g11.builtInStrends.name]: [T12.ExpressionOperation];\n [g11.builtInStrbefore.name]: [T12.ExpressionOperation];\n [g11.builtInStrafter.name]: [T12.ExpressionOperation];\n [g11.builtInYear.name]: [T12.ExpressionOperation];\n [g11.builtInMonth.name]: [T12.ExpressionOperation];\n [g11.builtInDay.name]: [T12.ExpressionOperation];\n [g11.builtInHours.name]: [T12.ExpressionOperation];\n [g11.builtInMinutes.name]: [T12.ExpressionOperation];\n [g11.builtInSeconds.name]: [T12.ExpressionOperation];\n [g11.builtInTimezone.name]: [T12.ExpressionOperation];\n [g11.builtInTz.name]: [T12.ExpressionOperation];\n [g11.builtInNow.name]: [T12.ExpressionOperation];\n [g11.builtInUuid.name]: [T12.ExpressionOperation];\n [g11.builtInStruuid.name]: [T12.ExpressionOperation];\n [g11.builtInMd5.name]: [T12.ExpressionOperation];\n [g11.builtInSha1.name]: [T12.ExpressionOperation];\n [g11.builtInSha256.name]: [T12.ExpressionOperation];\n [g11.builtInSha384.name]: [T12.ExpressionOperation];\n [g11.builtInSha512.name]: [T12.ExpressionOperation];\n [g11.builtInCoalesce.name]: [T12.ExpressionOperation];\n [g11.builtInIf.name]: [T12.ExpressionOperation];\n [g11.builtInStrlang.name]: [T12.ExpressionOperation];\n [g11.builtInStrdt.name]: [T12.ExpressionOperation];\n [g11.builtInSameterm.name]: [T12.ExpressionOperation];\n [g11.builtInIsiri.name]: [T12.ExpressionOperation];\n [g11.builtInIsuri.name]: [T12.ExpressionOperation];\n [g11.builtInIsblank.name]: [T12.ExpressionOperation];\n [g11.builtInIsliteral.name]: [T12.ExpressionOperation];\n [g11.builtInIsnumeric.name]: [T12.ExpressionOperation];\n [g11.existsFunc.name]: [T12.ExpressionPatternOperation];\n [g11.notExistsFunc.name]: [T12.ExpressionPatternOperation];\n [g11.aggregateCount.name]: [T12.ExpressionAggregateOnWildcard | T12.ExpressionAggregateDefault];\n [g11.aggregateSum.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateMin.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateMax.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateAvg.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateSample.name]: [T12.ExpressionAggregateDefault];\n [g11.aggregateGroup_concat.name]: [T12.ExpressionAggregateDefault | T12.ExpressionAggregateSeparator];\n [g11.aggregate.name]: [T12.ExpressionAggregate];\n [g11.builtInCall.name]: [T12.Expression];\n /// DatasetClause\n [g11.datasetClause.name]: [Wrap<T12.DatasetClauses['clauses'][0]>];\n [g11.defaultGraphClause.name]: [T12.TermIri];\n [g11.usingClause.name]: [Wrap<T12.DatasetClauses['clauses'][0]>];\n [g11.datasetClauseStar.name]: [T12.DatasetClauses];\n [g11.usingClauseStar.name]: [T12.DatasetClauses];\n [g11.namedGraphClause.name]: [Wrap<T12.TermIri>];\n [g11.sourceSelector.name]: [T12.TermIri];\n // Expression file\n [g11.argList.name]: [Wrap<Patch<g11.IArgList, { args: T12.Expression[] }>>];\n [g11.expressionList.name]: [Wrap<T12.Expression[]>];\n [g11.expression.name]: [T12.Expression];\n [g11.conditionalOrExpression.name]: [T12.ExpressionOperation | T12.Expression];\n [g11.conditionalAndExpression.name]: [T12.Expression];\n [g11.valueLogical.name]: [T12.Expression];\n [g11.relationalExpression.name]: [T12.ExpressionOperation | T12.Expression];\n [g11.numericExpression.name]: [T12.Expression];\n [g11.additiveExpression.name]: [T12.Expression];\n [g11.multiplicativeExpression.name]: [T12.Expression];\n [g11.unaryExpression.name]: [T12.Expression];\n [g11.primaryExpression.name]: [T12.Expression];\n [g11.brackettedExpression.name]: [T12.Expression];\n [g11.iriOrFunction.name]: [T12.TermIri | T12.ExpressionFunctionCall];\n /// General\n [g11.prologue.name]: [T12.ContextDefinition[]];\n [g11.baseDecl.name]: [T12.ContextDefinition];\n [g11.prefixDecl.name]: [T12.ContextDefinition];\n [g11.verb.name]: [T12.TermVariable | T12.TermIri];\n [g11.varOrTerm.name]: [T12.Term];\n [g11.varOrIri.name]: [T12.TermIri | T12.TermVariable];\n [g11.var_.name]: [T12.TermVariable];\n [g11.graphTerm.name]: [T12.GraphTerm];\n /// Literals\n [g11.rdfLiteral.name]: [T12.TermLiteral];\n [g11.numericLiteral.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralUnsigned.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralPositive.name]: [T12.TermLiteralTyped];\n [g11.numericLiteralNegative.name]: [T12.TermLiteralTyped];\n [g11.booleanLiteral.name]: [T12.TermLiteralTyped];\n [g11.string.name]: [T12.TermLiteralStr];\n [g11.iri.name]: [T12.TermIri];\n [g11.iriFull.name]: [T12.TermIriFull];\n [g11.prefixedName.name]: [T12.TermIriPrefixed];\n [g11.blankNode.name]: [T12.TermBlank];\n [g11.verbA.name]: [T12.TermIriFull];\n /// / Paths: unchanged\n /// / SolutionModifiers\n [g11.solutionModifier.name]: [T12.SolutionModifiers];\n [g11.groupClause.name]: [T12.SolutionModifierGroup];\n [g11.groupCondition.name]: [T12.Expression | T12.SolutionModifierGroupBind];\n [g11.havingClause.name]: [T12.SolutionModifierHaving];\n [g11.havingCondition.name]: [T12.Expression];\n [g11.orderClause.name]: [T12.SolutionModifierOrder];\n [g11.orderCondition.name]: [T12.Ordering];\n [g11.limitOffsetClauses.name]: [T12.SolutionModifierLimitOffset];\n [g11.limitClause.name]: [Wrap<number>];\n [g11.offsetClause.name]: [ Wrap<number>];\n /// tripleBlock\n [g11.triplesBlock.name]: [T12.PatternBgp];\n [g11.triplesSameSubject.name]: [T12.BasicGraphPattern];\n [g11.triplesSameSubjectPath.name]: [T12.BasicGraphPattern];\n [g11.triplesTemplate.name]: [T12.PatternBgp];\n [g11.propertyList.name]: [T12.TripleNesting[]];\n [g11.propertyListPath.name]: [T12.TripleNesting[]];\n [g11.propertyListNotEmpty.name]: [T12.TripleNesting[]];\n [g11.propertyListPathNotEmpty.name]: [T12.TripleNesting[]];\n [g11.verbPath.name]: [T12.Path];\n [g11.verbSimple.name]: [T12.TermVariable];\n [g11.objectList.name]: [T12.TripleNesting[], [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.objectListPath.name]: [T12.TripleNesting, [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.object.name]: [T12.TripleNesting, [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.objectPath.name]: [T12.TripleNesting[], [ T12.TripleNesting['subject'], T12.TripleNesting['predicate'] ]];\n [g11.collection.name]: [T12.TripleCollectionList];\n [g11.collectionPath.name]: [T12.TripleCollectionList];\n [g11.triplesNode.name]: [T12.TripleCollection];\n [g11.triplesNodePath.name]: [T12.TripleCollection];\n [g11.blankNodePropertyList.name]: [T12.TripleCollectionBlankNodeProperties];\n [g11.blankNodePropertyListPath.name]: [T12.TripleCollectionBlankNodeProperties];\n [g11.graphNode.name]: [T12.Term | T12.TripleCollection];\n [g11.graphNodePath.name]: [T12.Term | T12.TripleCollection];\n /// WhereClause\n [g11.whereClause.name]: [Wrap<T12.PatternGroup>];\n [g11.groupGraphPattern.name]: [T12.PatternGroup];\n [g11.groupGraphPatternSub.name]: [T12.Pattern[]];\n [g11.graphPatternNotTriples.name]: [Exclude<T12.Pattern, T12.SubSelect | T12.PatternBgp>];\n [g11.optionalGraphPattern.name]: [T12.PatternOptional];\n [g11.graphGraphPattern.name]: [T12.PatternGraph];\n [g11.serviceGraphPattern.name]: [T12.PatternService];\n [g11.bind.name]: [T12.PatternBind];\n [g11.inlineData.name]: [T12.PatternValues];\n [g11.dataBlock.name]: [T12.PatternValues];\n [g11.inlineDataOneVar.name]: [T12.PatternValues];\n [g11.inlineDataFull.name]: [T12.PatternValues];\n [g11.dataBlockValue.name]: [T12.TermIri | T12.TermLiteral | undefined];\n [g11.minusGraphPattern.name]: [T12.PatternMinus];\n [g11.groupOrUnionGraphPattern.name]: [T12.PatternGroup | T12.PatternUnion];\n [g11.filter.name]: [T12.PatternFilter];\n [g11.constraint.name]: [T12.Expression];\n [g11.functionCall.name]: [T12.ExpressionFunctionCall];\n }>()\n .addMany(\n S12.reifiedTripleBlock,\n S12.reifiedTripleBlockPath,\n S12.reifier,\n S12.varOrReifierId,\n S12.annotation,\n S12.annotationPath,\n S12.annotationBlockPath,\n S12.annotationBlock,\n S12.reifiedTriple,\n S12.reifiedTripleSubject,\n S12.reifiedTripleObject,\n S12.tripleTerm,\n S12.tripleTermSubject,\n S12.tripleTermObject,\n S12.tripleTermData,\n S12.tripleTermDataSubject,\n S12.tripleTermDataObject,\n S12.exprTripleTerm,\n S12.exprTripleTermSubject,\n S12.exprTripleTermObject,\n )\n .addMany(\n S12.versionDecl,\n S12.versionSpecifier,\n )\n .addMany(\n S12.buildInLangDir,\n S12.buildInLangStrDir,\n S12.buildInHasLang,\n S12.buildInHasLangDir,\n S12.buildInIsTriple,\n S12.buildInTriple,\n S12.buildInSubject,\n S12.buildInPredicate,\n S12.buildInObject,\n )\n .patchRule(S12.dataBlockValue)\n .patchRule(S12.triplesSameSubject)\n .patchRule(S12.triplesSameSubjectPath)\n .patchRule(S12.object)\n .patchRule(S12.objectPath)\n .patchRule(S12.graphNode)\n .patchRule(S12.graphNodePath)\n .patchRule(S12.varOrTerm)\n .deleteRule(g11.graphTerm.name)\n .patchRule(S12.primaryExpression)\n .patchRule(S12.builtInCall)\n .patchRule(S12.rdfLiteral)\n .patchRule(S12.unaryExpression)\n .patchRule(S12.prologue);\n\nexport type SparqlParser = ReturnType<typeof sparql12ParserBuilder.build>;\n\nexport class Parser {\n private readonly parser: SparqlParser;\n\n private readonly F = new AstFactory();\n\n public constructor(args: Pick<ParserBuildArgs, 'parserConfig' | 'lexerConfig'> = {}) {\n this.parser = sparql12ParserBuilder.build({\n ...args,\n queryPreProcessor: sparqlCodepointEscape,\n tokenVocabulary: l12.sparql12LexerBuilder.tokenVocabulary,\n });\n }\n\n public parse(query: string, context: Partial<T12.SparqlContext> = {}): T12.SparqlQuery {\n return this.parser.queryOrUpdate(query, completeParseContext(context));\n }\n\n public parsePath(\n query: string,\ncontext: Partial<T12.SparqlContext> = {},\n ): (T12.Path & { prefixes: object }) | TermIri {\n const res = this.parser.path(query, completeParseContext(context));\n if (this.F.isPathPure(res)) {\n return {\n ...res,\n prefixes: {},\n };\n }\n return res;\n }\n}\n"]}