@traqula/rules-sparql-1-1 0.0.15 → 0.0.17

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 (73) hide show
  1. package/lib/MinimalSparqlParser.d.ts +3 -3
  2. package/lib/MinimalSparqlParser.js +6 -3
  3. package/lib/MinimalSparqlParser.js.map +1 -1
  4. package/lib/Sparql11types.d.ts +1 -1
  5. package/lib/Sparql11types.js.map +1 -1
  6. package/lib/{factory.d.ts → astFactory.d.ts} +4 -4
  7. package/lib/{factory.js → astFactory.js} +3 -3
  8. package/lib/astFactory.js.map +1 -0
  9. package/lib/expressionHelpers.js +12 -12
  10. package/lib/expressionHelpers.js.map +1 -1
  11. package/lib/factoryMixins/ContextFactory.d.ts +2 -2
  12. package/lib/factoryMixins/ContextFactory.js.map +1 -1
  13. package/lib/factoryMixins/ExpressionFactory.d.ts +2 -2
  14. package/lib/factoryMixins/ExpressionFactory.js.map +1 -1
  15. package/lib/factoryMixins/GraphRefFactory.d.ts +2 -2
  16. package/lib/factoryMixins/GraphRefFactory.js.map +1 -1
  17. package/lib/factoryMixins/PathFactory.d.ts +2 -2
  18. package/lib/factoryMixins/PathFactory.js.map +1 -1
  19. package/lib/factoryMixins/Patternfactory.d.ts +2 -2
  20. package/lib/factoryMixins/Patternfactory.js.map +1 -1
  21. package/lib/factoryMixins/QueryFactory.d.ts +2 -2
  22. package/lib/factoryMixins/QueryFactory.js.map +1 -1
  23. package/lib/factoryMixins/SolutionModifiersFactory.d.ts +2 -2
  24. package/lib/factoryMixins/SolutionModifiersFactory.js.map +1 -1
  25. package/lib/factoryMixins/TermFactory.d.ts +2 -2
  26. package/lib/factoryMixins/TermFactory.js.map +1 -1
  27. package/lib/factoryMixins/UpdateOperationFactory.d.ts +2 -2
  28. package/lib/factoryMixins/UpdateOperationFactory.js.map +1 -1
  29. package/lib/grammar/builtIn.d.ts +1 -1
  30. package/lib/grammar/builtIn.js +7 -7
  31. package/lib/grammar/builtIn.js.map +1 -1
  32. package/lib/grammar/dataSetClause.js +6 -6
  33. package/lib/grammar/dataSetClause.js.map +1 -1
  34. package/lib/grammar/expression.js +18 -18
  35. package/lib/grammar/expression.js.map +1 -1
  36. package/lib/grammar/general.js +12 -10
  37. package/lib/grammar/general.js.map +1 -1
  38. package/lib/grammar/index.js +3 -3
  39. package/lib/grammar/index.js.map +1 -1
  40. package/lib/grammar/literals.js +24 -24
  41. package/lib/grammar/literals.js.map +1 -1
  42. package/lib/grammar/propertyPaths.d.ts +2 -2
  43. package/lib/grammar/propertyPaths.js +7 -7
  44. package/lib/grammar/propertyPaths.js.map +1 -1
  45. package/lib/grammar/queryUnit.js +31 -23
  46. package/lib/grammar/queryUnit.js.map +1 -1
  47. package/lib/grammar/solutionModifier.js +26 -16
  48. package/lib/grammar/solutionModifier.js.map +1 -1
  49. package/lib/grammar/tripleBlock.d.ts +4 -4
  50. package/lib/grammar/tripleBlock.js +33 -20
  51. package/lib/grammar/tripleBlock.js.map +1 -1
  52. package/lib/grammar/updateUnit.js +75 -41
  53. package/lib/grammar/updateUnit.js.map +1 -1
  54. package/lib/grammar/whereClause.d.ts +1 -1
  55. package/lib/grammar/whereClause.js +46 -32
  56. package/lib/grammar/whereClause.js.map +1 -1
  57. package/lib/index.cjs +568 -383
  58. package/lib/index.d.ts +1 -1
  59. package/lib/index.js +1 -1
  60. package/lib/index.js.map +1 -1
  61. package/lib/lexer/BuiltInCalls.d.ts +1 -1
  62. package/lib/lexer/lexer.d.ts +2 -2
  63. package/lib/lexer/symbols.d.ts +1 -1
  64. package/lib/lexer/terminals.d.ts +1 -1
  65. package/lib/sparql11HelperTypes.d.ts +9 -6
  66. package/lib/sparql11HelperTypes.js.map +1 -1
  67. package/lib/utils.d.ts +1 -1
  68. package/lib/utils.js +1 -1
  69. package/lib/utils.js.map +1 -1
  70. package/lib/validation/validators.js +63 -81
  71. package/lib/validation/validators.js.map +1 -1
  72. package/package.json +3 -3
  73. package/lib/factory.js.map +0 -1
package/lib/index.cjs CHANGED
@@ -20,10 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // lib/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ AstFactory: () => AstFactory,
24
+ AstTransformer: () => AstTransformer,
23
25
  CommonIRIs: () => CommonIRIs,
24
- Factory: () => Factory,
25
26
  MinimalSparqlParser: () => MinimalSparqlParser,
26
- TransformerSparql11: () => TransformerSparql11,
27
27
  baseAggregateFunc: () => baseAggregateFunc,
28
28
  checkNote13: () => checkNote13,
29
29
  completeParseContext: () => completeParseContext,
@@ -395,8 +395,8 @@ __export(BuiltInCalls_exports, {
395
395
  year: () => year
396
396
  });
397
397
 
