ldkit 0.6.4 → 0.6.5

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.
Files changed (38) hide show
  1. package/esm/library/encoder.js +5 -4
  2. package/esm/library/rdf.js +2 -2
  3. package/esm/library/resource/query_builder.js +33 -33
  4. package/esm/library/sparql/escape.js +22 -0
  5. package/esm/library/sparql/mod.js +3 -0
  6. package/esm/library/sparql/sparql_query_builders.js +35 -0
  7. package/esm/library/sparql/sparql_shared_builders.js +40 -0
  8. package/esm/library/sparql/sparql_tag.js +47 -0
  9. package/esm/library/sparql/sparql_update_builders.js +15 -0
  10. package/esm/library/sparql/stringify.js +50 -0
  11. package/esm/sparql.js +1 -1
  12. package/package.json +1 -3
  13. package/script/library/encoder.js +5 -4
  14. package/script/library/rdf.js +2 -1
  15. package/script/library/resource/query_builder.js +38 -38
  16. package/script/library/sparql/escape.js +26 -0
  17. package/script/library/sparql/mod.js +14 -0
  18. package/script/library/sparql/sparql_query_builders.js +38 -0
  19. package/script/library/sparql/sparql_shared_builders.js +47 -0
  20. package/script/library/sparql/sparql_tag.js +54 -0
  21. package/script/library/sparql/sparql_update_builders.js +18 -0
  22. package/script/library/sparql/stringify.js +61 -0
  23. package/script/sparql.js +1 -1
  24. package/types/library/rdf.d.ts +2 -2
  25. package/types/library/resource/types.d.ts +2 -2
  26. package/types/library/schema/interface.d.ts +2 -2
  27. package/types/library/schema/mod.d.ts +1 -1
  28. package/types/library/sparql/escape.d.ts +1 -0
  29. package/types/library/sparql/mod.d.ts +3 -0
  30. package/types/library/sparql/sparql_query_builders.d.ts +1178 -0
  31. package/types/library/sparql/sparql_shared_builders.d.ts +13 -0
  32. package/types/library/sparql/sparql_tag.d.ts +3 -0
  33. package/types/library/sparql/sparql_update_builders.d.ts +131 -0
  34. package/types/library/sparql/stringify.d.ts +6 -0
  35. package/types/sparql.d.ts +1 -1
  36. package/esm/library/sparql.js +0 -2
  37. package/script/library/sparql.js +0 -13
  38. package/types/library/sparql.d.ts +0 -2
@@ -83,10 +83,11 @@ class Encoder {
83
83
  return;
84
84
  }
