@traqula/rules-sparql-1-1 0.0.1-alpha.137

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 (70) hide show
  1. package/LICENSE.txt +22 -0
  2. package/README.md +15 -0
  3. package/lib/Sparql11types.d.ts +246 -0
  4. package/lib/Sparql11types.js +2 -0
  5. package/lib/Sparql11types.js.map +1 -0
  6. package/lib/expressionHelpers.d.ts +55 -0
  7. package/lib/expressionHelpers.js +224 -0
  8. package/lib/expressionHelpers.js.map +1 -0
  9. package/lib/grammar/builtIn.d.ts +91 -0
  10. package/lib/grammar/builtIn.js +239 -0
  11. package/lib/grammar/builtIn.js.map +1 -0
  12. package/lib/grammar/dataSetClause.d.ts +22 -0
  13. package/lib/grammar/dataSetClause.js +37 -0
  14. package/lib/grammar/dataSetClause.js.map +1 -0
  15. package/lib/grammar/expression.d.ts +68 -0
  16. package/lib/grammar/expression.js +397 -0
  17. package/lib/grammar/expression.js.map +1 -0
  18. package/lib/grammar/general.d.ts +42 -0
  19. package/lib/grammar/general.js +161 -0
  20. package/lib/grammar/general.js.map +1 -0
  21. package/lib/grammar/index.d.ts +12 -0
  22. package/lib/grammar/index.js +13 -0
  23. package/lib/grammar/index.js.map +1 -0
  24. package/lib/grammar/literals.d.ts +53 -0
  25. package/lib/grammar/literals.js +179 -0
  26. package/lib/grammar/literals.js.map +1 -0
  27. package/lib/grammar/propertyPaths.d.ts +40 -0
  28. package/lib/grammar/propertyPaths.js +193 -0
  29. package/lib/grammar/propertyPaths.js.map +1 -0
  30. package/lib/grammar/queryUnit/queryUnit.d.ts +53 -0
  31. package/lib/grammar/queryUnit/queryUnit.js +405 -0
  32. package/lib/grammar/queryUnit/queryUnit.js.map +1 -0
  33. package/lib/grammar/solutionModifier.d.ts +44 -0
  34. package/lib/grammar/solutionModifier.js +203 -0
  35. package/lib/grammar/solutionModifier.js.map +1 -0
  36. package/lib/grammar/tripleBlock.d.ts +42 -0
  37. package/lib/grammar/tripleBlock.js +309 -0
  38. package/lib/grammar/tripleBlock.js.map +1 -0
  39. package/lib/grammar/updateUnit/updateUnit.d.ts +101 -0
  40. package/lib/grammar/updateUnit/updateUnit.js +448 -0
  41. package/lib/grammar/updateUnit/updateUnit.js.map +1 -0
  42. package/lib/grammar/whereClause.d.ts +76 -0
  43. package/lib/grammar/whereClause.js +383 -0
  44. package/lib/grammar/whereClause.js.map +1 -0
  45. package/lib/index.cjs +13088 -0
  46. package/lib/index.d.ts +5 -0
  47. package/lib/index.js +6 -0
  48. package/lib/index.js.map +1 -0
  49. package/lib/lexer/BuildinCalls.d.ts +248 -0
  50. package/lib/lexer/BuildinCalls.js +189 -0
  51. package/lib/lexer/BuildinCalls.js.map +1 -0
  52. package/lib/lexer/graph.d.ts +14 -0
  53. package/lib/lexer/graph.js +9 -0
  54. package/lib/lexer/graph.js.map +1 -0
  55. package/lib/lexer/index.d.ts +5 -0
  56. package/lib/lexer/index.js +6 -0
  57. package/lib/lexer/index.js.map +1 -0
  58. package/lib/lexer/lexer.d.ts +147 -0
  59. package/lib/lexer/lexer.js +67 -0
  60. package/lib/lexer/lexer.js.map +1 -0
  61. package/lib/lexer/symbols.d.ts +80 -0
  62. package/lib/lexer/symbols.js +30 -0
  63. package/lib/lexer/symbols.js.map +1 -0
  64. package/lib/lexer/terminals.d.ts +108 -0
  65. package/lib/lexer/terminals.js +76 -0
  66. package/lib/lexer/terminals.js.map +1 -0
  67. package/lib/utils.d.ts +3 -0
  68. package/lib/utils.js +7 -0
  69. package/lib/utils.js.map +1 -0
  70. package/package.json +45 -0