398
- // ../core/lib/CoreFactory.js
399
- var CoreFactory = class {
398
+ // ../core/lib/AstCoreFactory.js
399
+ var AstCoreFactory = class {
400
400
  wrap(val, loc) {
401
401
  return { val, loc };
402
402
  }
@@ -9733,6 +9733,15 @@ applyMixins(Parser, [
9733
9733
  PerformanceTracer
9734
9734
  ]);
9735
9735
 
9736
+ // ../core/lib/utils.js
9737
+ function unCapitalize(str2) {
9738
+ return str2.charAt(0).toLowerCase() + str2.slice(1);
9739
+ }
9740
+ function createToken2(config) {
9741
+ return createToken(config);
9742
+ }
9743
+ var traqulaIndentation = "When you use this string, you expect traqula to handle indentation after every newline";
9744
+
9736
9745
  // ../core/lib/lexer-builder/LexerBuilder.js
9737
9746
  var LexerBuilder = class _LexerBuilder {
9738
9747
  tokens;
@@ -9830,16 +9839,13 @@ var LexerBuilder = class _LexerBuilder {
9830
9839
  }
9831
9840
  };
9832
9841
 
9833
- // ../core/lib/utils.js
9834
- function unCapitalize(str2) {
9835
- return str2.charAt(0).toLowerCase() + str2.slice(1);
9836
- }
9837
- function createToken2(config) {
9838
- return createToken(config);
9839
- }
9840
-
9841
9842
  // ../core/lib/Transformers.js
9842
9843
  var TransformerType = class {
9844
+ clone(obj) {
9845
+ const newObj = Object.create(Object.getPrototypeOf(obj));
9846
+ Object.defineProperties(newObj, Object.getOwnPropertyDescriptors(obj));
9847
+ return newObj;
9848
+ }
9843
9849
  safeObjectVisit(value, mapper) {
9844
9850
  if (value && typeof value === "object") {
9845
9851
  if (Array.isArray(value)) {
@@ -9849,104 +9855,213 @@ var TransformerType = class {
9849
9855
  }
9850
9856
  return value;
9851
9857
  }
9852
- transformNode(curObject, nodeCallBacks) {
9853
- let continueCheck;
9854
- let transformation;
9855
- const casted = curObject;
9856
- if (casted.type) {
9857
- continueCheck = nodeCallBacks[casted.type]?.continue;
9858
- transformation = nodeCallBacks[casted.type]?.transform;
9859
- }
9860
- let shouldContinue = true;
9861
- if (continueCheck) {
9862
- shouldContinue = continueCheck(curObject);
9863
- }
9864
- if (!shouldContinue) {
9865
- return curObject;
9866
- }
9867
- const copy3 = { ...curObject };
9868
- for (const [key, value] of Object.entries(copy3)) {
9869
- copy3[key] = this.safeObjectVisit(value, (obj) => this.transformNode(obj, nodeCallBacks));
9870
- }
9871
- if (transformation) {
9872
- return transformation(copy3);
9873
- }
9874
- return copy3;
9858
+ /**
9859
+ * Recursively transforms all objects that are not arrays. Mapper is called on deeper objects first.
9860
+ * @param startObject object to start iterating from
9861
+ * @param mapper mapper to transform the various objects - argument is a copy of the original
9862
+ * @param preVisitor callback that is evaluated before iterating deeper.
9863
+ * If continues is false, we do not iterate deeper, current object is still mapped. - default: true
9864
+ * If shortcut is true, we do not iterate deeper, nor do we branch out, this mapper will be the last one called.
9865
+ * - Default false
9866
+ */
9867
+ transformObject(startObject, mapper, preVisitor = () => ({})) {
9868
+ let didShortCut = false;
9869
+ const recurse = (curObject) => {
9870
+ const copy3 = this.clone(curObject);
9871
+ const context = preVisitor(copy3);
9872
+ didShortCut = context.shortcut ?? false;
9873
+ const continues = context.continue ?? true;
9874
+ if (continues && !didShortCut) {
9875
+ for (const [key, value] of Object.entries(copy3)) {
9876
+ if (didShortCut) {
9877
+ return copy3;
9878
+ }
9879
+ copy3[key] = this.safeObjectVisit(value, (obj) => recurse(obj));
9880
+ }
9881
+ }
9882
+ return mapper(copy3);
9883
+ };
9884
+ return recurse(startObject);
9875
9885
  }
9876
- visitNode(curObject, nodeCallBacks) {
9877
- let callback;
9878
- const casted = curObject;
9879
- if (casted.type) {
9880
- callback = nodeCallBacks[casted.type];
9881
- }
9882
- let shouldIterate = true;
9883
- if (callback) {
9884
- shouldIterate = callback(curObject);
9885
- }
9886
- if (shouldIterate) {
9887
- for (const value of Object.values(curObject)) {
9888
- this.safeObjectVisit(value, (obj) => this.visitNode(obj, nodeCallBacks));
9886
+ /**
9887
+ * Visitor that visits all objects. Visits deeper objects first.
9888
+ */
9889
+ visitObject(startObject, visitor, preVisitor = () => ({})) {
9890
+ let didShortCut = false;
9891
+ const recurse = (curObject) => {
9892
+ const context = preVisitor(curObject);
9893
+ didShortCut = context.shortcut ?? false;
9894
+ const continues = context.continue ?? true;
9895
+ if (continues && !didShortCut) {
9896
+ for (const value of Object.values(curObject)) {
9897
+ if (didShortCut) {
9898
+ return;
9899
+ }
9900
+ this.safeObjectVisit(value, (obj) => recurse(obj));
9901
+ }
9889
9902
  }
9890
- }
9903
+ visitor(curObject);
9904
+ };
9905
+ recurse(startObject);
9906
+ }
9907
+ transformNode(startObject, nodeCallBacks) {
9908
+ const transformWrapper = (curObject) => {
9909
+ const casted = curObject;
9910
+ if (casted.type) {
9911
+ const ogFunc = nodeCallBacks[casted.type]?.transform;
9912
+ if (ogFunc) {
9913
+ return ogFunc(casted);
9914
+ }
9915
+ }
9916
+ return curObject;
9917
+ };
9918
+ const preTransformWrapper = (curObject) => {
9919
+ const casted = curObject;
9920
+ if (casted.type) {
9921
+ const ogFunc = nodeCallBacks[casted.type]?.preVisitor;
9922
+ if (ogFunc) {
9923
+ return ogFunc(casted);
9924
+ }
9925
+ }
9926
+ return {};
9927
+ };
9928
+ return this.transformObject(startObject, transformWrapper, preTransformWrapper);
9929
+ }
9930
+ visitNode(startObject, nodeCallBacks) {
9931
+ const visitWrapper = (curObject) => {
9932
+ const casted = curObject;
9933
+ if (casted.type) {
9934
+ const ogFunc = nodeCallBacks[casted.type]?.visitor;
9935
+ if (ogFunc) {
9936
+ ogFunc(casted);
9937
+ }
9938
+ }
9939
+ };
9940
+ const preVisitWrapper = (curObject) => {
9941
+ const casted = curObject;
9942
+ if (casted.type) {
9943
+ const ogFunc = nodeCallBacks[casted.type]?.preVisitor;
9944
+ if (ogFunc) {
9945
+ return ogFunc(casted);
9946
+ }
9947
+ }
9948
+ return {};
9949
+ };
9950
+ this.visitObject(startObject, visitWrapper, preVisitWrapper);
9951
+ }
9952
+ traverseNodes(currentNode, traverse) {
9953
+ let didShortCut = false;
9954
+ const recurse = (curNode) => {
9955
+ const traverser = traverse[curNode.type];
9956
+ if (traverser) {
9957
+ const { next, shortcut } = traverser(curNode);
9958
+ didShortCut = shortcut ?? false;
9959
+ if (!didShortCut) {
9960
+ for (const node of next ?? []) {
9961
+ if (didShortCut) {
9962
+ return;
9963
+ }
9964
+ recurse(node);
9965
+ }
9966
+ }
9967
+ }
9968
+ };
9969
+ recurse(currentNode);
9891
9970
  }
9892
9971
  };
9893
9972
  var TransformerSubType = class extends TransformerType {
9894
- // Public visitObjects(curObject: object, visitor: (current: object) => void): void {
9895
- // for (const value of Object.values(curObject)) {
9896
- // this.safeObjectVisit(value, obj => this.visitObjects(obj, visitor));
9897
- // }
9898
- // }
9899
- transformNodeSpecific(curObject, nodeCallBacks, nodeSpecificCallBacks = {}) {
9900
- let continueCheck;
9901
- let transformation;
9902
- const casted = curObject;
9903
- if (casted.type && casted.subType) {
9904
- const specific = nodeSpecificCallBacks[casted.type];
9905
- if (specific) {
9906
- continueCheck = specific[casted.subType]?.continue;
9907
- transformation = specific[casted.subType]?.transform;
9908
- }
9909
- }
9910
- let shouldContinue = true;
9911
- if (continueCheck) {
9912
- shouldContinue = continueCheck(curObject);
9913
- }
9914
- if (!shouldContinue) {
9915
- return curObject;
9916
- }
9917
- const copy3 = { ...curObject };
9918
- for (const [key, value] of Object.entries(copy3)) {
9919
- copy3[key] = this.safeObjectVisit(value, (obj) => this.transformNodeSpecific(obj, nodeCallBacks, nodeSpecificCallBacks));
9920
- }
9921
- if (transformation) {
9922
- return transformation(copy3);
9923
- }
9924
- return copy3;
9973
+ transformNodeSpecific(startObject, nodeCallBacks, nodeSpecificCallBacks) {
9974
+ const transformWrapper = (curObject) => {
9975
+ let ogTransform;
9976
+ const casted = curObject;
9977
+ if (casted.type && casted.subType) {
9978
+ const specific = nodeSpecificCallBacks[casted.type];
9979
+ if (specific) {
9980
+ ogTransform = specific[casted.subType]?.transform;
9981
+ }
9982
+ if (!ogTransform) {
9983
+ ogTransform = nodeCallBacks[casted.type]?.transform;
9984
+ }
9985
+ }
9986
+ return ogTransform ? ogTransform(casted) : curObject;
9987
+ };
9988
+ const preVisitWrapper = (curObject) => {
9989
+ let ogPreVisit;
9990
+ const casted = curObject;
9991
+ if (casted.type && casted.subType) {
9992
+ const specific = nodeSpecificCallBacks[casted.type];
9993
+ if (specific) {
9994
+ ogPreVisit = specific[casted.subType]?.preVisitor;
9995
+ }
9996
+ if (!ogPreVisit) {
9997
+ ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
9998
+ }
9999
+ }
10000
+ return ogPreVisit ? ogPreVisit(casted) : curObject;
10001
+ };
10002
+ return this.transformObject(startObject, transformWrapper, preVisitWrapper);
9925
10003
  }
9926
10004
  /**
9927
10005
  * When both nodeCallBack and NodeSpecific callBack are matched, will only look at nodeSpecifCallback
9928
10006
  */
9929
- visitNodeSpecific(curObject, nodeCallBacks, nodeSpecificCallBacks = {}) {
9930
- let callback;
9931
- const casted = curObject;
9932
- if (casted.type && casted.subType) {
9933
- const specific = nodeSpecificCallBacks[casted.type];
9934
- if (specific) {
9935
- callback = specific[casted.subType];
10007
+ visitNodeSpecific(startObject, nodeCallBacks, nodeSpecificCallBacks) {
10008
+ const visitWrapper = (curObject) => {
10009
+ let ogTransform;
10010
+ const casted = curObject;
10011
+ if (casted.type && casted.subType) {
10012
+ const specific = nodeSpecificCallBacks[casted.type];
10013
+ if (specific) {
10014
+ ogTransform = specific[casted.subType]?.visitor;
10015
+ }
10016
+ if (!ogTransform) {
10017
+ ogTransform = nodeCallBacks[casted.type]?.visitor;
10018
+ }
9936
10019
  }
9937
- }
9938
- if (!callback && casted.type) {
9939
- callback = nodeCallBacks[curObject.type];
9940
- }
9941
- let shouldIterate = true;
9942
- if (callback) {
9943
- shouldIterate = callback(curObject) ?? true;
9944
- }
9945
- if (shouldIterate) {
9946
- for (const value of Object.values(curObject)) {
9947
- this.safeObjectVisit(value, (obj) => this.visitNodeSpecific(obj, nodeCallBacks, nodeSpecificCallBacks));
10020
+ if (ogTransform) {
10021
+ ogTransform(casted);
9948
10022
  }
9949
- }
10023
+ };
10024
+ const preVisitWrapper = (curObject) => {
10025
+ let ogPreVisit;
10026
+ const casted = curObject;
10027
+ if (casted.type && casted.subType) {
10028
+ const specific = nodeSpecificCallBacks[casted.type];
10029
+ if (specific) {
10030
+ ogPreVisit = specific[casted.subType]?.preVisitor;
10031
+ }
10032
+ if (!ogPreVisit) {
10033
+ ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
10034
+ }
10035
+ }
10036
+ return ogPreVisit ? ogPreVisit(casted) : curObject;
10037
+ };
10038
+ this.visitObject(startObject, visitWrapper, preVisitWrapper);
10039
+ }
10040
+ traverseSubNodes(currentNode, traverseNode, traverseSubNode) {
10041
+ let didShortCut = false;
10042
+ const recurse = (curNode) => {
10043
+ let traverser;
10044
+ const subObj = traverseSubNode[curNode.type];
10045
+ if (subObj) {
10046
+ traverser = subObj[curNode.subType];
10047
+ }
10048
+ if (!traverser) {
10049
+ traverser = traverseNode[curNode.type];
10050
+ }
10051
+ if (traverser) {
10052
+ const { next, shortcut } = traverser(curNode);
10053
+ didShortCut = shortcut ?? false;
10054
+ if (!didShortCut) {
10055
+ for (const node of next ?? []) {
10056
+ if (didShortCut) {
10057
+ return;
10058
+ }
10059
+ recurse(node);
10060
+ }
10061
+ }
10062
+ }
10063
+ };
10064
+ recurse(currentNode);
9950
10065
  }
9951
10066
  };
9952
10067
 
@@ -10997,8 +11112,8 @@ function UpdateOperationFactoryMixin(Base) {
10997
11112
  };
10998
11113
  }
10999
11114
 
11000
- // lib/factory.js
11001
- var Factory = class extends asArg(CoreFactory).call(ContextFactoryMixin).call(ExpressionFactoryMixin).call(GraphRefFactoryMixin).call(PathFactoryMixin).call(PatternFactoryMixin).call(QueryFactoryMixin).call(SolutionModifiersFactoryMixin).call(TermFactoryMixin).call(UpdateOperationFactoryMixin).returns() {
11115
+ // lib/astFactory.js
11116
+ var AstFactory = class extends asArg(AstCoreFactory).call(ContextFactoryMixin).call(ExpressionFactoryMixin).call(GraphRefFactoryMixin).call(PathFactoryMixin).call(PatternFactoryMixin).call(QueryFactoryMixin).call(SolutionModifiersFactoryMixin).call(TermFactoryMixin).call(UpdateOperationFactoryMixin).returns() {
11002
11117
  alwaysSparql11(obj) {
11003
11118
  return true;
11004
11119
  }
@@ -11113,12 +11228,12 @@ var CommonIRIs;
11113
11228
  CommonIRIs2["NIL"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";
11114
11229
  CommonIRIs2["TYPE"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
11115
11230
  })(CommonIRIs || (CommonIRIs = {}));
11116
- var TransformerSparql11 = class extends TransformerSubType {
11231
+ var AstTransformer = class extends TransformerSubType {
11117
11232
  };
11118
11233
 
11119
11234
  // lib/validation/validators.js
11120
- var F = new Factory();
11121
- var transformer = new TransformerSparql11();
11235
+ var F = new AstFactory();
11236
+ var transformer = new AstTransformer();
11122
11237
  function getAggregatesOfExpression(expression2) {
11123
11238
  if (F.isExpressionAggregate(expression2)) {
11124
11239
  return [expression2];
@@ -11197,77 +11312,69 @@ function queryIsGood(query2) {
11197
11312
  }
11198
11313
  }
11199
11314
  }
11315
+ function notUndefined(some2) {
11316
+ return some2 !== void 0;
11317
+ }
11200
11318
  function findPatternBoundedVars(iter, boundedVars) {
11201
- if (F.isQuery(iter) || F.isUpdate(iter)) {
11202
- if (F.isQuerySelect(iter) || F.isQueryDescribe(iter)) {
11203
- if (iter.where && iter.variables.some((x) => F.isWildcard(x))) {
11204
- findPatternBoundedVars(iter.where, boundedVars);
11205
- } else {
11206
- for (const v of iter.variables) {
11207
- findPatternBoundedVars(v, boundedVars);
11208
- }
11209
- }
11210
- if (iter.solutionModifiers.group) {
11211
- const grouping = iter.solutionModifiers.group;
11212
- for (const g of grouping.groupings) {
11213
- if ("variable" in g) {
11214
- findPatternBoundedVars(g.variable, boundedVars);
11215
- }
11216
- }
11217
- }
11218
- if (iter.values?.values && iter.values.values.length > 0) {
11219
- const values3 = iter.values.values;
11220
- for (const v of Object.keys(values3[0])) {
11319
+ transformer.traverseSubNodes(iter, {
11320
+ query: (op) => ({ next: [
11321
+ op.solutionModifiers.group
11322
+ ].filter(notUndefined) }),
11323
+ triple: (op) => ({ next: [op.subject, op.predicate, op.object] }),
11324
+ path: (op) => ({ next: op.items }),
11325
+ tripleCollection: (op) => ({ next: [op.identifier, ...op.triples] })
11326
+ }, {
11327
+ query: {
11328
+ select: (op) => ({ next: [
11329
+ ...op.variables.some((x) => F.isWildcard(x)) ? [op.where] : op.variables,
11330
+ op.solutionModifiers.group,
11331
+ op.values
11332
+ ].filter(notUndefined) }),
11333
+ describe: (op) => ({ next: [
11334
+ ...op.variables.some((x) => F.isWildcard(x)) ? [op.where] : op.variables,
11335
+ op.solutionModifiers.group,
11336
+ op.values
11337
+ ].filter(notUndefined) })
11338
+ },
11339
+ solutionModifier: {
11340
+ group: (op) => ({
11341
+ next: op.groupings.filter((g) => "variable" in g).map((x) => x.variable)
11342
+ }),
11343
+ having: (op) => ({ next: op.having }),
11344
+ order: (op) => ({ next: op.orderDefs.map((x) => x.expression) })
11345
+ },
11346
+ pattern: {
11347
+ values: (op) => {
11348
+ for (const v of Object.keys(op.values.at(0) ?? {})) {
11221
11349
  boundedVars.add(v);
11222
11350
  }
11351
+ return {};
11352
+ },
11353
+ bgp: (op) => ({ next: op.triples }),
11354
+ group: (op) => ({ next: op.patterns }),
11355
+ union: (op) => ({ next: op.patterns }),
11356
+ optional: (op) => ({ next: op.patterns }),
11357
+ service: (op) => ({ next: [op.name, ...op.patterns] }),
11358
+ bind: (op) => ({ next: [op.variable] }),
11359
+ graph: (op) => ({ next: [op.name, ...op.patterns] }),
11360
+ minus: (op) => ({ next: op.patterns.slice(0, 1) })
11361
+ },
11362
+ term: {
11363
+ variable: (op) => {
11364
+ boundedVars.add(op.value);
11365
+ return {};
11223
11366
  }
11224
11367
  }
11225
- } else if (F.isTerm(iter)) {
11226
- if (F.isTermVariable(iter)) {
11227
- boundedVars.add(iter.value);
11228
- }
11229
- } else if (F.isTriple(iter)) {
11230
- findPatternBoundedVars(iter.subject, boundedVars);
11231
- findPatternBoundedVars(iter.predicate, boundedVars);
11232
- findPatternBoundedVars(iter.object, boundedVars);
11233
- } else if (F.isPath(iter)) {
11234
- if (!F.isTerm(iter)) {
11235
- for (const item of iter.items) {
11236
- findPatternBoundedVars(item, boundedVars);
11237
- }
11238
- }
11239
- } else if (F.isTripleCollection(iter) || F.isPatternBgp(iter)) {
11240
- for (const triple of iter.triples) {
11241
- findPatternBoundedVars(triple, boundedVars);
11242
- }
11243
- } else if (F.isPatternGroup(iter) || F.isPatternUnion(iter) || F.isPatternOptional(iter) || F.isPatternService(iter)) {
11244
- for (const pattern of iter.patterns) {
11245
- findPatternBoundedVars(pattern, boundedVars);
11246
- }
11247
- if (F.isPatternService(iter)) {
11248
- findPatternBoundedVars(iter.name, boundedVars);
11249
- }
11250
- } else if (F.isPatternBind(iter)) {
11251
- findPatternBoundedVars(iter.variable, boundedVars);
11252
- } else if (F.isPatternValues(iter)) {
11253
- for (const variable of Object.keys(iter.values.at(0) ?? {})) {
11254
- boundedVars.add(variable);
11255
- }
11256
- } else if (F.isPatternGraph(iter)) {
11257
- findPatternBoundedVars(iter.name, boundedVars);
11258
- for (const pattern of iter.patterns) {
11259
- findPatternBoundedVars(pattern, boundedVars);
11260
- }
11261
- }
11368
+ });
11262
11369
  }
11263
11370
  function checkNote13(patterns) {
11264
11371
  for (const [index, pattern] of patterns.entries()) {
11265
11372
  if (F.isPatternBind(pattern) && index > 0 && F.isPatternBgp(patterns[index - 1])) {
11266
11373
  const bgp = patterns[index - 1];
11267
11374
  const variables = [];
11268
- transformer.visitNodeSpecific(bgp, {}, { term: { variable: (var_2) => {
11375
+ transformer.visitNodeSpecific(bgp, {}, { term: { variable: { visitor: (var_2) => {
11269
11376
  variables.push(var_2);
11270
- } } });
11377
+ } } } });
11271
11378
  if (variables.some((var_2) => var_2.value === pattern.variable.value)) {
11272
11379
  throw new Error(`Variable used to bind is already bound (?${pattern.variable.value})`);
11273
11380
  }
@@ -11293,12 +11400,12 @@ function updateNoReuseBlankNodeLabels(updateQuery) {
11293
11400
  const operation = update2.operation;
11294
11401
  if (operation.subType === "insertdata") {
11295
11402
  const blankNodesHere = /* @__PURE__ */ new Set();
11296
- transformer.visitNodeSpecific(operation, {}, { term: { blankNode: (blankNode2) => {
11403
+ transformer.visitNodeSpecific(operation, {}, { term: { blankNode: { visitor: (blankNode2) => {
11297
11404
  blankNodesHere.add(blankNode2.label);
11298
11405
  if (blankLabelsUsedInInsertData.has(blankNode2.label)) {
11299
11406
  throw new Error("Detected reuse blank node across different INSERT DATA clauses");
11300
11407
  }
11301
- } } });
11408
+ } } } });
11302
11409
  for (const blankNode2 of blankNodesHere) {
11303
11410
  blankLabelsUsedInInsertData.add(blankNode2);
11304
11411
  }
@@ -11337,22 +11444,22 @@ var rdfLiteral = {
11337
11444
  return OPTION(() => OR([
11338
11445
  { ALT: () => {
11339
11446
  const lang2 = CONSUME(terminals_exports.langTag);
11340
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(value, lang2), value.value, lang2.image.slice(1).toLowerCase()));
11447
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(value, lang2), value.value, lang2.image.slice(1).toLowerCase()));
11341
11448
  } },
11342
11449
  { ALT: () => {
11343
11450
  CONSUME(symbols_exports.hathat);
11344
11451
  const iriVal = SUBRULE1(iri2);
11345
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(value, iriVal), value.value, iriVal));
11452
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(value, iriVal), value.value, iriVal));
11346
11453
  } }
11347
11454
  ])) ?? value;
11348
11455
  },
11349
- gImpl: ({ SUBRULE, PRINT, PRINT_SPACE_LEFT }) => (ast, { factory }) => {
11350
- factory.printFilter(ast, () => PRINT_SPACE_LEFT(stringEscapedLexical(ast.value)));
11456
+ gImpl: ({ SUBRULE, PRINT, PRINT_SPACE_LEFT }) => (ast, { astFactory }) => {
11457
+ astFactory.printFilter(ast, () => PRINT_SPACE_LEFT(stringEscapedLexical(ast.value)));
11351
11458
  if (ast.langOrIri) {
11352
11459
  if (typeof ast.langOrIri === "string") {
11353
- factory.printFilter(ast, () => PRINT("@", ast.langOrIri));
11460
+ astFactory.printFilter(ast, () => PRINT("@", ast.langOrIri));
11354
11461
  } else {
11355
- factory.printFilter(ast, () => PRINT("^^"));
11462
+ astFactory.printFilter(ast, () => PRINT("^^"));
11356
11463
  SUBRULE(iri2, ast.langOrIri);
11357
11464
  }
11358
11465
  }
@@ -11374,7 +11481,7 @@ var numericLiteralUnsigned = {
11374
11481
  { ALT: () => [CONSUME(terminals_exports.decimal), CommonIRIs.DECIMAL] },
11375
11482
  { ALT: () => [CONSUME(terminals_exports.double), CommonIRIs.DOUBLE] }
11376
11483
  ]);
11377
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
11484
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11378
11485
  }
11379
11486
  };
11380
11487
  var numericLiteralPositive = {
@@ -11385,7 +11492,7 @@ var numericLiteralPositive = {
11385
11492
  { ALT: () => [CONSUME(terminals_exports.decimalPositive), CommonIRIs.DECIMAL] },
11386
11493
  { ALT: () => [CONSUME(terminals_exports.doublePositive), CommonIRIs.DOUBLE] }
11387
11494
  ]);
11388
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
11495
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11389
11496
  }
11390
11497
  };
11391
11498
  var numericLiteralNegative = {
@@ -11396,7 +11503,7 @@ var numericLiteralNegative = {
11396
11503
  { ALT: () => [CONSUME(terminals_exports.decimalNegative), CommonIRIs.DECIMAL] },
11397
11504
  { ALT: () => [CONSUME(terminals_exports.doubleNegative), CommonIRIs.DOUBLE] }
11398
11505
  ]);
11399
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(parsed[0]), parsed[0].image, C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), parsed[1])));
11506
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11400
11507
  }
11401
11508
  };
11402
11509
  var booleanLiteral = {
@@ -11406,7 +11513,7 @@ var booleanLiteral = {
11406
11513
  { ALT: () => CONSUME(true_) },
11407
11514
  { ALT: () => CONSUME(false_) }
11408
11515
  ]);
11409
- return ACTION(() => C.factory.literalTerm(C.factory.sourceLocation(token), token.image.toLowerCase(), C.factory.namedNode(C.factory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN)));
11516
+ return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(token), token.image.toLowerCase(), C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN)));
11410
11517
  }