85
85
  if (property["@multilang"]) {
86
- Object.keys(value).forEach((language) => {
87
- const languageValue = Array.isArray(value[language])
88
- ? value[language]
89
- : [value[language]];
86
+ const multiValue = value;
87
+ Object.keys(multiValue).forEach((language) => {
88
+ const languageValue = Array.isArray(multiValue[language])
89
+ ? multiValue[language]
90
+ : [multiValue[language]];
90
91
  languageValue.forEach((singleValue) => {
91
92
  this.push(nodeId, propertyId, this.df.literal(singleValue, language.length > 0 ? language : undefined));
92
93
  });
@@ -1,6 +1,6 @@
1
1
  export { fromRdf, toRdf } from "rdf-literal";
2
- import { DataFactory } from "rdf-data-factory";
3
- export { DataFactory };
2
+ import { DataFactory, DefaultGraph, } from "rdf-data-factory";
3
+ export { DataFactory, DefaultGraph };
4
4
  export const quadsToGraph = (quads) => {
5
5
  const graph = new Map();
6
6
  for (const quad of quads) {
@@ -1,5 +1,5 @@
1
1
  import { getSchemaProperties } from "../schema/mod.js";
2
- import { $, CONSTRUCT, DELETE, INSERT, SELECT } from "../sparql.js";
2
+ import { CONSTRUCT, DELETE, INSERT, SELECT, sparql as $, } from "../sparql/mod.js";
3
3
  import { DataFactory } from "../rdf.js";
4
4
  import ldkit from "../namespaces/ldkit.js";
5
5
  import rdf from "../namespaces/rdf.js";
@@ -36,11 +36,11 @@ export class QueryBuilder {
36
36
  configurable: true,
37
37
  writable: true,
38
38
  value: (iris) => {
39
- return DELETE `
40
- ?s ?p ?o
41
- `.WHERE `
42
- ?s ?p ?o .
43
- VALUES ?s { ${iris.map(this.df.namedNode)} }
39
+ return DELETE `
40
+ ?s ?p ?o
41
+ `.WHERE `
42
+ ?s ?p ?o .
43
+ VALUES ?s { ${iris.map(this.df.namedNode)} }
44
44
  `.build();
45
45
  }
46
46
  });
@@ -96,36 +96,36 @@ export class QueryBuilder {
96
96
  return SELECT `(count(?iri) as ?count)`.WHERE `${quads}`.build();
97
97
  }
98
98
  getQuery(where, limit = 1000) {
99
- const selectSubQuery = SELECT `
100
- ${this.df.variable("iri")}
101
- `.WHERE `
102
- ${this.getShape(false, true)}
103
- ${where}
104
- `.LIMIT(limit);
105
- const query = CONSTRUCT `
106
- ${this.getResourceSignature()}
107
- ${this.getTypesSignature()}
108
- ${this.getShape(true, false, true)}
109
- `.WHERE `
110
- ${this.getTypesSignature()}
111
- ${this.getShape(true, true, true)}
112
- {
113
- ${selectSubQuery}
114
- }
99
+ const selectSubQuery = SELECT `
100
+ ${this.df.variable("iri")}
101
+ `.WHERE `
102
+ ${this.getShape(false, true)}
103
+ ${where}
104
+ `.LIMIT(limit).build();
105
+ const query = CONSTRUCT `
106
+ ${this.getResourceSignature()}
107
+ ${this.getTypesSignature()}
108
+ ${this.getShape(true, false, true)}
109
+ `.WHERE `
110
+ ${this.getTypesSignature()}
111
+ ${this.getShape(true, true, true)}
112
+ {
113
+ ${selectSubQuery}
114
+ }
115
115
  `.build();
116
116
  return query;
117
117
  }
118
118
  getByIrisQuery(iris) {
119
- const query = CONSTRUCT `
120
- ${this.getResourceSignature()}
121
- ${this.getTypesSignature()}
122
- ${this.getShape(true, false, true)}
123
- `.WHERE `
124
- ${this.getTypesSignature()}
125
- ${this.getShape(true, true, true)}
126
- VALUES ?iri {
127
- ${iris.map(this.df.namedNode)}
128
- }
119
+ const query = CONSTRUCT `
120
+ ${this.getResourceSignature()}
121
+ ${this.getTypesSignature()}
122
+ ${this.getShape(true, false, true)}
123
+ `.WHERE `
124
+ ${this.getTypesSignature()}
125
+ ${this.getShape(true, true, true)}
126
+ VALUES ?iri {
127
+ ${iris.map(this.df.namedNode)}
128
+ }
129
129
  `.build();
130
130
  return query;
131
131
  }
@@ -137,7 +137,7 @@ export class QueryBuilder {
137
137
  return INSERT.DATA `${quads}`.build();
138
138
  }
139
139
  deleteDataQuery(quads) {
140
- return $ `DELETE DATA { ${quads} }`.toString();
140
+ return DELETE.DATA `${quads}`.build();
141
141
  }
142
142
  updateQuery(entities) {
143
143
  const deleteQuads = [];
@@ -0,0 +1,22 @@
1
+ const escapeCharRegEx = /["\\\n\r]/;
2
+ const escapeCharRegExAll = /["\\\n\r]/g;
3
+ const replacer = (char) => {
4
+ switch (char) {
5
+ case `"`:
6
+ return `\\"`;
7
+ case `\\`:
8
+ return `\\\\`;
9
+ case `\n`:
10
+ return `\\n`;
11
+ case `\r`:
12
+ return `\\r`;
13
+ default:
14
+ return char; // this should never happen
15
+ }
16
+ };
17
+ export const escape = (value) => {
18
+ if (escapeCharRegEx.test(value)) {
19
+ return value.replace(escapeCharRegExAll, replacer);
20
+ }
21
+ return value;
22
+ };
@@ -0,0 +1,3 @@
1
+ export { sparql } from "./sparql_tag.js";
2
+ export { ASK, CONSTRUCT, DESCRIBE, SELECT } from "./sparql_query_builders.js";
3
+ export { DELETE, INSERT, WITH } from "./sparql_update_builders.js";
@@ -0,0 +1,35 @@
1
+ import { build, createNumericBuilder, createTemplateBuilder, } from "./sparql_shared_builders.js";
2
+ const OFFSET = createNumericBuilder((value) => `OFFSET ${value}\n`, { build });
3
+ const LIMIT = createNumericBuilder((value) => `LIMIT ${value}\n`, { build, OFFSET });
4
+ const ORDER_BY = createTemplateBuilder((value) => `ORDER BY ${value}\n`, { build, LIMIT });
5
+ const HAVING = createTemplateBuilder((value) => `HAVING(${value})\n`, { build, LIMIT });
6
+ const GROUP_BY = createTemplateBuilder((value) => `GROUP BY ${value}\n`, { build, HAVING, ORDER_BY, LIMIT });
7
+ const WHERE = createTemplateBuilder((value) => `WHERE {\n${value}\n}\n`, { build, GROUP_BY, ORDER_BY, LIMIT });
8
+ const FROM_NAMED = createTemplateBuilder((value) => `FROM NAMED ${value}\n`, { WHERE });
9
+ const FROM = createTemplateBuilder((value) => `FROM ${value}\n`, { FROM_NAMED, WHERE });
10
+ const _SELECT = createTemplateBuilder((value) => `SELECT ${value}\n`, { FROM, FROM_NAMED, WHERE });
11
+ const DISTINCT = createTemplateBuilder((value) => `SELECT DISTINCT ${value}\n`, { FROM, WHERE });
12
+ const REDUCED = createTemplateBuilder((value) => `SELECT REDUCED ${value}\n`, {
13
+ FROM,
14
+ WHERE,
15
+ });
16
+ export const SELECT = Object.assign(_SELECT, {
17
+ DISTINCT,
18
+ REDUCED,
19
+ ALL: _SELECT `*`,
20
+ });
21
+ const _CONSTRUCT = createTemplateBuilder((value) => `CONSTRUCT {\n${value}\n}\n`, { WHERE });
22
+ const _CONSTRUCT_WHERE = createTemplateBuilder((value) => `CONSTRUCT WHERE {\n${value}\n}\n`, { build, GROUP_BY, ORDER_BY, LIMIT });
23
+ export const CONSTRUCT = Object.assign(_CONSTRUCT, {
24
+ WHERE: _CONSTRUCT_WHERE,
25
+ });
26
+ const _ASK = createTemplateBuilder((value) => `ASK {\n${value}\n}\n`, { build });
27
+ const _ASK_FROM = createTemplateBuilder((value) => `ASK\nFROM ${value}\n`, { FROM_NAMED, WHERE });
28
+ const _ASK_FROM_NAMED = createTemplateBuilder((value) => `ASK\nFROM NAMED ${value}\n`, { FROM_NAMED, WHERE });
29
+ const _ASK_WHERE = createTemplateBuilder((value) => `ASK\nWHERE {\n${value}\n}\n`, { build, GROUP_BY, ORDER_BY, LIMIT });
30
+ export const ASK = Object.assign(_ASK, {
31
+ FROM: _ASK_FROM,
32
+ FROM_NAMED: _ASK_FROM_NAMED,
33
+ WHERE: _ASK_WHERE,
34
+ });
35
+ export const DESCRIBE = createTemplateBuilder((value) => `DESCRIBE ${value}\n`, { build, FROM, FROM_NAMED, WHERE });
@@ -0,0 +1,40 @@
1
+ import { DataFactory } from "../rdf.js";
2
+ import { sparql } from "./sparql_tag.js";
3
+ const createContext = (self, current, builders) => {
4
+ const previousQuery = self?.$partialQuery || "";
5
+ const context = { $partialQuery: previousQuery + current };
6
+ return Object.keys(builders).reduce((acc, key) => {
7
+ acc[key] = builders[key].bind(context);
8
+ return acc;
9
+ }, {});
10
+ };
11
+ export const createTemplateBuilder = (wrap, builders) => {
12
+ return function (strings, ...values) {
13
+ const self = this;
14
+ const inner = sparql(strings, ...values);
15
+ const current = wrap(inner);
16
+ return createContext(self, current, builders);
17
+ };
18
+ };
19
+ export const createNumericBuilder = (wrap, builders) => {
20
+ return function (number) {
21
+ const self = this;
22
+ const current = wrap(number);
23
+ return createContext(self, current, builders);
24
+ };
25
+ };
26
+ const df = new DataFactory();
27
+ export const createNamedNodeBuilder = (wrap, builders) => {
28
+ return function (stringOrNamedNode) {
29
+ const self = this;
30
+ const namedNode = typeof stringOrNamedNode === "string"
31
+ ? df.namedNode(stringOrNamedNode)
32
+ : stringOrNamedNode;
33
+ const inner = sparql `${namedNode}`;
34
+ const current = wrap(inner);
35
+ return createContext(self, current, builders);
36
+ };
37
+ };
38
+ export const build = function () {
39
+ return this?.$partialQuery || "";
40
+ };
@@ -0,0 +1,47 @@
1
+ import { DataFactory } from "../rdf.js";
2
+ import xsd from "../namespaces/xsd.js";
3
+ import { stringify } from "./stringify.js";
4
+ export const sparql = (strings, ...values) => {
5
+ let counter = 0;
6
+ let result = "";
7
+ for (const value of values) {
8
+ result += strings[counter++];
9
+ result += valueToString(value);
10
+ }
11
+ result += strings[counter];
12
+ return result;
13
+ };
14
+ const isIterable = (obj) => {
15
+ return Symbol.iterator in Object(obj);
16
+ };
17
+ const df = new DataFactory();
18
+ const valueToString = (value) => {
19
+ if (typeof value === "undefined" || value === null) {
20
+ return "";
21
+ }
22
+ if (typeof value === "string") {
23
+ return value;
24
+ }
25
+ if (typeof value === "number") {
26
+ const numberDataType = Number.isInteger(value) ? xsd.integer : xsd.decimal;
27
+ return stringify(df.literal(value.toString(), df.namedNode(numberDataType)));
28
+ }
29
+ if (typeof value === "boolean") {
30
+ return stringify(df.literal(value.toString(), df.namedNode(xsd.boolean)));
31
+ }
32
+ if (value instanceof Date) {
33
+ return stringify(df.literal(value.toISOString(), df.namedNode(xsd.dateTime)));
34
+ }
35
+ if (isIterable(value)) {
36
+ const [first, ...rest] = value;
37
+ let result = valueToString(first);
38
+ for (const part of rest) {
39
+ result += `\n${valueToString(part)}`;
40
+ }
41
+ return result;
42
+ }
43
+ if (value.termType) {
44
+ return stringify(value);
45
+ }
46
+ throw new Error("Not supported input type detected.");
47
+ };
@@ -0,0 +1,15 @@
1
+ import { build, createNamedNodeBuilder, createTemplateBuilder, } from "./sparql_shared_builders.js";
2
+ const WHERE = createTemplateBuilder((value) => `WHERE {\n${value}\n}\n`, { build });
3
+ const USING_NAMED = createNamedNodeBuilder((value) => `USING NAMED ${value}\n`, { WHERE });
4
+ const USING = createNamedNodeBuilder((value) => `USING ${value}\n`, { USING_NAMED, WHERE });
5
+ const _INSERT = createTemplateBuilder((value) => `INSERT {\n${value}\n}\n`, { USING, USING_NAMED, WHERE });
6
+ const _INSERT_DATA = createTemplateBuilder((value) => `INSERT DATA {\n${value}\n}\n`, { build });
7
+ export const INSERT = Object.assign(_INSERT, {
8
+ DATA: _INSERT_DATA,
9
+ });
10
+ const _DELETE = createTemplateBuilder((value) => `DELETE {\n${value}\n}\n`, { INSERT: _INSERT, USING, USING_NAMED, WHERE });
11
+ const _DELETE_DATA = createTemplateBuilder((value) => `DELETE DATA {\n${value}\n}\n`, { build });
12
+ export const DELETE = Object.assign(_DELETE, {
13
+ DATA: _DELETE_DATA,
14
+ });
15
+ export const WITH = createNamedNodeBuilder((value) => `WITH ${value}\n`, { build, INSERT: _INSERT, DELETE: _DELETE });
@@ -0,0 +1,50 @@
1
+ import { DefaultGraph } from "../rdf.js";
2
+ import xsd from "../namespaces/xsd.js";
3
+ import { escape } from "./escape.js";
4
+ export const blankNode = (term) => {
5
+ return `_:${term.value}`;
6
+ };
7
+ export const namedNode = (term) => {
8
+ return `<${term.value}>`;
9
+ };
10
+ export const variable = (term) => {
11
+ return `?${term.value}`;
12
+ };
13
+ export const literal = (term) => {
14
+ const datatype = term.datatype.value;
15
+ if (datatype === xsd.integer || datatype === xsd.boolean ||
16
+ datatype === xsd.decimal) {
17
+ return term.value;
18
+ }
19
+ const value = `"${escape(term.value)}"`;
20
+ if (term.language) {
21
+ return `${value}@${term.language}`;
22
+ }
23
+ if (datatype !== xsd.string) {
24
+ return `${value}^^${namedNode(term.datatype)}`;
25
+ }
26
+ return value;
27
+ };
28
+ const quad = (term) => {
29
+ const triple = `${stringify(term.subject)} ${stringify(term.predicate)} ${stringify(term.object)} .`;
30
+ if (term.graph.equals(DefaultGraph.INSTANCE)) {
31
+ return triple;
32
+ }
33
+ return `GRAPH ${stringify(term.graph)} { ${triple} }`;
34
+ };
35
+ export const stringify = (term) => {
36
+ switch (term.termType) {
37
+ case "BlankNode":
38
+ return blankNode(term);
39
+ case "NamedNode":
40
+ return namedNode(term);
41
+ case "Variable":
42
+ return variable(term);
43
+ case "Literal":
44
+ return literal(term);
45
+ case "Quad":
46
+ return quad(term);
47
+ default:
48
+ throw new Error("Unknown RDF type found.");
49
+ }
50
+ };
package/esm/sparql.js CHANGED
@@ -1 +1 @@
1
- export * from "./library/sparql.js";
1
+ export * from "./library/sparql/mod.js";
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "main": "./script/mod.js",
4
4
  "types": "./types/mod.d.ts",
5
5
  "name": "ldkit",
6
- "version": "0.6.4",
6
+ "version": "0.6.5",
7
7
  "description": "LDkit, a Linked Data query toolkit for TypeScript developers",
8
8
  "homepage": "https://ldkit.io",
9
9
  "author": "Karel Klima <karelklima@gmail.com> (https://karelklima.com)",
@@ -45,8 +45,6 @@
45
45
  },
46
46
  "dependencies": {
47
47
  "@comunica/types": "2.4.0",
48
- "@tpluscode/rdf-string": "0.2.26",
49
- "@tpluscode/sparql-builder": "0.3.23",
50
48
  "asynciterator": "3.7.0",
51
49
  "rdf-data-factory": "1.1.1",
52
50
  "rdf-js": "4.0.2",
@@ -90,10 +90,11 @@ class Encoder {
90
90
  return;
91
91
  }
92
92
  if (property["@multilang"]) {
93
- Object.keys(value).forEach((language) => {
94
- const languageValue = Array.isArray(value[language])
95
- ? value[language]
96
- : [value[language]];
93
+ const multiValue = value;
94
+ Object.keys(multiValue).forEach((language) => {
95
+ const languageValue = Array.isArray(multiValue[language])
96
+ ? multiValue[language]
97
+ : [multiValue[language]];
97
98
  languageValue.forEach((singleValue) => {
98
99
  this.push(nodeId, propertyId, this.df.literal(singleValue, language.length > 0 ? language : undefined));
99
100
  });
@@ -1,11 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.QuadFactory = exports.BindingsFactory = exports.ReadOnlyBindings = exports.TermFactory = exports.quadsToGraph = exports.DataFactory = exports.toRdf = exports.fromRdf = void 0;
3
+ exports.QuadFactory = exports.BindingsFactory = exports.ReadOnlyBindings = exports.TermFactory = exports.quadsToGraph = exports.DefaultGraph = exports.DataFactory = exports.toRdf = exports.fromRdf = void 0;
4
4
  var rdf_literal_1 = require("rdf-literal");
5
5
  Object.defineProperty(exports, "fromRdf", { enumerable: true, get: function () { return rdf_literal_1.fromRdf; } });
6
6
  Object.defineProperty(exports, "toRdf", { enumerable: true, get: function () { return rdf_literal_1.toRdf; } });
7
7
  const rdf_data_factory_1 = require("rdf-data-factory");
8
8
  Object.defineProperty(exports, "DataFactory", { enumerable: true, get: function () { return rdf_data_factory_1.DataFactory; } });
9
+ Object.defineProperty(exports, "DefaultGraph", { enumerable: true, get: function () { return rdf_data_factory_1.DefaultGraph; } });
9
10
  const quadsToGraph = (quads) => {
10
11
  const graph = new Map();
11
12
  for (const quad of quads) {
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.QueryBuilder = void 0;
7
7
  const mod_js_1 = require("../schema/mod.js");
8
- const sparql_js_1 = require("../sparql.js");
8
+ const mod_js_2 = require("../sparql/mod.js");
9
9
  const rdf_js_1 = require("../rdf.js");
10
10
  const ldkit_js_1 = __importDefault(require("../namespaces/ldkit.js"));
11
11
  const rdf_js_2 = __importDefault(require("../namespaces/rdf.js"));
@@ -42,11 +42,11 @@ class QueryBuilder {
42
42
  configurable: true,
43
43
  writable: true,
44
44
  value: (iris) => {
45
- return (0, sparql_js_1.DELETE) `
46
- ?s ?p ?o
47
- `.WHERE `
48
- ?s ?p ?o .
49
- VALUES ?s { ${iris.map(this.df.namedNode)} }
45
+ return (0, mod_js_2.DELETE) `
46
+ ?s ?p ?o
47
+ `.WHERE `
48
+ ?s ?p ?o .
49
+ VALUES ?s { ${iris.map(this.df.namedNode)} }
50
50
  `.build();
51
51
  }
52
52
  });
@@ -83,14 +83,14 @@ class QueryBuilder {
83
83
  return;
84
84
  }
85
85
  if (wrapOptional && isOptional) {
86
- conditions.push((0, sparql_js_1.$) `\nOPTIONAL {`);
86
+ conditions.push((0, mod_js_2.sparql) `\nOPTIONAL {`);
87
87
  }
88
88
  conditions.push(this.df.quad(this.df.variable(varPrefix), this.df.namedNode(property["@id"]), this.df.variable(`${varPrefix}_${index}`)));
89
89
  if (typeof property["@context"] === "object") {
90
90
  populateConditionsRecursive(property["@context"], `${varPrefix}_${index}`);
91
91
  }
92
92
  if (wrapOptional && isOptional) {
93
- conditions.push((0, sparql_js_1.$) `\n}\n`);
93
+ conditions.push((0, mod_js_2.sparql) `\n}\n`);
94
94
  }
95
95
  });
96
96
  };
@@ -99,39 +99,39 @@ class QueryBuilder {
99
99
  }
100
100
  countQuery() {
101
101
  const quads = this.getShape();
102
- return (0, sparql_js_1.SELECT) `(count(?iri) as ?count)`.WHERE `${quads}`.build();
102
+ return (0, mod_js_2.SELECT) `(count(?iri) as ?count)`.WHERE `${quads}`.build();
103
103
  }
104
104
  getQuery(where, limit = 1000) {
105
- const selectSubQuery = (0, sparql_js_1.SELECT) `
106
- ${this.df.variable("iri")}
107
- `.WHERE `
108
- ${this.getShape(false, true)}
109
- ${where}
110
- `.LIMIT(limit);
111
- const query = (0, sparql_js_1.CONSTRUCT) `
112
- ${this.getResourceSignature()}
113
- ${this.getTypesSignature()}
114
- ${this.getShape(true, false, true)}
115
- `.WHERE `
116
- ${this.getTypesSignature()}
117
- ${this.getShape(true, true, true)}
118
- {
119
- ${selectSubQuery}
120
- }
105
+ const selectSubQuery = (0, mod_js_2.SELECT) `
106
+ ${this.df.variable("iri")}
107
+ `.WHERE `
108
+ ${this.getShape(false, true)}
109
+ ${where}
110
+ `.LIMIT(limit).build();
111
+ const query = (0, mod_js_2.CONSTRUCT) `
112
+ ${this.getResourceSignature()}
113
+ ${this.getTypesSignature()}
114
+ ${this.getShape(true, false, true)}
115
+ `.WHERE `
116
+ ${this.getTypesSignature()}
117
+ ${this.getShape(true, true, true)}
118
+ {
119
+ ${selectSubQuery}
120
+ }
121
121
  `.build();
122
122
  return query;
123
123
  }
124
124
  getByIrisQuery(iris) {
125
- const query = (0, sparql_js_1.CONSTRUCT) `
126
- ${this.getResourceSignature()}
127
- ${this.getTypesSignature()}
128
- ${this.getShape(true, false, true)}
129
- `.WHERE `
130
- ${this.getTypesSignature()}
131
- ${this.getShape(true, true, true)}
132
- VALUES ?iri {
133
- ${iris.map(this.df.namedNode)}
134
- }
125
+ const query = (0, mod_js_2.CONSTRUCT) `
126
+ ${this.getResourceSignature()}
127
+ ${this.getTypesSignature()}
128
+ ${this.getShape(true, false, true)}
129
+ `.WHERE `
130
+ ${this.getTypesSignature()}
131
+ ${this.getShape(true, true, true)}
132
+ VALUES ?iri {
133
+ ${iris.map(this.df.namedNode)}
134
+ }
135
135
  `.build();
136
136
  return query;
137
137
  }
@@ -140,10 +140,10 @@ class QueryBuilder {
140
140
  return this.insertDataQuery(quads);
141
141
  }
142
142
  insertDataQuery(quads) {
143
- return sparql_js_1.INSERT.DATA `${quads}`.build();
143
+ return mod_js_2.INSERT.DATA `${quads}`.build();
144
144
  }
145
145
  deleteDataQuery(quads) {
146
- return (0, sparql_js_1.$) `DELETE DATA { ${quads} }`.toString();
146
+ return mod_js_2.DELETE.DATA `${quads}`.build();
147
147
  }
148
148
  updateQuery(entities) {
149
149
  const deleteQuads = [];
@@ -155,7 +155,7 @@ class QueryBuilder {
155
155
  insertQuads.push(...helper.getInsertQuads());
156
156
  whereQuads.push(...helper.getWhereQuads());
157
157
  });
158
- return (0, sparql_js_1.DELETE) `${deleteQuads}`.INSERT `${insertQuads}`
158
+ return (0, mod_js_2.DELETE) `${deleteQuads}`.INSERT `${insertQuads}`
159
159
  .WHERE `${deleteQuads}`.build();
160
160
  }
161
161
  }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.escape = void 0;
4
+ const escapeCharRegEx = /["\\\n\r]/;
5
+ const escapeCharRegExAll = /["\\\n\r]/g;
6
+ const replacer = (char) => {
7
+ switch (char) {
8
+ case `"`:
9
+ return `\\"`;
10
+ case `\\`:
11
+ return `\\\\`;
12
+ case `\n`:
13
+ return `\\n`;
14
+ case `\r`:
15
+ return `\\r`;
16
+ default:
17
+ return char; // this should never happen
18
+ }
19
+ };
20
+ const escape = (value) => {
21
+ if (escapeCharRegEx.test(value)) {
22
+ return value.replace(escapeCharRegExAll, replacer);
23
+ }
24
+ return value;
25
+ };
26
+ exports.escape = escape;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WITH = exports.INSERT = exports.DELETE = exports.SELECT = exports.DESCRIBE = exports.CONSTRUCT = exports.ASK = exports.sparql = void 0;
4
+ var sparql_tag_js_1 = require("./sparql_tag.js");
5
+ Object.defineProperty(exports, "sparql", { enumerable: true, get: function () { return sparql_tag_js_1.sparql; } });
6
+ var sparql_query_builders_js_1 = require("./sparql_query_builders.js");
7
+ Object.defineProperty(exports, "ASK", { enumerable: true, get: function () { return sparql_query_builders_js_1.ASK; } });
8
+ Object.defineProperty(exports, "CONSTRUCT", { enumerable: true, get: function () { return sparql_query_builders_js_1.CONSTRUCT; } });
9
+ Object.defineProperty(exports, "DESCRIBE", { enumerable: true, get: function () { return sparql_query_builders_js_1.DESCRIBE; } });
10
+ Object.defineProperty(exports, "SELECT", { enumerable: true, get: function () { return sparql_query_builders_js_1.SELECT; } });
11
+ var sparql_update_builders_js_1 = require("./sparql_update_builders.js");
12
+ Object.defineProperty(exports, "DELETE", { enumerable: true, get: function () { return sparql_update_builders_js_1.DELETE; } });
13
+ Object.defineProperty(exports, "INSERT", { enumerable: true, get: function () { return sparql_update_builders_js_1.INSERT; } });
14
+ Object.defineProperty(exports, "WITH", { enumerable: true, get: function () { return sparql_update_builders_js_1.WITH; } });
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DESCRIBE = exports.ASK = exports.CONSTRUCT = exports.SELECT = void 0;
4
+ const sparql_shared_builders_js_1 = require("./sparql_shared_builders.js");
5
+ const OFFSET = (0, sparql_shared_builders_js_1.createNumericBuilder)((value) => `OFFSET ${value}\n`, { build: sparql_shared_builders_js_1.build });
6
+ const LIMIT = (0, sparql_shared_builders_js_1.createNumericBuilder)((value) => `LIMIT ${value}\n`, { build: sparql_shared_builders_js_1.build, OFFSET });
7
+ const ORDER_BY = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `ORDER BY ${value}\n`, { build: sparql_shared_builders_js_1.build, LIMIT });
8
+ const HAVING = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `HAVING(${value})\n`, { build: sparql_shared_builders_js_1.build, LIMIT });
9
+ const GROUP_BY = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `GROUP BY ${value}\n`, { build: sparql_shared_builders_js_1.build, HAVING, ORDER_BY, LIMIT });
10
+ const WHERE = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `WHERE {\n${value}\n}\n`, { build: sparql_shared_builders_js_1.build, GROUP_BY, ORDER_BY, LIMIT });
11
+ const FROM_NAMED = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `FROM NAMED ${value}\n`, { WHERE });
12
+ const FROM = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `FROM ${value}\n`, { FROM_NAMED, WHERE });
13
+ const _SELECT = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `SELECT ${value}\n`, { FROM, FROM_NAMED, WHERE });
14
+ const DISTINCT = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `SELECT DISTINCT ${value}\n`, { FROM, WHERE });
15
+ const REDUCED = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `SELECT REDUCED ${value}\n`, {
16
+ FROM,
17
+ WHERE,
18
+ });
19
+ exports.SELECT = Object.assign(_SELECT, {
20
+ DISTINCT,
21
+ REDUCED,
22
+ ALL: _SELECT `*`,
23
+ });
24
+ const _CONSTRUCT = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `CONSTRUCT {\n${value}\n}\n`, { WHERE });
25
+ const _CONSTRUCT_WHERE = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `CONSTRUCT WHERE {\n${value}\n}\n`, { build: sparql_shared_builders_js_1.build, GROUP_BY, ORDER_BY, LIMIT });
26
+ exports.CONSTRUCT = Object.assign(_CONSTRUCT, {
27
+ WHERE: _CONSTRUCT_WHERE,
28
+ });
29
+ const _ASK = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `ASK {\n${value}\n}\n`, { build: sparql_shared_builders_js_1.build });
30
+ const _ASK_FROM = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `ASK\nFROM ${value}\n`, { FROM_NAMED, WHERE });
31
+ const _ASK_FROM_NAMED = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `ASK\nFROM NAMED ${value}\n`, { FROM_NAMED, WHERE });
32
+ const _ASK_WHERE = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `ASK\nWHERE {\n${value}\n}\n`, { build: sparql_shared_builders_js_1.build, GROUP_BY, ORDER_BY, LIMIT });
33
+ exports.ASK = Object.assign(_ASK, {
34
+ FROM: _ASK_FROM,
35
+ FROM_NAMED: _ASK_FROM_NAMED,
36
+ WHERE: _ASK_WHERE,
37
+ });
38
+ exports.DESCRIBE = (0, sparql_shared_builders_js_1.createTemplateBuilder)((value) => `DESCRIBE ${value}\n`, { build: sparql_shared_builders_js_1.build, FROM, FROM_NAMED, WHERE });
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.build = exports.createNamedNodeBuilder = exports.createNumericBuilder = exports.createTemplateBuilder = void 0;
4
+ const rdf_js_1 = require("../rdf.js");
5
+ const sparql_tag_js_1 = require("./sparql_tag.js");
6
+ const createContext = (self, current, builders) => {
7
+ const previousQuery = self?.$partialQuery || "";
8
+ const context = { $partialQuery: previousQuery + current };
9
+ return Object.keys(builders).reduce((acc, key) => {
10
+ acc[key] = builders[key].bind(context);
11
+ return acc;
12
+ }, {});
13
+ };
14
+ const createTemplateBuilder = (wrap, builders) => {
15
+ return function (strings, ...values) {
16
+ const self = this;
17
+ const inner = (0, sparql_tag_js_1.sparql)(strings, ...values);
18
+ const current = wrap(inner);
19
+ return createContext(self, current, builders);
20
+ };
21
+ };
22
+ exports.createTemplateBuilder = createTemplateBuilder;
23
+ const createNumericBuilder = (wrap, builders) => {
24
+ return function (number) {
25
+ const self = this;
26
+ const current = wrap(number);
27
+ return createContext(self, current, builders);
28
+ };
29
+ };
30
+ exports.createNumericBuilder = createNumericBuilder;
31
+ const df = new rdf_js_1.DataFactory();
32
+ const createNamedNodeBuilder = (wrap, builders) => {
33
+ return function (stringOrNamedNode) {
34
+ const self = this;
35
+ const namedNode = typeof stringOrNamedNode === "string"
36
+ ? df.namedNode(stringOrNamedNode)
37
+ : stringOrNamedNode;
38
+ const inner = (0, sparql_tag_js_1.sparql) `${namedNode}`;
39
+ const current = wrap(inner);
40
+ return createContext(self, current, builders);
41
+ };
42
+ };
43
+ exports.createNamedNodeBuilder = createNamedNodeBuilder;
44
+ const build = function () {
45
+ return this?.$partialQuery || "";
46
+ };
47
+ exports.build = build;