@@ -0,0 +1,405 @@
1
+ import * as l from '../../lexer';
2
+ import { Wildcard } from '@traqula/core';
3
+ import { canParseAggregate } from '../builtIn';
4
+ import { datasetClause } from '../dataSetClause';
5
+ import { expression } from '../expression';
6
+ import { prologue, triplesTemplate, var_, varOrIri } from '../general';
7
+ import { solutionModifier } from '../solutionModifier';
8
+ import { triplesSameSubject } from '../tripleBlock';
9
+ import { dataBlock, whereClause } from '../whereClause';
10
+ /**
11
+ * [[1]](https://www.w3.org/TR/sparql11-query/#rQueryUnit)
12
+ */
13
+ export const queryUnit = {
14
+ name: 'queryUnit',
15
+ impl: ({ SUBRULE }) => () => SUBRULE(query),
16
+ };
17
+ /**
18
+ * [[2]](https://www.w3.org/TR/sparql11-query/#rQuery)
19
+ */
20
+ export const query = {
21
+ name: 'query',
22
+ impl: ({ ACTION, SUBRULE, OR }) => () => {
23
+ const prologueValues = SUBRULE(prologue);
24
+ const queryType = OR([
25
+ { ALT: () => SUBRULE(selectQuery) },
26
+ { ALT: () => SUBRULE(constructQuery) },
27
+ { ALT: () => SUBRULE(describeQuery) },
28
+ { ALT: () => SUBRULE(askQuery) },
29
+ ]);
30
+ const values = SUBRULE(valuesClause);
31
+ return ACTION(() => ({
32
+ ...prologueValues,
33
+ ...queryType,
34
+ type: 'query',
35
+ ...(values && { values }),
36
+ }));
37
+ },
38
+ };
39
+ function extractFromOfDataSetClauses(ACTION, MANY, SUBRULE) {
40
+ const datasetClauses = [];
41
+ MANY(() => {
42
+ datasetClauses.push(SUBRULE(datasetClause));
43
+ });
44
+ return ACTION(() => {
45
+ const from = {
46
+ default: [],
47
+ named: [],
48
+ };
49
+ for (const datasetClause of datasetClauses) {
50
+ if (datasetClause.type === 'default') {
51
+ from.default.push(datasetClause.value);
52
+ }
53
+ else {
54
+ from.named.push(datasetClause.value);
55
+ }
56
+ }
57
+ return (from.default.length === 0 && from.named.length === 0) ? undefined : from;
58
+ });
59
+ }
60
+ /**
61
+ * Get all 'aggregate' rules from an expression
62
+ */
63
+ function getAggregatesOfExpression(expression) {
64
+ if ('type' in expression) {
65
+ if (expression.type === 'aggregate') {
66
+ return [expression];
67
+ }
68
+ if (expression.type === 'operation') {
69
+ const aggregates = [];
70
+ for (const arg of expression.args) {
71
+ aggregates.push(...getAggregatesOfExpression(arg));
72
+ }
73
+ return aggregates;
74
+ }
75
+ }
76
+ return [];
77
+ }
78
+ /**
79
+ * Return the id of an expression
80
+ */
81
+ function getExpressionId(expression) {
82
+ // Check if grouping
83
+ if ('variable' in expression && expression.variable) {
84
+ return expression.variable.value;
85
+ }
86
+ if ('value' in expression) {
87
+ return expression.value;
88
+ }
89
+ return 'value' in expression.expression ? expression.expression.value : undefined;
90
+ }
91
+ /**
92
+ * Get all variables used in an expression
93
+ */
94
+ function getVariablesFromExpression(expression) {
95
+ const variables = new Set();
96
+ const visitExpression = (expr) => {
97
+ if (!expr) {
98
+ return;
99
+ }
100
+ if ('termType' in expr && expr.termType === 'Variable') {
101
+ variables.add(expr);
102
+ }
103
+ else if ('type' in expr && expr.type === 'operation') {
104
+ for (const rec of expr.args) {
105
+ visitExpression(rec);
106
+ }
107
+ }
108
+ };
109
+ visitExpression(expression);
110
+ return variables;
111
+ }
112
+ /**
113
+ * [[7]](https://www.w3.org/TR/sparql11-query/#rSelectQuery)
114
+ */
115
+ export const selectQuery = {
116
+ name: 'selectQuery',
117
+ impl: ({ ACTION, SUBRULE, MANY, context }) => () => {
118
+ const selectVal = SUBRULE(selectClause);
119
+ const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);
120
+ const where = SUBRULE(whereClause);
121
+ const modifier = SUBRULE(solutionModifier);
122
+ ACTION(() => {
123
+ if (selectVal.variables.length === 1 && selectVal.variables[0] instanceof Wildcard) {
124
+ if (modifier.group !== undefined) {
125
+ throw new Error('GROUP BY not allowed with wildcard');
126
+ }
127
+ return;
128
+ }
129
+ const variables = selectVal.variables;
130
+ // Check for projection of ungrouped variable
131
+ // Check can be skipped in case of wildcard select.
132
+ if (!context.skipValidation) {
133
+ const hasCountAggregate = variables.flatMap(varVal => 'termType' in varVal ? [] : getAggregatesOfExpression(varVal.expression)).some(agg => agg.aggregation === 'count' && !(agg.expression instanceof Wildcard));
134
+ if (hasCountAggregate || modifier.group) {
135
+ // We have to check whether
136
+ // 1. Variables used in projection are usable given the group by clause
137
+ // 2. A selectCount will create an implicit group by clause.
138
+ for (const selectVar of variables) {
139
+ if ('termType' in selectVar) {
140
+ if (!modifier.group || !modifier.group.map(groupvar => getExpressionId(groupvar))
141
+ .includes((getExpressionId(selectVar)))) {
142
+ throw new Error('Variable not allowed in projection');
143
+ }
144
+ }
145
+ else if (getAggregatesOfExpression(selectVar.expression).length === 0) {
146
+ const usedvars = getVariablesFromExpression(selectVar.expression);
147
+ for (const usedvar of usedvars) {
148
+ if (!modifier.group || !modifier.group.map || !modifier.group.map(groupVar => getExpressionId(groupVar))
149
+ .includes(getExpressionId(usedvar))) {
150
+ throw new Error(`Use of ungrouped variable in projection of operation (?${getExpressionId(usedvar)})`);
151
+ }
152
+ }
153
+ }
154
+ }
155
+ }
156
+ }
157
+ // Check if id of each AS-selected column is not yet bound by subquery
158
+ const subqueries = where.filter(pattern => pattern.type === 'query');
159
+ if (subqueries.length > 0) {
160
+ const selectedVarIds = [];
161
+ for (const selectedVar of variables) {
162
+ if ('variable' in selectedVar) {
163
+ selectedVarIds.push(selectedVar.variable.value);
164
+ }
165
+ }
166
+ const vars = subqueries.flatMap(sub => sub.variables)
167
+ .map(v => 'value' in v ? v.value : v.variable.value);
168
+ const subqueryIds = new Set(vars);
169
+ for (const selectedVarId of selectedVarIds) {
170
+ if (subqueryIds.has(selectedVarId)) {
171
+ throw new Error(`Target id of 'AS' (?${selectedVarId}) already used in subquery`);
172
+ }
173
+ }
174
+ }
175
+ });
176
+ return {
177
+ ...selectVal,
178
+ queryType: 'SELECT',
179
+ ...(from && { from }),
180
+ where,
181
+ ...modifier,
182
+ };
183
+ },
184
+ };
185
+ /**
186
+ * [[8]](https://www.w3.org/TR/sparql11-query/#rSubSelect)
187
+ */
188
+ export const subSelect = {
189
+ name: 'subSelect',
190
+ impl: ({ ACTION, SUBRULE }) => () => {
191
+ const clause = SUBRULE(selectClause);
192
+ const where = SUBRULE(whereClause);
193
+ const modifiers = SUBRULE(solutionModifier);
194
+ const values = SUBRULE(valuesClause);
195
+ return ACTION(() => ({
196
+ ...modifiers,
197
+ ...clause,
198
+ type: 'query',
199
+ queryType: 'SELECT',
200
+ where,
201
+ ...(values && { values }),
202
+ }));
203
+ },
204
+ };
205
+ export const selectClause = {
206
+ name: 'selectClause',
207
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, OR3, context }) => () => {
208
+ CONSUME(l.select);
209
+ const couldParseAgg = ACTION(() => context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));
210
+ const distinctOrReduced = OPTION(() => OR1([
211
+ { ALT: () => {
212
+ CONSUME(l.distinct);
213
+ return { distinct: true };
214
+ } },
215
+ { ALT: () => {
216
+ CONSUME(l.reduced);
217
+ return { reduced: true };
218
+ } },
219
+ ]));
220
+ const variables = OR2([
221
+ { ALT: () => {
222
+ CONSUME(l.symbols.star);
223
+ return [new Wildcard()];
224
+ } },
225
+ { ALT: () => {
226
+ const usedVars = [];
227
+ const result = [];
228
+ AT_LEAST_ONE(() => OR3([
229
+ { ALT: () => {
230
+ const raw = SUBRULE1(var_);
231
+ ACTION(() => {
232
+ if (usedVars.some(v => v.equals(raw))) {
233
+ throw new Error(`Variable ${raw.value} used more than once in SELECT clause`);
234
+ }
235
+ usedVars.push(raw);
236
+ result.push(raw);
237
+ });
238
+ } },
239
+ { ALT: () => {
240
+ CONSUME(l.symbols.LParen);
241
+ const expr = SUBRULE(expression);
242
+ CONSUME(l.as);
243
+ const variable = SUBRULE2(var_);
244
+ CONSUME(l.symbols.RParen);
245
+ ACTION(() => {
246
+ if (usedVars.some(v => v.equals(variable))) {
247
+ throw new Error(`Variable ${variable.value} used more than once in SELECT clause`);
248
+ }
249
+ usedVars.push(variable);
250
+ result.push({
251
+ expression: expr,
252
+ variable,
253
+ });
254
+ });
255
+ } },
256
+ ]));
257
+ return result;
258
+ } },
259
+ ]);
260
+ ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));
261
+ return ACTION(() => ({
262
+ ...distinctOrReduced,
263
+ variables,
264
+ }));
265
+ },
266
+ };
267
+ /**
268
+ * [[10]](https://www.w3.org/TR/sparql11-query/#rConstructQuery)
269
+ */
270
+ export const constructQuery = {
271
+ name: 'constructQuery',
272
+ impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, MANY1, MANY2, OPTION, OR }) => () => {
273
+ CONSUME(l.construct);
274
+ return OR([
275
+ {
276
+ ALT: () => {
277
+ const template = SUBRULE(constructTemplate);
278
+ const from = extractFromOfDataSetClauses(ACTION, MANY1, SUBRULE1);
279
+ const where = SUBRULE(whereClause);
280
+ const modifiers = SUBRULE1(solutionModifier);
281
+ return ACTION(() => ({
282
+ ...modifiers,
283
+ queryType: 'CONSTRUCT',
284
+ template,
285
+ from,
286
+ where,
287
+ }));
288
+ },
289
+ },
290
+ {
291
+ ALT: () => {
292
+ const from = extractFromOfDataSetClauses(ACTION, MANY2, SUBRULE2);
293
+ CONSUME(l.where);
294
+ CONSUME(l.symbols.LCurly);
295
+ const template = OPTION(() => SUBRULE(triplesTemplate));
296
+ CONSUME(l.symbols.RCurly);
297
+ const modifiers = SUBRULE2(solutionModifier);
298
+ const where = template ?
299
+ [{
300
+ type: 'bgp',
301
+ triples: template,
302
+ }] :
303
+ [];
304
+ return ACTION(() => ({
305
+ ...modifiers,
306
+ queryType: 'CONSTRUCT',
307
+ from,
308
+ template,
309
+ where,
310
+ }));
311
+ },
312
+ },
313
+ ]);
314
+ },
315
+ };
316
+ /**
317
+ * [[11]](https://www.w3.org/TR/sparql11-query/#rDescribeQuery)
318
+ */
319
+ export const describeQuery = {
320
+ name: 'describeQuery',
321
+ impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, MANY, OPTION, OR }) => () => {
322
+ CONSUME(l.describe);
323
+ const variables = OR([
324
+ { ALT: () => {
325
+ const variables = [];
326
+ AT_LEAST_ONE(() => {
327
+ variables.push(SUBRULE(varOrIri));
328
+ });
329
+ return variables;
330
+ } },
331
+ { ALT: () => {
332
+ CONSUME(l.symbols.star);
333
+ return [new Wildcard()];
334
+ } },
335
+ ]);
336
+ const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);
337
+ const where = OPTION(() => SUBRULE(whereClause));
338
+ const modifiers = SUBRULE(solutionModifier);
339
+ return ACTION(() => ({
340
+ ...modifiers,
341
+ queryType: 'DESCRIBE',
342
+ variables,
343
+ from,
344
+ where,
345
+ }));
346
+ },
347
+ };
348
+ /**
349
+ * [[12]](https://www.w3.org/TR/sparql11-query/#rAskQuery)
350
+ */
351
+ export const askQuery = {
352
+ name: 'askQuery',
353
+ impl: ({ ACTION, SUBRULE, CONSUME, MANY }) => () => {
354
+ CONSUME(l.ask);
355
+ const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);
356
+ const where = SUBRULE(whereClause);
357
+ const modifiers = SUBRULE(solutionModifier);
358
+ return ACTION(() => ({
359
+ ...modifiers,
360
+ queryType: 'ASK',
361
+ from,
362
+ where,
363
+ }));
364
+ },
365
+ };
366
+ /**
367
+ * [[28]](https://www.w3.org/TR/sparql11-query/#rValuesClause)
368
+ */
369
+ export const valuesClause = {
370
+ name: 'valuesClause',
371
+ impl: ({ SUBRULE, CONSUME, OPTION }) => () => OPTION(() => {
372
+ CONSUME(l.values);
373
+ return SUBRULE(dataBlock);
374
+ }),
375
+ };
376
+ /**
377
+ * [[73]](https://www.w3.org/TR/sparql11-query/#ConstructTemplate)
378
+ */
379
+ export const constructTemplate = {
380
+ name: 'constructTemplate',
381
+ impl: ({ SUBRULE, CONSUME, OPTION }) => () => {
382
+ CONSUME(l.symbols.LCurly);
383
+ const triples = OPTION(() => SUBRULE(constructTriples));
384
+ CONSUME(l.symbols.RCurly);
385
+ return triples;
386
+ },
387
+ };
388
+ /**
389
+ * [[12]](https://www.w3.org/TR/sparql11-query/#rConstructTriples)
390
+ */
391
+ export const constructTriples = {
392
+ name: 'constructTriples',
393
+ impl: ({ SUBRULE, CONSUME, OPTION1, OPTION2 }) => () => {
394
+ const triples = [];
395
+ triples.push(SUBRULE(triplesSameSubject));
396
+ OPTION1(() => {
397
+ CONSUME(l.symbols.dot);
398
+ OPTION2(() => {
399
+ triples.push(SUBRULE(constructTriples));
400
+ });
401
+ });
402
+ return triples.flat(1);
403
+ },
404
+ };
405
+ //# sourceMappingURL=queryUnit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queryUnit.js","sourceRoot":"","sources":["queryUnit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAuB,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAkBvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAwC;IAC5D,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CAC5C,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAoC;IACpD,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QACtC,MAAM,cAAc,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,SAAS,GAAG,EAAE,CAA6B;YAC/C,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YACnC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;YACtC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE;YACrC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;SACjC,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAQ;YAC1B,GAAG,cAAc;YACjB,GAAG,SAAS;YACZ,IAAI,EAAE,OAAO;YACb,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;SACzB,CAAA,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAIF,SAAS,2BAA2B,CAAC,MAA0B,EAAE,IAAsB,EAAE,OAA4B;IAEnH,MAAM,cAAc,GAAqB,EAAE,CAAC;IAC5C,IAAI,CAAC,GAAG,EAAE;QACR,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,GAAG,EAAE;QACjB,MAAM,IAAI,GAA6C;YACrD,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;SACV,CAAC;QACF,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,yBAAyB,CAAC,UAAgC;IACjE,IAAI,MAAM,IAAI,UAAU,EAAE,CAAC;QACzB,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,OAAO,CAAE,UAAU,CAAE,CAAC;QACxB,CAAC;QACD,IAAI,UAAU,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACpC,MAAM,UAAU,GAA0B,EAAE,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClC,UAAU,CAAC,IAAI,CAAC,GAAG,yBAAyB,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,UAAwD;IAC/E,oBAAoB;IACpB,IAAI,UAAU,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpD,OAAO,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC;IACnC,CAAC;IACD,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,KAAK,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACpF,CAAC;AACD;;GAEG;AACH,SAAS,0BAA0B,CAAC,UAAsB;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgB,CAAC;IAC1C,MAAM,eAAe,GAAG,CAAC,IAAsC,EAAQ,EAAE;QACvE,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;YACvD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,eAAe,CAAC,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,eAAe,CAAC,UAAU,CAAC,CAAC;IAC5B,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAqE;IAC3F,IAAI,EAAE,aAAa;IACnB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,2BAA2B,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAE3C,MAAM,CAAC,GAAG,EAAE;YACV,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,QAAQ,EAAE,CAAC;gBACnF,IAAI,QAAQ,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACxD,CAAC;gBACD,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAgB,SAAS,CAAC,SAAS,CAAC;YACnD,6CAA6C;YAC7C,mDAAmD;YACnD,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC5B,MAAM,iBAAiB,GAAG,SAAS,CAAC,OAAO,CACzC,MAAM,CAAC,EAAE,CAAC,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,CAAC,CACnF,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,UAAU,YAAY,QAAQ,CAAC,CAAC,CAAC;gBACpF,IAAI,iBAAiB,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACxC,2BAA2B;oBAC3B,wEAAwE;oBACxE,6DAA6D;oBAC7D,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;wBAClC,IAAI,UAAU,IAAI,SAAS,EAAE,CAAC;4BAC5B,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;iCAC9E,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;gCAC1C,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;4BACxD,CAAC;wBACH,CAAC;6BAAM,IAAI,yBAAyB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;4BACxE,MAAM,QAAQ,GAAG,0BAA0B,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;4BAClE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gCAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;qCACrG,QAAQ,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oCACtC,MAAM,IAAI,KAAK,CAAC,0DAA0D,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gCACzG,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YACD,sEAAsE;YACtE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACrE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,MAAM,cAAc,GAAa,EAAE,CAAC;gBACpC,KAAK,MAAM,WAAW,IAAI,SAAS,EAAE,CAAC;oBACpC,IAAI,UAAU,IAAI,WAAW,EAAE,CAAC;wBAC9B,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;oBAClD,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAA0B,GAAG,CAAC,SAAS,CAAC;qBAC3E,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBACvD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;gBAClC,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;oBAC3C,IAAI,WAAW,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;wBACnC,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,4BAA4B,CAAC,CAAC;oBACpF,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,SAAS;YACZ,SAAS,EAAE,QAAQ;YACnB,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,KAAK;YACL,GAAG,QAAQ;SACZ,CAAC;IACJ,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAgE;IACpF,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QAClC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;QAErC,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnB,GAAG,SAAS;YACZ,GAAG,MAAM;YACT,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,QAAQ;YACnB,KAAK;YACL,GAAG,CAAC,MAAM,IAAI,EAAE,MAAM,EAAE,CAAC;SAC1B,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAUF,MAAM,CAAC,MAAM,YAAY,GAAmD;IAC1E,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QAC7G,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,EAAE,CAChC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAEzF,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAA6C;YACrF,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACpB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC5B,CAAC,EAAE;YACH,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACnB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;gBAC3B,CAAC,EAAE;SACJ,CAAC,CAAC,CAAC;QACJ,MAAM,SAAS,GAAG,GAAG,CAA6B;YAChD,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxB,OAAO,CAAE,IAAI,QAAQ,EAAE,CAAE,CAAC;gBAC5B,CAAC,EAAE;YACH,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,MAAM,QAAQ,GAAmB,EAAE,CAAC;oBACpC,MAAM,MAAM,GAAe,EAAE,CAAC;oBAC9B,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC;wBACrB,EAAE,GAAG,EAAE,GAAG,EAAE;gCACV,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gCAC3B,MAAM,CAAC,GAAG,EAAE;oCACV,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;wCACtC,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,CAAC,KAAK,uCAAuC,CAAC,CAAC;oCAChF,CAAC;oCACD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oCACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACnB,CAAC,CAAC,CAAC;4BACL,CAAC,EAAE;wBACH,EAAE,GAAG,EAAE,GAAG,EAAE;gCACV,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gCAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gCACjC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gCACd,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;gCAChC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gCAC1B,MAAM,CAAC,GAAG,EAAE;oCACV,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;wCAC3C,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,CAAC,KAAK,uCAAuC,CAAC,CAAC;oCACrF,CAAC;oCACD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oCACxB,MAAM,CAAC,IAAI,CAAC;wCACV,UAAU,EAAE,IAAI;wCAChB,QAAQ;qCACoB,CAAC,CAAC;gCAClC,CAAC,CAAC,CAAC;4BACL,CAAC,EAAE;qBACJ,CAAC,CAAC,CAAC;oBACJ,OAAO,MAAM,CAAC;gBAChB,CAAC,EAAE;SACJ,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC5E,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnB,GAAG,iBAAiB;YACpB,SAAS;SACV,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAA2E;IACpG,IAAI,EAAE,gBAAgB;IACtB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QACzF,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACrB,OAAO,EAAE,CAAsC;YAC7C;gBACE,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;oBAC5C,MAAM,IAAI,GAAG,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAClE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;oBACnC,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;oBAC7C,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;wBACnB,GAAG,SAAS;wBACZ,SAAS,EAAE,WAAW;wBACtB,QAAQ;wBACR,IAAI;wBACJ,KAAK;qBACN,CAAC,CAAC,CAAC;gBACN,CAAC;aACF;YACD;gBACE,GAAG,EAAE,GAAG,EAAE;oBACR,MAAM,IAAI,GAAG,2BAA2B,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAClE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;oBACjB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;oBACxD,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;oBAC1B,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC,CAAC;oBAC7C,MAAM,KAAK,GAAc,QAAQ,CAAC,CAAC;wBAC/B,CAAC;gCACC,IAAI,EAAE,KAAK;gCACX,OAAO,EAAE,QAAQ;6BAClB,CAAC,CAAC,CAAC;wBACJ,EAAE,CAAC;oBAEP,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;wBACnB,GAAG,SAAS;wBACZ,SAAS,EAAE,WAAW;wBACtB,IAAI;wBACJ,QAAQ;wBACR,KAAK;qBACN,CAAC,CAAC,CAAC;gBACN,CAAC;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAyE;IACjG,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QAC3E,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpB,MAAM,SAAS,GAAG,EAAE,CAA6B;YAC/C,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,MAAM,SAAS,GAA+B,EAAE,CAAC;oBACjD,YAAY,CAAC,GAAG,EAAE;wBAChB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBACpC,CAAC,CAAC,CAAC;oBACH,OAAO,SAAS,CAAC;gBACnB,CAAC,EAAE;YACH,EAAE,GAAG,EAAE,GAAG,EAAE;oBACV,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBACxB,OAAO,CAAE,IAAI,QAAQ,EAAE,CAAE,CAAC;gBAC5B,CAAC,EAAE;SACJ,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,2BAA2B,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;QACjD,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnB,GAAG,SAAS;YACZ,SAAS,EAAE,UAAU;YACrB,SAAS;YACT,IAAI;YACJ,KAAK;SACN,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAA+D;IAClF,IAAI,EAAE,UAAU;IAChB,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QACjD,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACf,MAAM,IAAI,GAAG,2BAA2B,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,MAAM,SAAS,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;YACnB,GAAG,SAAS;YACZ,SAAS,EAAE,KAAK;YAChB,IAAI;YACJ,KAAK;SACN,CAAC,CAAC,CAAC;IACN,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmE;IAC1F,IAAI,EAAE,cAAc;IACpB,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE;QACxD,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAClB,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+D;IAC3F,IAAI,EAAE,mBAAmB;IACzB,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QAC3C,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAkD;IAC7E,IAAI,EAAE,kBAAkB;IACxB,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE;QACrD,MAAM,OAAO,GAAe,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE;YACX,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;CACF,CAAC","sourcesContent":["import * as l from '../../lexer';\nimport { Wildcard } from '@traqula/core';\nimport type { RuleDef, ImplArgs } from '@traqula/core';\nimport { canParseAggregate } from '../builtIn';\nimport { datasetClause, type IDatasetClause } from '../dataSetClause';\nimport { expression } from '../expression';\nimport { prologue, triplesTemplate, var_, varOrIri } from '../general';\nimport { solutionModifier } from '../solutionModifier';\nimport type {\n AggregateExpression,\n AskQuery,\n ConstructQuery,\n DescribeQuery,\n Expression,\n Grouping,\n IriTerm,\n Pattern,\n Query,\n SelectQuery,\n Triple,\n ValuePatternRow,\n Variable,\n VariableExpression,\n VariableTerm,\n} from '../../Sparql11types';\nimport { triplesSameSubject } from '../tripleBlock';\nimport { dataBlock, whereClause } from '../whereClause';\n\n/**\n * [[1]](https://www.w3.org/TR/sparql11-query/#rQueryUnit)\n */\nexport const queryUnit: RuleDef<'queryUnit', Query> = <const> {\n name: 'queryUnit',\n impl: ({ SUBRULE }) => () => SUBRULE(query),\n};\n\n/**\n * [[2]](https://www.w3.org/TR/sparql11-query/#rQuery)\n */\nexport const query: RuleDef<'query', Query> = <const> {\n name: 'query',\n impl: ({ ACTION, SUBRULE, OR }) => () => {\n const prologueValues = SUBRULE(prologue);\n const queryType = OR<Omit<Query, HandledByBase>>([\n { ALT: () => SUBRULE(selectQuery) },\n { ALT: () => SUBRULE(constructQuery) },\n { ALT: () => SUBRULE(describeQuery) },\n { ALT: () => SUBRULE(askQuery) },\n ]);\n const values = SUBRULE(valuesClause);\n\n return ACTION(() => (<Query>{\n ...prologueValues,\n ...queryType,\n type: 'query',\n ...(values && { values }),\n }));\n },\n};\n\nexport type HandledByBase = 'values' | 'type' | 'base' | 'prefixes';\n\nfunction extractFromOfDataSetClauses(ACTION: ImplArgs['ACTION'], MANY: ImplArgs['MANY'], SUBRULE: ImplArgs['SUBRULE']):\n{ default: IriTerm[]; named: IriTerm[] } | undefined {\n const datasetClauses: IDatasetClause[] = [];\n MANY(() => {\n datasetClauses.push(SUBRULE(datasetClause));\n });\n return ACTION(() => {\n const from: { default: IriTerm[]; named: IriTerm[] } = {\n default: [],\n named: [],\n };\n for (const datasetClause of datasetClauses) {\n if (datasetClause.type === 'default') {\n from.default.push(datasetClause.value);\n } else {\n from.named.push(datasetClause.value);\n }\n }\n return (from.default.length === 0 && from.named.length === 0) ? undefined : from;\n });\n}\n\n/**\n * Get all 'aggregate' rules from an expression\n */\nfunction getAggregatesOfExpression(expression: Expression | Pattern): AggregateExpression[] {\n if ('type' in expression) {\n if (expression.type === 'aggregate') {\n return [ expression ];\n }\n if (expression.type === 'operation') {\n const aggregates: AggregateExpression[] = [];\n for (const arg of expression.args) {\n aggregates.push(...getAggregatesOfExpression(arg));\n }\n return aggregates;\n }\n }\n return [];\n}\n\n/**\n * Return the id of an expression\n */\nfunction getExpressionId(expression: Grouping | VariableTerm | VariableExpression): string | undefined {\n // Check if grouping\n if ('variable' in expression && expression.variable) {\n return expression.variable.value;\n }\n if ('value' in expression) {\n return expression.value;\n }\n return 'value' in expression.expression ? expression.expression.value : undefined;\n}\n/**\n * Get all variables used in an expression\n */\nfunction getVariablesFromExpression(expression: Expression): Set<VariableTerm> {\n const variables = new Set<VariableTerm>();\n const visitExpression = (expr: Expression | Pattern | undefined): void => {\n if (!expr) {\n return;\n }\n if ('termType' in expr && expr.termType === 'Variable') {\n variables.add(expr);\n } else if ('type' in expr && expr.type === 'operation') {\n for (const rec of expr.args) {\n visitExpression(rec);\n }\n }\n };\n visitExpression(expression);\n return variables;\n}\n\n/**\n * [[7]](https://www.w3.org/TR/sparql11-query/#rSelectQuery)\n */\nexport const selectQuery: RuleDef<'selectQuery', Omit<SelectQuery, HandledByBase>> = <const> {\n name: 'selectQuery',\n impl: ({ ACTION, SUBRULE, MANY, context }) => () => {\n const selectVal = SUBRULE(selectClause);\n const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);\n const where = SUBRULE(whereClause);\n const modifier = SUBRULE(solutionModifier);\n\n ACTION(() => {\n if (selectVal.variables.length === 1 && selectVal.variables[0] instanceof Wildcard) {\n if (modifier.group !== undefined) {\n throw new Error('GROUP BY not allowed with wildcard');\n }\n return;\n }\n const variables = <Variable[]> selectVal.variables;\n // Check for projection of ungrouped variable\n // Check can be skipped in case of wildcard select.\n if (!context.skipValidation) {\n const hasCountAggregate = variables.flatMap(\n varVal => 'termType' in varVal ? [] : getAggregatesOfExpression(varVal.expression),\n ).some(agg => agg.aggregation === 'count' && !(agg.expression instanceof Wildcard));\n if (hasCountAggregate || modifier.group) {\n // We have to check whether\n // 1. Variables used in projection are usable given the group by clause\n // 2. A selectCount will create an implicit group by clause.\n for (const selectVar of variables) {\n if ('termType' in selectVar) {\n if (!modifier.group || !modifier.group.map(groupvar => getExpressionId(groupvar))\n .includes((getExpressionId(selectVar)))) {\n throw new Error('Variable not allowed in projection');\n }\n } else if (getAggregatesOfExpression(selectVar.expression).length === 0) {\n const usedvars = getVariablesFromExpression(selectVar.expression);\n for (const usedvar of usedvars) {\n if (!modifier.group || !modifier.group.map || !modifier.group.map(groupVar => getExpressionId(groupVar))\n .includes(getExpressionId(usedvar))) {\n throw new Error(`Use of ungrouped variable in projection of operation (?${getExpressionId(usedvar)})`);\n }\n }\n }\n }\n }\n }\n // Check if id of each AS-selected column is not yet bound by subquery\n const subqueries = where.filter(pattern => pattern.type === 'query');\n if (subqueries.length > 0) {\n const selectedVarIds: string[] = [];\n for (const selectedVar of variables) {\n if ('variable' in selectedVar) {\n selectedVarIds.push(selectedVar.variable.value);\n }\n }\n const vars = subqueries.flatMap(sub => <(Variable | Wildcard)[]>sub.variables)\n .map(v => 'value' in v ? v.value : v.variable.value);\n const subqueryIds = new Set(vars);\n for (const selectedVarId of selectedVarIds) {\n if (subqueryIds.has(selectedVarId)) {\n throw new Error(`Target id of 'AS' (?${selectedVarId}) already used in subquery`);\n }\n }\n }\n });\n\n return {\n ...selectVal,\n queryType: 'SELECT',\n ...(from && { from }),\n where,\n ...modifier,\n };\n },\n};\n\n/**\n * [[8]](https://www.w3.org/TR/sparql11-query/#rSubSelect)\n */\nexport const subSelect: RuleDef<'subSelect', Omit<SelectQuery, 'prefixes'>> = <const> {\n name: 'subSelect',\n impl: ({ ACTION, SUBRULE }) => () => {\n const clause = SUBRULE(selectClause);\n const where = SUBRULE(whereClause);\n const modifiers = SUBRULE(solutionModifier);\n const values = SUBRULE(valuesClause);\n\n return ACTION(() => ({\n ...modifiers,\n ...clause,\n type: 'query',\n queryType: 'SELECT',\n where,\n ...(values && { values }),\n }));\n },\n};\n\n/**\n * [[9]](https://www.w3.org/TR/sparql11-query/#rSelectClause)\n */\nexport interface ISelectClause {\n variables: Variable[] | [Wildcard];\n distinct?: true;\n reduced?: true;\n}\nexport const selectClause: RuleDef<'selectClause', ISelectClause> = <const> {\n name: 'selectClause',\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, OPTION, OR1, OR2, OR3, context }) => () => {\n CONSUME(l.select);\n const couldParseAgg = ACTION(() =>\n context.parseMode.has(canParseAggregate) || !context.parseMode.add(canParseAggregate));\n\n const distinctOrReduced = OPTION(() => OR1<Partial<{ distinct: true; reduced: true }>>([\n { ALT: () => {\n CONSUME(l.distinct);\n return { distinct: true };\n } },\n { ALT: () => {\n CONSUME(l.reduced);\n return { reduced: true };\n } },\n ]));\n const variables = OR2<ISelectClause['variables']>([\n { ALT: () => {\n CONSUME(l.symbols.star);\n return [ new Wildcard() ];\n } },\n { ALT: () => {\n const usedVars: VariableTerm[] = [];\n const result: Variable[] = [];\n AT_LEAST_ONE(() => OR3([\n { ALT: () => {\n const raw = SUBRULE1(var_);\n ACTION(() => {\n if (usedVars.some(v => v.equals(raw))) {\n throw new Error(`Variable ${raw.value} used more than once in SELECT clause`);\n }\n usedVars.push(raw);\n result.push(raw);\n });\n } },\n { ALT: () => {\n CONSUME(l.symbols.LParen);\n const expr = SUBRULE(expression);\n CONSUME(l.as);\n const variable = SUBRULE2(var_);\n CONSUME(l.symbols.RParen);\n ACTION(() => {\n if (usedVars.some(v => v.equals(variable))) {\n throw new Error(`Variable ${variable.value} used more than once in SELECT clause`);\n }\n usedVars.push(variable);\n result.push({\n expression: expr,\n variable,\n } satisfies VariableExpression);\n });\n } },\n ]));\n return result;\n } },\n ]);\n ACTION(() => !couldParseAgg && context.parseMode.delete(canParseAggregate));\n return ACTION(() => ({\n ...distinctOrReduced,\n variables,\n }));\n },\n};\n\n/**\n * [[10]](https://www.w3.org/TR/sparql11-query/#rConstructQuery)\n */\nexport const constructQuery: RuleDef<'constructQuery', Omit<ConstructQuery, HandledByBase>> = <const> {\n name: 'constructQuery',\n impl: ({ ACTION, SUBRULE, CONSUME, SUBRULE1, SUBRULE2, MANY1, MANY2, OPTION, OR }) => () => {\n CONSUME(l.construct);\n return OR<Omit<ConstructQuery, HandledByBase>>([\n {\n ALT: () => {\n const template = SUBRULE(constructTemplate);\n const from = extractFromOfDataSetClauses(ACTION, MANY1, SUBRULE1);\n const where = SUBRULE(whereClause);\n const modifiers = SUBRULE1(solutionModifier);\n return ACTION(() => ({\n ...modifiers,\n queryType: 'CONSTRUCT',\n template,\n from,\n where,\n }));\n },\n },\n {\n ALT: () => {\n const from = extractFromOfDataSetClauses(ACTION, MANY2, SUBRULE2);\n CONSUME(l.where);\n CONSUME(l.symbols.LCurly);\n const template = OPTION(() => SUBRULE(triplesTemplate));\n CONSUME(l.symbols.RCurly);\n const modifiers = SUBRULE2(solutionModifier);\n const where: Pattern[] = template ?\n [{\n type: 'bgp',\n triples: template,\n }] :\n [];\n\n return ACTION(() => ({\n ...modifiers,\n queryType: 'CONSTRUCT',\n from,\n template,\n where,\n }));\n },\n },\n ]);\n },\n};\n\n/**\n * [[11]](https://www.w3.org/TR/sparql11-query/#rDescribeQuery)\n */\nexport const describeQuery: RuleDef<'describeQuery', Omit<DescribeQuery, HandledByBase>> = <const> {\n name: 'describeQuery',\n impl: ({ ACTION, AT_LEAST_ONE, SUBRULE, CONSUME, MANY, OPTION, OR }) => () => {\n CONSUME(l.describe);\n const variables = OR<DescribeQuery['variables']>([\n { ALT: () => {\n const variables: (VariableTerm | IriTerm)[] = [];\n AT_LEAST_ONE(() => {\n variables.push(SUBRULE(varOrIri));\n });\n return variables;\n } },\n { ALT: () => {\n CONSUME(l.symbols.star);\n return [ new Wildcard() ];\n } },\n ]);\n const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);\n const where = OPTION(() => SUBRULE(whereClause));\n const modifiers = SUBRULE(solutionModifier);\n return ACTION(() => ({\n ...modifiers,\n queryType: 'DESCRIBE',\n variables,\n from,\n where,\n }));\n },\n};\n\n/**\n * [[12]](https://www.w3.org/TR/sparql11-query/#rAskQuery)\n */\nexport const askQuery: RuleDef<'askQuery', Omit<AskQuery, HandledByBase>> = <const> {\n name: 'askQuery',\n impl: ({ ACTION, SUBRULE, CONSUME, MANY }) => () => {\n CONSUME(l.ask);\n const from = extractFromOfDataSetClauses(ACTION, MANY, SUBRULE);\n const where = SUBRULE(whereClause);\n const modifiers = SUBRULE(solutionModifier);\n return ACTION(() => ({\n ...modifiers,\n queryType: 'ASK',\n from,\n where,\n }));\n },\n};\n\n/**\n * [[28]](https://www.w3.org/TR/sparql11-query/#rValuesClause)\n */\nexport const valuesClause: RuleDef<'valuesClause', ValuePatternRow[] | undefined> = <const> {\n name: 'valuesClause',\n impl: ({ SUBRULE, CONSUME, OPTION }) => () => OPTION(() => {\n CONSUME(l.values);\n return SUBRULE(dataBlock);\n }),\n};\n\n/**\n * [[73]](https://www.w3.org/TR/sparql11-query/#ConstructTemplate)\n */\nexport const constructTemplate: RuleDef<'constructTemplate', Triple[] | undefined> = <const> {\n name: 'constructTemplate',\n impl: ({ SUBRULE, CONSUME, OPTION }) => () => {\n CONSUME(l.symbols.LCurly);\n const triples = OPTION(() => SUBRULE(constructTriples));\n CONSUME(l.symbols.RCurly);\n return triples;\n },\n};\n\n/**\n * [[12]](https://www.w3.org/TR/sparql11-query/#rConstructTriples)\n */\nexport const constructTriples: RuleDef<'constructTriples', Triple[]> = <const> {\n name: 'constructTriples',\n impl: ({ SUBRULE, CONSUME, OPTION1, OPTION2 }) => () => {\n const triples: Triple[][] = [];\n triples.push(SUBRULE(triplesSameSubject));\n OPTION1(() => {\n CONSUME(l.symbols.dot);\n OPTION2(() => {\n triples.push(SUBRULE(constructTriples));\n });\n });\n return triples.flat(1);\n },\n};\n"]}
@@ -0,0 +1,44 @@
1
+ import type { RuleDef } from '@traqula/core';
2
+ import type { Expression, Grouping, Ordering, SelectQuery } from '../Sparql11types';
3
+ /**
4
+ * [[18]](https://www.w3.org/TR/sparql11-query/#rSolutionModifier)
5
+ */
6
+ export type ISolutionModifier = Pick<SelectQuery, 'group' | 'having' | 'order' | 'limit' | 'offset'>;
7
+ export declare const solutionModifier: RuleDef<'solutionModifier', ISolutionModifier>;
8
+ /**
9
+ * [[19]](https://www.w3.org/TR/sparql11-query/#rGroupClause)
10
+ */
11
+ export declare const groupClause: RuleDef<'groupClause', Grouping[]>;
12
+ /**
13
+ * [[20]](https://www.w3.org/TR/sparql11-query/#rGroupCondition)
14
+ */
15
+ export declare const groupCondition: RuleDef<'groupCondition', Grouping>;
16
+ /**
17
+ * [[21]](https://www.w3.org/TR/sparql11-query/#rHavingClause)
18
+ */
19
+ export declare const havingClause: RuleDef<'havingClause', Expression[]>;
20
+ /**
21
+ * [[22]](https://www.w3.org/TR/sparql11-query/#rHavingCondition)
22
+ */
23
+ export declare const havingCondition: RuleDef<'havingCondition', Expression>;
24
+ /**
25
+ * [[23]](https://www.w3.org/TR/sparql11-query/#rOrderClause)
26
+ */
27
+ export declare const orderClause: RuleDef<'orderClause', Ordering[]>;
28
+ /**
29
+ * [[24]](https://www.w3.org/TR/sparql11-query/#rOrderCondition)
30
+ */
31
+ export declare const orderCondition: RuleDef<'orderCondition', Ordering>;
32
+ /**
33
+ * Parses limit and or offset in any order.
34
+ * [[25]](https://www.w3.org/TR/sparql11-query/#rLimitOffsetClauses)
35
+ */
36
+ export declare const limitOffsetClauses: RuleDef<'limitOffsetClauses', Pick<SelectQuery, 'limit' | 'offset'>>;
37
+ /**
38
+ * [[26]](https://www.w3.org/TR/sparql11-query/#rLimitClause)
39
+ */
40
+ export declare const limitClause: RuleDef<'limitClause', number>;
41
+ /**
42
+ * [[27]](https://www.w3.org/TR/sparql11-query/#rWhereClause)
43
+ */
44
+ export declare const offsetClause: RuleDef<'offsetClause', number>;