11411
11518
  };
11412
11519
  var string = {
@@ -11431,7 +11538,7 @@ var string = {
11431
11538
  } }
11432
11539
  ]);
11433
11540
  return ACTION(() => {
11434
- const F2 = C.factory;
11541
+ const F2 = C.astFactory;
11435
11542
  const value = x[1].replaceAll(/\\([tnrbf"'\\])/gu, (_, char) => {
11436
11543
  switch (char) {
11437
11544
  case "t":
@@ -11458,16 +11565,16 @@ var iri2 = {
11458
11565
  { ALT: () => SUBRULE(iriFull) },
11459
11566
  { ALT: () => SUBRULE(prefixedName) }
11460
11567
  ]),
11461
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => F2.isTermNamedPrefixed(ast) ? SUBRULE(prefixedName, ast) : SUBRULE(iriFull, ast)
11568
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => F2.isTermNamedPrefixed(ast) ? SUBRULE(prefixedName, ast) : SUBRULE(iriFull, ast)
11462
11569
  };
11463
11570
  var iriFull = {
11464
11571
  name: "iriFull",
11465
11572
  impl: ({ ACTION, CONSUME }) => (C) => {
11466
11573
  const iriToken = CONSUME(terminals_exports.iriRef);
11467
- return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));
11574
+ return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));
11468
11575
  },
11469
- gImpl: ({ PRINT }) => (ast, { factory }) => {
11470
- factory.printFilter(ast, () => PRINT("<", ast.value, ">"));
11576
+ gImpl: ({ PRINT }) => (ast, { astFactory: F2 }) => {
11577
+ F2.printFilter(ast, () => PRINT("<", ast.value, ">"));
11471
11578
  }
11472
11579
  };
11473
11580
  var prefixedName = {
@@ -11477,16 +11584,16 @@ var prefixedName = {
11477
11584
  const longName = CONSUME(terminals_exports.pNameLn);
11478
11585
  return ACTION(() => {
11479
11586
  const [prefix, localName] = longName.image.split(":");
11480
- return C.factory.namedNode(C.factory.sourceLocation(longName), localName, prefix);
11587
+ return C.astFactory.namedNode(C.astFactory.sourceLocation(longName), localName, prefix);
11481
11588
  });
11482
11589
  } },
11483
11590
  { ALT: () => {
11484
11591
  const shortName = CONSUME(terminals_exports.pNameNs);
11485
- return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(shortName), "", shortName.image.slice(0, -1)));
11592
+ return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(shortName), "", shortName.image.slice(0, -1)));
11486
11593
  } }
11487
11594
  ]),
11488
- gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {
11489
- factory.printFilter(ast, () => PRINT_WORD(ast.prefix, ":", ast.value));
11595
+ gImpl: ({ PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11596
+ F2.printFilter(ast, () => PRINT_WORD(ast.prefix, ":", ast.value));
11490
11597
  }
11491
11598
  };
11492
11599
  var canCreateBlankNodes = Symbol("canCreateBlankNodes");
@@ -11496,11 +11603,11 @@ var blankNode = {
11496
11603
  const result = OR([
11497
11604
  { ALT: () => {
11498
11605
  const labelToken = CONSUME(terminals_exports.blankNodeLabel);
11499
- return ACTION(() => C.factory.blankNode(labelToken.image.slice(2), C.factory.sourceLocation(labelToken)));
11606
+ return ACTION(() => C.astFactory.blankNode(labelToken.image.slice(2), C.astFactory.sourceLocation(labelToken)));
11500
11607
  } },
11501
11608
  { ALT: () => {
11502
11609
  const anonToken = CONSUME(terminals_exports.anon);
11503
- return ACTION(() => C.factory.blankNode(void 0, C.factory.sourceLocation(anonToken)));
11610
+ return ACTION(() => C.astFactory.blankNode(void 0, C.astFactory.sourceLocation(anonToken)));
11504
11611
  } }
11505
11612
  ]);
11506
11613
  ACTION(() => {
@@ -11510,15 +11617,15 @@ var blankNode = {
11510
11617
  });
11511
11618
  return result;
11512
11619
  },
11513
- gImpl: ({ PRINT_WORD }) => (ast, { factory }) => {
11514
- factory.printFilter(ast, () => PRINT_WORD("_:", ast.label.replace(/^e_/u, "")));
11620
+ gImpl: ({ PRINT_WORD }) => (ast, { astFactory }) => {
11621
+ astFactory.printFilter(ast, () => PRINT_WORD("_:", ast.label.replace(/^e_/u, "")));
11515
11622
  }
11516
11623
  };
11517
11624
  var verbA = {
11518
11625
  name: "VerbA",
11519
11626
  impl: ({ ACTION, CONSUME }) => (C) => {
11520
11627
  const token = CONSUME(a);
11521
- return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(token), CommonIRIs.TYPE, void 0));
11628
+ return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(token), CommonIRIs.TYPE, void 0));
11522
11629
  }
11523
11630
  };
11524
11631
 
@@ -11535,7 +11642,7 @@ var prologue = {
11535
11642
  ]));
11536
11643
  return result;
11537
11644
  },
11538
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
11645
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
11539
11646
  for (const context of ast) {
11540
11647
  if (F2.isContextDefinitionBase(context)) {
11541
11648
  SUBRULE(baseDecl2, context);
@@ -11550,11 +11657,12 @@ var baseDecl2 = {
11550
11657
  impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {
11551
11658
  const base = CONSUME(baseDecl);
11552
11659
  const val = SUBRULE(iriFull);
11553
- return ACTION(() => C.factory.contextDefinitionBase(C.factory.sourceLocation(base, val), val));
11660
+ return ACTION(() => C.astFactory.contextDefinitionBase(C.astFactory.sourceLocation(base, val), val));
11554
11661
  },
11555
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
11662
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11556
11663
  F2.printFilter(ast, () => PRINT_WORD("BASE"));
11557
11664
  SUBRULE(iri2, ast.value);
11665
+ F2.printFilter(ast, () => PRINT_WORD("\n"));
11558
11666
  }
11559
11667
  };
11560
11668
  var prefixDecl2 = {
@@ -11563,13 +11671,14 @@ var prefixDecl2 = {
11563
11671
  const prefix = CONSUME(prefixDecl);
11564
11672
  const name = CONSUME(terminals_exports.pNameNs).image.slice(0, -1);
11565
11673
  const value = SUBRULE(iriFull);
11566
- return ACTION(() => C.factory.contextDefinitionPrefix(C.factory.sourceLocation(prefix, value), name, value));
11674
+ return ACTION(() => C.astFactory.contextDefinitionPrefix(C.astFactory.sourceLocation(prefix, value), name, value));
11567
11675
  },
11568
- gImpl: ({ SUBRULE, PRINT_WORDS }) => (ast, { factory: F2 }) => {
11676
+ gImpl: ({ SUBRULE, PRINT_WORDS }) => (ast, { astFactory: F2 }) => {
11569
11677
  F2.printFilter(ast, () => {
11570
11678
  PRINT_WORDS("PREFIX", `${ast.key}:`);
11571
11679
  });
11572
11680
  SUBRULE(iri2, ast.value);
11681
+ F2.printFilter(ast, () => PRINT_WORDS("\n"));
11573
11682
  }
11574
11683
  };
11575
11684
  var verb = {
@@ -11585,7 +11694,7 @@ var varOrTerm = {
11585
11694
  { GATE: () => C.parseMode.has("canParseVars"), ALT: () => SUBRULE(var_) },
11586
11695
  { ALT: () => SUBRULE(graphTerm) }
11587
11696
  ]),
11588
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
11697
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
11589
11698
  if (F2.isTermVariable(ast)) {
11590
11699
  return SUBRULE(var_, ast);
11591
11700
  }
@@ -11606,9 +11715,9 @@ var var_ = {
11606
11715
  { ALT: () => CONSUME(terminals_exports.var1) },
11607
11716
  { ALT: () => CONSUME(terminals_exports.var2) }
11608
11717
  ]);
11609
- return ACTION(() => C.factory.variable(varToken.image.slice(1), C.factory.sourceLocation(varToken)));
11718
+ return ACTION(() => C.astFactory.variable(varToken.image.slice(1), C.astFactory.sourceLocation(varToken)));
11610
11719
  },
11611
- gImpl: ({ PRINT_WORD }) => (ast, { factory: F2 }) => {
11720
+ gImpl: ({ PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11612
11721
  F2.printFilter(ast, () => PRINT_WORD(`?${ast.value}`));
11613
11722
  }
11614
11723
  };
@@ -11622,10 +11731,10 @@ var graphTerm = {
11622
11731
  { GATE: () => C.parseMode.has("canCreateBlankNodes"), ALT: () => SUBRULE(blankNode) },
11623
11732
  { ALT: () => {
11624
11733
  const tokenNil = CONSUME(terminals_exports.nil);
11625
- return ACTION(() => C.factory.namedNode(C.factory.sourceLocation(tokenNil), CommonIRIs.NIL));
11734
+ return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(tokenNil), CommonIRIs.NIL));
11626
11735
  } }
11627
11736
  ]),
11628
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
11737
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
11629
11738
  if (F2.isTermNamed(ast)) {
11630
11739
  SUBRULE(iri2, ast);
11631
11740
  } else if (F2.isTermLiteral(ast)) {
@@ -11645,14 +11754,14 @@ function datasetClauseUsing(name, token) {
11645
11754
  return OR([
11646
11755
  { ALT: () => {
11647
11756
  const iri3 = SUBRULE(defaultGraphClause);
11648
- return ACTION(() => C.factory.wrap({ clauseType: "default", value: iri3 }, C.factory.sourceLocation(start, iri3)));
11757
+ return ACTION(() => C.astFactory.wrap({ clauseType: "default", value: iri3 }, C.astFactory.sourceLocation(start, iri3)));
11649
11758
  } },
11650
11759
  { ALT: () => {
11651
11760
  const namedClause = SUBRULE(namedGraphClause);
11652
- return ACTION(() => C.factory.wrap({
11761
+ return ACTION(() => C.astFactory.wrap({
11653
11762
  clauseType: "named",
11654
11763
  value: namedClause.val
11655
- }, C.factory.sourceLocation(start, namedClause)));
11764
+ }, C.astFactory.sourceLocation(start, namedClause)));
11656
11765
  } }
11657
11766
  ]);
11658
11767
  }
@@ -11673,9 +11782,9 @@ function datasetClauseUsingStar(name, subRule, fromUsing) {
11673
11782
  const clause = SUBRULE(subRule);
11674
11783
  clauses.push(clause);
11675
11784
  });
11676
- return ACTION(() => C.factory.datasetClauses(clauses.map((clause) => clause.val), C.factory.sourceLocation(...clauses)));
11785
+ return ACTION(() => C.astFactory.datasetClauses(clauses.map((clause) => clause.val), C.astFactory.sourceLocation(...clauses)));
11677
11786
  },
11678
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
11787
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11679
11788
  for (const clause of ast.clauses) {
11680
11789
  F2.printFilter(ast, () => PRINT_WORD(fromUsing));
11681
11790
  if (clause.clauseType === "named") {
@@ -11693,7 +11802,7 @@ var namedGraphClause = {
11693
11802
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
11694
11803
  const named2 = CONSUME(graph_exports.named);
11695
11804
  const iri3 = SUBRULE(sourceSelector);
11696
- return ACTION(() => C.factory.wrap(iri3, C.factory.sourceLocation(named2, iri3)));
11805
+ return ACTION(() => C.astFactory.wrap(iri3, C.astFactory.sourceLocation(named2, iri3)));
11697
11806
  }
11698
11807
  };
11699
11808
  var sourceSelector = {
@@ -11710,7 +11819,7 @@ function funcExpr1(func) {
11710
11819
  CONSUME(symbols_exports.LParen);
11711
11820
  const arg = SUBRULE(expression);
11712
11821
  const close = CONSUME(symbols_exports.RParen);
11713
- return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
11822
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [arg], C.astFactory.sourceLocation(operator, close)));
11714
11823
  }
11715
11824
  };
11716
11825
  }
@@ -11724,7 +11833,7 @@ function funcExpr2(func) {
11724
11833
  CONSUME(symbols_exports.comma);
11725
11834
  const arg2 = SUBRULE2(expression);
11726
11835
  const close = CONSUME(symbols_exports.RParen);
11727
- return ACTION(() => C.factory.expressionOperation(operator.image, [arg1, arg2], C.factory.sourceLocation(operator, close)));
11836
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [arg1, arg2], C.astFactory.sourceLocation(operator, close)));
11728
11837
  }
11729
11838
  };
11730
11839
  }
@@ -11740,7 +11849,7 @@ function funcExpr3(func) {
11740
11849
  CONSUME2(symbols_exports.comma);
11741
11850
  const arg3 = SUBRULE3(expression);
11742
11851
  const close = CONSUME(symbols_exports.RParen);
11743
- return ACTION(() => C.factory.expressionOperation(operator.image, [arg1, arg2, arg3], C.factory.sourceLocation(operator, close)));
11852
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [arg1, arg2, arg3], C.astFactory.sourceLocation(operator, close)));
11744
11853
  }
