@traqula/generator-sparql-1-1 0.0.22 → 0.0.24
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.
- package/dist/cjs/lib/index.js +37 -51
- package/dist/cjs/lib/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/package.json +12 -11
- package/dist/cjs/test/integration.test.js +0 -175
- package/dist/cjs/test/statics.test.js +0 -68
- package/dist/esm/test/integration.test.d.ts +0 -1
- package/dist/esm/test/integration.test.js +0 -180
- package/dist/esm/test/integration.test.js.map +0 -1
- package/dist/esm/test/statics.test.d.ts +0 -1
- package/dist/esm/test/statics.test.js +0 -49
- package/dist/esm/test/statics.test.js.map +0 -1
package/dist/cjs/lib/index.js
CHANGED
|
@@ -1,54 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
var import_core = require("@traqula/core");
|
|
26
|
-
var import_rules_sparql_1_1 = require("@traqula/rules-sparql-1-1");
|
|
27
|
-
const sparql11GeneratorBuilder = import_core.GeneratorBuilder.create([
|
|
28
|
-
import_rules_sparql_1_1.gram.queryOrUpdate,
|
|
29
|
-
import_rules_sparql_1_1.gram.query,
|
|
30
|
-
import_rules_sparql_1_1.gram.selectQuery,
|
|
31
|
-
import_rules_sparql_1_1.gram.constructQuery,
|
|
32
|
-
import_rules_sparql_1_1.gram.describeQuery,
|
|
33
|
-
import_rules_sparql_1_1.gram.askQuery,
|
|
34
|
-
import_rules_sparql_1_1.gram.selectClause
|
|
35
|
-
]).addMany(import_rules_sparql_1_1.gram.update, import_rules_sparql_1_1.gram.update1, import_rules_sparql_1_1.gram.load, import_rules_sparql_1_1.gram.clear, import_rules_sparql_1_1.gram.drop, import_rules_sparql_1_1.gram.create, import_rules_sparql_1_1.gram.copy, import_rules_sparql_1_1.gram.move, import_rules_sparql_1_1.gram.add, import_rules_sparql_1_1.gram.insertData, import_rules_sparql_1_1.gram.deleteData, import_rules_sparql_1_1.gram.deleteWhere, import_rules_sparql_1_1.gram.modify, import_rules_sparql_1_1.gram.graphRef, import_rules_sparql_1_1.gram.graphRefAll, import_rules_sparql_1_1.gram.quads, import_rules_sparql_1_1.gram.quadsNotTriples).addRule(import_rules_sparql_1_1.gram.aggregate).addMany(import_rules_sparql_1_1.gram.datasetClauseStar, import_rules_sparql_1_1.gram.usingClauseStar).addMany(import_rules_sparql_1_1.gram.argList, import_rules_sparql_1_1.gram.expression, import_rules_sparql_1_1.gram.iriOrFunction).addMany(import_rules_sparql_1_1.gram.prologue, import_rules_sparql_1_1.gram.prefixDecl, import_rules_sparql_1_1.gram.baseDecl, import_rules_sparql_1_1.gram.varOrTerm, import_rules_sparql_1_1.gram.var_, import_rules_sparql_1_1.gram.graphTerm).addMany(import_rules_sparql_1_1.gram.rdfLiteral, import_rules_sparql_1_1.gram.iri, import_rules_sparql_1_1.gram.iriFull, import_rules_sparql_1_1.gram.prefixedName, import_rules_sparql_1_1.gram.blankNode).addRule(import_rules_sparql_1_1.gram.pathGenerator).addMany(import_rules_sparql_1_1.gram.solutionModifier, import_rules_sparql_1_1.gram.groupClause, import_rules_sparql_1_1.gram.havingClause, import_rules_sparql_1_1.gram.orderClause, import_rules_sparql_1_1.gram.limitOffsetClauses).addMany(import_rules_sparql_1_1.gram.triplesBlock, import_rules_sparql_1_1.gram.collectionPath, import_rules_sparql_1_1.gram.blankNodePropertyListPath, import_rules_sparql_1_1.gram.triplesNodePath, import_rules_sparql_1_1.gram.graphNodePath).addMany(import_rules_sparql_1_1.gram.whereClause, import_rules_sparql_1_1.gram.generatePattern, import_rules_sparql_1_1.gram.groupGraphPattern, import_rules_sparql_1_1.gram.graphPatternNotTriples, import_rules_sparql_1_1.gram.optionalGraphPattern, import_rules_sparql_1_1.gram.graphGraphPattern, import_rules_sparql_1_1.gram.serviceGraphPattern, import_rules_sparql_1_1.gram.bind, import_rules_sparql_1_1.gram.inlineData, import_rules_sparql_1_1.gram.minusGraphPattern, import_rules_sparql_1_1.gram.groupOrUnionGraphPattern, import_rules_sparql_1_1.gram.filter);
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Generator = exports.sparql11GeneratorBuilder = void 0;
|
|
4
|
+
const core_1 = require("@traqula/core");
|
|
5
|
+
const rules_sparql_1_1_1 = require("@traqula/rules-sparql-1-1");
|
|
6
|
+
exports.sparql11GeneratorBuilder = core_1.GeneratorBuilder.create([
|
|
7
|
+
rules_sparql_1_1_1.gram.queryOrUpdate,
|
|
8
|
+
rules_sparql_1_1_1.gram.query,
|
|
9
|
+
rules_sparql_1_1_1.gram.selectQuery,
|
|
10
|
+
rules_sparql_1_1_1.gram.constructQuery,
|
|
11
|
+
rules_sparql_1_1_1.gram.describeQuery,
|
|
12
|
+
rules_sparql_1_1_1.gram.askQuery,
|
|
13
|
+
rules_sparql_1_1_1.gram.selectClause,
|
|
14
|
+
])
|
|
15
|
+
.addMany(rules_sparql_1_1_1.gram.update, rules_sparql_1_1_1.gram.update1, rules_sparql_1_1_1.gram.load, rules_sparql_1_1_1.gram.clear, rules_sparql_1_1_1.gram.drop, rules_sparql_1_1_1.gram.create, rules_sparql_1_1_1.gram.copy, rules_sparql_1_1_1.gram.move, rules_sparql_1_1_1.gram.add, rules_sparql_1_1_1.gram.insertData, rules_sparql_1_1_1.gram.deleteData, rules_sparql_1_1_1.gram.deleteWhere, rules_sparql_1_1_1.gram.modify, rules_sparql_1_1_1.gram.graphRef, rules_sparql_1_1_1.gram.graphRefAll, rules_sparql_1_1_1.gram.quads, rules_sparql_1_1_1.gram.quadsNotTriples)
|
|
16
|
+
.addRule(rules_sparql_1_1_1.gram.aggregate)
|
|
17
|
+
.addMany(rules_sparql_1_1_1.gram.datasetClauseStar, rules_sparql_1_1_1.gram.usingClauseStar)
|
|
18
|
+
.addMany(rules_sparql_1_1_1.gram.argList, rules_sparql_1_1_1.gram.expression, rules_sparql_1_1_1.gram.iriOrFunction)
|
|
19
|
+
.addMany(rules_sparql_1_1_1.gram.prologue, rules_sparql_1_1_1.gram.prefixDecl, rules_sparql_1_1_1.gram.baseDecl, rules_sparql_1_1_1.gram.varOrTerm, rules_sparql_1_1_1.gram.var_, rules_sparql_1_1_1.gram.graphTerm)
|
|
20
|
+
.addMany(rules_sparql_1_1_1.gram.rdfLiteral, rules_sparql_1_1_1.gram.iri, rules_sparql_1_1_1.gram.iriFull, rules_sparql_1_1_1.gram.prefixedName, rules_sparql_1_1_1.gram.blankNode)
|
|
21
|
+
.addRule(rules_sparql_1_1_1.gram.pathGenerator)
|
|
22
|
+
.addMany(rules_sparql_1_1_1.gram.solutionModifier, rules_sparql_1_1_1.gram.groupClause, rules_sparql_1_1_1.gram.havingClause, rules_sparql_1_1_1.gram.orderClause, rules_sparql_1_1_1.gram.limitOffsetClauses)
|
|
23
|
+
.addMany(rules_sparql_1_1_1.gram.triplesBlock, rules_sparql_1_1_1.gram.collectionPath, rules_sparql_1_1_1.gram.blankNodePropertyListPath, rules_sparql_1_1_1.gram.triplesNodePath, rules_sparql_1_1_1.gram.graphNodePath)
|
|
24
|
+
.addMany(rules_sparql_1_1_1.gram.whereClause, rules_sparql_1_1_1.gram.generatePattern, rules_sparql_1_1_1.gram.groupGraphPattern, rules_sparql_1_1_1.gram.graphPatternNotTriples, rules_sparql_1_1_1.gram.optionalGraphPattern, rules_sparql_1_1_1.gram.graphGraphPattern, rules_sparql_1_1_1.gram.serviceGraphPattern, rules_sparql_1_1_1.gram.bind, rules_sparql_1_1_1.gram.inlineData, rules_sparql_1_1_1.gram.minusGraphPattern, rules_sparql_1_1_1.gram.groupOrUnionGraphPattern, rules_sparql_1_1_1.gram.filter);
|
|
36
25
|
class Generator {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
26
|
+
defaultContext;
|
|
27
|
+
constructor(defaultContext = {}) {
|
|
28
|
+
this.defaultContext = defaultContext;
|
|
29
|
+
}
|
|
30
|
+
generator = exports.sparql11GeneratorBuilder.build();
|
|
31
|
+
factory = new rules_sparql_1_1_1.AstFactory();
|
|
32
|
+
generate(ast, context = {}) {
|
|
33
|
+
return this.generator.queryOrUpdate(ast, (0, rules_sparql_1_1_1.completeParseContext)({ ...this.defaultContext, ...context })).trim();
|
|
34
|
+
}
|
|
35
|
+
generatePath(ast, context = {}) {
|
|
36
|
+
return this.generator.path(ast, (0, rules_sparql_1_1_1.completeParseContext)({ ...this.defaultContext, ...context }), undefined).trim();
|
|
37
|
+
}
|
|
49
38
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
Generator,
|
|
53
|
-
sparql11GeneratorBuilder
|
|
54
|
-
});
|
|
39
|
+
exports.Generator = Generator;
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { GeneratorBuilder } from '@traqula/core';\nimport type * as T11 from '@traqula/rules-sparql-1-1';\nimport { completeParseContext, AstFactory, gram } from '@traqula/rules-sparql-1-1';\n\nexport const sparql11GeneratorBuilder = GeneratorBuilder.create(<const> [\n gram.queryOrUpdate,\n gram.query,\n gram.selectQuery,\n gram.constructQuery,\n gram.describeQuery,\n gram.askQuery,\n gram.selectClause,\n])\n .addMany(\n gram.update,\n gram.update1,\n gram.load,\n gram.clear,\n gram.drop,\n gram.create,\n gram.copy,\n gram.move,\n gram.add,\n gram.insertData,\n gram.deleteData,\n gram.deleteWhere,\n gram.modify,\n gram.graphRef,\n gram.graphRefAll,\n gram.quads,\n gram.quadsNotTriples,\n )\n .addRule(gram.aggregate)\n .addMany(\n gram.datasetClauseStar,\n gram.usingClauseStar,\n )\n .addMany(\n gram.argList,\n gram.expression,\n gram.iriOrFunction,\n )\n .addMany(\n gram.prologue,\n gram.prefixDecl,\n gram.baseDecl,\n gram.varOrTerm,\n gram.var_,\n gram.graphTerm,\n )\n .addMany(\n gram.rdfLiteral,\n gram.iri,\n gram.iriFull,\n gram.prefixedName,\n gram.blankNode,\n )\n .addRule(gram.pathGenerator)\n .addMany(\n gram.solutionModifier,\n gram.groupClause,\n gram.havingClause,\n gram.orderClause,\n gram.limitOffsetClauses,\n )\n .addMany(\n gram.triplesBlock,\n gram.collectionPath,\n gram.blankNodePropertyListPath,\n gram.triplesNodePath,\n gram.graphNodePath,\n )\n .addMany(\n gram.whereClause,\n gram.generatePattern,\n gram.groupGraphPattern,\n gram.graphPatternNotTriples,\n gram.optionalGraphPattern,\n gram.graphGraphPattern,\n gram.serviceGraphPattern,\n gram.bind,\n gram.inlineData,\n gram.minusGraphPattern,\n gram.groupOrUnionGraphPattern,\n gram.filter,\n );\n\nexport type SparqlGenerator = ReturnType<typeof sparql11GeneratorBuilder.build>;\n\nexport class Generator {\n public constructor(private readonly defaultContext: Partial<T11.SparqlGeneratorContext> = {}) {}\n\n private readonly generator: SparqlGenerator = sparql11GeneratorBuilder.build();\n private readonly factory = new AstFactory();\n\n public generate(ast: T11.Query | T11.Update, context: Partial<T11.SparqlGeneratorContext> = {}): string {\n return this.generator.queryOrUpdate(ast, completeParseContext({ ...this.defaultContext, ...context })).trim();\n }\n\n public generatePath(ast: T11.Path, context: Partial<T11.SparqlGeneratorContext> = {}): string {\n return this.generator.path(ast, completeParseContext({ ...this.defaultContext, ...context }), undefined).trim();\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{ "type": "commonjs" }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@traqula/generator-sparql-1-1",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.24",
|
|
5
5
|
"description": "SPARQL 1.1 generator",
|
|
6
6
|
"lsd:module": true,
|
|
7
7
|
"license": "MIT",
|
|
@@ -27,25 +27,26 @@
|
|
|
27
27
|
"access": "public"
|
|
28
28
|
},
|
|
29
29
|
"files": [
|
|
30
|
-
"dist/**/*.d.ts",
|
|
31
|
-
"dist/**/*.js",
|
|
32
|
-
"dist/**/*.js.map"
|
|
30
|
+
"dist/*/lib/**/*.d.ts",
|
|
31
|
+
"dist/*/lib/**/*.js",
|
|
32
|
+
"dist/*/lib/**/*.js.map",
|
|
33
|
+
"dist/cjs/package.json"
|
|
33
34
|
],
|
|
34
35
|
"engines": {
|
|
35
36
|
"node": "^20.19.0 || >=22.12.0"
|
|
36
37
|
},
|
|
37
38
|
"scripts": {
|
|
38
|
-
"build": "yarn build:ts && yarn build:
|
|
39
|
+
"build": "yarn build:ts && yarn build:cjs",
|
|
39
40
|
"build:ts": "node \"../../node_modules/typescript/bin/tsc\" -b",
|
|
40
|
-
"build:
|
|
41
|
+
"build:cjs": "node \"../../node_modules/typescript/bin/tsc\" -b tsconfig.cjs.json"
|
|
41
42
|
},
|
|
42
43
|
"dependencies": {
|
|
43
|
-
"@traqula/core": "^0.0.
|
|
44
|
-
"@traqula/rules-sparql-1-1": "^0.0.
|
|
44
|
+
"@traqula/core": "^0.0.24",
|
|
45
|
+
"@traqula/rules-sparql-1-1": "^0.0.24"
|
|
45
46
|
},
|
|
46
47
|
"devDependencies": {
|
|
47
|
-
"@traqula/parser-sparql-1-1": "^0.0.
|
|
48
|
-
"@traqula/test-utils": "^0.0.
|
|
48
|
+
"@traqula/parser-sparql-1-1": "^0.0.24",
|
|
49
|
+
"@traqula/test-utils": "^0.0.24"
|
|
49
50
|
},
|
|
50
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "9865fe1fe302819d46e19c6f3250ceef778f434f"
|
|
51
52
|
}
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var import_core = require("@traqula/core");
|
|
3
|
-
var import_parser_sparql_1_1 = require("@traqula/parser-sparql-1-1");
|
|
4
|
-
var import_rules_sparql_1_1 = require("@traqula/rules-sparql-1-1");
|
|
5
|
-
var import_vitest = require("vitest");
|
|
6
|
-
var import_lib = require("../lib/index.js");
|
|
7
|
-
(0, import_vitest.describe)("a SPARQL 1.1 generator", () => {
|
|
8
|
-
const generator = new import_lib.Generator();
|
|
9
|
-
const parser = new import_parser_sparql_1_1.Parser();
|
|
10
|
-
const F = new import_rules_sparql_1_1.AstFactory();
|
|
11
|
-
const transformer = new import_rules_sparql_1_1.AstTransformer();
|
|
12
|
-
(0, import_vitest.it)("generates simple round tripped", ({ expect }) => {
|
|
13
|
-
const query = "SELECT * WHERE { ?s ?p ?o }";
|
|
14
|
-
const ast = parser.parse(query);
|
|
15
|
-
const result = generator.generate(ast, { origSource: query });
|
|
16
|
-
expect(result).toBe(query);
|
|
17
|
-
});
|
|
18
|
-
(0, import_vitest.it)("self generates on no pretty", ({ expect }) => {
|
|
19
|
-
const query = "SELECT * WHERE { ?s ?p ?o . }";
|
|
20
|
-
const ast = parser.parse(query);
|
|
21
|
-
const result = generator.generate(F.forcedAutoGenTree(ast), { [import_core.traqulaIndentation]: -1, indentInc: 0 });
|
|
22
|
-
expect(result).toBe(query);
|
|
23
|
-
});
|
|
24
|
-
(0, import_vitest.describe)("on altered nodes", () => {
|
|
25
|
-
(0, import_vitest.it)("translates ?s -> ?subject", ({ expect }) => {
|
|
26
|
-
const query = "SELECT * WHERE { ?s ?p ?o }";
|
|
27
|
-
const ast = parser.parse(query);
|
|
28
|
-
const altered = transformer.transformNodeSpecific(ast, {}, { term: { variable: {
|
|
29
|
-
transform: (variable) => variable.value === "s" ? F.termVariable("subject", F.sourceLocationNodeReplaceUnsafe(variable.loc)) : variable
|
|
30
|
-
} } });
|
|
31
|
-
const result = generator.generate(altered, { origSource: query });
|
|
32
|
-
expect(result).toBe(`SELECT * WHERE { ?subject ?p ?o }`);
|
|
33
|
-
});
|
|
34
|
-
(0, import_vitest.it)("translates blanknodes -> variables", ({ expect }) => {
|
|
35
|
-
const query = `
|
|
36
|
-
|
|
37
|
-
BASE <ex:>
|
|
38
|
-
CONSTRUCT {
|
|
39
|
-
?s0 ?p0 _:g_0 .
|
|
40
|
-
_:g_0 <a0> _:g_1 .
|
|
41
|
-
_:g_1 <b0> <c0> .
|
|
42
|
-
[
|
|
43
|
-
<a0> [
|
|
44
|
-
<b0> <c0> ;
|
|
45
|
-
] ;
|
|
46
|
-
] ?p0 ?o0 .
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
WHERE {
|
|
50
|
-
?s1 ?p1 _:g_4 .
|
|
51
|
-
?s1 ?p1 <a1> .
|
|
52
|
-
?s1 ?q1 <b1> .
|
|
53
|
-
?s1 ?q1 <c1> .
|
|
54
|
-
_:g_5 ?p2 ?o2 .
|
|
55
|
-
?s3 ?p3 _:g_6 .
|
|
56
|
-
_:g_6 <a3> <b3> .
|
|
57
|
-
?s4 ?p4 _:g_7 .
|
|
58
|
-
_:g_7 <a4> <b4> .
|
|
59
|
-
_:g_7 <c4> <d4> .
|
|
60
|
-
_:g_7 <c4> <e4> .
|
|
61
|
-
?s5 ?p5 _:g_8 .
|
|
62
|
-
_:g_8 <a5> _:g_9 .
|
|
63
|
-
_:g_9 <b5> <c5> .
|
|
64
|
-
[
|
|
65
|
-
<a6> [
|
|
66
|
-
<b6> <c6> ;
|
|
67
|
-
] ;
|
|
68
|
-
] ?p6 ?o6 .
|
|
69
|
-
_:g_12 <a7> <b7> .
|
|
70
|
-
_:g_12 <c7> <d7> .
|
|
71
|
-
_:g_12 <c7> <e7> .
|
|
72
|
-
|
|
73
|
-
}`;
|
|
74
|
-
const ast = parser.parse(query);
|
|
75
|
-
function extractCollection(collection) {
|
|
76
|
-
const result2 = [];
|
|
77
|
-
for (const entry of collection.triples) {
|
|
78
|
-
const subject = entry.subject;
|
|
79
|
-
const pred = entry.predicate;
|
|
80
|
-
if (F.isTripleCollection(entry.object)) {
|
|
81
|
-
const identifier = { ...F.graphNodeIdentifier(entry.object) };
|
|
82
|
-
result2.push(F.triple(subject, pred, identifier, F.gen()));
|
|
83
|
-
result2.push(...extractCollection(entry.object));
|
|
84
|
-
} else {
|
|
85
|
-
result2.push(F.triple(subject, pred, entry.object, F.gen()));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
return result2;
|
|
89
|
-
}
|
|
90
|
-
const flattenCollections = transformer.transformNodeSpecific(ast, {}, { pattern: { bgp: {
|
|
91
|
-
transform: (current) => {
|
|
92
|
-
const bgpCopy = F.forcedAutoGenTree(current);
|
|
93
|
-
const newTriples = [];
|
|
94
|
-
for (const entry of bgpCopy.triples) {
|
|
95
|
-
if (F.isTriple(entry)) {
|
|
96
|
-
const subject = entry.subject;
|
|
97
|
-
const pred = entry.predicate;
|
|
98
|
-
if (F.isTripleCollection(entry.object)) {
|
|
99
|
-
const object = entry.object;
|
|
100
|
-
const identifier = { ...F.graphNodeIdentifier(object) };
|
|
101
|
-
newTriples.push(F.triple(subject, pred, identifier));
|
|
102
|
-
newTriples.push(...extractCollection(object));
|
|
103
|
-
} else {
|
|
104
|
-
newTriples.push(F.triple(subject, pred, entry.object, F.gen()));
|
|
105
|
-
}
|
|
106
|
-
} else {
|
|
107
|
-
const genTriples = extractCollection(entry);
|
|
108
|
-
newTriples.push(...genTriples);
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
return F.patternBgp(newTriples, F.sourceLocationNodeReplaceUnsafe(current.loc));
|
|
112
|
-
}
|
|
113
|
-
} } });
|
|
114
|
-
const result = generator.generate(flattenCollections, { origSource: query });
|
|
115
|
-
expect(result).toBe(`BASE <ex:>
|
|
116
|
-
CONSTRUCT {
|
|
117
|
-
?s0 ?p0 _:g_0 .
|
|
118
|
-
_:g_0 <a0> _:g_1 .
|
|
119
|
-
_:g_1 <b0> <c0> .
|
|
120
|
-
[
|
|
121
|
-
<a0> [
|
|
122
|
-
<b0> <c0> ;
|
|
123
|
-
] ;
|
|
124
|
-
] ?p0 ?o0 .
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
WHERE {
|
|
129
|
-
?s1 ?p1 _:g_4 .
|
|
130
|
-
?s1 ?p1 <a1> .
|
|
131
|
-
?s1 ?q1 <b1> .
|
|
132
|
-
?s1 ?q1 <c1> .
|
|
133
|
-
_:g_5 ?p2 ?o2 .
|
|
134
|
-
?s3 ?p3 _:g_6 .
|
|
135
|
-
_:g_6 <a3> <b3> .
|
|
136
|
-
?s4 ?p4 _:g_7 .
|
|
137
|
-
_:g_7 <a4> <b4> .
|
|
138
|
-
_:g_7 <c4> <d4> .
|
|
139
|
-
_:g_7 <c4> <e4> .
|
|
140
|
-
?s5 ?p5 _:g_8 .
|
|
141
|
-
_:g_8 <a5> _:g_9 .
|
|
142
|
-
_:g_9 <b5> <c5> .
|
|
143
|
-
[
|
|
144
|
-
<a6> [
|
|
145
|
-
<b6> <c6> ;
|
|
146
|
-
] ;
|
|
147
|
-
] ?p6 ?o6 .
|
|
148
|
-
_:g_12 <a7> <b7> .
|
|
149
|
-
_:g_12 <c7> <d7> .
|
|
150
|
-
_:g_12 <c7> <e7> .
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
}`);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
(0, import_vitest.it)("generates hand constructed query", ({ expect }) => {
|
|
157
|
-
const query = `
|
|
158
|
-
SELECT * WHERE {
|
|
159
|
-
?s ?p ?o .
|
|
160
|
-
}`;
|
|
161
|
-
const ast = F.querySelect({
|
|
162
|
-
variables: [F.wildcard(F.gen())],
|
|
163
|
-
datasets: F.datasetClauses([], F.sourceLocation()),
|
|
164
|
-
context: [],
|
|
165
|
-
where: F.patternGroup([
|
|
166
|
-
F.patternBgp([
|
|
167
|
-
F.triple(F.termVariable("s", F.gen()), F.termVariable("p", F.gen()), F.termVariable("o", F.gen()))
|
|
168
|
-
], F.gen())
|
|
169
|
-
], F.gen()),
|
|
170
|
-
solutionModifiers: {}
|
|
171
|
-
}, F.gen());
|
|
172
|
-
const result = generator.generate(ast);
|
|
173
|
-
expect(result.trim()).toBe(query.trim());
|
|
174
|
-
});
|
|
175
|
-
});
|
|
@@ -1,68 +0,0 @@
|
|
|
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_1 = require("@traqula/rules-sparql-1-1");
|
|
27
|
-
var import_test_utils = require("@traqula/test-utils");
|
|
28
|
-
var import_vitest = require("vitest");
|
|
29
|
-
var import_lib = require("../lib/index.js");
|
|
30
|
-
(0, import_vitest.describe)("a SPARQL 1.1 generator", () => {
|
|
31
|
-
const generator = new import_lib.Generator();
|
|
32
|
-
const F = new import_rules_sparql_1_1.AstFactory();
|
|
33
|
-
function _sinkGenerated(suite, test, response) {
|
|
34
|
-
const dir = (0, import_test_utils.getStaticFilePath)();
|
|
35
|
-
const fileLoc = import_node_path.default.join(dir, suite, `${test}-generated.sparql`);
|
|
36
|
-
import_node_fs.default.writeFileSync(fileLoc, response);
|
|
37
|
-
}
|
|
38
|
-
(0, import_vitest.describe)("positive paths", () => {
|
|
39
|
-
for (const { name, statics } of (0, import_test_utils.positiveTest)("paths")) {
|
|
40
|
-
(0, import_vitest.it)(`can generate ${name}`, async ({ expect }) => {
|
|
41
|
-
const { query, ast, autoGen } = await statics();
|
|
42
|
-
const path2 = ast;
|
|
43
|
-
const generated = generator.generatePath(path2, { origSource: query });
|
|
44
|
-
expect(generated, "round-trip generation").toEqual(query.trim());
|
|
45
|
-
const replaceLoc = F.sourceLocationNodeReplaceUnsafe(path2.loc);
|
|
46
|
-
const autoGenAst = F.forcedAutoGenTree(path2);
|
|
47
|
-
autoGenAst.loc = replaceLoc;
|
|
48
|
-
const selfGenerated = generator.generatePath(autoGenAst);
|
|
49
|
-
expect(selfGenerated, "auto generated").toEqual(autoGen.trim());
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
});
|
|
53
|
-
(0, import_vitest.describe)("positive sparql 1.1", () => {
|
|
54
|
-
for (const { name, statics } of (0, import_test_utils.positiveTest)("sparql-1-1")) {
|
|
55
|
-
(0, import_vitest.it)(`can generate ${name}`, async ({ expect }) => {
|
|
56
|
-
const { query, ast, autoGen } = await statics();
|
|
57
|
-
const queryUpdate = ast;
|
|
58
|
-
const roundTripped = generator.generate(queryUpdate, { origSource: query });
|
|
59
|
-
expect(roundTripped, "round-trip generation").toEqual(query.trim());
|
|
60
|
-
const replaceLoc = F.sourceLocationNodeReplaceUnsafe(queryUpdate.loc);
|
|
61
|
-
const autoGenAst = F.forcedAutoGenTree(queryUpdate);
|
|
62
|
-
autoGenAst.loc = replaceLoc;
|
|
63
|
-
const selfGenerated = generator.generate(autoGenAst);
|
|
64
|
-
expect(selfGenerated, "auto generated").toEqual(autoGen.trim());
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
import { traqulaIndentation } from '@traqula/core';
|
|
2
|
-
import { Parser } from '@traqula/parser-sparql-1-1';
|
|
3
|
-
import { AstFactory, AstTransformer } from '@traqula/rules-sparql-1-1';
|
|
4
|
-
import { describe, it } from 'vitest';
|
|
5
|
-
import { Generator } from '../lib/index.js';
|
|
6
|
-
describe('a SPARQL 1.1 generator', () => {
|
|
7
|
-
const generator = new Generator();
|
|
8
|
-
const parser = new Parser();
|
|
9
|
-
const F = new AstFactory();
|
|
10
|
-
const transformer = new AstTransformer();
|
|
11
|
-
it('generates simple round tripped', ({ expect }) => {
|
|
12
|
-
const query = 'SELECT * WHERE { ?s ?p ?o }';
|
|
13
|
-
const ast = parser.parse(query);
|
|
14
|
-
const result = generator.generate(ast, { origSource: query });
|
|
15
|
-
expect(result).toBe(query);
|
|
16
|
-
});
|
|
17
|
-
it('self generates on no pretty', ({ expect }) => {
|
|
18
|
-
const query = 'SELECT * WHERE { ?s ?p ?o . }';
|
|
19
|
-
const ast = parser.parse(query);
|
|
20
|
-
const result = generator.generate(F.forcedAutoGenTree(ast), { [traqulaIndentation]: -1, indentInc: 0 });
|
|
21
|
-
expect(result).toBe(query);
|
|
22
|
-
});
|
|
23
|
-
describe('on altered nodes', () => {
|
|
24
|
-
it('translates ?s -> ?subject', ({ expect }) => {
|
|
25
|
-
const query = 'SELECT * WHERE { ?s ?p ?o }';
|
|
26
|
-
const ast = parser.parse(query);
|
|
27
|
-
const altered = transformer.transformNodeSpecific(ast, {}, { term: { variable: {
|
|
28
|
-
transform: variable => variable.value === 's' ?
|
|
29
|
-
F.termVariable('subject', F.sourceLocationNodeReplaceUnsafe(variable.loc)) :
|
|
30
|
-
variable,
|
|
31
|
-
} } });
|
|
32
|
-
const result = generator.generate(altered, { origSource: query });
|
|
33
|
-
expect(result).toBe(`SELECT * WHERE { ?subject ?p ?o }`);
|
|
34
|
-
});
|
|
35
|
-
it('translates blanknodes -> variables', ({ expect }) => {
|
|
36
|
-
const query = `
|
|
37
|
-
|
|
38
|
-
BASE <ex:>
|
|
39
|
-
CONSTRUCT {
|
|
40
|
-
?s0 ?p0 _:g_0 .
|
|
41
|
-
_:g_0 <a0> _:g_1 .
|
|
42
|
-
_:g_1 <b0> <c0> .
|
|
43
|
-
[
|
|
44
|
-
<a0> [
|
|
45
|
-
<b0> <c0> ;
|
|
46
|
-
] ;
|
|
47
|
-
] ?p0 ?o0 .
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
WHERE {
|
|
51
|
-
?s1 ?p1 _:g_4 .
|
|
52
|
-
?s1 ?p1 <a1> .
|
|
53
|
-
?s1 ?q1 <b1> .
|
|
54
|
-
?s1 ?q1 <c1> .
|
|
55
|
-
_:g_5 ?p2 ?o2 .
|
|
56
|
-
?s3 ?p3 _:g_6 .
|
|
57
|
-
_:g_6 <a3> <b3> .
|
|
58
|
-
?s4 ?p4 _:g_7 .
|
|
59
|
-
_:g_7 <a4> <b4> .
|
|
60
|
-
_:g_7 <c4> <d4> .
|
|
61
|
-
_:g_7 <c4> <e4> .
|
|
62
|
-
?s5 ?p5 _:g_8 .
|
|
63
|
-
_:g_8 <a5> _:g_9 .
|
|
64
|
-
_:g_9 <b5> <c5> .
|
|
65
|
-
[
|
|
66
|
-
<a6> [
|
|
67
|
-
<b6> <c6> ;
|
|
68
|
-
] ;
|
|
69
|
-
] ?p6 ?o6 .
|
|
70
|
-
_:g_12 <a7> <b7> .
|
|
71
|
-
_:g_12 <c7> <d7> .
|
|
72
|
-
_:g_12 <c7> <e7> .
|
|
73
|
-
|
|
74
|
-
}`;
|
|
75
|
-
const ast = parser.parse(query);
|
|
76
|
-
function extractCollection(collection) {
|
|
77
|
-
const result = [];
|
|
78
|
-
for (const entry of collection.triples) {
|
|
79
|
-
const subject = entry.subject;
|
|
80
|
-
const pred = entry.predicate;
|
|
81
|
-
if (F.isTripleCollection(entry.object)) {
|
|
82
|
-
const identifier = { ...F.graphNodeIdentifier(entry.object) };
|
|
83
|
-
result.push(F.triple(subject, pred, identifier, F.gen()));
|
|
84
|
-
result.push(...extractCollection(entry.object));
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
result.push(F.triple(subject, pred, entry.object, F.gen()));
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
const flattenCollections = transformer.transformNodeSpecific(ast, {}, { pattern: { bgp: {
|
|
93
|
-
transform: (current) => {
|
|
94
|
-
const bgpCopy = F.forcedAutoGenTree(current);
|
|
95
|
-
const newTriples = [];
|
|
96
|
-
for (const entry of bgpCopy.triples) {
|
|
97
|
-
if (F.isTriple(entry)) {
|
|
98
|
-
const subject = entry.subject;
|
|
99
|
-
const pred = entry.predicate;
|
|
100
|
-
if (F.isTripleCollection(entry.object)) {
|
|
101
|
-
const object = entry.object;
|
|
102
|
-
const identifier = { ...F.graphNodeIdentifier(object) };
|
|
103
|
-
newTriples.push(F.triple(subject, pred, identifier));
|
|
104
|
-
newTriples.push(...extractCollection(object));
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
newTriples.push(F.triple(subject, pred, entry.object, F.gen()));
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
const genTriples = extractCollection(entry);
|
|
112
|
-
newTriples.push(...genTriples);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return F.patternBgp(newTriples, F.sourceLocationNodeReplaceUnsafe(current.loc));
|
|
116
|
-
},
|
|
117
|
-
} } });
|
|
118
|
-
const result = generator.generate(flattenCollections, { origSource: query });
|
|
119
|
-
expect(result).toBe(`BASE <ex:>
|
|
120
|
-
CONSTRUCT {
|
|
121
|
-
?s0 ?p0 _:g_0 .
|
|
122
|
-
_:g_0 <a0> _:g_1 .
|
|
123
|
-
_:g_1 <b0> <c0> .
|
|
124
|
-
[
|
|
125
|
-
<a0> [
|
|
126
|
-
<b0> <c0> ;
|
|
127
|
-
] ;
|
|
128
|
-
] ?p0 ?o0 .
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
}
|
|
132
|
-
WHERE {
|
|
133
|
-
?s1 ?p1 _:g_4 .
|
|
134
|
-
?s1 ?p1 <a1> .
|
|
135
|
-
?s1 ?q1 <b1> .
|
|
136
|
-
?s1 ?q1 <c1> .
|
|
137
|
-
_:g_5 ?p2 ?o2 .
|
|
138
|
-
?s3 ?p3 _:g_6 .
|
|
139
|
-
_:g_6 <a3> <b3> .
|
|
140
|
-
?s4 ?p4 _:g_7 .
|
|
141
|
-
_:g_7 <a4> <b4> .
|
|
142
|
-
_:g_7 <c4> <d4> .
|
|
143
|
-
_:g_7 <c4> <e4> .
|
|
144
|
-
?s5 ?p5 _:g_8 .
|
|
145
|
-
_:g_8 <a5> _:g_9 .
|
|
146
|
-
_:g_9 <b5> <c5> .
|
|
147
|
-
[
|
|
148
|
-
<a6> [
|
|
149
|
-
<b6> <c6> ;
|
|
150
|
-
] ;
|
|
151
|
-
] ?p6 ?o6 .
|
|
152
|
-
_:g_12 <a7> <b7> .
|
|
153
|
-
_:g_12 <c7> <d7> .
|
|
154
|
-
_:g_12 <c7> <e7> .
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
}`);
|
|
158
|
-
});
|
|
159
|
-
});
|
|
160
|
-
it('generates hand constructed query', ({ expect }) => {
|
|
161
|
-
const query = `
|
|
162
|
-
SELECT * WHERE {
|
|
163
|
-
?s ?p ?o .
|
|
164
|
-
}`;
|
|
165
|
-
const ast = F.querySelect({
|
|
166
|
-
variables: [F.wildcard(F.gen())],
|
|
167
|
-
datasets: F.datasetClauses([], F.sourceLocation()),
|
|
168
|
-
context: [],
|
|
169
|
-
where: F.patternGroup([
|
|
170
|
-
F.patternBgp([
|
|
171
|
-
F.triple(F.termVariable('s', F.gen()), F.termVariable('p', F.gen()), F.termVariable('o', F.gen())),
|
|
172
|
-
], F.gen()),
|
|
173
|
-
], F.gen()),
|
|
174
|
-
solutionModifiers: {},
|
|
175
|
-
}, F.gen());
|
|
176
|
-
const result = generator.generate(ast);
|
|
177
|
-
expect(result.trim()).toBe(query.trim());
|
|
178
|
-
});
|
|
179
|
-
});
|
|
180
|
-
//# sourceMappingURL=integration.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../test/integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { traqulaIndentation } from '@traqula/core';\nimport { Parser } from '@traqula/parser-sparql-1-1';\nimport type * as T11 from '@traqula/rules-sparql-1-1';\nimport { AstFactory, AstTransformer } from '@traqula/rules-sparql-1-1';\nimport { describe, it } from 'vitest';\nimport { Generator } from '../lib/index.js';\n\ndescribe('a SPARQL 1.1 generator', () => {\n const generator = new Generator();\n const parser = new Parser();\n const F = new AstFactory();\n const transformer = new AstTransformer();\n\n it ('generates simple round tripped', ({ expect }) => {\n const query = 'SELECT * WHERE { ?s ?p ?o }';\n const ast = <T11.Query> parser.parse(query);\n const result = generator.generate(ast, { origSource: query });\n expect(result).toBe(query);\n });\n\n it ('self generates on no pretty', ({ expect }) => {\n const query = 'SELECT * WHERE { ?s ?p ?o . }';\n const ast = parser.parse(query);\n const result = generator.generate(F.forcedAutoGenTree(ast), { [traqulaIndentation]: -1, indentInc: 0 });\n expect(result).toBe(query);\n });\n\n describe('on altered nodes', () => {\n it('translates ?s -> ?subject', ({ expect }) => {\n const query = 'SELECT * WHERE { ?s ?p ?o }';\n const ast = <T11.Query> parser.parse(query);\n\n const altered = transformer.transformNodeSpecific<'unsafe', T11.Query>(\n ast,\n {},\n { term: { variable: {\n transform: variable => variable.value === 's' ?\n F.termVariable('subject', F.sourceLocationNodeReplaceUnsafe(variable.loc)) :\n variable,\n }}},\n );\n\n const result = generator.generate(altered, { origSource: query });\n expect(result).toBe(`SELECT * WHERE { ?subject ?p ?o }`);\n });\n\n it('translates blanknodes -> variables', ({ expect }) => {\n const query = `\n\nBASE <ex:>\nCONSTRUCT { \n ?s0 ?p0 _:g_0 .\n_:g_0 <a0> _:g_1 .\n_:g_1 <b0> <c0> .\n[\n <a0> [\n <b0> <c0> ; \n ] ; \n] ?p0 ?o0 .\n\n}\nWHERE {\n ?s1 ?p1 _:g_4 .\n?s1 ?p1 <a1> .\n?s1 ?q1 <b1> .\n?s1 ?q1 <c1> .\n_:g_5 ?p2 ?o2 .\n?s3 ?p3 _:g_6 .\n_:g_6 <a3> <b3> .\n?s4 ?p4 _:g_7 .\n_:g_7 <a4> <b4> .\n_:g_7 <c4> <d4> .\n_:g_7 <c4> <e4> .\n?s5 ?p5 _:g_8 .\n_:g_8 <a5> _:g_9 .\n_:g_9 <b5> <c5> .\n[\n <a6> [\n <b6> <c6> ; \n ] ; \n] ?p6 ?o6 .\n_:g_12 <a7> <b7> .\n_:g_12 <c7> <d7> .\n_:g_12 <c7> <e7> .\n\n}`;\n const ast = <T11.Query> parser.parse(query);\n\n function extractCollection(collection: T11.TripleCollection): T11.TripleNesting[] {\n const result: T11.TripleNesting[] = [];\n for (const entry of collection.triples) {\n const subject = entry.subject;\n const pred = entry.predicate;\n if (F.isTripleCollection(entry.object)) {\n const identifier = { ...F.graphNodeIdentifier(entry.object) };\n result.push(F.triple(subject, pred, identifier, F.gen()));\n result.push(...extractCollection(entry.object));\n } else {\n result.push(F.triple(\n subject,\n pred,\n entry.object,\n F.gen(),\n ));\n }\n }\n return result;\n }\n\n const flattenCollections = transformer.transformNodeSpecific<'unsafe', T11.Query>(\n ast,\n {},\n { pattern: { bgp: {\n transform: (current) => {\n const bgpCopy = F.forcedAutoGenTree(current);\n const newTriples: T11.TripleNesting[] = [];\n for (const entry of bgpCopy.triples) {\n if (F.isTriple(entry)) {\n const subject = entry.subject;\n const pred = entry.predicate;\n if (F.isTripleCollection(entry.object)) {\n const object = entry.object;\n const identifier = { ...F.graphNodeIdentifier(object) };\n newTriples.push(F.triple(subject, pred, identifier));\n newTriples.push(...extractCollection(object));\n } else {\n newTriples.push(F.triple(\n subject,\n pred,\n entry.object,\n F.gen(),\n ));\n }\n } else {\n const genTriples = extractCollection(entry);\n newTriples.push(...genTriples);\n }\n }\n return F.patternBgp(newTriples, F.sourceLocationNodeReplaceUnsafe(current.loc));\n },\n }}},\n );\n\n const result = generator.generate(flattenCollections, { origSource: query });\n expect(result).toBe(`BASE <ex:>\nCONSTRUCT { \n ?s0 ?p0 _:g_0 .\n_:g_0 <a0> _:g_1 .\n_:g_1 <b0> <c0> .\n[\n <a0> [\n <b0> <c0> ;\n ] ;\n] ?p0 ?o0 .\n\n\n}\nWHERE {\n ?s1 ?p1 _:g_4 .\n?s1 ?p1 <a1> .\n?s1 ?q1 <b1> .\n?s1 ?q1 <c1> .\n_:g_5 ?p2 ?o2 .\n?s3 ?p3 _:g_6 .\n_:g_6 <a3> <b3> .\n?s4 ?p4 _:g_7 .\n_:g_7 <a4> <b4> .\n_:g_7 <c4> <d4> .\n_:g_7 <c4> <e4> .\n?s5 ?p5 _:g_8 .\n_:g_8 <a5> _:g_9 .\n_:g_9 <b5> <c5> .\n[\n <a6> [\n <b6> <c6> ;\n ] ;\n] ?p6 ?o6 .\n_:g_12 <a7> <b7> .\n_:g_12 <c7> <d7> .\n_:g_12 <c7> <e7> .\n\n\n}`);\n });\n });\n\n it ('generates hand constructed query', ({ expect }) => {\n const query = `\nSELECT * WHERE {\n ?s ?p ?o .\n}`;\n const ast = F.querySelect({\n variables: [ F.wildcard(F.gen()) ],\n datasets: F.datasetClauses([], F.sourceLocation()),\n context: [],\n where: F.patternGroup([\n F.patternBgp([\n F.triple(F.termVariable('s', F.gen()), F.termVariable('p', F.gen()), F.termVariable('o', F.gen())),\n ], F.gen()),\n ], F.gen()),\n solutionModifiers: {},\n }, F.gen());\n const result = generator.generate(ast);\n expect(result.trim()).toBe(query.trim());\n });\n});\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { AstFactory } from '@traqula/rules-sparql-1-1';
|
|
4
|
-
import { positiveTest, getStaticFilePath } from '@traqula/test-utils';
|
|
5
|
-
import { describe, it } from 'vitest';
|
|
6
|
-
import { Generator } from '../lib/index.js';
|
|
7
|
-
describe('a SPARQL 1.1 generator', () => {
|
|
8
|
-
const generator = new Generator();
|
|
9
|
-
const F = new AstFactory();
|
|
10
|
-
function _sinkGenerated(suite, test, response) {
|
|
11
|
-
const dir = getStaticFilePath();
|
|
12
|
-
const fileLoc = path.join(dir, suite, `${test}-generated.sparql`);
|
|
13
|
-
// eslint-disable-next-line no-sync
|
|
14
|
-
fs.writeFileSync(fileLoc, response);
|
|
15
|
-
}
|
|
16
|
-
describe('positive paths', () => {
|
|
17
|
-
for (const { name, statics } of positiveTest('paths')) {
|
|
18
|
-
it(`can generate ${name}`, async ({ expect }) => {
|
|
19
|
-
const { query, ast, autoGen } = await statics();
|
|
20
|
-
const path = ast;
|
|
21
|
-
const generated = generator.generatePath(path, { origSource: query });
|
|
22
|
-
expect(generated, 'round-trip generation').toEqual(query.trim());
|
|
23
|
-
const replaceLoc = F.sourceLocationNodeReplaceUnsafe(path.loc);
|
|
24
|
-
const autoGenAst = F.forcedAutoGenTree(path);
|
|
25
|
-
autoGenAst.loc = replaceLoc;
|
|
26
|
-
const selfGenerated = generator.generatePath(autoGenAst);
|
|
27
|
-
// _sinkGenerated('paths', name, selfGenerated);
|
|
28
|
-
expect(selfGenerated, 'auto generated').toEqual(autoGen.trim());
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
describe('positive sparql 1.1', () => {
|
|
33
|
-
for (const { name, statics } of positiveTest('sparql-1-1')) {
|
|
34
|
-
it(`can generate ${name}`, async ({ expect }) => {
|
|
35
|
-
const { query, ast, autoGen } = await statics();
|
|
36
|
-
const queryUpdate = ast;
|
|
37
|
-
const roundTripped = generator.generate(queryUpdate, { origSource: query });
|
|
38
|
-
expect(roundTripped, 'round-trip generation').toEqual(query.trim());
|
|
39
|
-
const replaceLoc = F.sourceLocationNodeReplaceUnsafe(queryUpdate.loc);
|
|
40
|
-
const autoGenAst = F.forcedAutoGenTree(queryUpdate);
|
|
41
|
-
autoGenAst.loc = replaceLoc;
|
|
42
|
-
const selfGenerated = generator.generate(autoGenAst);
|
|
43
|
-
// _sinkGenerated('sparql-1-1', name, selfGenerated);
|
|
44
|
-
expect(selfGenerated, 'auto generated').toEqual(autoGen.trim());
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
//# sourceMappingURL=statics.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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 * as T11 from '@traqula/rules-sparql-1-1';\nimport { AstFactory } from '@traqula/rules-sparql-1-1';\nimport { positiveTest, getStaticFilePath } from '@traqula/test-utils';\nimport { describe, it } from 'vitest';\nimport { Generator } from '../lib/index.js';\n\ndescribe('a SPARQL 1.1 generator', () => {\n const generator = new Generator();\n const F = new AstFactory();\n\n function _sinkGenerated(suite: string, test: string, response: string): void {\n const dir = getStaticFilePath();\n const fileLoc = path.join(dir, suite, `${test}-generated.sparql`);\n // eslint-disable-next-line no-sync\n fs.writeFileSync(fileLoc, response);\n }\n\n describe('positive paths', () => {\n for (const { name, statics } of positiveTest('paths')) {\n it(`can generate ${name}`, async({ expect }) => {\n const { query, ast, autoGen } = await statics();\n const path = <T11.Path>ast;\n\n const generated = generator.generatePath(path, { origSource: query });\n expect(generated, 'round-trip generation').toEqual(query.trim());\n\n const replaceLoc = F.sourceLocationNodeReplaceUnsafe(path.loc);\n const autoGenAst = F.forcedAutoGenTree(path);\n autoGenAst.loc = replaceLoc;\n const selfGenerated = generator.generatePath(autoGenAst);\n // _sinkGenerated('paths', name, selfGenerated);\n expect(selfGenerated, 'auto generated').toEqual(autoGen.trim());\n });\n }\n });\n\n describe('positive sparql 1.1', () => {\n for (const { name, statics } of positiveTest('sparql-1-1')) {\n it(`can generate ${name}`, async({ expect }) => {\n const { query, ast, autoGen } = await statics();\n const queryUpdate = <T11.Query | T11.Update>ast;\n\n const roundTripped = generator.generate(queryUpdate, { origSource: query });\n expect(roundTripped, 'round-trip generation').toEqual(query.trim());\n\n const replaceLoc = F.sourceLocationNodeReplaceUnsafe(queryUpdate.loc);\n const autoGenAst = F.forcedAutoGenTree(queryUpdate);\n autoGenAst.loc = replaceLoc;\n const selfGenerated = generator.generate(autoGenAst);\n // _sinkGenerated('sparql-1-1', name, selfGenerated);\n expect(selfGenerated, 'auto generated').toEqual(autoGen.trim());\n });\n }\n });\n});\n"]}
|