@traqula/rules-sparql-1-1 0.0.21 → 0.0.23

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 (188) hide show
  1. package/dist/cjs/lib/MinimalSparqlParser.js +64 -0
  2. package/dist/cjs/lib/Sparql11types.js +16 -0
  3. package/dist/cjs/lib/astFactory.js +121 -0
  4. package/dist/cjs/lib/expressionHelpers.js +215 -0
  5. package/dist/cjs/lib/factoryMixins/ContextFactory.js +55 -0
  6. package/dist/cjs/lib/factoryMixins/ExpressionFactory.js +105 -0
  7. package/dist/cjs/lib/factoryMixins/GraphRefFactory.js +76 -0
  8. package/dist/cjs/lib/factoryMixins/PathFactory.js +90 -0
  9. package/dist/cjs/lib/factoryMixins/Patternfactory.js +123 -0
  10. package/dist/cjs/lib/factoryMixins/QueryFactory.js +68 -0
  11. package/dist/cjs/lib/factoryMixins/SolutionModifiersFactory.js +80 -0
  12. package/dist/cjs/lib/factoryMixins/TermFactory.js +105 -0
  13. package/dist/cjs/lib/factoryMixins/UpdateOperationFactory.js +150 -0
  14. package/dist/cjs/lib/factoryMixins/mixins.js +43 -0
  15. package/dist/cjs/lib/grammar/builtIn.js +385 -0
  16. package/dist/cjs/lib/grammar/dataSetClause.js +118 -0
  17. package/dist/cjs/lib/grammar/expression.js +384 -0
  18. package/dist/cjs/lib/grammar/general.js +168 -0
  19. package/dist/cjs/lib/grammar/index.js +115 -0
  20. package/dist/cjs/lib/grammar/literals.js +282 -0
  21. package/dist/cjs/lib/grammar/propertyPaths.js +206 -0
  22. package/dist/cjs/lib/grammar/queryUnit.js +390 -0
  23. package/dist/cjs/lib/grammar/solutionModifier.js +280 -0
  24. package/dist/cjs/lib/grammar/tripleBlock.js +384 -0
  25. package/dist/cjs/lib/grammar/updateUnit.js +546 -0
  26. package/dist/cjs/lib/grammar/whereClause.js +483 -0
  27. package/dist/cjs/lib/index.js +56 -0
  28. package/dist/cjs/lib/lexer/BuiltInCalls.js +337 -0
  29. package/dist/cjs/lib/lexer/graph.js +41 -0
  30. package/dist/cjs/lib/lexer/index.js +50 -0
  31. package/dist/cjs/lib/lexer/lexer.js +199 -0
  32. package/dist/cjs/lib/lexer/lexerPatterns.js +133 -0
  33. package/dist/cjs/lib/lexer/symbols.js +107 -0
  34. package/dist/cjs/lib/lexer/terminals.js +103 -0
  35. package/dist/cjs/lib/sparql11HelperTypes.js +16 -0
  36. package/dist/cjs/lib/utils.js +64 -0
  37. package/dist/cjs/lib/validation/validators.js +214 -0
  38. package/dist/cjs/package.json +1 -0
  39. package/dist/esm/lib/MinimalSparqlParser.js.map +1 -0
  40. package/dist/esm/lib/Sparql11types.js.map +1 -0
  41. package/dist/esm/lib/astFactory.js.map +1 -0
  42. package/{lib → dist/esm/lib}/expressionHelpers.d.ts +1 -1
  43. package/dist/esm/lib/expressionHelpers.js.map +1 -0
  44. package/dist/esm/lib/factoryMixins/ContextFactory.js.map +1 -0
  45. package/dist/esm/lib/factoryMixins/ExpressionFactory.js.map +1 -0
  46. package/dist/esm/lib/factoryMixins/GraphRefFactory.js.map +1 -0
  47. package/dist/esm/lib/factoryMixins/PathFactory.js.map +1 -0
  48. package/dist/esm/lib/factoryMixins/Patternfactory.js.map +1 -0
  49. package/dist/esm/lib/factoryMixins/QueryFactory.js.map +1 -0
  50. package/dist/esm/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -0
  51. package/dist/esm/lib/factoryMixins/TermFactory.js.map +1 -0
  52. package/dist/esm/lib/factoryMixins/UpdateOperationFactory.js.map +1 -0
  53. package/dist/esm/lib/factoryMixins/mixins.js.map +1 -0
  54. package/{lib → dist/esm/lib}/grammar/builtIn.d.ts +1 -1
  55. package/dist/esm/lib/grammar/builtIn.js.map +1 -0
  56. package/{lib → dist/esm/lib}/grammar/dataSetClause.d.ts +1 -1
  57. package/dist/esm/lib/grammar/dataSetClause.js.map +1 -0
  58. package/dist/esm/lib/grammar/expression.js.map +1 -0
  59. package/dist/esm/lib/grammar/general.js.map +1 -0
  60. package/dist/esm/lib/grammar/index.js.map +1 -0
  61. package/dist/esm/lib/grammar/literals.js.map +1 -0
  62. package/{lib → dist/esm/lib}/grammar/propertyPaths.d.ts +3 -3
  63. package/dist/esm/lib/grammar/propertyPaths.js.map +1 -0
  64. package/dist/esm/lib/grammar/queryUnit.js.map +1 -0
  65. package/dist/esm/lib/grammar/solutionModifier.js.map +1 -0
  66. package/{lib → dist/esm/lib}/grammar/tripleBlock.d.ts +4 -4
  67. package/dist/esm/lib/grammar/tripleBlock.js.map +1 -0
  68. package/dist/esm/lib/grammar/updateUnit.js.map +1 -0
  69. package/dist/esm/lib/grammar/whereClause.js.map +1 -0
  70. package/dist/esm/lib/index.js.map +1 -0
  71. package/{lib → dist/esm/lib}/lexer/BuiltInCalls.d.ts +1 -1
  72. package/dist/esm/lib/lexer/BuiltInCalls.js.map +1 -0
  73. package/{lib → dist/esm/lib}/lexer/graph.d.ts +1 -1
  74. package/dist/esm/lib/lexer/graph.js.map +1 -0
  75. package/dist/esm/lib/lexer/index.js.map +1 -0
  76. package/{lib → dist/esm/lib}/lexer/lexer.d.ts +2 -2
  77. package/dist/esm/lib/lexer/lexer.js.map +1 -0
  78. package/dist/esm/lib/lexer/lexerPatterns.js.map +1 -0
  79. package/{lib → dist/esm/lib}/lexer/symbols.d.ts +1 -1
  80. package/dist/esm/lib/lexer/symbols.js.map +1 -0
  81. package/{lib → dist/esm/lib}/lexer/terminals.d.ts +1 -1
  82. package/{lib → dist/esm/lib}/lexer/terminals.js +1 -1
  83. package/dist/esm/lib/lexer/terminals.js.map +1 -0
  84. package/dist/esm/lib/sparql11HelperTypes.js.map +1 -0
  85. package/dist/esm/lib/utils.js.map +1 -0
  86. package/dist/esm/lib/validation/validators.js.map +1 -0
  87. package/package.json +14 -18
  88. package/lib/MinimalSparqlParser.js.map +0 -1
  89. package/lib/Sparql11types.js.map +0 -1
  90. package/lib/astFactory.js.map +0 -1
  91. package/lib/expressionHelpers.js.map +0 -1
  92. package/lib/factoryMixins/ContextFactory.js.map +0 -1
  93. package/lib/factoryMixins/ExpressionFactory.js.map +0 -1
  94. package/lib/factoryMixins/GraphRefFactory.js.map +0 -1
  95. package/lib/factoryMixins/PathFactory.js.map +0 -1
  96. package/lib/factoryMixins/Patternfactory.js.map +0 -1
  97. package/lib/factoryMixins/QueryFactory.js.map +0 -1
  98. package/lib/factoryMixins/SolutionModifiersFactory.js.map +0 -1
  99. package/lib/factoryMixins/TermFactory.js.map +0 -1
  100. package/lib/factoryMixins/UpdateOperationFactory.js.map +0 -1
  101. package/lib/factoryMixins/mixins.js.map +0 -1
  102. package/lib/grammar/builtIn.js.map +0 -1
  103. package/lib/grammar/dataSetClause.js.map +0 -1
  104. package/lib/grammar/expression.js.map +0 -1
  105. package/lib/grammar/general.js.map +0 -1
  106. package/lib/grammar/index.js.map +0 -1
  107. package/lib/grammar/literals.js.map +0 -1
  108. package/lib/grammar/propertyPaths.js.map +0 -1
  109. package/lib/grammar/queryUnit.js.map +0 -1
  110. package/lib/grammar/solutionModifier.js.map +0 -1
  111. package/lib/grammar/tripleBlock.js.map +0 -1
  112. package/lib/grammar/updateUnit.js.map +0 -1
  113. package/lib/grammar/whereClause.js.map +0 -1
  114. package/lib/index.cjs +0 -14673
  115. package/lib/index.js.map +0 -1
  116. package/lib/lexer/BuiltInCalls.js.map +0 -1
  117. package/lib/lexer/graph.js.map +0 -1
  118. package/lib/lexer/index.js.map +0 -1
  119. package/lib/lexer/lexer.js.map +0 -1
  120. package/lib/lexer/lexerPatterns.js.map +0 -1
  121. package/lib/lexer/symbols.js.map +0 -1
  122. package/lib/lexer/terminals.js.map +0 -1
  123. package/lib/sparql11HelperTypes.js.map +0 -1
  124. package/lib/utils.js.map +0 -1
  125. package/lib/validation/validators.js.map +0 -1
  126. /package/{lib → dist/esm/lib}/MinimalSparqlParser.d.ts +0 -0
  127. /package/{lib → dist/esm/lib}/MinimalSparqlParser.js +0 -0
  128. /package/{lib → dist/esm/lib}/Sparql11types.d.ts +0 -0
  129. /package/{lib → dist/esm/lib}/Sparql11types.js +0 -0
  130. /package/{lib → dist/esm/lib}/astFactory.d.ts +0 -0
  131. /package/{lib → dist/esm/lib}/astFactory.js +0 -0
  132. /package/{lib → dist/esm/lib}/expressionHelpers.js +0 -0
  133. /package/{lib → dist/esm/lib}/factoryMixins/ContextFactory.d.ts +0 -0
  134. /package/{lib → dist/esm/lib}/factoryMixins/ContextFactory.js +0 -0
  135. /package/{lib → dist/esm/lib}/factoryMixins/ExpressionFactory.d.ts +0 -0
  136. /package/{lib → dist/esm/lib}/factoryMixins/ExpressionFactory.js +0 -0
  137. /package/{lib → dist/esm/lib}/factoryMixins/GraphRefFactory.d.ts +0 -0
  138. /package/{lib → dist/esm/lib}/factoryMixins/GraphRefFactory.js +0 -0
  139. /package/{lib → dist/esm/lib}/factoryMixins/PathFactory.d.ts +0 -0
  140. /package/{lib → dist/esm/lib}/factoryMixins/PathFactory.js +0 -0
  141. /package/{lib → dist/esm/lib}/factoryMixins/Patternfactory.d.ts +0 -0
  142. /package/{lib → dist/esm/lib}/factoryMixins/Patternfactory.js +0 -0
  143. /package/{lib → dist/esm/lib}/factoryMixins/QueryFactory.d.ts +0 -0
  144. /package/{lib → dist/esm/lib}/factoryMixins/QueryFactory.js +0 -0
  145. /package/{lib → dist/esm/lib}/factoryMixins/SolutionModifiersFactory.d.ts +0 -0
  146. /package/{lib → dist/esm/lib}/factoryMixins/SolutionModifiersFactory.js +0 -0
  147. /package/{lib → dist/esm/lib}/factoryMixins/TermFactory.d.ts +0 -0
  148. /package/{lib → dist/esm/lib}/factoryMixins/TermFactory.js +0 -0
  149. /package/{lib → dist/esm/lib}/factoryMixins/UpdateOperationFactory.d.ts +0 -0
  150. /package/{lib → dist/esm/lib}/factoryMixins/UpdateOperationFactory.js +0 -0
  151. /package/{lib → dist/esm/lib}/factoryMixins/mixins.d.ts +0 -0
  152. /package/{lib → dist/esm/lib}/factoryMixins/mixins.js +0 -0
  153. /package/{lib → dist/esm/lib}/grammar/builtIn.js +0 -0
  154. /package/{lib → dist/esm/lib}/grammar/dataSetClause.js +0 -0
  155. /package/{lib → dist/esm/lib}/grammar/expression.d.ts +0 -0
  156. /package/{lib → dist/esm/lib}/grammar/expression.js +0 -0
  157. /package/{lib → dist/esm/lib}/grammar/general.d.ts +0 -0
  158. /package/{lib → dist/esm/lib}/grammar/general.js +0 -0
  159. /package/{lib → dist/esm/lib}/grammar/index.d.ts +0 -0
  160. /package/{lib → dist/esm/lib}/grammar/index.js +0 -0
  161. /package/{lib → dist/esm/lib}/grammar/literals.d.ts +0 -0
  162. /package/{lib → dist/esm/lib}/grammar/literals.js +0 -0
  163. /package/{lib → dist/esm/lib}/grammar/propertyPaths.js +0 -0
  164. /package/{lib → dist/esm/lib}/grammar/queryUnit.d.ts +0 -0
  165. /package/{lib → dist/esm/lib}/grammar/queryUnit.js +0 -0
  166. /package/{lib → dist/esm/lib}/grammar/solutionModifier.d.ts +0 -0
  167. /package/{lib → dist/esm/lib}/grammar/solutionModifier.js +0 -0
  168. /package/{lib → dist/esm/lib}/grammar/tripleBlock.js +0 -0
  169. /package/{lib → dist/esm/lib}/grammar/updateUnit.d.ts +0 -0
  170. /package/{lib → dist/esm/lib}/grammar/updateUnit.js +0 -0
  171. /package/{lib → dist/esm/lib}/grammar/whereClause.d.ts +0 -0
  172. /package/{lib → dist/esm/lib}/grammar/whereClause.js +0 -0
  173. /package/{lib → dist/esm/lib}/index.d.ts +0 -0
  174. /package/{lib → dist/esm/lib}/index.js +0 -0
  175. /package/{lib → dist/esm/lib}/lexer/BuiltInCalls.js +0 -0
  176. /package/{lib → dist/esm/lib}/lexer/graph.js +0 -0
  177. /package/{lib → dist/esm/lib}/lexer/index.d.ts +0 -0
  178. /package/{lib → dist/esm/lib}/lexer/index.js +0 -0
  179. /package/{lib → dist/esm/lib}/lexer/lexer.js +0 -0
  180. /package/{lib → dist/esm/lib}/lexer/lexerPatterns.d.ts +0 -0
  181. /package/{lib → dist/esm/lib}/lexer/lexerPatterns.js +0 -0
  182. /package/{lib → dist/esm/lib}/lexer/symbols.js +0 -0
  183. /package/{lib → dist/esm/lib}/sparql11HelperTypes.d.ts +0 -0
  184. /package/{lib → dist/esm/lib}/sparql11HelperTypes.js +0 -0
  185. /package/{lib → dist/esm/lib}/utils.d.ts +0 -0
  186. /package/{lib → dist/esm/lib}/utils.js +0 -0
  187. /package/{lib → dist/esm/lib}/validation/validators.d.ts +0 -0
  188. /package/{lib → dist/esm/lib}/validation/validators.js +0 -0