11745
11854
  };
11746
11855
  }
@@ -11752,7 +11861,7 @@ function funcVar1(func) {
11752
11861
  CONSUME(symbols_exports.LParen);
11753
11862
  const arg = SUBRULE(var_);
11754
11863
  const close = CONSUME(symbols_exports.RParen);
11755
- return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
11864
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [arg], C.astFactory.sourceLocation(operator, close)));
11756
11865
  }
11757
11866
  };
11758
11867
  }
@@ -11766,11 +11875,11 @@ function funcExprOrNil1(func) {
11766
11875
  CONSUME(symbols_exports.LParen);
11767
11876
  const arg = SUBRULE(expression);
11768
11877
  const close = CONSUME(symbols_exports.RParen);
11769
- return ACTION(() => C.factory.expressionOperation(operator.image, [arg], C.factory.sourceLocation(operator, close)));
11878
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [arg], C.astFactory.sourceLocation(operator, close)));
11770
11879
  } },
11771
11880
  { ALT: () => {
11772
11881
  const nil2 = CONSUME(terminals_exports.nil);
11773
- return ACTION(() => C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil2)));
11882
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [], C.astFactory.sourceLocation(operator, nil2)));
11774
11883
  } }
11775
11884
  ]);
11776
11885
  }
@@ -11782,7 +11891,7 @@ function funcNil1(func) {
11782
11891
  impl: ({ ACTION, CONSUME }) => (C) => {
11783
11892
  const operator = CONSUME(func);
11784
11893
  const nil2 = CONSUME(terminals_exports.nil);
11785
- return ACTION(() => C.factory.expressionOperation(operator.image, [], C.factory.sourceLocation(operator, nil2)));
11894
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [], C.astFactory.sourceLocation(operator, nil2)));
11786
11895
  }
11787
11896
  };
11788
11897
  }
@@ -11792,7 +11901,7 @@ function funcExprList1(func) {
11792
11901
  impl: ({ ACTION, CONSUME, SUBRULE }) => (C) => {
11793
11902
  const operator = CONSUME(func);
11794
11903
  const args = SUBRULE(expressionList);
11795
- return ACTION(() => C.factory.expressionOperation(operator.image, args.val, C.factory.sourceLocation(operator, args)));
11904
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, args.val, C.astFactory.sourceLocation(operator, args)));
11796
11905
  }
11797
11906
  };
11798
11907
  }
@@ -11810,7 +11919,7 @@ function funcExpr2or3(func) {
11810
11919
  return SUBRULE3(expression);
11811
11920
  });
11812
11921
  const close = CONSUME(symbols_exports.RParen);
11813
- return ACTION(() => C.factory.expressionOperation(operator.image, arg3 ? [arg1, arg2, arg3] : [arg1, arg2], C.factory.sourceLocation(operator, close)));
11922
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, arg3 ? [arg1, arg2, arg3] : [arg1, arg2], C.astFactory.sourceLocation(operator, close)));
11814
11923
  }
11815
11924
  };
11816
11925
  }
@@ -11830,7 +11939,7 @@ function funcExpr3or4(func) {
11830
11939
  return SUBRULE4(expression);
11831
11940
  });
11832
11941
  const close = CONSUME(symbols_exports.RParen);
11833
- return ACTION(() => C.factory.expressionOperation(operator.image, arg4 ? [arg1, arg2, arg3, arg4] : [arg1, arg2, arg3], C.factory.sourceLocation(operator, close)));
11942
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, arg4 ? [arg1, arg2, arg3, arg4] : [arg1, arg2, arg3], C.astFactory.sourceLocation(operator, close)));
11834
11943
  }
11835
11944
  };
11836
11945
  }
@@ -11840,7 +11949,7 @@ function funcGroupGraphPattern(func) {
11840
11949
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
11841
11950
  const operator = CONSUME(func);
11842
11951
  const group = SUBRULE(groupGraphPattern);
11843
- return ACTION(() => C.factory.expressionPatternOperation(operator.image, group, C.factory.sourceLocation(operator, group)));
11952
+ return ACTION(() => C.astFactory.expressionPatternOperation(operator.image, group, C.astFactory.sourceLocation(operator, group)));
11844
11953
  }
11845
11954
  };
11846
11955
  }
@@ -11853,7 +11962,7 @@ function baseAggregateFunc(func) {
11853
11962
  const distinct2 = OPTION(() => CONSUME(distinct));
11854
11963
  const expr1 = SUBRULE(expression);
11855
11964
  const close = CONSUME(symbols_exports.RParen);
11856
- return ACTION(() => C.factory.aggregate(operator.image, distinct2 !== void 0, expr1, void 0, C.factory.sourceLocation(operator, close)));
11965
+ return ACTION(() => C.astFactory.aggregate(operator.image, distinct2 !== void 0, expr1, void 0, C.astFactory.sourceLocation(operator, close)));
11857
11966
  }
11858
11967
  };
11859
11968
  }
@@ -11993,17 +12102,17 @@ var aggregateCount = {
11993
12102
  const expressionVal = OR([
11994
12103
  { ALT: () => {
11995
12104
  const starToken = CONSUME(symbols_exports.star);
11996
- return ACTION(() => C.factory.wildcard(C.factory.sourceLocation(starToken)));
12105
+ return ACTION(() => C.astFactory.wildcard(C.astFactory.sourceLocation(starToken)));
11997
12106
  } },
11998
12107
  { ALT: () => SUBRULE(expression) }
11999
12108
  ]);
12000
12109
  const closeToken = CONSUME(symbols_exports.RParen);
12001
12110
  return ACTION(() => {
12002
- const F2 = C.factory;
12003
- if (C.factory.isWildcard(expressionVal)) {
12004
- return F2.aggregate(operatorToken.image, Boolean(distinctToken), expressionVal, void 0, C.factory.sourceLocation(operatorToken, closeToken));
12111
+ const F2 = C.astFactory;
12112
+ if (C.astFactory.isWildcard(expressionVal)) {
12113
+ return F2.aggregate(operatorToken.image, Boolean(distinctToken), expressionVal, void 0, C.astFactory.sourceLocation(operatorToken, closeToken));
12005
12114
  }
12006
- return F2.aggregate(operatorToken.image, Boolean(distinctToken), expressionVal, void 0, C.factory.sourceLocation(operatorToken, closeToken));
12115
+ return F2.aggregate(operatorToken.image, Boolean(distinctToken), expressionVal, void 0, C.astFactory.sourceLocation(operatorToken, closeToken));
12007
12116
  });
12008
12117
  }
12009
12118
  };
@@ -12027,7 +12136,7 @@ var aggregateGroup_concat = {
12027
12136
  });
12028
12137
  const closeToken = CONSUME(symbols_exports.RParen);
12029
12138
  return ACTION(() => {
12030
- const F2 = C.factory;
12139
+ const F2 = C.astFactory;
12031
12140
  return F2.aggregate(operatorToken.image, Boolean(distinctToken), expr, sep?.value ?? " ", F2.sourceLocation(operatorToken, closeToken));
12032
12141
  });
12033
12142
  }
@@ -12057,7 +12166,7 @@ var aggregate = {
12057
12166
  });
12058
12167
  return result;
12059
12168
  },
12060
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12169
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12061
12170
  F2.printFilter(ast, () => {
12062
12171
  PRINT_WORD(ast.aggregation.toUpperCase(), "(");
12063
12172
  if (ast.distinct) {
@@ -12084,7 +12193,7 @@ var path = {
12084
12193
  };
12085
12194
  var pathGenerator = {
12086
12195
  name: "path",
12087
- gImpl: ({ PRINT, SUBRULE }) => (ast, { factory: F2 }, braces = true) => {
12196
+ gImpl: ({ PRINT, SUBRULE }) => (ast, { astFactory: F2 }, braces = true) => {
12088
12197
  if (F2.isTerm(ast) && F2.isTermNamed(ast)) {
12089
12198
  SUBRULE(iri2, ast);
12090
12199
  } else {
@@ -12133,7 +12242,7 @@ function pathChainHelper(name, SEP, subType, subRule) {
12133
12242
  tailEnd = SUBRULE2(subRule);
12134
12243
  tail.push(tailEnd);
12135
12244
  });
12136
- return ACTION(() => tail.length === 0 ? head2 : C.factory.path(subType, [head2, ...tail], C.factory.sourceLocation(head2, tailEnd)));
12245
+ return ACTION(() => tail.length === 0 ? head2 : C.astFactory.path(subType, [head2, ...tail], C.astFactory.sourceLocation(head2, tailEnd)));
12137
12246
  }
12138
12247
  };
12139
12248
  }
@@ -12144,7 +12253,7 @@ var pathEltOrInverse = {
12144
12253
  { ALT: () => {
12145
12254
  const hat2 = CONSUME(symbols_exports.hat);
12146
12255
  const item = SUBRULE2(pathElt);
12147
- return ACTION(() => C.factory.path("^", [item], C.factory.sourceLocation(hat2, item)));
12256
+ return ACTION(() => C.astFactory.path("^", [item], C.astFactory.sourceLocation(hat2, item)));
12148
12257
  } }
12149
12258
  ])
12150
12259
  };
@@ -12155,7 +12264,7 @@ var pathElt = {
12155
12264
  impl: ({ ACTION, SUBRULE, OPTION }) => (C) => {
12156
12265
  const item = SUBRULE(pathPrimary);
12157
12266
  const modification = OPTION(() => SUBRULE(pathMod));
12158
- return ACTION(() => modification === void 0 ? item : C.factory.path(modification.image, [item], C.factory.sourceLocation(item, modification)));
12267
+ return ACTION(() => modification === void 0 ? item : C.astFactory.path(modification.image, [item], C.astFactory.sourceLocation(item, modification)));
12159
12268
  }
12160
12269
  };
12161
12270
  var pathMod = {
@@ -12187,7 +12296,7 @@ var pathNegatedPropertySet = {
12187
12296
  return OR([
12188
12297
  { ALT: () => {
12189
12298
  const noAlternative = SUBRULE1(pathOneInPropertySet);
12190
- return ACTION(() => C.factory.path("!", [noAlternative], C.factory.sourceLocation(exclamation2, noAlternative)));
12299
+ return ACTION(() => C.astFactory.path("!", [noAlternative], C.astFactory.sourceLocation(exclamation2, noAlternative)));
12191
12300
  } },
12192
12301
  { ALT: () => {
12193
12302
  const open = CONSUME(symbols_exports.LParen);
@@ -12200,7 +12309,7 @@ var pathNegatedPropertySet = {
12200
12309
  });
12201
12310
  const close = CONSUME(symbols_exports.RParen);
12202
12311
  return ACTION(() => {
12203
- const F2 = C.factory;
12312
+ const F2 = C.astFactory;
12204
12313
  if (tail.length === 0) {
12205
12314
  return F2.path("!", [head2], F2.sourceLocation(exclamation2, close));
12206
12315
  }
@@ -12221,7 +12330,7 @@ var pathOneInPropertySet = {
12221
12330
  { ALT: () => SUBRULE2(iri2) },
12222
12331
  { ALT: () => SUBRULE2(verbA) }
12223
12332
  ]);
12224
- return ACTION(() => C.factory.path("^", [item], C.factory.sourceLocation(hat2, item)));
12333
+ return ACTION(() => C.astFactory.path("^", [item], C.astFactory.sourceLocation(hat2, item)));
12225
12334
  } }
12226
12335
  ])
12227
12336
  };
@@ -12246,33 +12355,35 @@ function triplesDotSeperated(triplesSameSubjectSubrule) {
12246
12355
  });
12247
12356
  }
12248
12357
  });
12249
- return ACTION(() => C.factory.patternBgp(triples, C.factory.sourceLocation(...triples, dotToken)));
12358
+ return ACTION(() => C.astFactory.patternBgp(triples, C.astFactory.sourceLocation(...triples, dotToken)));
12250
12359
  };
12251
12360
  }
