@traqula/parser-sparql-1-1 0.0.19 → 0.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -50,7 +50,7 @@ var AstCoreFactory = class {
50
50
  if (filtered.length === 0) {
51
51
  return this.gen();
52
52
  }
53
- const first2 = filtered[0];
53
+ const first2 = filtered.at(0);
54
54
  const last2 = filtered.at(-1);
55
55
  return {
56
56
  sourceLocationType: "source",
@@ -9663,6 +9663,9 @@ var ParserBuilder = class _ParserBuilder {
9663
9663
  delete this.rules[ruleName];
9664
9664
  return this;
9665
9665
  }
9666
+ getRule(ruleName) {
9667
+ return this.rules[ruleName];
9668
+ }
9666
9669
  /**
9667
9670
  * Merge this grammar builder with another.
9668
9671
  * It is best to merge the bigger grammar with the smaller one.
@@ -9749,21 +9752,31 @@ ${firstError.message}`);
9749
9752
  }
9750
9753
  };
9751
9754
 
9752
- // ../../packages/core/lib/Transformers.js
9753
- var TransformerType = class {
9754
- clone(obj) {
9755
- const newObj = Object.create(Object.getPrototypeOf(obj));
9756
- Object.defineProperties(newObj, Object.getOwnPropertyDescriptors(obj));
9757
- return newObj;
9755
+ // ../../packages/core/lib/TransformerObject.js
9756
+ var TransformerObject = class {
9757
+ defaultContext;
9758
+ maxStackSize = 1e6;
9759
+ /**
9760
+ * Creates stateless transformer.
9761
+ * @param defaultContext
9762
+ */
9763
+ constructor(defaultContext = {}) {
9764
+ this.defaultContext = defaultContext;
9758
9765
  }
9759
- safeObjectVisit(value, mapper) {
9760
- if (value && typeof value === "object") {
9761
- if (Array.isArray(value)) {
9762
- return value.map((x) => this.safeObjectVisit(x, mapper));
9763
- }
9764
- return mapper(value);
9766
+ /**
9767
+ * Function to shallow clone any type.
9768
+ * @param obj
9769
+ * @protected
9770
+ */
9771
+ clone(obj) {
9772
+ if (obj === null || typeof obj !== "object") {
9773
+ return obj;
9765
9774
  }
9766
- return value;
9775
+ const proto = Object.getPrototypeOf(obj);
9776
+ if (proto === Object.prototype || proto === null) {
9777
+ return { ...obj };
9778
+ }
9779
+ return Object.assign(Object.create(proto), obj);
9767
9780
  }
9768
9781
  /**
9769
9782
  * Recursively transforms all objects that are not arrays. Mapper is called on deeper objects first.
@@ -9775,90 +9788,228 @@ var TransformerType = class {
9775
9788
  * - Default false
9776
9789
  */
9777
9790
  transformObject(startObject, mapper, preVisitor = () => ({})) {
9791
+ const defaults2 = this.defaultContext;
9792
+ const defaultCopyFlag = defaults2.copy ?? true;
9793
+ const defaultContinues = defaults2.continue ?? true;
9794
+ const defaultIgnoreKeys = defaults2.ignoreKeys;
9795
+ const defaultShallowKeys = defaults2.shallowKeys;
9796
+ const defaultDidShortCut = defaults2.shortcut ?? false;
9778
9797
  let didShortCut = false;
9779
- const recurse = (curObject) => {
9780
- const copy3 = this.clone(curObject);
9781
- const context = preVisitor(copy3);
9782
- didShortCut = context.shortcut ?? false;
9783
- const continues = context.continue ?? true;
9784
- if (continues && !didShortCut) {
9785
- for (const [key, value] of Object.entries(copy3)) {
9786
- if (didShortCut) {
9787
- return copy3;
9798
+ const resultWrap = { res: startObject };
9799
+ const stack = [startObject];
9800
+ const stackParent = [resultWrap];
9801
+ const stackParentKey = ["res"];
9802
+ const handleMapperOnLen = [];
9803
+ const mapperCopyStack = [];
9804
+ const mapperOrigStack = [];
9805
+ const mapperParent = [];
9806
+ const mapperParentKey = [];
9807
+ function handleMapper() {
9808
+ while (stack.length === handleMapperOnLen.at(-1)) {
9809
+ handleMapperOnLen.pop();
9810
+ const copyToMap = mapperCopyStack.pop();
9811
+ const origToMap = mapperOrigStack.pop();
9812
+ const parent = mapperParent.pop();
9813
+ const parentKey = mapperParentKey.pop();
9814
+ parent[parentKey] = mapper(copyToMap, origToMap);
9815
+ }
9816
+ }
9817
+ while (stack.length > 0 && stack.length < this.maxStackSize) {
9818
+ const curObject = stack.pop();
9819
+ const curParent = stackParent.pop();
9820
+ const curKey = stackParentKey.pop();
9821
+ if (!didShortCut) {
9822
+ if (Array.isArray(curObject)) {
9823
+ const newArr = [...curObject];
9824
+ handleMapperOnLen.push(stack.length);
9825
+ mapperCopyStack.push(newArr);
9826
+ mapperOrigStack.push(curObject);
9827
+ mapperParent.push(curParent);
9828
+ mapperParentKey.push(curKey);
9829
+ for (let index = curObject.length - 1; index >= 0; index--) {
9830
+ const val = curObject[index];
9831
+ if (val !== null && typeof val === "object") {
9832
+ stack.push(val);
9833
+ stackParent.push(newArr);
9834
+ stackParentKey.push(index.toString());
9835
+ }
9836
+ }
9837
+ handleMapper();
9838
+ continue;
9839
+ }
9840
+ const context = preVisitor(curObject);
9841
+ const copyFlag = context.copy ?? defaultCopyFlag;
9842
+ const continues = context.continue ?? defaultContinues;
9843
+ const ignoreKeys = context.ignoreKeys ?? defaultIgnoreKeys;
9844
+ const shallowKeys = context.shallowKeys ?? defaultShallowKeys;
9845
+ didShortCut = context.shortcut ?? defaultDidShortCut;
9846
+ const copy3 = copyFlag ? this.clone(curObject) : curObject;
9847
+ handleMapperOnLen.push(stack.length);
9848
+ mapperCopyStack.push(copy3);
9849
+ mapperOrigStack.push(curObject);
9850
+ mapperParent.push(curParent);
9851
+ mapperParentKey.push(curKey);
9852
+ if (continues && !didShortCut) {
9853
+ for (const key in copy3) {
9854
+ if (!Object.hasOwn(copy3, key)) {
9855
+ continue;
9856
+ }
9857
+ const val = copy3[key];
9858
+ const onlyShallow = shallowKeys && shallowKeys?.has(key);
9859
+ if (onlyShallow) {
9860
+ copy3[key] = this.clone(val);
9861
+ }
9862
+ if (ignoreKeys && ignoreKeys.has(key)) {
9863
+ continue;
9864
+ }
9865
+ if (!onlyShallow && val !== null && typeof val === "object") {
9866
+ stack.push(val);
9867
+ stackParentKey.push(key);
9868
+ stackParent.push(copy3);
9869
+ }
9788
9870
  }
9789
- copy3[key] = this.safeObjectVisit(value, (obj) => recurse(obj));
9790
9871
  }
9791
9872
  }
9792
- return mapper(copy3);
9793
- };
9794
- return recurse(startObject);
9873
+ handleMapper();
9874
+ }
9875
+ if (stack.length >= this.maxStackSize) {
9876
+ throw new Error("Transform object stack overflowed");
9877
+ }
9878
+ handleMapper();
9879
+ return resultWrap.res;
9795
9880
  }
9796
9881
  /**
9797
9882
  * Visitor that visits all objects. Visits deeper objects first.
9798
9883
  */
9799
9884
  visitObject(startObject, visitor, preVisitor = () => ({})) {
9885
+ const defaults2 = this.defaultContext;
9886
+ const defaultContinues = defaults2.continue ?? true;
9887
+ const defaultIgnoreKeys = defaults2.ignoreKeys;
9888
+ const defaultShortcut = defaults2.shortcut ?? false;
9800
9889
  let didShortCut = false;
9801
- const recurse = (curObject) => {
9802
- const context = preVisitor(curObject);
9803
- didShortCut = context.shortcut ?? false;
9804
- const continues = context.continue ?? true;
9805
- if (continues && !didShortCut) {
9806
- for (const value of Object.values(curObject)) {
9807
- if (didShortCut) {
9808
- return;
9890
+ const stack = [startObject];
9891
+ const handleVisitorOnLen = [];
9892
+ const visitorStack = [];
9893
+ function handleVisitor() {
9894
+ while (stack.length === handleVisitorOnLen.at(-1)) {
9895
+ handleVisitorOnLen.pop();
9896
+ const toVisit = visitorStack.pop();
9897
+ visitor(toVisit);
9898
+ }
9899
+ }
9900
+ while (stack.length > 0 && stack.length < this.maxStackSize) {
9901
+ const curObject = stack.pop();
9902
+ if (!didShortCut) {
9903
+ if (Array.isArray(curObject)) {
9904
+ for (let i = curObject.length - 1; i >= 0; i--) {
9905
+ stack.push(curObject[i]);
9906
+ }
9907
+ handleVisitor();
9908
+ continue;
9909
+ }
9910
+ const context = preVisitor(curObject);
9911
+ didShortCut = context.shortcut ?? defaultShortcut;
9912
+ const continues = context.continue ?? defaultContinues;
9913
+ const ignoreKeys = context.ignoreKeys ?? defaultIgnoreKeys;
9914
+ handleVisitorOnLen.push(stack.length);
9915
+ visitorStack.push(curObject);
9916
+ if (continues && !didShortCut) {
9917
+ for (const key in curObject) {
9918
+ if (!Object.hasOwn(curObject, key)) {
9919
+ continue;
9920
+ }
9921
+ if (ignoreKeys && ignoreKeys.has(key)) {
9922
+ continue;
9923
+ }
9924
+ const val = curObject[key];
9925
+ if (val && typeof val === "object") {
9926
+ stack.push(val);
9927
+ }
9809
9928
  }
9810
- this.safeObjectVisit(value, (obj) => recurse(obj));
9811
9929
  }
9812
9930
  }
9813
- visitor(curObject);
9814
- };
9815
- recurse(startObject);
9931
+ handleVisitor();
9932
+ }
9933
+ if (stack.length >= this.maxStackSize) {
9934
+ throw new Error("Transform object stack overflowed");
9935
+ }
9936
+ handleVisitor();
9816
9937
  }
9938
+ };
9939
+
9940
+ // ../../packages/core/lib/TransformerTyped.js
9941
+ var TransformerTyped = class extends TransformerObject {
9942
+ defaultNodePreVisitor;
9943
+ constructor(defaultContext = {}, defaultNodePreVisitor = {}) {
9944
+ super(defaultContext);
9945
+ this.defaultNodePreVisitor = defaultNodePreVisitor;
9946
+ }
9947
+ /**
9948
+ * Transform a single node.
9949
+ * The transformation calls the preVisitor from starting from the startObject.
9950
+ * The preVisitor can dictate whether transformation should be stopped.
9951
+ * Note that stopping the transformation also prevets further copying.
9952
+ * The transformer itself transforms object starting with the deepest one that can be visited.
9953
+ * The transformer callback is performed on a copy of the original.
9954
+ * @param startObject
9955
+ * @param nodeCallBacks
9956
+ */
9817
9957
  transformNode(startObject, nodeCallBacks) {
9818
- const transformWrapper = (curObject) => {
9819
- const casted = curObject;
9958
+ const transformWrapper = (copy3, orig) => {
9959
+ let ogTransform;
9960
+ const casted = copy3;
9820
9961
  if (casted.type) {
9821
- const ogFunc = nodeCallBacks[casted.type]?.transform;
9822
- if (ogFunc) {
9823
- return ogFunc(casted);
9824
- }
9962
+ ogTransform = nodeCallBacks[casted.type]?.transform;
9825
9963
  }
9826
- return curObject;
9964
+ return ogTransform ? ogTransform(casted, orig) : copy3;
9827
9965
  };
9828
- const preTransformWrapper = (curObject) => {
9966
+ const nodeDefaults = this.defaultNodePreVisitor;
9967
+ const preVisitWrapper = (curObject) => {
9968
+ let ogPreVisit;
9969
+ let nodeContext = {};
9829
9970
  const casted = curObject;
9830
9971
  if (casted.type) {
9831
- const ogFunc = nodeCallBacks[casted.type]?.preVisitor;
9832
- if (ogFunc) {
9833
- return ogFunc(casted);
9834
- }
9972
+ ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
9973
+ nodeContext = nodeDefaults[casted.type] ?? nodeContext;
9835
9974
  }
9836
- return {};
9975
+ return ogPreVisit ? { ...nodeContext, ...ogPreVisit(casted) } : nodeContext;
9837
9976
  };
9838
- return this.transformObject(startObject, transformWrapper, preTransformWrapper);
9977
+ return this.transformObject(startObject, transformWrapper, preVisitWrapper);
9839
9978
  }
9979
+ /**
9980
+ * Similar to {@link this.transformNode}, but without copying the startObject.
9981
+ * The pre-visitor visits starting from the root, going deeper, while the actual visitor goes in reverse.
9982
+ * @param startObject
9983
+ * @param nodeCallBacks
9984
+ */
9840
9985
  visitNode(startObject, nodeCallBacks) {
9841
- const visitWrapper = (curObject) => {
9986
+ const visitorWrapper = (curObject) => {
9842
9987
  const casted = curObject;
9843
9988
  if (casted.type) {
9844
- const ogFunc = nodeCallBacks[casted.type]?.visitor;
9845
- if (ogFunc) {
9846
- ogFunc(casted);
9989
+ const ogTransform = nodeCallBacks[casted.type]?.visitor;
9990
+ if (ogTransform) {
9991
+ ogTransform(casted);
9847
9992
  }
9848
9993
  }
9849
9994
  };
9995
+ const nodeDefaults = this.defaultNodePreVisitor;
9850
9996
  const preVisitWrapper = (curObject) => {
9997
+ let ogPreVisit;
9998
+ let nodeContext = {};
9851
9999
  const casted = curObject;
9852
10000
  if (casted.type) {
9853
- const ogFunc = nodeCallBacks[casted.type]?.preVisitor;
9854
- if (ogFunc) {
9855
- return ogFunc(casted);
9856
- }
10001
+ ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
10002
+ nodeContext = nodeDefaults[casted.type] ?? nodeContext;
9857
10003
  }
9858
- return {};
10004
+ return ogPreVisit ? { ...nodeContext, ...ogPreVisit(casted) } : nodeContext;
9859
10005
  };
9860
- this.visitObject(startObject, visitWrapper, preVisitWrapper);
10006
+ return this.visitObject(startObject, visitorWrapper, preVisitWrapper);
9861
10007
  }
10008
+ /**
10009
+ * Traverses only selected nodes as returned by the function.
10010
+ * @param currentNode
10011
+ * @param traverse
10012
+ */
9862
10013
  traverseNodes(currentNode, traverse) {
9863
10014
  let didShortCut = false;
9864
10015
  const recurse = (curNode) => {
@@ -9879,11 +10030,24 @@ var TransformerType = class {
9879
10030
  recurse(currentNode);
9880
10031
  }
9881
10032
  };
9882
- var TransformerSubType = class extends TransformerType {
10033
+
10034
+ // ../../packages/core/lib/TransformerSubTyped.js
10035
+ var TransformerSubTyped = class extends TransformerTyped {
10036
+ constructor(defaultContext = {}, defaultNodePreVisitor = {}) {
10037
+ super(defaultContext, defaultNodePreVisitor);
10038
+ }
10039
+ /**
10040
+ * Shares the functionality and first two arguments with {@link this.transformNode}.
10041
+ * The third argument allows you to also transform based on the subType of objects.
10042
+ * Note that when a callback for the subtype is provided, the callback for the general type is **NOT** executed.
10043
+ * @param startObject
10044
+ * @param nodeCallBacks
10045
+ * @param nodeSpecificCallBacks
10046
+ */
9883
10047
  transformNodeSpecific(startObject, nodeCallBacks, nodeSpecificCallBacks) {
9884
- const transformWrapper = (curObject) => {
10048
+ const transformWrapper = (copy3, orig) => {
9885
10049
  let ogTransform;
9886
- const casted = curObject;
10050
+ const casted = copy3;
9887
10051
  if (casted.type && casted.subType) {
9888
10052
  const specific = nodeSpecificCallBacks[casted.type];
9889
10053
  if (specific) {
@@ -9893,7 +10057,7 @@ var TransformerSubType = class extends TransformerType {
9893
10057
  ogTransform = nodeCallBacks[casted.type]?.transform;
9894
10058
  }
9895
10059
  }
9896
- return ogTransform ? ogTransform(casted) : curObject;
10060
+ return ogTransform ? ogTransform(casted, orig) : copy3;
9897
10061
  };
9898
10062
  const preVisitWrapper = (curObject) => {
9899
10063
  let ogPreVisit;
@@ -9907,12 +10071,13 @@ var TransformerSubType = class extends TransformerType {
9907
10071
  ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
9908
10072
  }
9909
10073
  }
9910
- return ogPreVisit ? ogPreVisit(casted) : curObject;
10074
+ return ogPreVisit ? ogPreVisit(casted) : {};
9911
10075
  };
9912
10076
  return this.transformObject(startObject, transformWrapper, preVisitWrapper);
9913
10077
  }
9914
10078
  /**
9915
- * When both nodeCallBack and NodeSpecific callBack are matched, will only look at nodeSpecifCallback
10079
+ * Similar to {@link this.visitNode} but also allows you to match based on the subtype of objects.
10080
+ * When both nodeCallBack and NodeSpecific callBack are matched, will only visit nodeSpecifCallback
9916
10081
  */
9917
10082
  visitNodeSpecific(startObject, nodeCallBacks, nodeSpecificCallBacks) {
9918
10083
  const visitWrapper = (curObject) => {
@@ -9943,10 +10108,16 @@ var TransformerSubType = class extends TransformerType {
9943
10108
  ogPreVisit = nodeCallBacks[casted.type]?.preVisitor;
9944
10109
  }
9945
10110
  }
9946
- return ogPreVisit ? ogPreVisit(casted) : curObject;
10111
+ return ogPreVisit ? ogPreVisit(casted) : {};
9947
10112
  };
9948
10113
  this.visitObject(startObject, visitWrapper, preVisitWrapper);
9949
10114
  }
10115
+ /**
10116
+ * Similar to {@link this.traverseNodes} but also allows you to match based on the subtype of objects.
10117
+ * @param currentNode
10118
+ * @param traverseNode
10119
+ * @param traverseSubNode
10120
+ */
9950
10121
  traverseSubNodes(currentNode, traverseNode, traverseSubNode) {
9951
10122
  let didShortCut = false;
9952
10123
  const recurse = (curNode) => {
@@ -11019,8 +11190,8 @@ function PatternFactoryMixin(Base) {
11019
11190
  isPatternOptional(obj) {
11020
11191
  return this.isOfSubType(obj, nodeType5, "optional");
11021
11192
  }
11022
- patternValues(values3, loc) {
11023
- return { type: nodeType5, subType: "values", values: values3, loc };
11193
+ patternValues(variables, values3, loc) {
11194
+ return { type: nodeType5, subType: "values", variables, values: values3, loc };
11024
11195
  }
11025
11196
  isPatternValues(obj) {
11026
11197
  return this.isOfSubType(obj, nodeType5, "values");
@@ -11195,7 +11366,7 @@ function TermFactoryMixin(Base) {
11195
11366
  isTerm(x) {
11196
11367
  return this.isOfType(x, "term");
11197
11368
  }
11198
- blankNode(label, loc) {
11369
+ termBlank(label, loc) {
11199
11370
  const base = {
11200
11371
  type: "term",
11201
11372
  subType: "blankNode",
@@ -11209,7 +11380,7 @@ function TermFactoryMixin(Base) {
11209
11380
  isTermBlank(obj) {
11210
11381
  return this.isOfSubType(obj, nodeType8, "blankNode");
11211
11382
  }
11212
- literalTerm(loc, value, langOrIri) {
11383
+ termLiteral(loc, value, langOrIri) {
11213
11384
  return {
11214
11385
  type: nodeType8,
11215
11386
  subType: "literal",
@@ -11231,7 +11402,7 @@ function TermFactoryMixin(Base) {
11231
11402
  const casted = obj;
11232
11403
  return this.isTermLiteral(obj) && typeof casted.langOrIri === "object" && casted.langOrIri !== null && this.isTermNamed(casted.langOrIri);
11233
11404
  }
11234
- variable(value, loc) {
11405
+ termVariable(value, loc) {
11235
11406
  return {
11236
11407
  type: nodeType8,
11237
11408
  subType: "variable",
@@ -11242,7 +11413,7 @@ function TermFactoryMixin(Base) {
11242
11413
  isTermVariable(obj) {
11243
11414
  return this.isOfSubType(obj, nodeType8, "variable");
11244
11415
  }
11245
- namedNode(loc, value, prefix) {
11416
+ termNamed(loc, value, prefix) {
11246
11417
  const base = {
11247
11418
  type: nodeType8,
11248
11419
  subType: "namedNode",
@@ -11505,7 +11676,7 @@ var CommonIRIs;
11505
11676
  CommonIRIs2["NIL"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";
11506
11677
  CommonIRIs2["TYPE"] = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type";
11507
11678
  })(CommonIRIs || (CommonIRIs = {}));
11508
- var AstTransformer = class extends TransformerSubType {
11679
+ var AstTransformer = class extends TransformerSubTyped {
11509
11680
  };
11510
11681
 
11511
11682
  // ../../packages/rules-sparql-1-1/lib/validation/validators.js
@@ -11721,17 +11892,20 @@ var rdfLiteral = {
11721
11892
  return OPTION(() => OR([
11722
11893
  { ALT: () => {
11723
11894
  const lang2 = CONSUME(terminals_exports.langTag);
11724
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(value, lang2), value.value, lang2.image.slice(1).toLowerCase()));
11895
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(value, lang2), value.value, lang2.image.slice(1).toLowerCase()));
11725
11896
  } },
11726
11897
  { ALT: () => {
11727
11898
  CONSUME(symbols_exports.hathat);
11728
11899
  const iriVal = SUBRULE1(iri2);
11729
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(value, iriVal), value.value, iriVal));
11900
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(value, iriVal), value.value, iriVal));
11730
11901
  } }
11731
11902
  ])) ?? value;
11732
11903
  },
11733
- gImpl: ({ SUBRULE, PRINT, PRINT_SPACE_LEFT }) => (ast, { astFactory }) => {
11734
- astFactory.printFilter(ast, () => PRINT_SPACE_LEFT(stringEscapedLexical(ast.value)));
11904
+ gImpl: ({ SUBRULE, PRINT, PRINT_WORD }) => (ast, { astFactory }) => {
11905
+ astFactory.printFilter(ast, () => {
11906
+ PRINT_WORD("");
11907
+ PRINT(stringEscapedLexical(ast.value));
11908
+ });
11735
11909
  if (ast.langOrIri) {
11736
11910
  if (typeof ast.langOrIri === "string") {
11737
11911
  astFactory.printFilter(ast, () => PRINT("@", ast.langOrIri));
@@ -11758,7 +11932,7 @@ var numericLiteralUnsigned = {
11758
11932
  { ALT: () => [CONSUME(terminals_exports.decimal), CommonIRIs.DECIMAL] },
11759
11933
  { ALT: () => [CONSUME(terminals_exports.double), CommonIRIs.DOUBLE] }
11760
11934
  ]);
11761
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11935
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.termNamed(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11762
11936
  }
11763
11937
  };
11764
11938
  var numericLiteralPositive = {
@@ -11769,7 +11943,7 @@ var numericLiteralPositive = {
11769
11943
  { ALT: () => [CONSUME(terminals_exports.decimalPositive), CommonIRIs.DECIMAL] },
11770
11944
  { ALT: () => [CONSUME(terminals_exports.doublePositive), CommonIRIs.DOUBLE] }
11771
11945
  ]);
11772
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11946
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.termNamed(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11773
11947
  }
11774
11948
  };
11775
11949
  var numericLiteralNegative = {
@@ -11780,7 +11954,7 @@ var numericLiteralNegative = {
11780
11954
  { ALT: () => [CONSUME(terminals_exports.decimalNegative), CommonIRIs.DECIMAL] },
11781
11955
  { ALT: () => [CONSUME(terminals_exports.doubleNegative), CommonIRIs.DOUBLE] }
11782
11956
  ]);
11783
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11957
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(parsed[0]), parsed[0].image, C.astFactory.termNamed(C.astFactory.sourceLocationNoMaterialize(), parsed[1])));
11784
11958
  }
11785
11959
  };
11786
11960
  var booleanLiteral = {
@@ -11790,7 +11964,7 @@ var booleanLiteral = {
11790
11964
  { ALT: () => CONSUME(true_) },
11791
11965
  { ALT: () => CONSUME(false_) }
11792
11966
  ]);
11793
- return ACTION(() => C.astFactory.literalTerm(C.astFactory.sourceLocation(token), token.image.toLowerCase(), C.astFactory.namedNode(C.astFactory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN)));
11967
+ return ACTION(() => C.astFactory.termLiteral(C.astFactory.sourceLocation(token), token.image.toLowerCase(), C.astFactory.termNamed(C.astFactory.sourceLocationNoMaterialize(), CommonIRIs.BOOLEAN)));
11794
11968
  }
11795
11969
  };
11796
11970
  var string = {
@@ -11832,7 +12006,7 @@ var string = {
11832
12006
  return char;
11833
12007
  }
11834
12008
  });
11835
- return F2.literalTerm(F2.sourceLocation(x[0]), value);
12009
+ return F2.termLiteral(F2.sourceLocation(x[0]), value);
11836
12010
  });
11837
12011
  }
11838
12012
  };
@@ -11848,7 +12022,7 @@ var iriFull = {
11848
12022
  name: "iriFull",
11849
12023
  impl: ({ ACTION, CONSUME }) => (C) => {
11850
12024
  const iriToken = CONSUME(terminals_exports.iriRef);
11851
- return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));
12025
+ return ACTION(() => C.astFactory.termNamed(C.astFactory.sourceLocation(iriToken), iriToken.image.slice(1, -1)));
11852
12026
  },
11853
12027
  gImpl: ({ PRINT }) => (ast, { astFactory: F2 }) => {
11854
12028
  F2.printFilter(ast, () => PRINT("<", ast.value, ">"));
@@ -11861,16 +12035,16 @@ var prefixedName = {
11861
12035
  const longName = CONSUME(terminals_exports.pNameLn);
11862
12036
  return ACTION(() => {
11863
12037
  const [prefix, localName] = longName.image.split(":");
11864
- return C.astFactory.namedNode(C.astFactory.sourceLocation(longName), localName, prefix);
12038
+ return C.astFactory.termNamed(C.astFactory.sourceLocation(longName), localName, prefix);
11865
12039
  });
11866
12040
  } },
11867
12041
  { ALT: () => {
11868
12042
  const shortName = CONSUME(terminals_exports.pNameNs);
11869
- return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(shortName), "", shortName.image.slice(0, -1)));
12043
+ return ACTION(() => C.astFactory.termNamed(C.astFactory.sourceLocation(shortName), "", shortName.image.slice(0, -1)));
11870
12044
  } }
11871
12045
  ]),
11872
- gImpl: ({ PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11873
- F2.printFilter(ast, () => PRINT_WORD(ast.prefix, ":", ast.value));
12046
+ gImpl: ({ PRINT }) => (ast, { astFactory: F2 }) => {
12047
+ F2.printFilter(ast, () => PRINT(ast.prefix, ":", ast.value));
11874
12048
  }
11875
12049
  };
11876
12050
  var canCreateBlankNodes = Symbol("canCreateBlankNodes");
@@ -11880,11 +12054,11 @@ var blankNode = {
11880
12054
  const result = OR([
11881
12055
  { ALT: () => {
11882
12056
  const labelToken = CONSUME(terminals_exports.blankNodeLabel);
11883
- return ACTION(() => C.astFactory.blankNode(labelToken.image.slice(2), C.astFactory.sourceLocation(labelToken)));
12057
+ return ACTION(() => C.astFactory.termBlank(labelToken.image.slice(2), C.astFactory.sourceLocation(labelToken)));
11884
12058
  } },
11885
12059
  { ALT: () => {
11886
12060
  const anonToken = CONSUME(terminals_exports.anon);
11887
- return ACTION(() => C.astFactory.blankNode(void 0, C.astFactory.sourceLocation(anonToken)));
12061
+ return ACTION(() => C.astFactory.termBlank(void 0, C.astFactory.sourceLocation(anonToken)));
11888
12062
  } }
11889
12063
  ]);
11890
12064
  ACTION(() => {
@@ -11894,15 +12068,15 @@ var blankNode = {
11894
12068
  });
11895
12069
  return result;
11896
12070
  },
11897
- gImpl: ({ PRINT_WORD }) => (ast, { astFactory }) => {
11898
- astFactory.printFilter(ast, () => PRINT_WORD("_:", ast.label.replace(/^e_/u, "")));
12071
+ gImpl: ({ PRINT }) => (ast, { astFactory }) => {
12072
+ astFactory.printFilter(ast, () => PRINT("_:", ast.label.replace(/^e_/u, "")));
11899
12073
  }
11900
12074
  };
11901
12075
  var verbA = {
11902
12076
  name: "VerbA",
11903
12077
  impl: ({ ACTION, CONSUME }) => (C) => {
11904
12078
  const token = CONSUME(a);
11905
- return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(token), CommonIRIs.TYPE, void 0));
12079
+ return ACTION(() => C.astFactory.termNamed(C.astFactory.sourceLocation(token), CommonIRIs.TYPE, void 0));
11906
12080
  }
11907
12081
  };
11908
12082
 
@@ -11936,10 +12110,10 @@ var baseDecl2 = {
11936
12110
  const val = SUBRULE(iriFull);
11937
12111
  return ACTION(() => C.astFactory.contextDefinitionBase(C.astFactory.sourceLocation(base, val), val));
11938
12112
  },
11939
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11940
- F2.printFilter(ast, () => PRINT_WORD("BASE"));
12113
+ gImpl: ({ SUBRULE, PRINT_ON_EMPTY, NEW_LINE }) => (ast, { astFactory: F2 }) => {
12114
+ F2.printFilter(ast, () => PRINT_ON_EMPTY("BASE "));
11941
12115
  SUBRULE(iri2, ast.value);
11942
- F2.printFilter(ast, () => PRINT_WORD("\n"));
12116
+ F2.printFilter(ast, () => NEW_LINE());
11943
12117
  }
11944
12118
  };
11945
12119
  var prefixDecl2 = {
@@ -11950,12 +12124,12 @@ var prefixDecl2 = {
11950
12124
  const value = SUBRULE(iriFull);
11951
12125
  return ACTION(() => C.astFactory.contextDefinitionPrefix(C.astFactory.sourceLocation(prefix, value), name, value));
11952
12126
  },
11953
- gImpl: ({ SUBRULE, PRINT_WORDS }) => (ast, { astFactory: F2 }) => {
12127
+ gImpl: ({ SUBRULE, PRINT_ON_EMPTY, NEW_LINE }) => (ast, { astFactory: F2 }) => {
11954
12128
  F2.printFilter(ast, () => {
11955
- PRINT_WORDS("PREFIX", `${ast.key}:`);
12129
+ PRINT_ON_EMPTY("PREFIX ", `${ast.key}: `);
11956
12130
  });
11957
12131
  SUBRULE(iri2, ast.value);
11958
- F2.printFilter(ast, () => PRINT_WORDS("\n"));
12132
+ F2.printFilter(ast, () => NEW_LINE());
11959
12133
  }
11960
12134
  };
11961
12135
  var verb = {
@@ -11992,10 +12166,10 @@ var var_ = {
11992
12166
  { ALT: () => CONSUME(terminals_exports.var1) },
11993
12167
  { ALT: () => CONSUME(terminals_exports.var2) }
11994
12168
  ]);
11995
- return ACTION(() => C.astFactory.variable(varToken.image.slice(1), C.astFactory.sourceLocation(varToken)));
12169
+ return ACTION(() => C.astFactory.termVariable(varToken.image.slice(1), C.astFactory.sourceLocation(varToken)));
11996
12170
  },
11997
- gImpl: ({ PRINT_WORD }) => (ast, { astFactory: F2 }) => {
11998
- F2.printFilter(ast, () => PRINT_WORD(`?${ast.value}`));
12171
+ gImpl: ({ PRINT }) => (ast, { astFactory: F2 }) => {
12172
+ F2.printFilter(ast, () => PRINT(`?${ast.value}`));
11999
12173
  }
12000
12174
  };
12001
12175
  var graphTerm = {
@@ -12008,7 +12182,7 @@ var graphTerm = {
12008
12182
  { GATE: () => C.parseMode.has("canCreateBlankNodes"), ALT: () => SUBRULE(blankNode) },
12009
12183
  { ALT: () => {
12010
12184
  const tokenNil = CONSUME(terminals_exports.nil);
12011
- return ACTION(() => C.astFactory.namedNode(C.astFactory.sourceLocation(tokenNil), CommonIRIs.NIL));
12185
+ return ACTION(() => C.astFactory.termNamed(C.astFactory.sourceLocation(tokenNil), CommonIRIs.NIL));
12012
12186
  } }
12013
12187
  ]),
12014
12188
  gImpl: ({ SUBRULE }) => (ast, { astFactory: F2 }) => {
@@ -12638,13 +12812,16 @@ function triplesDotSeperated(triplesSameSubjectSubrule) {
12638
12812
  var triplesBlock = {
12639
12813
  name: "triplesBlock",
12640
12814
  impl: (implArgs) => (C) => triplesDotSeperated(triplesSameSubjectPath)(implArgs)(C),
12641
- gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC }) => (ast, { astFactory: F2 }) => {
12815
+ gImpl: ({ SUBRULE, PRINT_WORD, HANDLE_LOC, NEW_LINE }) => (ast, { astFactory: F2 }) => {
12642
12816
  for (const [index, triple] of ast.triples.entries()) {
12643
12817
  HANDLE_LOC(triple, () => {
12644
12818
  const nextTriple = ast.triples.at(index);
12645
12819
  if (F2.isTripleCollection(triple)) {
12646
12820
  SUBRULE(graphNodePath, triple);
12647
- F2.printFilter(triple, () => PRINT_WORD(".\n"));
12821
+ F2.printFilter(triple, () => {
12822
+ PRINT_WORD(".");
12823
+ NEW_LINE();
12824
+ });
12648
12825
  } else {
12649
12826
  SUBRULE(graphNodePath, triple.subject);
12650
12827
  F2.printFilter(triple, () => PRINT_WORD(""));
@@ -12656,11 +12833,17 @@ var triplesBlock = {
12656
12833
  F2.printFilter(triple, () => PRINT_WORD(""));
12657
12834
  SUBRULE(graphNodePath, triple.object);
12658
12835
  if (nextTriple === void 0 || F2.isTripleCollection(nextTriple) || !F2.isSourceLocationNoMaterialize(nextTriple.subject.loc)) {
12659
- F2.printFilter(ast, () => PRINT_WORD(".\n"));
12836
+ F2.printFilter(ast, () => {
12837
+ PRINT_WORD(".");
12838
+ NEW_LINE();
12839
+ });
12660
12840
  } else if (F2.isSourceLocationNoMaterialize(nextTriple.predicate.loc)) {
12661
12841
  F2.printFilter(ast, () => PRINT_WORD(","));
12662
12842
  } else {
12663
- F2.printFilter(ast, () => PRINT_WORD(";\n"));
12843
+ F2.printFilter(ast, () => {
12844
+ PRINT_WORD(";");
12845
+ NEW_LINE();
12846
+ });
12664
12847
  }
12665
12848
  }
12666
12849
  });
@@ -12793,10 +12976,10 @@ function collectionImpl(name, allowPaths) {
12793
12976
  return ACTION(() => {
12794
12977
  const F2 = C.astFactory;
12795
12978
  const triples = [];
12796
- const predFirst = F2.namedNode(F2.sourceLocationNoMaterialize(), CommonIRIs.FIRST, void 0);
12797
- const predRest = F2.namedNode(F2.sourceLocationNoMaterialize(), CommonIRIs.REST, void 0);
12798
- const predNil = F2.namedNode(F2.sourceLocationNoMaterialize(), CommonIRIs.NIL, void 0);
12799
- const listHead = F2.blankNode(void 0, F2.sourceLocationNoMaterialize());
12979
+ const predFirst = F2.termNamed(F2.sourceLocationNoMaterialize(), CommonIRIs.FIRST, void 0);
12980
+ const predRest = F2.termNamed(F2.sourceLocationNoMaterialize(), CommonIRIs.REST, void 0);
12981
+ const predNil = F2.termNamed(F2.sourceLocationNoMaterialize(), CommonIRIs.NIL, void 0);
12982
+ const listHead = F2.termBlank(void 0, F2.sourceLocationNoMaterialize());
12800
12983
  let iterHead = listHead;
12801
12984
  for (const [index, term] of terms.entries()) {
12802
12985
  const lastInList = index === terms.length - 1;
@@ -12806,7 +12989,7 @@ function collectionImpl(name, allowPaths) {
12806
12989
  const nilTriple = F2.triple(iterHead, predRest, predNil);
12807
12990
  triples.push(nilTriple);
12808
12991
  } else {
12809
- const tail = F2.blankNode(void 0, F2.sourceLocationNoMaterialize());
12992
+ const tail = F2.termBlank(void 0, F2.sourceLocationNoMaterialize());
12810
12993
  const linkTriple = F2.triple(iterHead, predRest, tail);
12811
12994
  triples.push(linkTriple);
12812
12995
  iterHead = tail;
@@ -12846,16 +13029,17 @@ function blankNodePropertyListImpl(name, allowPaths) {
12846
13029
  name,
12847
13030
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
12848
13031
  const startToken = CONSUME(symbols_exports.LSquare);
12849
- const blankNode2 = ACTION(() => C.astFactory.blankNode(void 0, C.astFactory.sourceLocationNoMaterialize()));
13032
+ const blankNode2 = ACTION(() => C.astFactory.termBlank(void 0, C.astFactory.sourceLocationNoMaterialize()));
12850
13033
  const propList = SUBRULE(propertyPathNotEmptyImpl, blankNode2);
12851
13034
  const endToken = CONSUME(symbols_exports.RSquare);
12852
13035
  return ACTION(() => C.astFactory.tripleCollectionBlankNodeProperties(blankNode2, propList, C.astFactory.sourceLocation(startToken, endToken)));
12853
13036
  },
12854
- gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC, PRINT_ON_EMPTY }) => (ast, c) => {
13037
+ gImpl: ({ SUBRULE, PRINT, PRINT_WORD, HANDLE_LOC, PRINT_ON_EMPTY, NEW_LINE }) => (ast, c) => {
12855
13038
  const { astFactory: F2, indentInc } = c;
12856
13039
  F2.printFilter(ast, () => {
12857
13040
  c[traqulaIndentation] += indentInc;
12858
- PRINT("[\n");
13041
+ PRINT("[");
13042
+ NEW_LINE();
12859
13043
  });
12860
13044
  for (const triple of ast.triples) {
12861
13045
  HANDLE_LOC(triple, () => {
@@ -12866,7 +13050,10 @@ function blankNodePropertyListImpl(name, allowPaths) {
12866
13050
  }
12867
13051
  F2.printFilter(triple, () => PRINT_WORD(""));
12868
13052
  SUBRULE(graphNodePath, triple.object);
12869
- F2.printFilter(ast, () => PRINT_WORD(";\n"));
13053
+ F2.printFilter(ast, () => {
13054
+ PRINT_WORD(";");
13055
+ NEW_LINE();
13056
+ });
12870
13057
  });
12871
13058
  }
12872
13059
  F2.printFilter(ast, () => {
@@ -12925,18 +13112,19 @@ var groupGraphPattern = {
12925
13112
  const close = CONSUME(symbols_exports.RCurly);
12926
13113
  return ACTION(() => C.astFactory.patternGroup(patterns, C.astFactory.sourceLocation(open, close)));
12927
13114
  },
12928
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
13115
+ gImpl: ({ SUBRULE, PRINT_WORD, NEW_LINE, PRINT_ON_OWN_LINE }) => (ast, C) => {
12929
13116
  const { astFactory: F2, indentInc } = C;
12930
13117
  F2.printFilter(ast, () => {
12931
13118
  C[traqulaIndentation] += indentInc;
12932
- PRINT_WORD("{\n");
13119
+ PRINT_WORD("{");
13120
+ NEW_LINE();
12933
13121
  });
12934
13122
  for (const pattern of ast.patterns) {
12935
13123
  SUBRULE(generatePattern, pattern);
12936
13124
  }
12937
13125
  F2.printFilter(ast, () => {
12938
13126
  C[traqulaIndentation] -= indentInc;
12939
- PRINT_ON_EMPTY("}\n");
13127
+ PRINT_ON_OWN_LINE("}");
12940
13128
  });
12941
13129
  }
12942
13130
  };
@@ -13086,12 +13274,15 @@ var bind2 = {
13086
13274
  const close = CONSUME(symbols_exports.RParen);
13087
13275
  return ACTION(() => C.astFactory.patternBind(expressionVal, variable, C.astFactory.sourceLocation(bind3, close)));
13088
13276
  },
13089
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13277
+ gImpl: ({ SUBRULE, PRINT_WORD, NEW_LINE }) => (ast, { astFactory: F2 }) => {
13090
13278
  F2.printFilter(ast, () => PRINT_WORD("BIND", "("));
13091
13279
  SUBRULE(expression, ast.expression);
13092
13280
  F2.printFilter(ast, () => PRINT_WORD("AS"));
13093
13281
  SUBRULE(var_, ast.variable);
13094
- F2.printFilter(ast, () => PRINT_WORD(")\n"));
13282
+ F2.printFilter(ast, () => {
13283
+ PRINT_WORD(")");
13284
+ NEW_LINE();
13285
+ });
13095
13286
  }
13096
13287
  };
13097
13288
  var inlineData = {
@@ -13099,34 +13290,46 @@ var inlineData = {
13099
13290
  impl: ({ ACTION, SUBRULE, CONSUME }) => (C) => {
13100
13291
  const values3 = CONSUME(values2);
13101
13292
  const datablock = SUBRULE(dataBlock);
13102
- return ACTION(() => C.astFactory.patternValues(datablock.val, C.astFactory.sourceLocation(values3, datablock)));
13293
+ return ACTION(() => {
13294
+ datablock.loc = C.astFactory.sourceLocation(values3, datablock);
13295
+ return datablock;
13296
+ });
13103
13297
  },
13104
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
13298
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY, NEW_LINE, PRINT_ON_OWN_LINE }) => (ast, C) => {
13105
13299
  const { astFactory: F2, indentInc } = C;
13106
- const variables = Object.keys(ast.values.at(0) ?? {});
13300
+ const variables = ast.variables;
13301
+ const singleVar = variables.length === 1;
13302
+ F2.printFilter(ast, () => {
13303
+ PRINT_ON_EMPTY("VALUES", singleVar ? "" : "( ");
13304
+ });
13305
+ for (const variable of variables) {
13306
+ F2.printFilter(ast, () => PRINT_WORD(""));
13307
+ SUBRULE(varOrTerm, variable);
13308
+ F2.printFilter(ast, () => PRINT_WORD(""));
13309
+ }
13107
13310
  F2.printFilter(ast, () => {
13108
- PRINT_ON_EMPTY("");
13109
- PRINT_WORD("VALUES", "(");
13110
- for (const variable of variables) {
13111
- PRINT_WORD(`?${variable}`);
13112
- }
13113
13311
  C[traqulaIndentation] += indentInc;
13114
- PRINT_WORD(")", "{\n");
13312
+ PRINT_WORD(singleVar ? "" : ")", "{");
13313
+ NEW_LINE();
13115
13314
  });
13116
13315
  for (const mapping of ast.values) {
13117
- F2.printFilter(ast, () => PRINT_WORD("("));
13316
+ F2.printFilter(ast, () => !singleVar && PRINT_WORD("("));
13118
13317
  for (const variable of variables) {
13119
- if (mapping[variable] === void 0) {
13318
+ const var_2 = variable.value;
13319
+ if (mapping[var_2] === void 0) {
13120
13320
  F2.printFilter(ast, () => PRINT_WORD("UNDEF"));
13121
13321
  } else {
13122
- SUBRULE(graphNodePath, mapping[variable]);
13322
+ SUBRULE(graphNodePath, mapping[var_2]);
13123
13323
  }
13124
13324
  }
13125
- F2.printFilter(ast, () => PRINT_WORD(")\n"));
13325
+ F2.printFilter(ast, () => {
13326
+ PRINT_WORD(singleVar ? "" : ")");
13327
+ NEW_LINE();
13328
+ });
13126
13329
  }
13127
13330
  F2.printFilter(ast, () => {
13128
13331
  C[traqulaIndentation] -= indentInc;
13129
- PRINT_ON_EMPTY("}\n");
13332
+ PRINT_ON_OWN_LINE("}");
13130
13333
  });
13131
13334
  }
13132
13335
  };
@@ -13150,7 +13353,7 @@ var inlineDataOneVar = {
13150
13353
  });
13151
13354
  });
13152
13355
  const close = CONSUME(symbols_exports.RCurly);
13153
- return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(varVal, close)));
13356
+ return ACTION(() => C.astFactory.patternValues([varVal], res, C.astFactory.sourceLocation(varVal, close)));
13154
13357
  }
13155
13358
  };
13156
13359
  var inlineDataFull = {
@@ -13167,7 +13370,7 @@ var inlineDataFull = {
13167
13370
  res.push({});
13168
13371
  });
13169
13372
  const close = CONSUME1(symbols_exports.RCurly);
13170
- return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(nil2, close)));
13373
+ return ACTION(() => C.astFactory.patternValues(vars, res, C.astFactory.sourceLocation(nil2, close)));
13171
13374
  } },
13172
13375
  { ALT: () => {
13173
13376
  const open = CONSUME1(symbols_exports.LParen);
@@ -13199,7 +13402,7 @@ var inlineDataFull = {
13199
13402
  });
13200
13403
  });
13201
13404
  const close = CONSUME2(symbols_exports.RCurly);
13202
- return ACTION(() => C.astFactory.wrap(res, C.astFactory.sourceLocation(open, close)));
13405
+ return ACTION(() => C.astFactory.patternValues(vars, res, C.astFactory.sourceLocation(open, close)));
13203
13406
  } }
13204
13407
  ]);
13205
13408
  }
@@ -13262,10 +13465,13 @@ var filter3 = {
13262
13465
  const expression2 = SUBRULE(constraint);
13263
13466
  return ACTION(() => C.astFactory.patternFilter(expression2, C.astFactory.sourceLocation(filterToken, expression2)));
13264
13467
  },
13265
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
13468
+ gImpl: ({ SUBRULE, PRINT_WORD, NEW_LINE }) => (ast, { astFactory: F2 }) => {
13266
13469
  F2.printFilter(ast, () => PRINT_WORD("FILTER ("));
13267
13470
  SUBRULE(expression, ast.expression);
13268
- F2.printFilter(ast, () => PRINT_WORD(")\n"));
13471
+ F2.printFilter(ast, () => {
13472
+ PRINT_WORD(")");
13473
+ NEW_LINE();
13474
+ });
13269
13475
  }
13270
13476
  };
13271
13477
  var constraint = {
@@ -13651,8 +13857,7 @@ var groupClause = {
13651
13857
  },
13652
13858
  gImpl: ({ PRINT_WORDS, SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
13653
13859
  F2.printFilter(ast, () => {
13654
- PRINT_ON_EMPTY("");
13655
- PRINT_WORDS("GROUP", "BY");
13860
+ PRINT_ON_EMPTY("GROUP BY ");
13656
13861
  });
13657
13862
  for (const grouping of ast.groupings) {
13658
13863
  if (F2.isExpression(grouping)) {
@@ -13708,10 +13913,9 @@ var havingClause = {
13708
13913
  ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
13709
13914
  return ACTION(() => C.astFactory.solutionModifierHaving(expressions, C.astFactory.sourceLocation(having2, expressions.at(-1))));
13710
13915
  },
13711
- gImpl: ({ PRINT_WORD, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F2 }) => {
13916
+ gImpl: ({ PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F2 }) => {
13712
13917
  F2.printFilter(ast, () => {
13713
- PRINT_ON_EMPTY("");
13714
- PRINT_WORD("HAVING");
13918
+ PRINT_ON_EMPTY("HAVING ");
13715
13919
  });
13716
13920
  for (const having2 of ast.having) {
13717
13921
  SUBRULE(expression, having2);
@@ -13737,8 +13941,7 @@ var orderClause = {
13737
13941
  },
13738
13942
  gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY, SUBRULE }) => (ast, { astFactory: F2 }) => {
13739
13943
  F2.printFilter(ast, () => {
13740
- PRINT_ON_EMPTY("");
13741
- PRINT_WORDS("ORDER", "BY");
13944
+ PRINT_ON_EMPTY("ORDER BY ");
13742
13945
  });
13743
13946
  for (const ordering of ast.orderDefs) {
13744
13947
  if (ordering.descending) {
@@ -13797,9 +14000,9 @@ var limitOffsetClauses = {
13797
14000
  return ACTION(() => C.astFactory.solutionModifierLimitOffset(limit2?.val, offset2.val, C.astFactory.sourceLocation(offset2, limit2)));
13798
14001
  } }
13799
14002
  ]),
13800
- gImpl: ({ PRINT_WORDS, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14003
+ gImpl: ({ PRINT_WORDS, NEW_LINE }) => (ast, { astFactory: F2 }) => {
13801
14004
  F2.printFilter(ast, () => {
13802
- PRINT_ON_EMPTY("");
14005
+ NEW_LINE();
13803
14006
  if (ast.limit) {
13804
14007
  PRINT_WORDS("LIMIT", String(ast.limit));
13805
14008
  }
@@ -13984,9 +14187,9 @@ var selectClause = {
13984
14187
  ACTION(() => !couldParseAgg && C.parseMode.delete("canParseAggregate"));
13985
14188
  return ACTION(() => C.astFactory.wrap(val, C.astFactory.sourceLocation(select2, last2)));
13986
14189
  },
13987
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14190
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
13988
14191
  F2.printFilter(ast, () => {
13989
- PRINT_WORD("SELECT");
14192
+ PRINT_ON_EMPTY("SELECT ");
13990
14193
  if (ast.val.distinct) {
13991
14194
  PRINT_WORD("DISTINCT");
13992
14195
  } else if (ast.val.reduced) {
@@ -14005,7 +14208,9 @@ var selectClause = {
14005
14208
  SUBRULE(var_, variable.variable);
14006
14209
  F2.printFilter(ast, () => PRINT_WORD(")"));
14007
14210
  }
14211
+ F2.printFilter(ast, () => PRINT_WORD(""));
14008
14212
  }
14213
+ F2.printFilter(ast, () => PRINT_WORD(""));
14009
14214
  }
14010
14215
  };
14011
14216
  var constructQuery = {
@@ -14043,18 +14248,19 @@ var constructQuery = {
14043
14248
  } }
14044
14249
  ]);
14045
14250
  },
14046
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14251
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY, PRINT_ON_OWN_LINE, NEW_LINE }) => (ast, C) => {
14047
14252
  const { astFactory: F2, indentInc } = C;
14048
- F2.printFilter(ast, () => PRINT_WORD("CONSTRUCT"));
14253
+ F2.printFilter(ast, () => PRINT_ON_EMPTY("CONSTRUCT "));
14049
14254
  if (!F2.isSourceLocationNoMaterialize(ast.where.loc)) {
14050
14255
  F2.printFilter(ast, () => {
14051
14256
  C[traqulaIndentation] += indentInc;
14052
- PRINT_WORD("{\n");
14257
+ PRINT_WORD("{");
14258
+ NEW_LINE();
14053
14259
  });
14054
14260
  SUBRULE(triplesBlock, ast.template);
14055
14261
  F2.printFilter(ast, () => {
14056
14262
  C[traqulaIndentation] -= indentInc;
14057
- PRINT_ON_EMPTY("}\n");
14263
+ PRINT_ON_OWN_LINE("}");
14058
14264
  });
14059
14265
  }
14060
14266
  SUBRULE(datasetClauseStar, ast.datasets);
@@ -14095,8 +14301,8 @@ var describeQuery = {
14095
14301
  loc: C.astFactory.sourceLocation(describe2, ...variables, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
14096
14302
  }));
14097
14303
  },
14098
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14099
- F2.printFilter(ast, () => PRINT_WORD("DESCRIBE"));
14304
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14305
+ F2.printFilter(ast, () => PRINT_ON_EMPTY("DESCRIBE "));
14100
14306
  if (F2.isWildcard(ast.variables[0])) {
14101
14307
  F2.printFilter(ast, () => PRINT_WORD("*"));
14102
14308
  } else {
@@ -14126,8 +14332,8 @@ var askQuery = {
14126
14332
  loc: C.astFactory.sourceLocation(ask2, from2, where2, modifiers.group, modifiers.having, modifiers.order, modifiers.limitOffset)
14127
14333
  }));
14128
14334
  },
14129
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14130
- F2.printFilter(ast, () => PRINT_WORD("ASK"));
14335
+ gImpl: ({ SUBRULE, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14336
+ F2.printFilter(ast, () => PRINT_ON_EMPTY("ASK "));
14131
14337
  SUBRULE(datasetClauseStar, ast.datasets);
14132
14338
  SUBRULE(whereClause, F2.wrap(ast.where, ast.loc));
14133
14339
  SUBRULE(solutionModifier, ast.solutionModifiers);
@@ -14186,7 +14392,7 @@ var update = {
14186
14392
  return update2;
14187
14393
  });
14188
14394
  },
14189
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14395
+ gImpl: ({ SUBRULE, PRINT, NEW_LINE }) => (ast, { astFactory: F2 }) => {
14190
14396
  const [head2, ...tail] = ast.updates;
14191
14397
  if (head2) {
14192
14398
  SUBRULE(prologue, head2.context);
@@ -14195,7 +14401,10 @@ var update = {
14195
14401
  }
14196
14402
  }
14197
14403
  for (const update2 of tail) {
14198
- F2.printFilter(ast, () => PRINT_WORD(";\n"));
14404
+ F2.printFilter(ast, () => {
14405
+ PRINT(";");
14406
+ NEW_LINE();
14407
+ });
14199
14408
  SUBRULE(prologue, update2.context);
14200
14409
  if (update2.operation) {
14201
14410
  SUBRULE(update1, update2.operation);
@@ -14268,9 +14477,9 @@ var load2 = {
14268
14477
  });
14269
14478
  return ACTION(() => C.astFactory.updateOperationLoad(C.astFactory.sourceLocation(loadToken, source, destination), source, Boolean(silent2), destination));
14270
14479
  },
14271
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14480
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14272
14481
  F2.printFilter(ast, () => {
14273
- PRINT_WORD("LOAD");
14482
+ PRINT_ON_EMPTY("LOAD ");
14274
14483
  if (ast.silent) {
14275
14484
  PRINT_WORD("SILENT");
14276
14485
  }
@@ -14291,9 +14500,9 @@ function clearOrDrop(operation) {
14291
14500
  const destination = SUBRULE1(graphRefAll);
14292
14501
  return ACTION(() => C.astFactory.updateOperationClearDrop(unCapitalize(operation.name), Boolean(silent2), destination, C.astFactory.sourceLocation(opToken, destination)));
14293
14502
  },
14294
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14503
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14295
14504
  F2.printFilter(ast, () => {
14296
- PRINT_WORD(operation.name.toUpperCase());
14505
+ PRINT_ON_EMPTY(operation.name.toUpperCase(), " ");
14297
14506
  if (ast.silent) {
14298
14507
  PRINT_WORD("SILENT");
14299
14508
  }
@@ -14312,9 +14521,9 @@ var create2 = {
14312
14521
  const destination = SUBRULE1(graphRef);
14313
14522
  return ACTION(() => C.astFactory.updateOperationCreate(destination, Boolean(silent2), C.astFactory.sourceLocation(createToken3, destination)));
14314
14523
  },
14315
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14524
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14316
14525
  F2.printFilter(ast, () => {
14317
- PRINT_WORD("CREATE");
14526
+ PRINT_ON_EMPTY("CREATE ");
14318
14527
  if (ast.silent) {
14319
14528
  PRINT_WORD("SILENT");
14320
14529
  }
@@ -14333,9 +14542,9 @@ function copyMoveAddOperation(operation) {
14333
14542
  const destination = SUBRULE2(graphOrDefault);
14334
14543
  return ACTION(() => C.astFactory.updateOperationAddMoveCopy(unCapitalize(operation.name), source, destination, Boolean(silent2), C.astFactory.sourceLocation(op, destination)));
14335
14544
  },
14336
- gImpl: ({ SUBRULE, PRINT_WORD }) => (ast, { astFactory: F2 }) => {
14545
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, { astFactory: F2 }) => {
14337
14546
  F2.printFilter(ast, () => {
14338
- PRINT_WORD(operation.name.toUpperCase());
14547
+ PRINT_ON_EMPTY(operation.name.toUpperCase(), " ");
14339
14548
  if (ast.silent) {
14340
14549
  PRINT_WORD("SILENT");
14341
14550
  }
@@ -14384,23 +14593,24 @@ function insertDeleteDelWhere(name, subType, cons1, dataRule) {
14384
14593
  }
14385
14594
  return ACTION(() => C.astFactory.updateOperationInsDelDataWhere(subType, data.val, C.astFactory.sourceLocation(insDelToken, data)));
14386
14595
  },
14387
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14596
+ gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY, PRINT_ON_OWN_LINE, NEW_LINE }) => (ast, C) => {
14388
14597
  const { astFactory: F2, indentInc } = C;
14389
14598
  F2.printFilter(ast, () => {
14390
- C[traqulaIndentation] += indentInc;
14391
14599
  if (subType === "insertdata") {
14392
- PRINT_WORD("INSERT DATA");
14600
+ PRINT_ON_EMPTY("INSERT DATA ");
14393
14601
  } else if (subType === "deletedata") {
14394
- PRINT_WORD("DELETE DATA");
14602
+ PRINT_ON_EMPTY("DELETE DATA ");
14395
14603
  } else if (subType === "deletewhere") {
14396
- PRINT_WORD("DELETE WHERE");
14604
+ PRINT_ON_EMPTY("DELETE WHERE ");
14397
14605
  }
14398
- PRINT_WORD("{\n");
14606
+ C[traqulaIndentation] += indentInc;
14607
+ PRINT_WORD("{");
14608
+ NEW_LINE();
14399
14609
  });
14400
14610
  SUBRULE(quads, F2.wrap(ast.data, ast.loc));
14401
14611
  F2.printFilter(ast, () => {
14402
14612
  C[traqulaIndentation] -= indentInc;
14403
- PRINT_ON_EMPTY("}\n");
14613
+ PRINT_ON_OWN_LINE("}");
14404
14614
  });
14405
14615
  }
14406
14616
  };
@@ -14432,36 +14642,40 @@ var modify = {
14432
14642
  const where2 = SUBRULE1(groupGraphPattern);
14433
14643
  return ACTION(() => C.astFactory.updateOperationModify(C.astFactory.sourceLocation(graph2?.withToken, del, insert, where2), insert?.val ?? [], del?.val ?? [], where2, using, graph2?.graph));
14434
14644
  },
14435
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14645
+ gImpl: ({ SUBRULE, PRINT_WORDS, PRINT_ON_EMPTY, NEW_LINE }) => (ast, C) => {
14436
14646
  const { astFactory: F2, indentInc } = C;
14437
14647
  if (ast.graph) {
14438
- F2.printFilter(ast, () => PRINT_WORD("WITH"));
14648
+ F2.printFilter(ast, () => PRINT_WORDS("WITH"));
14439
14649
  SUBRULE(iri2, ast.graph);
14440
14650
  }
14441
14651
  if (ast.delete.length > 0) {
14442
14652
  F2.printFilter(ast, () => {
14443
14653
  C[traqulaIndentation] += indentInc;
14444
- PRINT_WORD("DELETE", "{\n");
14654
+ PRINT_WORDS("DELETE", "{");
14655
+ NEW_LINE();
14445
14656
  });
14446
14657
  SUBRULE(quads, F2.wrap(ast.delete, ast.loc));
14447
14658
  F2.printFilter(ast, () => {
14448
14659
  C[traqulaIndentation] -= indentInc;
14449
- PRINT_ON_EMPTY("}\n");
14660
+ PRINT_ON_EMPTY("}");
14661
+ NEW_LINE();
14450
14662
  });
14451
14663
  }
14452
14664
  if (ast.insert.length > 0) {
14453
14665
  F2.printFilter(ast, () => {
14454
14666
  C[traqulaIndentation] += indentInc;
14455
- PRINT_WORD("INSERT", "{\n");
14667
+ PRINT_WORDS("INSERT", "{");
14668
+ NEW_LINE();
14456
14669
  });
14457
14670
  SUBRULE(quads, F2.wrap(ast.insert, ast.loc));
14458
14671
  F2.printFilter(ast, () => {
14459
14672
  C[traqulaIndentation] -= indentInc;
14460
- PRINT_ON_EMPTY("}\n");
14673
+ PRINT_ON_EMPTY("} ");
14674
+ NEW_LINE();
14461
14675
  });
14462
14676
  }
14463
14677
  SUBRULE(usingClauseStar, ast.from);
14464
- F2.printFilter(ast, () => PRINT_WORD("WHERE"));
14678
+ F2.printFilter(ast, () => PRINT_WORDS("WHERE"));
14465
14679
  SUBRULE(groupGraphPattern, ast.where);
14466
14680
  }
14467
14681
  };
@@ -14585,18 +14799,19 @@ var quadsNotTriples = {
14585
14799
  const close = CONSUME(symbols_exports.RCurly);
14586
14800
  return ACTION(() => C.astFactory.graphQuads(name, triples ?? C.astFactory.patternBgp([], C.astFactory.sourceLocationNoMaterialize()), C.astFactory.sourceLocation(graph2, close)));
14587
14801
  },
14588
- gImpl: ({ SUBRULE, PRINT_WORD, PRINT_ON_EMPTY }) => (ast, C) => {
14802
+ gImpl: ({ SUBRULE, PRINT_WORD, NEW_LINE, PRINT_ON_OWN_LINE }) => (ast, C) => {
14589
14803
  const { astFactory: F2, indentInc } = C;
14590
14804
  F2.printFilter(ast, () => PRINT_WORD("GRAPH"));
14591
14805
  SUBRULE(varOrTerm, ast.graph);
14592
14806
  F2.printFilter(ast, () => {
14593
14807
  C[traqulaIndentation] += indentInc;
14594
- PRINT_WORD("{\n");
14808
+ PRINT_WORD("{");
14809
+ NEW_LINE();
14595
14810
  });
14596
14811
  SUBRULE(triplesBlock, ast.triples);
14597
14812
  F2.printFilter(ast, () => {
14598
14813
  C[traqulaIndentation] -= indentInc;
14599
- PRINT_ON_EMPTY("}\n");
14814
+ PRINT_ON_OWN_LINE("}");
14600
14815
  });
14601
14816
  }
14602
14817
  };
@@ -14936,8 +15151,9 @@ var updateParserBuilder = ParserBuilder.create(updateNoModifyParserBuilder).patc
14936
15151
  // lib/Parser.js
14937
15152
  var sparql11ParserBuilder = ParserBuilder.create(queryUnitParserBuilder).merge(updateParserBuilder, []).addRule(grammar_exports.queryOrUpdate);
14938
15153
  var Parser2 = class extends MinimalSparqlParser {
14939
- constructor() {
15154
+ constructor(args = {}) {
14940
15155
  const parser = sparql11ParserBuilder.build({
15156
+ ...args,
14941
15157
  tokenVocabulary: lexer_exports.sparql11LexerBuilder.tokenVocabulary,
14942
15158
  queryPreProcessor: sparqlCodepointEscape
14943
15159
  });