@@ -0,0 +1,390 @@
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 __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var queryUnit_exports = {};
30
+ __export(queryUnit_exports, {
31
+ askQuery: () => askQuery,
32
+ constructQuery: () => constructQuery,
33
+ constructTemplate: () => constructTemplate,
34
+ constructTriples: () => constructTriples,
35
+ describeQuery: () => describeQuery,
36
+ query: () => query,
37
+ queryUnit: () => queryUnit,
38
+ selectClause: () => selectClause,
39
+ selectQuery: () => selectQuery,
40
+ subSelect: () => subSelect,
41
+ valuesClause: () => valuesClause
42
+ });
43
+ module.exports = __toCommonJS(queryUnit_exports);
44
+ var import_core = require("@traqula/core");
45
+ var l = __toESM(require("../lexer/index.js"), 1);
46
+ var import_validators = require("../validation/validators.js");
47
+ var import_dataSetClause = require("./dataSetClause.js");
48
+ var import_expression = require("./expression.js");
49
+ var import_general = require("./general.js");
50
+ var import_solutionModifier = require("./solutionModifier.js");
51
+ var import_tripleBlock = require("./tripleBlock.js");
52
+ var import_whereClause = require("./whereClause.js");
53
+ const queryUnit = {
54
+ name: "queryUnit",
55
+ impl: ({ SUBRULE }) => () => SUBRULE(query)
56
+ };
57
+ const query = {
58
+ name: "query",
59
+ impl: ({ ACTION, SUBRULE, OR }) => (C) => {
60
+ const prologueValues = SUBRULE(import_general.prologue);
61
+ const subType = OR([
62
+ { ALT: () => SUBRULE(selectQuery) },
63
+ { ALT: () => SUBRULE(constructQuery) },
64
+ { ALT: () => SUBRULE(describeQuery) },
65
+ { ALT: () => SUBRULE(askQuery) }
66
+ ]);
67
+ const values = SUBRULE(valuesClause);
68
+ return ACTION(() => ({
69
+ context: prologueValues,
70
+ ...subType,
71
+ type: "query",
72
+ ...values && { values },
73
+ loc: C.astFactory.sourceLocation(prologueValues.at(0), subType, values)
74
+ }));
75
+ },
76
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F }) => {
77
+ SUBRULE(import_general.prologue, ast.context);
78
+ if (F.isQuerySelect(ast)) {
79
+ SUBRULE(selectQuery, ast);
80
+ } else if (F.isQueryConstruct(ast)) {
81
+ SUBRULE(constructQuery, ast);
82
+ } else if (F.isQueryDescribe(ast)) {
83
+ SUBRULE(describeQuery, ast);
84
+ } else if (F.isQueryAsk(ast)) {
85
+ SUBRULE(askQuery, ast);
86
+ }
87
+ if (ast.values) {
88
+ SUBRULE(import_whereClause.inlineData, ast.values);
89
+ }
90
+ }
91
+ };
92
+ const selectQuery = {
93
+ name: "selectQuery",
94
+ impl: ({ ACTION, SUBRULE }) => (C) => {
95
+ const selectVal = SUBRULE(selectClause);
96
+ const from = SUBRULE(import_dataSetClause.datasetClauseStar);
97
+ const where = SUBRULE(import_whereClause.whereClause);
98
+ const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
99
+ return ACTION(() => {
100
+ const ret = {
101
+ subType: "select",
102
+ where: where.val,
103
+ solutionModifiers: modifiers,
104
+ datasets: from,
105
+ ...selectVal.val,
106
+ loc: C.astFactory.sourceLocation(selectVal, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
107
+ };
108
+ (0, import_validators.queryIsGood)(ret);
109
+ return ret;
110
+ });
111
+ },
112
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F }) => {
113
+ SUBRULE(selectClause, F.wrap({
114
+ variables: ast.variables,
115
+ distinct: ast.distinct,
116
+ reduced: ast.reduced
117
+ }, F.sourceLocation(...ast.variables)));
118
+ SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
119
+ SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.where.loc));
120
+ SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
121
+ }
122
+ };
123
+ const subSelect = {
124
+ name: "subSelect",
125
+ impl: ({ ACTION, SUBRULE }) => (C) => {
126
+ const selectVal = SUBRULE(selectClause);
127
+ const where = SUBRULE(import_whereClause.whereClause);
128
+ const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
129
+ const values = SUBRULE(valuesClause);
130
+ return ACTION(() => C.astFactory.querySelect({
131
+ where: where.val,
132
+ datasets: C.astFactory.datasetClauses([], C.astFactory.sourceLocation()),
133
+ context: [],
134
+ solutionModifiers: modifiers,
135
+ ...selectVal.val,
136
+ ...values && { values }
137
+ }, C.astFactory.sourceLocation(selectVal, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset, values)));
138
+ }
139
+ };
140
+ const selectClause = {
141
+ name: "selectClause",
142
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, SUBRULE2, CONSUME, OPTION, OR1, OR2, OR3 }) => (C) => {
143
+ const select = CONSUME(l.select);
144
+ const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
145
+ const distinctAndReduced = OPTION(() => OR1([
146
+ { ALT: () => {
147
+ CONSUME(l.distinct);
148
+ return [true, false];
149
+ } },
150
+ { ALT: () => {
151
+ CONSUME(l.reduced);
152
+ return [false, true];
153
+ } }
154
+ ])) ?? [false, false];
155
+ const distRed = ACTION(() => {
156
+ const [distinct, reduced] = distinctAndReduced;
157
+ return {
158
+ ...distinct && { distinct },
159
+ ...reduced && { reduced }
160
+ };
161
+ });
162
+ let last;
163
+ const val = OR2([
164
+ { ALT: () => {
165
+ const star = CONSUME(l.symbols.star);
166
+ return ACTION(() => {
167
+ last = star;
168
+ return { variables: [C.astFactory.wildcard(C.astFactory.sourceLocation(star))], ...distRed };
169
+ });
170
+ } },
171
+ { ALT: () => {
172
+ const usedVars = [];
173
+ const variables = [];
174
+ AT_LEAST_ONE(() => OR3([
175
+ { ALT: () => {
176
+ const raw = SUBRULE1(import_general.var_);
177
+ ACTION(() => {
178
+ if (usedVars.some((v) => v.value === raw.value)) {
179
+ throw new Error(`Variable ${raw.value} used more than once in SELECT clause`);
180
+ }
181
+ usedVars.push(raw);
182
+ variables.push(raw);
183
+ last = raw;
184
+ });
185
+ } },
186
+ { ALT: () => {
187
+ const open = CONSUME(l.symbols.LParen);
188
+ const expr = SUBRULE1(import_expression.expression);
189
+ CONSUME(l.as);
190
+ const variable = SUBRULE2(import_general.var_);
191
+ const close = CONSUME(l.symbols.RParen);
192
+ ACTION(() => {
193
+ last = close;
194
+ if (usedVars.some((v) => v.value === variable.value)) {
195
+ throw new Error(`Variable ${variable.value} used more than once in SELECT clause`);
196
+ }
197
+ usedVars.push(variable);
198
+ variables.push(C.astFactory.patternBind(expr, variable, C.astFactory.sourceLocation(open, last)));
199
+ });
200
+ } }
201
+ ]));
202
+ return { variables, ...distRed };
203
+ } }
204
+ ]);
205
+ ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
206
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(select, last)));
207
+ },
208
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
209
+ F.printFilter(ast, () => {
210
+ PRINT_ON_EMPTY("SELECT ");
211
+ if (ast.val.distinct) {
212
+ PRINT_WORD("DISTINCT");
213
+ } else if (ast.val.reduced) {
214
+ PRINT_WORD("REDUCED");
215
+ }
216
+ });
217
+ for (const variable of ast.val.variables) {
218
+ if (F.isWildcard(variable)) {
219
+ F.printFilter(ast, () => PRINT_WORD("*"));
220
+ } else if (F.isTerm(variable)) {
221
+ SUBRULE(import_general.var_, variable);
222
+ } else {
223
+ F.printFilter(ast, () => PRINT_WORD("("));
224
+ SUBRULE(import_expression.expression, variable.expression);
225
+ F.printFilter(ast, () => PRINT_WORD("AS"));
226
+ SUBRULE(import_general.var_, variable.variable);
227
+ F.printFilter(ast, () => PRINT_WORD(")"));
228
+ }
229
+ F.printFilter(ast, () => PRINT_WORD(""));
230
+ }
231
+ F.printFilter(ast, () => PRINT_WORD(""));
232
+ }
233
+ };
234
+ const constructQuery = {
235
+ name: "constructQuery",
236
+ impl: ({ ACTION, SUBRULE1, SUBRULE2, CONSUME, OR }) => (C) => {
237
+ const construct = CONSUME(l.construct);
238
+ return OR([
239
+ { ALT: () => {
240
+ const template = SUBRULE1(constructTemplate);
241
+ const from = SUBRULE1(import_dataSetClause.datasetClauseStar);
242
+ const where = SUBRULE1(import_whereClause.whereClause);
243
+ const modifiers = SUBRULE1(import_solutionModifier.solutionModifier);
244
+ return ACTION(() => ({
245
+ subType: "construct",
246
+ template: template.val,
247
+ datasets: from,
248
+ where: where.val,
249
+ solutionModifiers: modifiers,
250
+ loc: C.astFactory.sourceLocation(construct, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
251
+ }));
252
+ } },
253
+ { ALT: () => {
254
+ const from = SUBRULE2(import_dataSetClause.datasetClauseStar);
255
+ CONSUME(l.where);
256
+ const template = SUBRULE2(constructTemplate);
257
+ const modifiers = SUBRULE2(import_solutionModifier.solutionModifier);
258
+ return ACTION(() => ({
259
+ subType: "construct",
260
+ template: template.val,
261
+ datasets: from,
262
+ where: C.astFactory.patternGroup([template.val], C.astFactory.sourceLocation()),
263
+ solutionModifiers: modifiers,
264
+ loc: C.astFactory.sourceLocation(construct, template, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
265
+ }));
266
+ } }
267
+ ]);
268
+ },
269
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY, PRINT_ON_OWN_LINE, NEW_LINE }) => (ast, C) => {
270
+ const { astFactory: F, indentInc } = C;
271
+ F.printFilter(ast, () => PRINT_ON_EMPTY("CONSTRUCT "));
272
+ if (!F.isSourceLocationNoMaterialize(ast.where.loc)) {
273
+ F.printFilter(ast, () => {
274
+ C[import_core.traqulaIndentation] += indentInc;
275
+ PRINT_WORD("{");
276
+ NEW_LINE();
277
+ });
278
+ SUBRULE(import_tripleBlock.triplesBlock, ast.template);
279
+ F.printFilter(ast, () => {
280
+ C[import_core.traqulaIndentation] -= indentInc;
281
+ PRINT_ON_OWN_LINE("}");
282
+ });
283
+ }
284
+ SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
285
+ if (F.isSourceLocationNoMaterialize(ast.where.loc)) {
286
+ SUBRULE(import_whereClause.whereClause, F.wrap(F.patternGroup([ast.template], ast.template.loc), ast.template.loc));
287
+ } else {
288
+ SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.where.loc));
289
+ }
290
+ SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
291
+ }
292
+ };
293
+ const describeQuery = {
294
+ name: "describeQuery",
295
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME, OPTION, OR }) => (C) => {
296
+ const describe = CONSUME(l.describe);
297
+ const variables = OR([
298
+ { ALT: () => {
299
+ const variables2 = [];
300
+ AT_LEAST_ONE(() => {
301
+ variables2.push(SUBRULE1(import_general.varOrIri));
302
+ });
303
+ return variables2;
304
+ } },
305
+ { ALT: () => {
306
+ const star = CONSUME(l.symbols.star);
307
+ return [ACTION(() => C.astFactory.wildcard(C.astFactory.sourceLocation(star)))];
308
+ } }
309
+ ]);
310
+ const from = SUBRULE1(import_dataSetClause.datasetClauseStar);
311
+ const where = OPTION(() => SUBRULE1(import_whereClause.whereClause));
312
+ const modifiers = SUBRULE1(import_solutionModifier.solutionModifier);
313
+ return ACTION(() => ({
314
+ subType: "describe",
315
+ variables,
316
+ datasets: from,
317
+ ...where && { where: where.val },
318
+ solutionModifiers: modifiers,
319
+ loc: C.astFactory.sourceLocation(describe, ...variables, from, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
320
+ }));
321
+ },
322
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
323
+ F.printFilter(ast, () => PRINT_ON_EMPTY("DESCRIBE "));
324
+ if (F.isWildcard(ast.variables[0])) {
325
+ F.printFilter(ast, () => PRINT_WORD("*"));
326
+ } else {
327
+ for (const variable of ast.variables) {
328
+ SUBRULE(import_general.varOrTerm, variable);
329
+ }
330
+ }
331
+ SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
332
+ if (ast.where) {
333
+ SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.loc));
334
+ }
335
+ SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
336
+ }
337
+ };
338
+ const askQuery = {
339
+ name: "askQuery",
340
+ impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
341
+ const ask = CONSUME(l.ask);
342
+ const from = SUBRULE(import_dataSetClause.datasetClauseStar);
343
+ const where = SUBRULE(import_whereClause.whereClause);
344
+ const modifiers = SUBRULE(import_solutionModifier.solutionModifier);
345
+ return ACTION(() => ({
346
+ subType: "ask",
347
+ datasets: from,
348
+ where: where.val,
349
+ solutionModifiers: modifiers,
350
+ loc: C.astFactory.sourceLocation(ask, from, where, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
351
+ }));
352
+ },
353
+ gImpl: ({ SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
354
+ F.printFilter(ast, () => PRINT_ON_EMPTY("ASK "));
355
+ SUBRULE(import_dataSetClause.datasetClauseStar, ast.datasets);
356
+ SUBRULE(import_whereClause.whereClause, F.wrap(ast.where, ast.loc));
357
+ SUBRULE(import_solutionModifier.solutionModifier, ast.solutionModifiers);
358
+ }
359
+ };
360
+ const valuesClause = {
361
+ name: "valuesClause",
362
+ impl: ({ OPTION, SUBRULE }) => () => OPTION(() => SUBRULE(import_whereClause.inlineData))
363
+ };
364
+ const constructTemplate = {
365
+ name: "constructTemplate",
366
+ impl: ({ ACTION, SUBRULE1, CONSUME, OPTION }) => (C) => {
367
+ const open = CONSUME(l.symbols.LCurly);
368
+ const triples = OPTION(() => SUBRULE1(constructTriples));
369
+ const close = CONSUME(l.symbols.RCurly);
370
+ return ACTION(() => C.astFactory.wrap(triples ?? C.astFactory.patternBgp([], C.astFactory.sourceLocation()), C.astFactory.sourceLocation(open, close)));
371
+ }
372
+ };
373
+ const constructTriples = {
374
+ name: "constructTriples",
375
+ impl: import_tripleBlock.triplesTemplate.impl
376
+ };
377
+ // Annotate the CommonJS export names for ESM import in node:
378
+ 0 && (module.exports = {
379
+ askQuery,
380
+ constructQuery,
381
+ constructTemplate,
382
+ constructTriples,
383
+ describeQuery,
384
+ query,
385
+ queryUnit,
386
+ selectClause,
387
+ selectQuery,
388
+ subSelect,
389
+ valuesClause
390
+ });
@@ -0,0 +1,280 @@
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 __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var solutionModifier_exports = {};
30
+ __export(solutionModifier_exports, {
31
+ groupClause: () => groupClause,
32
+ groupCondition: () => groupCondition,
33
+ havingClause: () => havingClause,
34
+ havingCondition: () => havingCondition,
35
+ limitClause: () => limitClause,
36
+ limitOffsetClauses: () => limitOffsetClauses,
37
+ offsetClause: () => offsetClause,
38
+ orderClause: () => orderClause,
39
+ orderCondition: () => orderCondition,
40
+ solutionModifier: () => solutionModifier
41
+ });
42
+ module.exports = __toCommonJS(solutionModifier_exports);
43
+ var l = __toESM(require("../lexer/index.js"), 1);
44
+ var import_builtIn = require("./builtIn.js");
45
+ var import_expression = require("./expression.js");
46
+ var import_general = require("./general.js");
47
+ var import_whereClause = require("./whereClause.js");
48
+ const solutionModifier = {
49
+ name: "solutionModifier",
50
+ impl: ({ ACTION, SUBRULE, OPTION1, OPTION2, OPTION3, OPTION4 }) => () => {
51
+ const group = OPTION1(() => SUBRULE(groupClause));
52
+ const having = OPTION2(() => SUBRULE(havingClause));
53
+ const order = OPTION3(() => SUBRULE(orderClause));
54
+ const limitOffset = OPTION4(() => SUBRULE(limitOffsetClauses));
55
+ return ACTION(() => ({
56
+ ...limitOffset && { limitOffset },
57
+ ...group && { group },
58
+ ...having && { having },
59
+ ...order && { order }
60
+ }));
61
+ },
62
+ gImpl: ({ SUBRULE }) => (ast) => {
63
+ if (ast.group) {
64
+ SUBRULE(groupClause, ast.group);
65
+ }
66
+ if (ast.having) {
67
+ SUBRULE(havingClause, ast.having);
68
+ }
69
+ if (ast.order) {
70
+ SUBRULE(orderClause, ast.order);
71
+ }
72
+ if (ast.limitOffset) {
73
+ SUBRULE(limitOffsetClauses, ast.limitOffset);
74
+ }
75
+ }
76
+ };
77
+ const groupClause = {
78
+ name: "groupClause",
79
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME }) => (C) => {
80
+ const groupings = [];
81
+ const start = CONSUME(l.groupByGroup);
82
+ CONSUME(l.by);
83
+ AT_LEAST_ONE(() => {
84
+ groupings.push(SUBRULE1(groupCondition));
85
+ });
86
+ return ACTION(() => ({
87
+ type: "solutionModifier",
88
+ subType: "group",
89
+ groupings,
90
+ loc: C.astFactory.sourceLocation(start, groupings.at(-1))
91
+ }));
92
+ },
93
+ gImpl: ({ PRINT_WORDS, SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F }) => {
94
+ F.printFilter(ast, () => {
95
+ PRINT_ON_EMPTY("GROUP BY ");
96
+ });
97
+ for (const grouping of ast.groupings) {
98
+ if (F.isExpression(grouping)) {
99
+ SUBRULE(import_expression.expression, grouping);
100
+ } else {
101
+ F.printFilter(ast, () => PRINT_WORDS("("));
102
+ SUBRULE(import_expression.expression, grouping.value);
103
+ F.printFilter(ast, () => PRINT_WORDS("AS"));
104
+ SUBRULE(import_general.var_, grouping.variable);
105
+ F.printFilter(ast, () => PRINT_WORDS(")"));
106
+ }
107
+ }
108
+ }
109
+ };
110
+ const groupCondition = {
111
+ name: "groupCondition",
112
+ impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR }) => (C) => OR([
113
+ { ALT: () => SUBRULE(import_builtIn.builtInCall) },
114
+ { ALT: () => SUBRULE(import_whereClause.functionCall) },
115
+ { ALT: () => SUBRULE2(import_general.var_) },
116
+ {
117
+ ALT: () => {
118
+ const open = CONSUME(l.symbols.LParen);
119
+ const expressionValue = SUBRULE(import_expression.expression);
120
+ const variable = OPTION(() => {
121
+ CONSUME(l.as);
122
+ return SUBRULE1(import_general.var_);
123
+ });
124
+ const close = CONSUME(l.symbols.RParen);
125
+ return ACTION(() => {
126
+ if (variable !== void 0) {
127
+ return {
128
+ variable,
129
+ value: expressionValue,
130
+ loc: C.astFactory.sourceLocation(open, close)
131
+ };
132
+ }
133
+ return expressionValue;
134
+ });
135
+ }
136
+ }
137
+ ])
138
+ };
139
+ const havingClause = {
140
+ name: "havingClause",
141
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME }) => (C) => {
142
+ const having = CONSUME(l.having);
143
+ const expressions = [];
144
+ const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
145
+ AT_LEAST_ONE(() => {
146
+ expressions.push(SUBRULE(havingCondition));
147
+ });
148
+ ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
149
+ return ACTION(() => C.astFactory.solutionModifierHaving(expressions, C.astFactory.sourceLocation(having, expressions.at(-1))));
150
+ },
151
+ gImpl: ({ PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F }) => {
152
+ F.printFilter(ast, () => {
153
+ PRINT_ON_EMPTY("HAVING ");
154
+ });
155
+ for (const having of ast.having) {
156
+ SUBRULE(import_expression.expression, having);
157
+ }
158
+ }
159
+ };
160
+ const havingCondition = {
161
+ name: "havingCondition",
162
+ impl: ({ SUBRULE }) => () => SUBRULE(import_whereClause.constraint)
163
+ };
164
+ const orderClause = {
165
+ name: "orderClause",
166
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE1, CONSUME }) => (C) => {
167
+ const order = CONSUME(l.order);
168
+ CONSUME(l.by);
169
+ const orderings = [];
170
+ const couldParseAgg = ACTION(() => C.parseMode.has("canParseAggregate") || !C.parseMode.add("canParseAggregate"));
171
+ AT_LEAST_ONE(() => {
172
+ orderings.push(SUBRULE1(orderCondition));
173
+ });
174
+ ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
175
+ return ACTION(() => C.astFactory.solutionModifierOrder(orderings, C.astFactory.sourceLocation(order, orderings.at(-1))));
176
+ },
177
+ gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F }) => {
178
+ F.printFilter(ast, () => {
179
+ PRINT_ON_EMPTY("ORDER BY ");
180
+ });
181
+ for (const ordering of ast.orderDefs) {
182
+ if (ordering.descending) {
183
+ F.printFilter(ast, () => PRINT_WORDS("DESC"));
184
+ } else {
185
+ F.printFilter(ast, () => PRINT_WORDS("ASC"));
186
+ }
187
+ F.printFilter(ast, () => PRINT_WORDS("("));
188
+ SUBRULE(import_expression.expression, ordering.expression);
189
+ F.printFilter(ast, () => PRINT_WORDS(")"));
190
+ }
191
+ }
192
+ };
193
+ const orderCondition = {
194
+ name: "orderCondition",
195
+ impl: ({ ACTION, SUBRULE, CONSUME, OR1, OR2 }) => (C) => OR1([
196
+ { ALT: () => {
197
+ const descending = OR2([
198
+ { ALT: () => {
199
+ const token = CONSUME(l.orderAsc);
200
+ return [false, token];
201
+ } },
202
+ { ALT: () => {
203
+ const token = CONSUME(l.orderDesc);
204
+ return [true, token];
205
+ } }
206
+ ]);
207
+ const expr = SUBRULE(import_expression.brackettedExpression);
208
+ return ACTION(() => ({
209
+ expression: expr,
210
+ descending: descending[0],
211
+ loc: C.astFactory.sourceLocation(descending[1], expr)
212
+ }));
213
+ } },
214
+ { ALT: () => {
215
+ const expr = SUBRULE(import_whereClause.constraint);
216
+ return ACTION(() => ({ expression: expr, descending: false, loc: expr.loc }));
217
+ } },
218
+ { ALT: () => {
219
+ const expr = SUBRULE(import_general.var_);
220
+ return ACTION(() => ({ expression: expr, descending: false, loc: expr.loc }));
221
+ } }
222
+ ])
223
+ };
224
+ const limitOffsetClauses = {
225
+ name: "limitOffsetClauses",
226
+ impl: ({ ACTION, SUBRULE1, SUBRULE2, OPTION1, OPTION2, OR }) => (C) => OR([
227
+ { ALT: () => {
228
+ const limit = SUBRULE1(limitClause);
229
+ const offset = OPTION1(() => SUBRULE1(offsetClause));
230
+ return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit.val, offset?.val, C.astFactory.sourceLocation(limit, ...offset ? [offset] : [])));
231
+ } },
232
+ { ALT: () => {
233
+ const offset = SUBRULE2(offsetClause);
234
+ const limit = OPTION2(() => SUBRULE2(limitClause));
235
+ return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit?.val, offset.val, C.astFactory.sourceLocation(offset, limit)));
236
+ } }
237
+ ]),
238
+ gImpl: ({ PRINT_WORDS, NEW_LINE }) => (ast, { astFactory: F }) => {
239
+ F.printFilter(ast, () => {
240
+ NEW_LINE();
241
+ if (ast.limit) {
242
+ PRINT_WORDS("LIMIT", String(ast.limit));
243
+ }
244
+ if (ast.offset) {
245
+ PRINT_WORDS("OFFSET", String(ast.offset));
246
+ }
247
+ });
248
+ }
249
+ };
250
+ const limitClause = {
251
+ name: "limitClause",
252
+ impl: ({ ACTION, CONSUME }) => (C) => {
253
+ const offset = CONSUME(l.limit);
254
+ const value = CONSUME(l.terminals.integer);
255
+ const val = Number.parseInt(value.image, 10);
256
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset, value)));
257
+ }
258
+ };
259
+ const offsetClause = {
260
+ name: "offsetClause",
261
+ impl: ({ CONSUME, ACTION }) => (C) => {
262
+ const offset = CONSUME(l.offset);
263
+ const value = CONSUME(l.terminals.integer);
264
+ const val = Number.parseInt(value.image, 10);
265
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset, value)));
266
+ }
267
+ };
268
+ // Annotate the CommonJS export names for ESM import in node:
269
+ 0 && (module.exports = {
270
+ groupClause,
271
+ groupCondition,
272
+ havingClause,
273
+ havingCondition,
274
+ limitClause,
275
+ limitOffsetClauses,
276
+ offsetClause,
277
+ orderClause,
278
+ orderCondition,
279
+ solutionModifier
280
+ });