12252
12361
  var triplesBlock = {
12253
12362
  name: "triplesBlock",
12254
12363
  impl: (implArgs) => (C) => triplesDotSeperated(triplesSameSubjectPath)(implArgs)(C),
12255
- gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F2 }) => {
12364
+ gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC }) => (ast, { astFactory: F2 }) => {
12256
12365
  for (const [index, triple] of ast.triples.entries()) {
12257
12366
  HANDLE_LOC(triple, () => {
12258
12367
  const nextTriple = ast.triples.at(index);
12259
12368
  if (F2.isTripleCollection(triple)) {
12260
12369
  SUBRULE(graphNodePath, triple);
12261
- F2.printFilter(triple, () => PRINT_WORD("."));
12370
+ F2.printFilter(triple, () => PRINT_WORD(".\n"));
12262
12371
  } else {
12263
12372
  SUBRULE(graphNodePath, triple.subject);
12373
+ F2.printFilter(triple, () => PRINT_WORD(""));
12264
12374
  if (F2.isTerm(triple.predicate) && F2.isTermVariable(triple.predicate)) {
12265
12375
  SUBRULE(varOrTerm, triple.predicate);
12266
12376
  } else {
12267
12377
  SUBRULE(pathGenerator, triple.predicate, void 0);
12268
12378
  }
12379
+ F2.printFilter(triple, () => PRINT_WORD(""));
12269
12380
  SUBRULE(graphNodePath, triple.object);
12270
12381
  if (nextTriple === void 0 || F2.isTripleCollection(nextTriple) || !F2.isSourceLocationNoMaterialize(nextTriple.subject.loc)) {
12271
- F2.printFilter(ast, () => PRINT_WORD("."));
12382
+ F2.printFilter(ast, () => PRINT_WORD(".\n"));
12272
12383
  } else if (F2.isSourceLocationNoMaterialize(nextTriple.predicate.loc)) {
12273
12384
  F2.printFilter(ast, () => PRINT_WORD(","));
12274
12385
  } else {
12275
- F2.printFilter(ast, () => PRINT_WORD(";"));
12386
+ F2.printFilter(ast, () => PRINT_WORD(";\n"));
12276
12387
  }
12277
12388
  }
12278
12389
  });
@@ -12285,24 +12396,24 @@ function triplesSameSubjectImpl(name, allowPaths) {
12285
12396
  impl: ({ ACTION, SUBRULE, OR }) => (C) => OR([
12286
12397
  { ALT: () => {
12287
12398
  const subject = SUBRULE(varOrTerm);
12288
- const res = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty, ACTION(() => C.factory.dematerialized(subject)));
12399
+ const res = SUBRULE(allowPaths ? propertyListPathNotEmpty : propertyListNotEmpty, ACTION(() => C.astFactory.dematerialized(subject)));
12289
12400
  return ACTION(() => {
12290
12401
  if (res.length > 0) {
12291
12402
  res[0].subject = subject;
12292
- res[0].loc = C.factory.sourceLocation(subject, res[0]);
12403
+ res[0].loc = C.astFactory.sourceLocation(subject, res[0]);
12293
12404
  }
12294
12405
  return res;
12295
12406
  });
12296
12407
  } },
12297
12408
  { ALT: () => {
12298
12409
  const subjectNode = SUBRULE(allowPaths ? triplesNodePath : triplesNode);
12299
- const restNode = SUBRULE(allowPaths ? propertyListPath : propertyList, ACTION(() => C.factory.graphNodeIdentifier(subjectNode)));
12410
+ const restNode = SUBRULE(allowPaths ? propertyListPath : propertyList, ACTION(() => C.astFactory.graphNodeIdentifier(subjectNode)));
12300
12411
  return ACTION(() => {
12301
12412
  if (restNode.length === 0) {
12302
12413
  return [subjectNode];
12303
12414
  }
12304
12415
  restNode[0].subject = subjectNode;
12305
- restNode[0].loc = C.factory.sourceLocation(subjectNode, restNode[0]);
12416
+ restNode[0].loc = C.astFactory.sourceLocation(subjectNode, restNode[0]);
12306
12417
  return restNode;
12307
12418
  });
12308
12419
  } }
@@ -12386,7 +12497,7 @@ function objectImpl(name, allowPaths) {
12386
12497
  name,
12387
12498
  impl: ({ ACTION, SUBRULE }) => (C, subject, predicate) => {
12388
12499
  const node = SUBRULE(allowPaths ? graphNodePath : graphNode);
12389
- return ACTION(() => C.factory.triple(subject, predicate, node));
12500
+ return ACTION(() => C.astFactory.triple(subject, predicate, node));
12390
12501
  }
12391
12502
  };
12392
12503
  }
@@ -12403,7 +12514,7 @@ function collectionImpl(name, allowPaths) {
12403
12514
  });
12404
12515
  const endToken = CONSUME(symbols_exports.RParen);
12405
12516
  return ACTION(() => {
12406
- const F2 = C.factory;
12517
+ const F2 = C.astFactory;
12407
12518
  const triples = [];
12408
12519
  const predFirst = F2.namedNode(F2.sourceLocationNoMaterialize(), CommonIRIs.FIRST, void 0);
12409
12520
  const predRest = F2.namedNode(F2.sourceLocationNoMaterialize(), CommonIRIs.REST, void 0);
@@ -12427,7 +12538,7 @@ function collectionImpl(name, allowPaths) {
12427
12538
  return F2.tripleCollectionList(listHead, triples, F2.sourceLocation(startToken, endToken));
12428
12539
  });
12429
12540
  },
12430
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12541
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12431
12542
  F2.printFilter(ast, () => PRINT_WORD("("));
12432
12543
  for (const [idx, triple] of ast.triples.entries()) {
12433
12544
  if (idx % 2 === 0) {
@@ -12458,13 +12569,17 @@ function blankNodePropertyListImpl(name, allowPaths) {
12458
12569
  name,
12459
12570
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12460
12571
  const startToken = CONSUME(symbols_exports.LSquare);
12461
- const blankNode2 = ACTION(() => C.factory.blankNode(void 0, C.factory.sourceLocationNoMaterialize()));
12572
+ const blankNode2 = ACTION(() => C.astFactory.blankNode(void 0, C.astFactory.sourceLocationNoMaterialize()));
12462
12573
  const propList = SUBRULE(propertyPathNotEmptyImpl, blankNode2);
12463
12574
  const endToken = CONSUME(symbols_exports.RSquare);
12464
- return ACTION(() => C.factory.tripleCollectionBlankNodeProperties(blankNode2, propList, C.factory.sourceLocation(startToken, endToken)));
12575
+ return ACTION(() => C.astFactory.tripleCollectionBlankNodeProperties(blankNode2, propList, C.astFactory.sourceLocation(startToken, endToken)));
12465
12576
  },
12466
- gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC }) => (ast, { factory: F2 }) => {
12467
- F2.printFilter(ast, () => PRINT("["));
12577
+ gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC, PRINT_ON_EMPTY }) => (ast, c) => {
12578
+ const { astFactory: F2, indentInc } = c;
12579
+ F2.printFilter(ast, () => {
12580
+ c[traqulaIndentation] += indentInc;
12581
+ PRINT("[\n");
12582
+ });
12468
12583
  for (const triple of ast.triples) {
12469
12584
  HANDLE_LOC(triple, () => {
12470
12585
  if (F2.isTerm(triple.predicate) && F2.isTermVariable(triple.predicate)) {
@@ -12472,11 +12587,15 @@ function blankNodePropertyListImpl(name, allowPaths) {
12472
12587
  } else {
12473
12588
  SUBRULE(pathGenerator, triple.predicate, void 0);
12474
12589
  }
12590
+ F2.printFilter(triple, () => PRINT_WORD(""));
12475
12591
  SUBRULE(graphNodePath, triple.object);
12476
- F2.printFilter(ast, () => PRINT_WORD(";"));
12592
+ F2.printFilter(ast, () => PRINT_WORD(";\n"));
12477
12593
  });
12478
12594
  }
12479
- F2.printFilter(ast, () => PRINT("]"));
12595
+ F2.printFilter(ast, () => {
12596
+ c[traqulaIndentation] -= indentInc;
12597
+ PRINT_ON_EMPTY("]");
12598
+ });
12480
12599
  }
12481
12600
  };
12482
12601
  }
@@ -12493,7 +12612,7 @@ function graphNodeImpl(name, allowPaths) {
12493
12612
  ALT: () => SUBRULE(triplesNodeRule)
12494
12613
  }
12495
12614
  ]),
12496
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
12615
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
12497
12616
  if (F2.isTerm(ast)) {
12498
12617
  SUBRULE(varOrTerm, ast);
12499
12618
  } else {
@@ -12511,9 +12630,9 @@ var whereClause = {
12511
12630
  impl: ({ ACTION, SUBRULE, CONSUME, OPTION }) => (C) => {
12512
12631
  const where2 = OPTION(() => CONSUME(where));
12513
12632
  const group = SUBRULE(groupGraphPattern);
12514
- return ACTION(() => C.factory.wrap(group, C.factory.sourceLocation(where2, group)));
12633
+ return ACTION(() => C.astFactory.wrap(group, C.astFactory.sourceLocation(where2, group)));
12515
12634
  },
12516
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12635
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12517
12636
  F2.printFilter(ast, () => PRINT_WORD("WHERE"));
12518
12637
  SUBRULE(groupGraphPattern, ast.val);
12519
12638
  }
@@ -12527,19 +12646,26 @@ var groupGraphPattern = {
12527
12646
  { ALT: () => SUBRULE(groupGraphPatternSub) }
12528
12647
  ]);
12529
12648
  const close = CONSUME(symbols_exports.RCurly);
12530
- return ACTION(() => C.factory.patternGroup(patterns, C.factory.sourceLocation(open, close)));
12649
+ return ACTION(() => C.astFactory.patternGroup(patterns, C.astFactory.sourceLocation(open, close)));
12531
12650
  },
12532
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12533
- F2.printFilter(ast, () => PRINT_WORD("{"));
12651
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
12652
+ const { astFactory: F2, indentInc } = C;
12653
+ F2.printFilter(ast, () => {
12654
+ C[traqulaIndentation] += indentInc;
12655
+ PRINT_WORD("{\n");
12656
+ });
12534
12657
  for (const pattern of ast.patterns) {
12535
12658
  SUBRULE(generatePattern, pattern);
12536
12659
  }
12537
- F2.printFilter(ast, () => PRINT_WORD("}"));
12660
+ F2.printFilter(ast, () => {
12661
+ C[traqulaIndentation] -= indentInc;
12662
+ PRINT_ON_EMPTY("}\n");
12663
+ });
12538
12664
  }
12539
12665
  };
12540
12666
  var generatePattern = {
12541
12667
  name: "generatePattern",
12542
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
12668
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
12543
12669
  if (ast.type === "query") {
12544
12670
  SUBRULE(query, F2.querySelect({
12545
12671
  context: [],
@@ -12628,9 +12754,9 @@ var optionalGraphPattern = {
12628
12754
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12629
12755
  const optional2 = CONSUME(optional);
12630
12756
  const group = SUBRULE(groupGraphPattern);
12631
- return ACTION(() => C.factory.patternOptional(group.patterns, C.factory.sourceLocation(optional2, group)));
12757
+ return ACTION(() => C.astFactory.patternOptional(group.patterns, C.astFactory.sourceLocation(optional2, group)));
12632
12758
  },
12633
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12759
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12634
12760
  F2.printFilter(ast, () => PRINT_WORD("OPTIONAL"));
12635
12761
  SUBRULE(groupGraphPattern, F2.patternGroup(ast.patterns, ast.loc));
12636
12762
  }
@@ -12641,9 +12767,9 @@ var graphGraphPattern = {
12641
12767
  const graph2 = CONSUME(graph_exports.graph);
12642
12768
  const name = SUBRULE(varOrIri);
12643
12769
  const group = SUBRULE(groupGraphPattern);
12644
- return ACTION(() => C.factory.patternGraph(name, group.patterns, C.factory.sourceLocation(graph2, group)));
12770
+ return ACTION(() => C.astFactory.patternGraph(name, group.patterns, C.astFactory.sourceLocation(graph2, group)));
12645
12771
  },
12646
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12772
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12647
12773
  F2.printFilter(ast, () => PRINT_WORD("GRAPH"));
12648
12774
  SUBRULE(varOrTerm, ast.name);
12649
12775
  SUBRULE(groupGraphPattern, F2.patternGroup(ast.patterns, ast.loc));
@@ -12659,9 +12785,9 @@ var serviceGraphPattern = {
12659
12785
  }) ?? false;
12660
12786
  const name = SUBRULE1(varOrIri);
12661
12787
  const group = SUBRULE1(groupGraphPattern);
12662
- return ACTION(() => C.factory.patternService(name, group.patterns, silent2, C.factory.sourceLocation(service2, group)));
12788
+ return ACTION(() => C.astFactory.patternService(name, group.patterns, silent2, C.astFactory.sourceLocation(service2, group)));
12663
12789
  },
12664
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12790
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12665
12791
  F2.printFilter(ast, () => {
12666
12792
  PRINT_WORD("SERVICE");
12667
12793
  if (ast.silent) {
@@ -12681,14 +12807,14 @@ var bind2 = {
12681
12807
  CONSUME(as);
12682
12808
  const variable = SUBRULE(var_);
12683
12809
  const close = CONSUME(symbols_exports.RParen);
12684
- return ACTION(() => C.factory.patternBind(expressionVal, variable, C.factory.sourceLocation(bind3, close)));
12810
+ return ACTION(() => C.astFactory.patternBind(expressionVal, variable, C.astFactory.sourceLocation(bind3, close)));
12685
12811
  },
12686
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12812
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12687
12813
  F2.printFilter(ast, () => PRINT_WORD("BIND", "("));
12688
12814
  SUBRULE(expression, ast.expression);
12689
12815
  F2.printFilter(ast, () => PRINT_WORD("AS"));
12690
12816
  SUBRULE(var_, ast.variable);
12691
- F2.printFilter(ast, () => PRINT_WORD(")"));
12817
+ F2.printFilter(ast, () => PRINT_WORD(")\n"));
12692
12818
  }
12693
12819
  };
12694
12820
  var inlineData = {
@@ -12696,16 +12822,19 @@ var inlineData = {
12696
12822
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12697
12823
  const values3 = CONSUME(values2);
12698
12824
  const datablock = SUBRULE(dataBlock);
12699
- return ACTION(() => C.factory.patternValues(datablock.val, C.factory.sourceLocation(values3, datablock)));
12825
+ return ACTION(() => C.astFactory.patternValues(datablock.val, C.astFactory.sourceLocation(values3, datablock)));
12700
12826
  },
12701
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12827
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
12828
+ const { astFactory: F2, indentInc } = C;
12702
12829
  const variables = Object.keys(ast.values.at(0) ?? {});
12703
12830
  F2.printFilter(ast, () => {
12831
+ PRINT_ON_EMPTY("");
12704
12832
  PRINT_WORD("VALUES", "(");
12705
12833
  for (const variable of variables) {
12706
12834
  PRINT_WORD(`?${variable}`);
12707
12835
  }
12708
- PRINT_WORD(")", "{");
12836
+ C[traqulaIndentation] += indentInc;
12837
+ PRINT_WORD(")", "{\n");
12709
12838
  });
12710
12839
  for (const mapping of ast.values) {
12711
12840
  F2.printFilter(ast, () => PRINT_WORD("("));
@@ -12716,9 +12845,12 @@ var inlineData = {
12716
12845
  SUBRULE(graphNodePath, mapping[variable]);
12717
12846
  }
12718
12847
  }
12719
- F2.printFilter(ast, () => PRINT_WORD(")"));
12848
+ F2.printFilter(ast, () => PRINT_WORD(")\n"));
12720
12849
  }
12721
- F2.printFilter(ast, () => PRINT_WORD("}"));
12850
+ F2.printFilter(ast, () => {
12851
+ C[traqulaIndentation] -= indentInc;
12852
+ PRINT_ON_EMPTY("}\n");
12853
+ });
12722
12854
  }
12723
12855
  };
12724
12856
  var dataBlock = {
@@ -12741,7 +12873,7 @@ var inlineDataOneVar = {
12741
12873
  });
12742
12874
  });
12743
12875
  const close = CONSUME(symbols_exports.RCurly);
12744
- return ACTION(() => C.factory.wrap(res, C.factory.sourceLocation(varVal, close)));
12876
+ return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(varVal, close)));
12745
12877
  }
12746
12878
  };
12747
12879
  var inlineDataFull = {
@@ -12758,7 +12890,7 @@ var inlineDataFull = {
12758
12890
  res.push({});
12759
12891
  });
12760
12892
  const close = CONSUME1(symbols_exports.RCurly);
12761
- return ACTION(() => C.factory.wrap(res, C.factory.sourceLocation(nil2, close)));
12893
+ return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(nil2, close)));
12762
12894
  } },
12763
12895
  { ALT: () => {
12764
12896
  const open = CONSUME1(symbols_exports.LParen);
@@ -12790,7 +12922,7 @@ var inlineDataFull = {
12790
12922
  });
12791
12923
  });
12792
12924
  const close = CONSUME2(symbols_exports.RCurly);
12793
- return ACTION(() => C.factory.wrap(res, C.factory.sourceLocation(open, close)));
12925
+ return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(open, close)));
12794
12926
  } }
12795
12927
  ]);
12796
12928
  }
@@ -12813,9 +12945,9 @@ var minusGraphPattern = {
12813
12945
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12814
12946
  const minus2 = CONSUME(minus);
12815
12947
  const group = SUBRULE(groupGraphPattern);
12816
- return ACTION(() => C.factory.patternMinus(group.patterns, C.factory.sourceLocation(minus2, group)));
12948
+ return ACTION(() => C.astFactory.patternMinus(group.patterns, C.astFactory.sourceLocation(minus2, group)));
12817
12949
  },
12818
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12950
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12819
12951
  F2.printFilter(ast, () => PRINT_WORD("MINUS"));
12820
12952
  SUBRULE(groupGraphPattern, F2.patternGroup(ast.patterns, ast.loc));
12821
12953
  }
@@ -12831,9 +12963,9 @@ var groupOrUnionGraphPattern = {
12831
12963
  const group2 = SUBRULE2(groupGraphPattern);
12832
12964
  groups.push(group2);
12833
12965
  });
12834
- return ACTION(() => groups.length === 1 ? groups[0] : C.factory.patternUnion(groups, C.factory.sourceLocation(group, groups.at(-1))));
12966
+ return ACTION(() => groups.length === 1 ? groups[0] : C.astFactory.patternUnion(groups, C.astFactory.sourceLocation(group, groups.at(-1))));
12835
12967
  },
12836
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12968
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12837
12969
  if (F2.isPatternUnion(ast)) {
12838
12970
  const [head2, ...tail] = ast.patterns;
12839
12971
  SUBRULE(groupGraphPattern, head2);
@@ -12851,12 +12983,12 @@ var filter3 = {
12851
12983
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12852
12984
  const filterToken = CONSUME(filter2);
12853
12985
  const expression2 = SUBRULE(constraint);
12854
- return ACTION(() => C.factory.patternFilter(expression2, C.factory.sourceLocation(filterToken, expression2)));
12986
+ return ACTION(() => C.astFactory.patternFilter(expression2, C.astFactory.sourceLocation(filterToken, expression2)));
12855
12987
  },
12856
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
12988
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12857
12989
  F2.printFilter(ast, () => PRINT_WORD("FILTER ("));
12858
12990
  SUBRULE(expression, ast.expression);
12859
- F2.printFilter(ast, () => PRINT_WORD(")"));
12991
+ F2.printFilter(ast, () => PRINT_WORD(")\n"));
12860
12992
  }
12861
12993
  };
12862
12994
  var constraint = {
@@ -12872,7 +13004,7 @@ var functionCall = {
12872
13004
  impl: ({ ACTION, SUBRULE }) => (C) => {
12873
13005
  const func = SUBRULE(iri2);
12874
13006
  const args = SUBRULE(argList);
12875
- return ACTION(() => C.factory.expressionFunctionCall(func, args.val.args, args.val.distinct, C.factory.sourceLocation(func, args)));
13007
+ return ACTION(() => C.astFactory.expressionFunctionCall(func, args.val.args, args.val.distinct, C.astFactory.sourceLocation(func, args)));
12876
13008
  }
12877
13009
  };
12878
13010
 
@@ -12882,7 +13014,7 @@ var argList = {
12882
13014
  impl: ({ ACTION, CONSUME, SUBRULE1, OPTION, OR, AT_LEAST_ONE_SEP }) => (C) => OR([
12883
13015
  { ALT: () => {
12884
13016
  const nil2 = CONSUME(terminals_exports.nil);
12885
- return ACTION(() => C.factory.wrap({ args: [], distinct: false }, C.factory.sourceLocation(nil2)));
13017
+ return ACTION(() => C.astFactory.wrap({ args: [], distinct: false }, C.astFactory.sourceLocation(nil2)));
12886
13018
  } },
12887
13019
  { ALT: () => {
12888
13020
  const args = [];
@@ -12899,10 +13031,10 @@ var argList = {
12899
13031
  }
12900
13032
  });
12901
13033
  const close = CONSUME(symbols_exports.RParen);
12902
- return ACTION(() => C.factory.wrap({ args, distinct: distinct2 }, C.factory.sourceLocation(open, close)));
13034
+ return ACTION(() => C.astFactory.wrap({ args, distinct: distinct2 }, C.astFactory.sourceLocation(open, close)));
12903
13035
  } }
12904
13036
  ]),
12905
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13037
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12906
13038
  F2.printFilter(ast, () => {
12907
13039
  PRINT_WORD("(");
12908
13040
  if (ast.val.distinct) {
@@ -12925,7 +13057,7 @@ var expressionList = {
12925
13057
  impl: ({ ACTION, CONSUME, MANY, OR, SUBRULE1, SUBRULE2 }) => (C) => OR([
12926
13058
  { ALT: () => {
12927
13059
  const nil2 = CONSUME(terminals_exports.nil);
12928
- return ACTION(() => C.factory.wrap([], C.factory.sourceLocation(nil2)));
13060
+ return ACTION(() => C.astFactory.wrap([], C.astFactory.sourceLocation(nil2)));
12929
13061
  } },
12930
13062
  { ALT: () => {
12931
13063
  const open = CONSUME(symbols_exports.LParen);
@@ -12937,7 +13069,7 @@ var expressionList = {
12937
13069
  args.push(expr);
12938
13070
  });
12939
13071
  const close = CONSUME(symbols_exports.RParen);
12940
- return ACTION(() => C.factory.wrap(args, C.factory.sourceLocation(open, close)));
13072
+ return ACTION(() => C.astFactory.wrap(args, C.astFactory.sourceLocation(open, close)));
12941
13073
  } }
12942
13074
  ])
12943
13075
  };
@@ -12946,7 +13078,7 @@ var prefixOperator = /* @__PURE__ */ new Set(["!", "UPLUS", "UMINUS"]);
12946
13078
  var expression = {
12947
13079
  name: "expression",
12948
13080
  impl: ({ SUBRULE }) => () => SUBRULE(conditionalOrExpression),
12949
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13081
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
12950
13082
  if (F2.isTerm(ast)) {
12951
13083
  SUBRULE(varOrTerm, ast);
12952
13084
  } else if (F2.isExpressionOperator(ast)) {
@@ -13011,7 +13143,7 @@ var conditionalOrExpression = {
13011
13143
  impl: ({ ACTION, MANY, CONSUME, SUBRULE1, SUBRULE2 }) => (C) => constructLeftDeep(() => SUBRULE1(conditionalAndExpression), () => {
13012
13144
  CONSUME(symbols_exports.logicOr);
13013
13145
  const args = SUBRULE2(conditionalAndExpression);
13014
- return (left) => ACTION(() => C.factory.expressionOperation("||", [left, args], C.factory.sourceLocation(left, args)));
13146
+ return (left) => ACTION(() => C.astFactory.expressionOperation("||", [left, args], C.astFactory.sourceLocation(left, args)));
13015
13147
  }, ACTION, MANY)
13016
13148
  };
13017
13149
  var conditionalAndExpression = {
@@ -13019,7 +13151,7 @@ var conditionalAndExpression = {
13019
13151
  impl: ({ ACTION, MANY, SUBRULE1, SUBRULE2, CONSUME }) => (C) => constructLeftDeep(() => SUBRULE1(valueLogical), () => {
13020
13152
  CONSUME(symbols_exports.logicAnd);
13021
13153
  const arg = SUBRULE2(valueLogical);
13022
- return (left) => ACTION(() => C.factory.expressionOperation("&&", [left, arg], C.factory.sourceLocation(left, arg)));
13154
+ return (left) => ACTION(() => C.astFactory.expressionOperation("&&", [left, arg], C.astFactory.sourceLocation(left, arg)));
13023
13155
  }, ACTION, MANY)
13024
13156
  };
13025
13157
  var valueLogical = {
@@ -13041,7 +13173,7 @@ var relationalExpression = {
13041
13173
  { ALT: () => CONSUME(symbols_exports.greaterThanEqual) }
13042
13174
  ]);
13043
13175
  const expr = SUBRULE2(numericExpression);
13044
- return ACTION(() => C.factory.expressionOperation(operator.image, [args1, expr], C.factory.sourceLocation(args1, expr)));
13176
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [args1, expr], C.astFactory.sourceLocation(args1, expr)));
13045
13177
  } },
13046
13178
  { ALT: () => {
13047
13179
  const operator = OR3([
@@ -13049,7 +13181,7 @@ var relationalExpression = {
13049
13181
  { ALT: () => CONSUME(notIn) }
13050
13182
  ]);
13051
13183
  const args = SUBRULE1(expressionList);
13052
- return ACTION(() => C.factory.expressionOperation(operator.image, [args1, ...args.val], C.factory.sourceLocation(args1, args)));
13184
+ return ACTION(() => C.astFactory.expressionOperation(operator.image, [args1, ...args.val], C.astFactory.sourceLocation(args1, args)));
13053
13185
  } }
13054
13186
  ]));
13055
13187
  return expression2 ?? args1;
@@ -13068,7 +13200,7 @@ var additiveExpression = {
13068
13200
  { ALT: () => CONSUME(symbols_exports.opMinus) }
13069
13201
  ]);
13070
13202
  const arg = SUBRULE2(multiplicativeExpression);
13071
- return ACTION(() => (left) => C.factory.expressionOperation(operator.image, [left, arg], C.factory.sourceLocation(left, arg)));
13203
+ return ACTION(() => (left) => C.astFactory.expressionOperation(operator.image, [left, arg], C.astFactory.sourceLocation(left, arg)));
13072
13204
  } },
13073
13205
  { ALT: () => {
13074
13206
  const { operator, startInt } = OR3([
@@ -13099,9 +13231,9 @@ var additiveExpression = {
13099
13231
  { ALT: () => CONSUME(symbols_exports.slash) }
13100
13232
  ]);
13101
13233
  const innerExpr = SUBRULE1(unaryExpression);
13102
- return ACTION(() => (leftInner) => C.factory.expressionOperation(innerOperator.image, [leftInner, innerExpr], C.factory.sourceLocation(leftInner, innerExpr)));
13234
+ return ACTION(() => (leftInner) => C.astFactory.expressionOperation(innerOperator.image, [leftInner, innerExpr], C.astFactory.sourceLocation(leftInner, innerExpr)));
13103
13235
  }, ACTION, MANY2);
13104
- return (left) => C.factory.expressionOperation(operator, [left, multiplicativeExpr], C.factory.sourceLocation(left, multiplicativeExpr));
13236
+ return (left) => C.astFactory.expressionOperation(operator, [left, multiplicativeExpr], C.astFactory.sourceLocation(left, multiplicativeExpr));
13105
13237
  } }
13106
13238
  ]), ACTION, MANY1)
13107
13239
  };
@@ -13118,7 +13250,7 @@ var multiplicativeExpression = {
13118
13250
  subType: "operation",
13119
13251
  operator: operator.image,
13120
13252
  args: [left, expr],
13121
- loc: C.factory.sourceLocation(left, expr)
13253
+ loc: C.astFactory.sourceLocation(left, expr)
13122
13254
  });
13123
13255
  }, ACTION, MANY)
13124
13256
  };
@@ -13133,7 +13265,7 @@ var unaryExpression = {
13133
13265
  { ALT: () => CONSUME(symbols_exports.opMinus) }
13134
13266
  ]);
13135
13267
  const expr = SUBRULE2(primaryExpression);
13136
- return ACTION(() => C.factory.expressionOperation(operator.image === "!" ? "!" : operator.image === "+" ? "UPLUS" : "UMINUS", [expr], C.factory.sourceLocation(operator, expr)));
13268
+ return ACTION(() => C.astFactory.expressionOperation(operator.image === "!" ? "!" : operator.image === "+" ? "UPLUS" : "UMINUS", [expr], C.astFactory.sourceLocation(operator, expr)));
13137
13269
  } }
13138
13270
  ])
13139
13271
  };
@@ -13156,7 +13288,7 @@ var brackettedExpression = {
13156
13288
  const expr = SUBRULE(expression);
13157
13289
  const close = CONSUME(symbols_exports.RParen);
13158
13290
  return ACTION(() => {
13159
- expr.loc = C.factory.sourceLocation(open, close);
13291
+ expr.loc = C.astFactory.sourceLocation(open, close);
13160
13292
  return expr;
13161
13293
  });
13162
13294
  }
@@ -13178,13 +13310,13 @@ var iriOrFunction = {
13178
13310
  function: iriVal,
13179
13311
  args: args.val.args,
13180
13312
  distinct: distinct2,
13181
- loc: C.factory.sourceLocation(iriVal, args)
13313
+ loc: C.astFactory.sourceLocation(iriVal, args)
13182
13314
  };
13183
13315
  });
13184
13316
  });
13185
13317
  return functionCall2 ?? iriVal;
13186
13318
  },
13187
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
13319
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
13188
13320
  if (F2.isTermNamed(ast)) {
13189
13321
  SUBRULE(iri2, ast);
13190
13322
  } else {
@@ -13237,11 +13369,14 @@ var groupClause = {
13237
13369
  type: "solutionModifier",
13238
13370
  subType: "group",
13239
13371
  groupings,
13240
- loc: C.factory.sourceLocation(start, groupings.at(-1))
13372
+ loc: C.astFactory.sourceLocation(start, groupings.at(-1))
13241
13373
  }));
13242
13374
  },
13243
- gImpl: ({ PRINT_WORDS, SUBRULE }) => (ast, { factory: F2 }) => {
13244
- F2.printFilter(ast, () => PRINT_WORDS("GROUP", "BY"));
13375
+ gImpl: ({ PRINT_WORDS, SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
13376
+ F2.printFilter(ast, () => {
13377
+ PRINT_ON_EMPTY("");
13378
+ PRINT_WORDS("GROUP", "BY");
13379
+ });
13245
13380
  for (const grouping of ast.groupings) {
13246
13381
  if (F2.isExpression(grouping)) {
13247
13382
  SUBRULE(expression, grouping);
@@ -13275,7 +13410,7 @@ var groupCondition = {
13275
13410
  return {
13276
13411
  variable,
13277
13412
  value: expressionValue,
13278
- loc: C.factory.sourceLocation(open, close)
13413
+ loc: C.astFactory.sourceLocation(open, close)
13279
13414
  };
13280
13415
  }
13281
13416
  return expressionValue;
@@ -13294,10 +13429,13 @@ var havingClause = {
13294
13429
  expressions.push(SUBRULE(havingCondition));
13295
13430
  });
13296
13431
  ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
13297
- return ACTION(() => C.factory.solutionModifierHaving(expressions, C.factory.sourceLocation(having2, expressions.at(-1))));
13432
+ return ACTION(() => C.astFactory.solutionModifierHaving(expressions, C.astFactory.sourceLocation(having2, expressions.at(-1))));
13298
13433
  },
13299
- gImpl: ({ PRINT_WORD, SUBRULE }) => (ast, { factory: F2 }) => {
13300
- F2.printFilter(ast, () => PRINT_WORD("HAVING"));
13434
+ gImpl: ({ PRINT_WORD, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F2 }) => {
13435
+ F2.printFilter(ast, () => {
13436
+ PRINT_ON_EMPTY("");
13437
+ PRINT_WORD("HAVING");
13438
+ });
13301
13439
  for (const having2 of ast.having) {
13302
13440
  SUBRULE(expression, having2);
13303
13441
  }
@@ -13318,10 +13456,13 @@ var orderClause = {
13318
13456
  orderings.push(SUBRULE1(orderCondition));
13319
13457
  });
13320
13458
  ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
13321
- return ACTION(() => C.factory.solutionModifierOrder(orderings, C.factory.sourceLocation(order2, orderings.at(-1))));
13459
+ return ACTION(() => C.astFactory.solutionModifierOrder(orderings, C.astFactory.sourceLocation(order2, orderings.at(-1))));
13322
13460
  },
13323
- gImpl: ({ PRINT_WORDS, SUBRULE }) => (ast, { factory: F2 }) => {
13324
- F2.printFilter(ast, () => PRINT_WORDS("ORDER", "BY"));
13461
+ gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F2 }) => {
13462
+ F2.printFilter(ast, () => {
13463
+ PRINT_ON_EMPTY("");
13464
+ PRINT_WORDS("ORDER", "BY");
13465
+ });
13325
13466
  for (const ordering of ast.orderDefs) {
13326
13467
  if (ordering.descending) {
13327
13468
  F2.printFilter(ast, () => PRINT_WORDS("DESC"));
@@ -13352,7 +13493,7 @@ var orderCondition = {
13352
13493
  return ACTION(() => ({
13353
13494
  expression: expr,
13354
13495
  descending: descending[0],
13355
- loc: C.factory.sourceLocation(descending[1], expr)
13496
+ loc: C.astFactory.sourceLocation(descending[1], expr)
13356
13497
  }));
13357
13498
  } },
13358
13499
  { ALT: () => {
@@ -13371,16 +13512,17 @@ var limitOffsetClauses = {
13371
13512
  { ALT: () => {
13372
13513
  const limit2 = SUBRULE1(limitClause);
13373
13514
  const offset2 = OPTION1(() => SUBRULE1(offsetClause));
13374
- return ACTION(() => C.factory.solutionModifierLimitOffset(limit2.val, offset2?.val, C.factory.sourceLocation(limit2, ...offset2 ? [offset2] : [])));
13515
+ return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit2.val, offset2?.val, C.astFactory.sourceLocation(limit2, ...offset2 ? [offset2] : [])));
13375
13516
  } },
13376
13517
  { ALT: () => {
13377
13518
  const offset2 = SUBRULE2(offsetClause);
13378
13519
  const limit2 = OPTION2(() => SUBRULE2(limitClause));
13379
- return ACTION(() => C.factory.solutionModifierLimitOffset(limit2?.val, offset2.val, C.factory.sourceLocation(offset2, limit2)));
13520
+ return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit2?.val, offset2.val, C.astFactory.sourceLocation(offset2, limit2)));
13380
13521
  } }
13381
13522
  ]),
13382
- gImpl: ({ PRINT_WORDS }) => (ast, { factory: F2 }) => {
13523
+ gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
13383
13524
  F2.printFilter(ast, () => {
13525
+ PRINT_ON_EMPTY("");
13384
13526
  if (ast.limit) {
13385
13527
  PRINT_WORDS("LIMIT", String(ast.limit));
13386
13528
  }
@@ -13396,7 +13538,7 @@ var limitClause = {
13396
13538
  const offset2 = CONSUME(limit);
13397
13539
  const value = CONSUME(terminals_exports.integer);
13398
13540
  const val = Number.parseInt(value.image, 10);
13399
- return ACTION(() => C.factory.wrap(val, C.factory.sourceLocation(offset2, value)));
13541
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset2, value)));
13400
13542
  }
13401
13543
  };
13402
13544
  var offsetClause = {
@@ -13405,7 +13547,7 @@ var offsetClause = {
13405
13547
  const offset2 = CONSUME(offset);
13406
13548
  const value = CONSUME(terminals_exports.integer);
13407
13549
  const val = Number.parseInt(value.image, 10);
13408
- return ACTION(() => C.factory.wrap(val, C.factory.sourceLocation(offset2, value)));
13550
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(offset2, value)));
13409
13551
  }
13410
13552
  };
13411
13553
 
@@ -13430,10 +13572,10 @@ var query = {
13430
13572
  ...subType,
13431
13573
  type: "query",
13432
13574
  ...values3 && { values: values3 },
13433
- loc: C.factory.sourceLocation(prologueValues.at(0), subType, values3)
13575
+ loc: C.astFactory.sourceLocation(prologueValues.at(0), subType, values3)
13434
13576
  }));
13435
13577
  },
13436
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
13578
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
13437
13579
  SUBRULE(prologue, ast.context);
13438
13580
  if (F2.isQuerySelect(ast)) {
13439
13581
  SUBRULE(selectQuery, ast);
@@ -13463,13 +13605,13 @@ var selectQuery = {
13463
13605
  solutionModifiers: modifiers,
13464
13606
  datasets: from2,
13465
13607
  ...selectVal.val,
13466
- loc: C.factory.sourceLocation(selectVal, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13608
+ loc: C.astFactory.sourceLocation(selectVal, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13467
13609
  };
13468
13610
  queryIsGood(ret);
13469
13611
  return ret;
13470
13612
  });
13471
13613
  },
13472
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
13614
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
13473
13615
  SUBRULE(selectClause, F2.wrap({
13474
13616
  variables: ast.variables,
13475
13617
  distinct: ast.distinct,
@@ -13487,14 +13629,14 @@ var subSelect = {
13487
13629
  const where2 = SUBRULE(whereClause);
13488
13630
  const modifiers = SUBRULE(solutionModifier);
13489
13631
  const values3 = SUBRULE(valuesClause);
13490
- return ACTION(() => C.factory.querySelect({
13632
+ return ACTION(() => C.astFactory.querySelect({
13491
13633
  where: where2.val,
13492
- datasets: C.factory.datasetClauses([], C.factory.sourceLocation()),
13634
+ datasets: C.astFactory.datasetClauses([], C.astFactory.sourceLocation()),
13493
13635
  context: [],
13494
13636
  solutionModifiers: modifiers,
13495
13637
  ...selectVal.val,
13496
13638
  ...values3 && { values: values3 }
13497
- }, C.factory.sourceLocation(selectVal, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset, values3)));
13639
+ }, C.astFactory.sourceLocation(selectVal, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset, values3)));
13498
13640
  }
13499
13641
  };
13500
13642
  var selectClause = {
@@ -13525,7 +13667,7 @@ var selectClause = {
13525
13667
  const star2 = CONSUME(symbols_exports.star);
13526
13668
  return ACTION(() => {
13527
13669
  last2 = star2;
13528
- return { variables: [C.factory.wildcard(C.factory.sourceLocation(star2))], ...distRed };
13670
+ return { variables: [C.astFactory.wildcard(C.astFactory.sourceLocation(star2))], ...distRed };
13529
13671
  });
13530
13672
  } },
13531
13673
  { ALT: () => {
@@ -13555,7 +13697,7 @@ var selectClause = {
13555
13697
  throw new Error(`Variable ${variable.value} used more than once in SELECT clause`);
13556
13698
  }
13557
13699
  usedVars.push(variable);
13558
- variables.push(C.factory.patternBind(expr, variable, C.factory.sourceLocation(open, last2)));
13700
+ variables.push(C.astFactory.patternBind(expr, variable, C.astFactory.sourceLocation(open, last2)));
13559
13701
  });
13560
13702
  } }
13561
13703
  ]));
@@ -13563,9 +13705,9 @@ var selectClause = {
13563
13705
  } }
13564
13706
  ]);
13565
13707
  ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
13566
- return ACTION(() => C.factory.wrap(val, C.factory.sourceLocation(select2, last2)));
13708
+ return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(select2, last2)));
13567
13709
  },
13568
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13710
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13569
13711
  F2.printFilter(ast, () => {
13570
13712
  PRINT_WORD("SELECT");
13571
13713
  if (ast.val.distinct) {
@@ -13605,7 +13747,7 @@ var constructQuery = {
13605
13747
  datasets: from2,
13606
13748
  where: where2.val,
13607
13749
  solutionModifiers: modifiers,
13608
- loc: C.factory.sourceLocation(construct2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13750
+ loc: C.astFactory.sourceLocation(construct2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13609
13751
  }));
13610
13752
  } },
13611
13753
  { ALT: () => {
@@ -13617,19 +13759,26 @@ var constructQuery = {
13617
13759
  subType: "construct",
13618
13760
  template: template.val,
13619
13761
  datasets: from2,
13620
- where: C.factory.patternGroup([template.val], C.factory.sourceLocation()),
13762
+ where: C.astFactory.patternGroup([template.val], C.astFactory.sourceLocation()),
13621
13763
  solutionModifiers: modifiers,
13622
- loc: C.factory.sourceLocation(construct2, template, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13764
+ loc: C.astFactory.sourceLocation(construct2, template, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13623
13765
  }));
13624
13766
  } }
13625
13767
  ]);
13626
13768
  },
13627
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13769
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
13770
+ const { astFactory: F2, indentInc } = C;
13628
13771
  F2.printFilter(ast, () => PRINT_WORD("CONSTRUCT"));
13629
13772
  if (!F2.isSourceLocationNoMaterialize(ast.where.loc)) {
13630
- F2.printFilter(ast, () => PRINT_WORD("{"));
13773
+ F2.printFilter(ast, () => {
13774
+ C[traqulaIndentation] += indentInc;
13775
+ PRINT_WORD("{\n");
13776
+ });
13631
13777
  SUBRULE(triplesBlock, ast.template);
13632
- F2.printFilter(ast, () => PRINT_WORD("}"));
13778
+ F2.printFilter(ast, () => {
13779
+ C[traqulaIndentation] -= indentInc;
13780
+ PRINT_ON_EMPTY("}\n");
13781
+ });
13633
13782
  }
13634
13783
  SUBRULE(datasetClauseStar, ast.datasets);
13635
13784
  if (F2.isSourceLocationNoMaterialize(ast.where.loc)) {
@@ -13654,7 +13803,7 @@ var describeQuery = {
13654
13803
  } },
13655
13804
  { ALT: () => {
13656
13805
  const star2 = CONSUME(symbols_exports.star);
13657
- return [ACTION(() => C.factory.wildcard(C.factory.sourceLocation(star2)))];
13806
+ return [ACTION(() => C.astFactory.wildcard(C.astFactory.sourceLocation(star2)))];
13658
13807
  } }
13659
13808
  ]);
13660
13809
  const from2 = SUBRULE1(datasetClauseStar);
@@ -13666,10 +13815,10 @@ var describeQuery = {
13666
13815
  datasets: from2,
13667
13816
  ...where2 && { where: where2.val },
13668
13817
  solutionModifiers: modifiers,
13669
- loc: C.factory.sourceLocation(describe2, ...variables, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13818
+ loc: C.astFactory.sourceLocation(describe2, ...variables, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13670
13819
  }));
13671
13820
  },
13672
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13821
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13673
13822
  F2.printFilter(ast, () => PRINT_WORD("DESCRIBE"));
13674
13823
  if (F2.isWildcard(ast.variables[0])) {
13675
13824
  F2.printFilter(ast, () => PRINT_WORD("*"));
@@ -13697,10 +13846,10 @@ var askQuery = {
13697
13846
  datasets: from2,
13698
13847
  where: where2.val,
13699
13848
  solutionModifiers: modifiers,
13700
- loc: C.factory.sourceLocation(ask2, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13849
+ loc: C.astFactory.sourceLocation(ask2, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
13701
13850
  }));
13702
13851
  },
13703
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13852
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13704
13853
  F2.printFilter(ast, () => PRINT_WORD("ASK"));
13705
13854
  SUBRULE(datasetClauseStar, ast.datasets);
13706
13855
  SUBRULE(whereClause, F2.wrap(ast.where, ast.loc));
@@ -13717,7 +13866,7 @@ var constructTemplate = {
13717
13866
  const open = CONSUME(symbols_exports.LCurly);
13718
13867
  const triples = OPTION(() => SUBRULE1(constructTriples));
13719
13868
  const close = CONSUME(symbols_exports.RCurly);
13720
- return ACTION(() => C.factory.wrap(triples ?? C.factory.patternBgp([], C.factory.sourceLocation()), C.factory.sourceLocation(open, close)));
13869
+ return ACTION(() => C.astFactory.wrap(triples ?? C.astFactory.patternBgp([], C.astFactory.sourceLocation()), C.astFactory.sourceLocation(open, close)));
13721
13870
  }
13722
13871
  };
13723
13872
  var constructTriples = {
@@ -13754,13 +13903,13 @@ var update = {
13754
13903
  const update2 = {
13755
13904
  type: "update",
13756
13905
  updates,
13757
- loc: C.factory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation)
13906
+ loc: C.astFactory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation)
13758
13907
  };
13759
13908
  updateNoReuseBlankNodeLabels(update2);
13760
13909
  return update2;
13761
13910
  });
13762
13911
  },
13763
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13912
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13764
13913
  const [head2, ...tail] = ast.updates;
13765
13914
  if (head2) {
13766
13915
  SUBRULE(prologue, head2.context);
@@ -13840,9 +13989,9 @@ var load2 = {
13840
13989
  CONSUME(loadInto);
13841
13990
  return SUBRULE1(graphRef);
13842
13991
  });
13843
- return ACTION(() => C.factory.updateOperationLoad(C.factory.sourceLocation(loadToken, source, destination), source, Boolean(silent2), destination));
13992
+ return ACTION(() => C.astFactory.updateOperationLoad(C.astFactory.sourceLocation(loadToken, source, destination), source, Boolean(silent2), destination));
13844
13993
  },
13845
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13994
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13846
13995
  F2.printFilter(ast, () => {
13847
13996
  PRINT_WORD("LOAD");
13848
13997
  if (ast.silent) {
@@ -13863,9 +14012,9 @@ function clearOrDrop(operation) {
13863
14012
  const opToken = CONSUME(operation);
13864
14013
  const silent2 = OPTION(() => CONSUME(silent));
13865
14014
  const destination = SUBRULE1(graphRefAll);
13866
- return ACTION(() => C.factory.updateOperationClearDrop(unCapitalize(operation.name), Boolean(silent2), destination, C.factory.sourceLocation(opToken, destination)));
14015
+ return ACTION(() => C.astFactory.updateOperationClearDrop(unCapitalize(operation.name), Boolean(silent2), destination, C.astFactory.sourceLocation(opToken, destination)));
13867
14016
  },
13868
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14017
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13869
14018
  F2.printFilter(ast, () => {
13870
14019
  PRINT_WORD(operation.name.toUpperCase());
13871
14020
  if (ast.silent) {
@@ -13884,9 +14033,9 @@ var create2 = {
13884
14033
  const createToken3 = CONSUME(create);
13885
14034
  const silent2 = OPTION(() => CONSUME(silent));
13886
14035
  const destination = SUBRULE1(graphRef);
13887
- return ACTION(() => C.factory.updateOperationCreate(destination, Boolean(silent2), C.factory.sourceLocation(createToken3, destination)));
14036
+ return ACTION(() => C.astFactory.updateOperationCreate(destination, Boolean(silent2), C.astFactory.sourceLocation(createToken3, destination)));
13888
14037
  },
13889
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14038
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13890
14039
  F2.printFilter(ast, () => {
13891
14040
  PRINT_WORD("CREATE");
13892
14041
  if (ast.silent) {
@@ -13905,9 +14054,9 @@ function copyMoveAddOperation(operation) {
13905
14054
  const source = SUBRULE1(graphOrDefault);
13906
14055
  CONSUME(to);
13907
14056
  const destination = SUBRULE2(graphOrDefault);
13908
- return ACTION(() => C.factory.updateOperationAddMoveCopy(unCapitalize(operation.name), source, destination, Boolean(silent2), C.factory.sourceLocation(op, destination)));
14057
+ return ACTION(() => C.astFactory.updateOperationAddMoveCopy(unCapitalize(operation.name), source, destination, Boolean(silent2), C.astFactory.sourceLocation(op, destination)));
13909
14058
  },
13910
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14059
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13911
14060
  F2.printFilter(ast, () => {
13912
14061
  PRINT_WORD(operation.name.toUpperCase());
13913
14062
  if (ast.silent) {
@@ -13929,7 +14078,7 @@ var quadPattern = {
13929
14078
  const open = CONSUME(symbols_exports.LCurly);
13930
14079
  const val = SUBRULE1(quads);
13931
14080
  const close = CONSUME(symbols_exports.RCurly);
13932
- return ACTION(() => C.factory.wrap(val.val, C.factory.sourceLocation(open, close)));
14081
+ return ACTION(() => C.astFactory.wrap(val.val, C.astFactory.sourceLocation(open, close)));
13933
14082
  }
13934
14083
  };
13935
14084
  var quadData = {
@@ -13940,7 +14089,7 @@ var quadData = {
13940
14089
  const val = SUBRULE1(quads);
13941
14090
  ACTION(() => couldParseVars && C.parseMode.add("canParseVars"));
13942
14091
  const close = CONSUME(symbols_exports.RCurly);
13943
- return ACTION(() => C.factory.wrap(val.val, C.factory.sourceLocation(open, close)));
14092
+ return ACTION(() => C.astFactory.wrap(val.val, C.astFactory.sourceLocation(open, close)));
13944
14093
  }
13945
14094
  };
13946
14095
  function insertDeleteDelWhere(name, subType, cons1, cons2, dataRule) {
@@ -13957,12 +14106,26 @@ function insertDeleteDelWhere(name, subType, cons1, cons2, dataRule) {
13957
14106
  if (name !== "insertData") {
13958
14107
  ACTION(() => couldCreateBlankNodes && C.parseMode.add("canCreateBlankNodes"));
13959
14108
  }
13960
- return ACTION(() => C.factory.updateOperationInsDelDataWhere(subType, data.val, C.factory.sourceLocation(insDelToken, data)));
14109
+ return ACTION(() => C.astFactory.updateOperationInsDelDataWhere(subType, data.val, C.astFactory.sourceLocation(insDelToken, data)));
13961
14110
  },
13962
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
13963
- F2.printFilter(ast, () => PRINT_WORD(subType === "insertdata" ? "INSERT DATA" : subType === "deletedata" ? "DELETE DATA" : "DELETE WHERE", "{"));
14111
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14112
+ const { astFactory: F2, indentInc } = C;
14113
+ F2.printFilter(ast, () => {
14114
+ C[traqulaIndentation] += indentInc;
14115
+ if (subType === "insertdata") {
14116
+ PRINT_WORD("INSERT DATA");
14117
+ } else if (subType === "deletedata") {
14118
+ PRINT_WORD("DELETE DATA");
14119
+ } else if (subType === "deletewhere") {
14120
+ PRINT_WORD("DELETE WHERE");
14121
+ }
14122
+ PRINT_WORD("{\n");
14123
+ });
13964
14124
  SUBRULE(quads, F2.wrap(ast.data, ast.loc));
13965
- F2.printFilter(ast, () => PRINT_WORD("}"));
14125
+ F2.printFilter(ast, () => {
14126
+ C[traqulaIndentation] -= indentInc;
14127
+ PRINT_ON_EMPTY("}\n");
14128
+ });
13966
14129
  }
13967
14130
  };
13968
14131
  }
@@ -13991,22 +14154,35 @@ var modify = {
13991
14154
  const using = SUBRULE1(usingClauseStar);
13992
14155
  CONSUME(where);
13993
14156
  const where2 = SUBRULE1(groupGraphPattern);
13994
- return ACTION(() => C.factory.updateOperationModify(C.factory.sourceLocation(graph2?.withToken, del, insert, where2), insert?.val ?? [], del?.val ?? [], where2, using, graph2?.graph));
14157
+ return ACTION(() => C.astFactory.updateOperationModify(C.astFactory.sourceLocation(graph2?.withToken, del, insert, where2), insert?.val ?? [], del?.val ?? [], where2, using, graph2?.graph));
13995
14158
  },
13996
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14159
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14160
+ const { astFactory: F2, indentInc } = C;
13997
14161
  if (ast.graph) {
13998
14162
  F2.printFilter(ast, () => PRINT_WORD("WITH"));
13999
14163
  SUBRULE(iri2, ast.graph);
14000
14164
  }
14001
14165
  if (ast.delete.length > 0) {
14002
- F2.printFilter(ast, () => PRINT_WORD("DELETE", "{"));
14166
+ F2.printFilter(ast, () => {
14167
+ C[traqulaIndentation] += indentInc;
14168
+ PRINT_WORD("DELETE", "{\n");
14169
+ });
14003
14170
  SUBRULE(quads, F2.wrap(ast.delete, ast.loc));
14004
- F2.printFilter(ast, () => PRINT_WORD("}"));
14171
+ F2.printFilter(ast, () => {
14172
+ C[traqulaIndentation] -= indentInc;
14173
+ PRINT_ON_EMPTY("}\n");
14174
+ });
14005
14175
  }
14006
14176
  if (ast.insert.length > 0) {
14007
- F2.printFilter(ast, () => PRINT_WORD("INSERT", "{"));
14177
+ F2.printFilter(ast, () => {
14178
+ C[traqulaIndentation] += indentInc;
14179
+ PRINT_WORD("INSERT", "{\n");
14180
+ });
14008
14181
  SUBRULE(quads, F2.wrap(ast.insert, ast.loc));
14009
- F2.printFilter(ast, () => PRINT_WORD("}"));
14182
+ F2.printFilter(ast, () => {
14183
+ C[traqulaIndentation] -= indentInc;
14184
+ PRINT_ON_EMPTY("}\n");
14185
+ });
14010
14186
  }
14011
14187
  SUBRULE(usingClauseStar, ast.from);
14012
14188
  F2.printFilter(ast, () => PRINT_WORD("WHERE"));
@@ -14020,7 +14196,7 @@ var deleteClause2 = {
14020
14196
  const couldCreateBlankNodes = ACTION(() => C.parseMode.delete("canCreateBlankNodes"));
14021
14197
  const del = SUBRULE(quadPattern);
14022
14198
  ACTION(() => couldCreateBlankNodes && C.parseMode.add("canCreateBlankNodes"));
14023
- return ACTION(() => C.factory.wrap(del.val, C.factory.sourceLocation(delToken, del)));
14199
+ return ACTION(() => C.astFactory.wrap(del.val, C.astFactory.sourceLocation(delToken, del)));
14024
14200
  }
14025
14201
  };
14026
14202
  var insertClause2 = {
@@ -14028,7 +14204,7 @@ var insertClause2 = {
14028
14204
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
14029
14205
  const insertToken = CONSUME(insertClause);
14030
14206
  const insert = SUBRULE(quadPattern);
14031
- return ACTION(() => C.factory.wrap(insert.val, C.factory.sourceLocation(insertToken, insert)));
14207
+ return ACTION(() => C.astFactory.wrap(insert.val, C.astFactory.sourceLocation(insertToken, insert)));
14032
14208
  }
14033
14209
  };
14034
14210
  var graphOrDefault = {
@@ -14036,12 +14212,12 @@ var graphOrDefault = {
14036
14212
  impl: ({ ACTION, SUBRULE1, CONSUME, OPTION, OR }) => (C) => OR([
14037
14213
  { ALT: () => {
14038
14214
  const def = CONSUME(graph_exports.default_);
14039
- return ACTION(() => C.factory.graphRefDefault(C.factory.sourceLocation(def)));
14215
+ return ACTION(() => C.astFactory.graphRefDefault(C.astFactory.sourceLocation(def)));
14040
14216
  } },
14041
14217
  { ALT: () => {
14042
14218
  const graph2 = OPTION(() => CONSUME(graph_exports.graph));
14043
14219
  const name = SUBRULE1(iri2);
14044
- return ACTION(() => C.factory.graphRefSpecific(name, C.factory.sourceLocation(graph2, name)));
14220
+ return ACTION(() => C.astFactory.graphRefSpecific(name, C.astFactory.sourceLocation(graph2, name)));
14045
14221
  } }
14046
14222
  ])
14047
14223
  };
@@ -14050,9 +14226,9 @@ var graphRef = {
14050
14226
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
14051
14227
  const graph2 = CONSUME(graph_exports.graph);
14052
14228
  const val = SUBRULE(iri2);
14053
- return ACTION(() => C.factory.graphRefSpecific(val, C.factory.sourceLocation(graph2, val)));
14229
+ return ACTION(() => C.astFactory.graphRefSpecific(val, C.astFactory.sourceLocation(graph2, val)));
14054
14230
  },
14055
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14231
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14056
14232
  F2.printFilter(ast, () => PRINT_WORD("GRAPH"));
14057
14233
  SUBRULE(iri2, ast.graph);
14058
14234
  }
@@ -14063,18 +14239,18 @@ var graphRefAll = {
14063
14239
  { ALT: () => SUBRULE(graphRef) },
14064
14240
  { ALT: () => {
14065
14241
  const def = CONSUME(graph_exports.default_);
14066
- return ACTION(() => C.factory.graphRefDefault(C.factory.sourceLocation(def)));
14242
+ return ACTION(() => C.astFactory.graphRefDefault(C.astFactory.sourceLocation(def)));
14067
14243
  } },
14068
14244
  { ALT: () => {
14069
14245
  const named2 = CONSUME(graph_exports.named);
14070
- return ACTION(() => C.factory.graphRefNamed(C.factory.sourceLocation(named2)));
14246
+ return ACTION(() => C.astFactory.graphRefNamed(C.astFactory.sourceLocation(named2)));
14071
14247
  } },
14072
14248
  { ALT: () => {
14073
14249
  const graphAll2 = CONSUME(graph_exports.graphAll);
14074
- return ACTION(() => C.factory.graphRefAll(C.factory.sourceLocation(graphAll2)));
14250
+ return ACTION(() => C.astFactory.graphRefAll(C.astFactory.sourceLocation(graphAll2)));
14075
14251
  } }
14076
14252
  ]),
14077
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14253
+ gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14078
14254
  if (F2.isGraphRefSpecific(ast)) {
14079
14255
  SUBRULE(graphRef, ast);
14080
14256
  } else if (F2.isGraphRefDefault(ast)) {
@@ -14111,9 +14287,9 @@ var quads = {
14111
14287
  ACTION(() => quads2.push(triples));
14112
14288
  });
14113
14289
  });
14114
- return ACTION(() => C.factory.wrap(quads2, C.factory.sourceLocation(quads2.at(0), last2)));
14290
+ return ACTION(() => C.astFactory.wrap(quads2, C.astFactory.sourceLocation(quads2.at(0), last2)));
14115
14291
  },
14116
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
14292
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
14117
14293
  for (const quad of ast.val) {
14118
14294
  if (F2.isPattern(quad)) {
14119
14295
  SUBRULE(triplesBlock, quad);
@@ -14131,14 +14307,21 @@ var quadsNotTriples = {
14131
14307
  CONSUME(symbols_exports.LCurly);
14132
14308
  const triples = OPTION(() => SUBRULE1(triplesTemplate));
14133
14309
  const close = CONSUME(symbols_exports.RCurly);
14134
- return ACTION(() => C.factory.graphQuads(name, triples ?? C.factory.patternBgp([], C.factory.sourceLocationNoMaterialize()), C.factory.sourceLocation(graph2, close)));
14310
+ return ACTION(() => C.astFactory.graphQuads(name, triples ?? C.astFactory.patternBgp([], C.astFactory.sourceLocationNoMaterialize()), C.astFactory.sourceLocation(graph2, close)));
14135
14311
  },
14136
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { factory: F2 }) => {
14312
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14313
+ const { astFactory: F2, indentInc } = C;
14137
14314
  F2.printFilter(ast, () => PRINT_WORD("GRAPH"));
14138
14315
  SUBRULE(varOrTerm, ast.graph);
14139
- F2.printFilter(ast, () => PRINT_WORD("{"));
14316
+ F2.printFilter(ast, () => {
14317
+ C[traqulaIndentation] += indentInc;
14318
+ PRINT_WORD("{\n");
14319
+ });
14140
14320
  SUBRULE(triplesBlock, ast.triples);
14141
- F2.printFilter(ast, () => PRINT_WORD("}"));
14321
+ F2.printFilter(ast, () => {
14322
+ C[traqulaIndentation] -= indentInc;
14323
+ PRINT_ON_EMPTY("}\n");
14324
+ });
14142
14325
  }
14143
14326
  };
14144
14327
 
@@ -14161,7 +14344,7 @@ var queryOrUpdate = {
14161
14344
  ...subType,
14162
14345
  type: "query",
14163
14346
  ...values3 && { values: values3 },
14164
- loc: C.factory.sourceLocation(prologueValues.at(0), subType, values3)
14347
+ loc: C.astFactory.sourceLocation(prologueValues.at(0), subType, values3)
14165
14348
  }));
14166
14349
  } },
14167
14350
  { ALT: () => {
@@ -14185,7 +14368,7 @@ var queryOrUpdate = {
14185
14368
  const update2 = {
14186
14369
  type: "update",
14187
14370
  updates,
14188
- loc: C.factory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation)
14371
+ loc: C.astFactory.sourceLocation(...updates[0].context, updates[0].operation, ...updates.at(-1).context, updates.at(-1)?.operation)
14189
14372
  };
14190
14373
  updateNoReuseBlankNodeLabels(update2);
14191
14374
  return update2;
@@ -14193,7 +14376,7 @@ var queryOrUpdate = {
14193
14376
  } }
14194
14377
  ]);
14195
14378
  },
14196
- gImpl: ({ SUBRULE }) => (ast, { factory: F2 }) => {
14379
+ gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
14197
14380
  if (F2.isQuery(ast)) {
14198
14381
  SUBRULE(query, ast);
14199
14382
  } else {
@@ -14205,13 +14388,15 @@ var queryOrUpdate = {
14205
14388
  // lib/MinimalSparqlParser.js
14206
14389
  function completeParseContext(context) {
14207
14390
  return {
14208
- factory: context.factory ?? new Factory(),
14391
+ astFactory: context.astFactory ?? new AstFactory(),
14209
14392
  baseIRI: context.baseIRI,
14210
14393
  prefixes: { ...context.prefixes },
14211
14394
  origSource: context.origSource ?? "",
14212
14395
  offset: context.offset,
14213
14396
  parseMode: context.parseMode ? new Set(context.parseMode) : /* @__PURE__ */ new Set(["canParseVars", "canCreateBlankNodes"]),
14214
- skipValidation: context.skipValidation ?? false
14397
+ skipValidation: context.skipValidation ?? false,
14398
+ [traqulaIndentation]: context[traqulaIndentation] ?? 0,
14399
+ indentInc: context.indentInc ?? 2
14215
14400
  };
14216
14401
  }
14217
14402
  var MinimalSparqlParser = class {
@@ -14219,7 +14404,7 @@ var MinimalSparqlParser = class {
14219
14404
  constructor(parser) {
14220
14405
  this.parser = parser;
14221
14406
  }
14222
- F = new Factory();
14407
+ F = new AstFactory();
14223
14408
  parse(query2, context = {}) {
14224
14409
  return this.parser.queryOrUpdate(query2, completeParseContext(context));
14225
14410
  }