@swagger-api/apidom-ast 0.76.2 → 0.77.0

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 (59) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/cjs/Error.cjs +1 -2
  3. package/cjs/Literal.cjs +1 -2
  4. package/cjs/Node.cjs +1 -2
  5. package/cjs/ParseResult.cjs +1 -2
  6. package/cjs/Position.cjs +2 -4
  7. package/cjs/index.cjs +3 -2
  8. package/cjs/json/nodes/JsonArray.cjs +1 -2
  9. package/cjs/json/nodes/JsonDocument.cjs +1 -2
  10. package/cjs/json/nodes/JsonEscapeSequence.cjs +1 -2
  11. package/cjs/json/nodes/JsonFalse.cjs +1 -2
  12. package/cjs/json/nodes/JsonKey.cjs +1 -2
  13. package/cjs/json/nodes/JsonNode.cjs +1 -2
  14. package/cjs/json/nodes/JsonNull.cjs +1 -2
  15. package/cjs/json/nodes/JsonNumber.cjs +1 -2
  16. package/cjs/json/nodes/JsonObject.cjs +1 -2
  17. package/cjs/json/nodes/JsonProperty.cjs +1 -2
  18. package/cjs/json/nodes/JsonString.cjs +1 -2
  19. package/cjs/json/nodes/JsonStringContent.cjs +1 -2
  20. package/cjs/json/nodes/JsonTrue.cjs +1 -2
  21. package/cjs/json/nodes/JsonValue.cjs +1 -2
  22. package/cjs/json/nodes/predicates.cjs +12 -24
  23. package/cjs/predicates.cjs +4 -8
  24. package/cjs/traversal/visitor.cjs +92 -89
  25. package/cjs/yaml/errors/YamlSchemaError.cjs +1 -2
  26. package/cjs/yaml/errors/YamlTagError.cjs +1 -2
  27. package/cjs/yaml/nodes/YamlAlias.cjs +1 -2
  28. package/cjs/yaml/nodes/YamlAnchor.cjs +1 -2
  29. package/cjs/yaml/nodes/YamlCollection.cjs +1 -2
  30. package/cjs/yaml/nodes/YamlComment.cjs +1 -2
  31. package/cjs/yaml/nodes/YamlDirective.cjs +1 -2
  32. package/cjs/yaml/nodes/YamlDocument.cjs +1 -2
  33. package/cjs/yaml/nodes/YamlKeyValuePair.cjs +1 -2
  34. package/cjs/yaml/nodes/YamlMapping.cjs +1 -2
  35. package/cjs/yaml/nodes/YamlNode.cjs +1 -2
  36. package/cjs/yaml/nodes/YamlScalar.cjs +1 -2
  37. package/cjs/yaml/nodes/YamlSequence.cjs +1 -2
  38. package/cjs/yaml/nodes/YamlStream.cjs +1 -2
  39. package/cjs/yaml/nodes/YamlStyle.cjs +3 -6
  40. package/cjs/yaml/nodes/YamlTag.cjs +2 -4
  41. package/cjs/yaml/nodes/predicates.cjs +10 -20
  42. package/cjs/yaml/schemas/ScalarTag.cjs +1 -2
  43. package/cjs/yaml/schemas/Tag.cjs +1 -2
  44. package/cjs/yaml/schemas/canonical-format.cjs +4 -6
  45. package/cjs/yaml/schemas/failsafe/GenericMapping.cjs +1 -2
  46. package/cjs/yaml/schemas/failsafe/GenericSequence.cjs +1 -2
  47. package/cjs/yaml/schemas/failsafe/GenericString.cjs +1 -2
  48. package/cjs/yaml/schemas/failsafe/index.cjs +1 -2
  49. package/cjs/yaml/schemas/json/Boolean.cjs +1 -2
  50. package/cjs/yaml/schemas/json/FloatingPoint.cjs +1 -2
  51. package/cjs/yaml/schemas/json/Integer.cjs +1 -2
  52. package/cjs/yaml/schemas/json/Null.cjs +1 -2
  53. package/cjs/yaml/schemas/json/index.cjs +1 -2
  54. package/dist/apidom-ast.browser.js +89 -86
  55. package/dist/apidom-ast.browser.min.js +1 -1
  56. package/es/index.mjs +1 -1
  57. package/es/traversal/visitor.mjs +88 -85
  58. package/package.json +3 -3
  59. package/types/dist.d.ts +4 -2
@@ -639,6 +639,7 @@ const isParseResult = isNodeType.bind(undefined, 'parseResult');
639
639
  __webpack_require__.r(__webpack_exports__);
640
640
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
641
641
  /* harmony export */ BREAK: () => (/* binding */ BREAK),
642
+ /* harmony export */ cloneNode: () => (/* binding */ cloneNode),
642
643
  /* harmony export */ getNodeType: () => (/* binding */ getNodeType),
643
644
  /* harmony export */ getVisitFn: () => (/* binding */ getVisitFn),
644
645
  /* harmony export */ isNode: () => (/* binding */ isNode),
@@ -691,6 +692,9 @@ const getNodeType = node => node?.type;
691
692
  // isNode :: Node -> Boolean
692
693
  const isNode = node => typeof getNodeType(node) === 'string';
693
694
 
695
+ // cloneNode :: a -> a
696
+ const cloneNode = node => Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
697
+
694
698
  /**
695
699
  * Creates a new visitor instance which delegates to many visitors to run in
696
700
  * parallel. Each visitor will be visited for each node before moving on.
@@ -701,11 +705,11 @@ const mergeAll = (visitors, {
701
705
  visitFnGetter = getVisitFn,
702
706
  nodeTypeGetter = getNodeType
703
707
  } = {}) => {
704
- const skipping = new Array(visitors.length);
708
+ const skipping = new Array(visitors.length).fill(null);
705
709
  return {
706
710
  enter(node, ...rest) {
707
711
  for (let i = 0; i < visitors.length; i += 1) {
708
- if (skipping[i] == null) {
712
+ if (skipping[i] === null) {
709
713
  const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */false);
710
714
  if (typeof fn === 'function') {
711
715
  const result = fn.call(visitors[i], node, ...rest);
@@ -723,7 +727,7 @@ const mergeAll = (visitors, {
723
727
  },
724
728
  leave(node, ...rest) {
725
729
  for (let i = 0; i < visitors.length; i += 1) {
726
- if (skipping[i] == null) {
730
+ if (skipping[i] === null) {
727
731
  const fn = visitFnGetter(visitors[i], nodeTypeGetter(node), /* isLeaving */true);
728
732
  if (typeof fn === 'function') {
729
733
  const result = fn.call(visitors[i], node, ...rest);
@@ -845,6 +849,7 @@ visitor, {
845
849
  visitFnGetter = getVisitFn,
846
850
  nodeTypeGetter = getNodeType,
847
851
  nodePredicate = isNode,
852
+ nodeCloneFn = cloneNode,
848
853
  detectCycles = true
849
854
  } = {}) => {
850
855
  const visitorKeys = keyMap || {};
@@ -854,15 +859,14 @@ visitor, {
854
859
  let index = -1;
855
860
  let parent;
856
861
  let edits = [];
862
+ let node = root;
857
863
  const path = [];
858
864
  // @ts-ignore
859
865
  const ancestors = [];
860
- let newRoot = root;
861
866
  do {
862
867
  index += 1;
863
868
  const isLeaving = index === keys.length;
864
869
  let key;
865
- let node;
866
870
  const isEdited = isLeaving && edits.length !== 0;
867
871
  if (isLeaving) {
868
872
  key = ancestors.length === 0 ? undefined : path.pop();
@@ -871,23 +875,22 @@ visitor, {
871
875
  parent = ancestors.pop();
872
876
  if (isEdited) {
873
877
  if (inArray) {
874
- // @ts-ignore
878
+ // @ts-ignore; creating clone
875
879
  node = node.slice();
880
+ let editOffset = 0;
881
+ for (const [editKey, editValue] of edits) {
882
+ const arrayKey = editKey - editOffset;
883
+ if (editValue === deleteNodeSymbol) {
884
+ node.splice(arrayKey, 1);
885
+ editOffset += 1;
886
+ } else {
887
+ node[arrayKey] = editValue;
888
+ }
889
+ }
876
890
  } else {
877
891
  // creating clone
878
- node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
879
- }
880
- let editOffset = 0;
881
- for (let ii = 0; ii < edits.length; ii += 1) {
882
- let editKey = edits[ii][0];
883
- const editValue = edits[ii][1];
884
- if (inArray) {
885
- editKey -= editOffset;
886
- }
887
- if (inArray && editValue === deleteNodeSymbol) {
888
- node.splice(editKey, 1);
889
- editOffset += 1;
890
- } else {
892
+ node = nodeCloneFn(node);
893
+ for (const [editKey, editValue] of edits) {
891
894
  node[editKey] = editValue;
892
895
  }
893
896
  }
@@ -900,15 +903,13 @@ visitor, {
900
903
  inArray = stack.inArray;
901
904
  // @ts-ignore
902
905
  stack = stack.prev;
903
- } else {
904
- key = parent ? inArray ? index : keys[index] : undefined;
905
- node = parent ? parent[key] : newRoot;
906
+ } else if (parent !== deleteNodeSymbol && parent !== undefined) {
907
+ key = inArray ? index : keys[index];
908
+ node = parent[key];
906
909
  if (node === deleteNodeSymbol || node === undefined) {
907
910
  continue;
908
911
  }
909
- if (parent) {
910
- path.push(key);
911
- }
912
+ path.push(key);
912
913
  }
913
914
  if (ancestors.includes(node)) {
914
915
  continue;
@@ -918,6 +919,7 @@ visitor, {
918
919
  if (!nodePredicate(node)) {
919
920
  throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_0__["default"](`Invalid AST Node: ${JSON.stringify(node)}`);
920
921
  }
922
+
921
923
  // cycle detected; skipping over a sub-tree to avoid recursion
922
924
  if (detectCycles && ancestors.includes(node)) {
923
925
  path.pop();
@@ -930,25 +932,26 @@ visitor, {
930
932
  for (const [stateKey, stateValue] of Object.entries(state)) {
931
933
  visitor[stateKey] = stateValue;
932
934
  }
935
+ // retrieve result
933
936
  result = visitFn.call(visitor, node, key, parent, path, ancestors);
934
- if (result === breakSymbol) {
935
- break;
937
+ }
938
+ if (result === breakSymbol) {
939
+ break;
940
+ }
941
+ if (result === skipVisitingNodeSymbol) {
942
+ if (!isLeaving) {
943
+ path.pop();
944
+ continue;
936
945
  }
937
- if (result === skipVisitingNodeSymbol) {
938
- if (!isLeaving) {
946
+ } else if (result !== undefined) {
947
+ edits.push([key, result]);
948
+ if (!isLeaving) {
949
+ if (nodePredicate(result)) {
950
+ node = result;
951
+ } else {
939
952
  path.pop();
940
953
  continue;
941
954
  }
942
- } else if (result !== undefined) {
943
- edits.push([key, result]);
944
- if (!isLeaving) {
945
- if (nodePredicate(result)) {
946
- node = result;
947
- } else {
948
- path.pop();
949
- continue;
950
- }
951
- }
952
955
  }
953
956
  }
954
957
  }
@@ -965,19 +968,19 @@ visitor, {
965
968
  };
966
969
  inArray = Array.isArray(node);
967
970
  // @ts-ignore
968
- keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
971
+ keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] ?? [];
969
972
  index = -1;
970
973
  edits = [];
971
- if (parent) {
974
+ if (parent !== deleteNodeSymbol && parent !== undefined) {
972
975
  ancestors.push(parent);
973
976
  }
974
977
  parent = node;
975
978
  }
976
979
  } while (stack !== undefined);
977
980
  if (edits.length !== 0) {
978
- [, newRoot] = edits[edits.length - 1];
981
+ return edits.at(-1)[1];
979
982
  }
980
- return newRoot;
983
+ return root;
981
984
  };
982
985
 
983
986
  /**
@@ -997,6 +1000,7 @@ visitor, {
997
1000
  visitFnGetter = getVisitFn,
998
1001
  nodeTypeGetter = getNodeType,
999
1002
  nodePredicate = isNode,
1003
+ nodeCloneFn = cloneNode,
1000
1004
  detectCycles = true
1001
1005
  } = {}) => {
1002
1006
  const visitorKeys = keyMap || {};
@@ -1006,15 +1010,14 @@ visitor, {
1006
1010
  let index = -1;
1007
1011
  let parent;
1008
1012
  let edits = [];
1013
+ let node = root;
1009
1014
  const path = [];
1010
1015
  // @ts-ignore
1011
1016
  const ancestors = [];
1012
- let newRoot = root;
1013
1017
  do {
1014
1018
  index += 1;
1015
1019
  const isLeaving = index === keys.length;
1016
1020
  let key;
1017
- let node;
1018
1021
  const isEdited = isLeaving && edits.length !== 0;
1019
1022
  if (isLeaving) {
1020
1023
  key = ancestors.length === 0 ? undefined : path.pop();
@@ -1023,23 +1026,22 @@ visitor, {
1023
1026
  parent = ancestors.pop();
1024
1027
  if (isEdited) {
1025
1028
  if (inArray) {
1026
- // @ts-ignore
1029
+ // @ts-ignore; creating clone
1027
1030
  node = node.slice();
1031
+ let editOffset = 0;
1032
+ for (const [editKey, editValue] of edits) {
1033
+ const arrayKey = editKey - editOffset;
1034
+ if (editValue === deleteNodeSymbol) {
1035
+ node.splice(arrayKey, 1);
1036
+ editOffset += 1;
1037
+ } else {
1038
+ node[arrayKey] = editValue;
1039
+ }
1040
+ }
1028
1041
  } else {
1029
1042
  // creating clone
1030
- node = Object.create(Object.getPrototypeOf(node), Object.getOwnPropertyDescriptors(node));
1031
- }
1032
- let editOffset = 0;
1033
- for (let ii = 0; ii < edits.length; ii += 1) {
1034
- let editKey = edits[ii][0];
1035
- const editValue = edits[ii][1];
1036
- if (inArray) {
1037
- editKey -= editOffset;
1038
- }
1039
- if (inArray && editValue === deleteNodeSymbol) {
1040
- node.splice(editKey, 1);
1041
- editOffset += 1;
1042
- } else {
1043
+ node = nodeCloneFn(node);
1044
+ for (const [editKey, editValue] of edits) {
1043
1045
  node[editKey] = editValue;
1044
1046
  }
1045
1047
  }
@@ -1052,21 +1054,20 @@ visitor, {
1052
1054
  inArray = stack.inArray;
1053
1055
  // @ts-ignore
1054
1056
  stack = stack.prev;
1055
- } else {
1056
- key = parent ? inArray ? index : keys[index] : undefined;
1057
- node = parent ? parent[key] : newRoot;
1057
+ } else if (parent !== deleteNodeSymbol && parent !== undefined) {
1058
+ key = inArray ? index : keys[index];
1059
+ node = parent[key];
1058
1060
  if (node === deleteNodeSymbol || node === undefined) {
1059
1061
  continue;
1060
1062
  }
1061
- if (parent) {
1062
- path.push(key);
1063
- }
1063
+ path.push(key);
1064
1064
  }
1065
1065
  let result;
1066
1066
  if (!Array.isArray(node)) {
1067
1067
  if (!nodePredicate(node)) {
1068
1068
  throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_0__["default"](`Invalid AST Node: ${JSON.stringify(node)}`);
1069
1069
  }
1070
+
1070
1071
  // cycle detected; skipping over a sub-tree to avoid recursion
1071
1072
  if (detectCycles && ancestors.includes(node)) {
1072
1073
  path.pop();
@@ -1079,26 +1080,27 @@ visitor, {
1079
1080
  visitor[stateKey] = stateValue;
1080
1081
  }
1081
1082
 
1082
- // eslint-disable-next-line no-await-in-loop
1083
- result = await visitFn.call(visitor, node, key, parent, path, ancestors);
1084
- if (result === breakSymbol) {
1085
- break;
1083
+ // retrieve result
1084
+ result = await visitFn.call(visitor, node, key, parent, path, ancestors); // eslint-disable-line no-await-in-loop
1085
+ }
1086
+
1087
+ if (result === breakSymbol) {
1088
+ break;
1089
+ }
1090
+ if (result === skipVisitingNodeSymbol) {
1091
+ if (!isLeaving) {
1092
+ path.pop();
1093
+ continue;
1086
1094
  }
1087
- if (result === skipVisitingNodeSymbol) {
1088
- if (!isLeaving) {
1095
+ } else if (result !== undefined) {
1096
+ edits.push([key, result]);
1097
+ if (!isLeaving) {
1098
+ if (nodePredicate(result)) {
1099
+ node = result;
1100
+ } else {
1089
1101
  path.pop();
1090
1102
  continue;
1091
1103
  }
1092
- } else if (result !== undefined) {
1093
- edits.push([key, result]);
1094
- if (!isLeaving) {
1095
- if (nodePredicate(result)) {
1096
- node = result;
1097
- } else {
1098
- path.pop();
1099
- continue;
1100
- }
1101
- }
1102
1104
  }
1103
1105
  }
1104
1106
  }
@@ -1115,19 +1117,19 @@ visitor, {
1115
1117
  };
1116
1118
  inArray = Array.isArray(node);
1117
1119
  // @ts-ignore
1118
- keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] || [];
1120
+ keys = inArray ? node : visitorKeys[nodeTypeGetter(node)] ?? [];
1119
1121
  index = -1;
1120
1122
  edits = [];
1121
- if (parent) {
1123
+ if (parent !== deleteNodeSymbol && parent !== undefined) {
1122
1124
  ancestors.push(parent);
1123
1125
  }
1124
1126
  parent = node;
1125
1127
  }
1126
1128
  } while (stack !== undefined);
1127
1129
  if (edits.length !== 0) {
1128
- [, newRoot] = edits[edits.length - 1];
1130
+ return edits.at(-1)[1];
1129
1131
  }
1130
- return newRoot;
1132
+ return root;
1131
1133
  };
1132
1134
 
1133
1135
  /* eslint-enable */
@@ -24654,7 +24656,7 @@ __webpack_require__.r(__webpack_exports__);
24654
24656
  class ApiDOMError extends Error {
24655
24657
  static [Symbol.hasInstance](instance) {
24656
24658
  // we want to ApiDOMAggregateError to act as if ApiDOMError was its superclass
24657
- return Function.prototype[Symbol.hasInstance].call(ApiDOMError, instance) || Function.prototype[Symbol.hasInstance].call(_ApiDOMAggregateError_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], instance);
24659
+ return super[Symbol.hasInstance](instance) || Function.prototype[Symbol.hasInstance].call(_ApiDOMAggregateError_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], instance);
24658
24660
  }
24659
24661
  constructor(message, options) {
24660
24662
  super(message, options);
@@ -24837,6 +24839,7 @@ __webpack_require__.r(__webpack_exports__);
24837
24839
  /* harmony export */ YamlStyleGroup: () => (/* reexport safe */ _yaml_nodes_YamlStyle__WEBPACK_IMPORTED_MODULE_28__.YamlStyleGroup),
24838
24840
  /* harmony export */ YamlTag: () => (/* reexport safe */ _yaml_nodes_YamlTag__WEBPACK_IMPORTED_MODULE_26__["default"]),
24839
24841
  /* harmony export */ YamlTagError: () => (/* reexport safe */ _yaml_errors_YamlTagError__WEBPACK_IMPORTED_MODULE_33__["default"]),
24842
+ /* harmony export */ cloneNode: () => (/* reexport safe */ _traversal_visitor__WEBPACK_IMPORTED_MODULE_39__.cloneNode),
24840
24843
  /* harmony export */ getNodeType: () => (/* reexport safe */ _traversal_visitor__WEBPACK_IMPORTED_MODULE_39__.getNodeType),
24841
24844
  /* harmony export */ getVisitFn: () => (/* reexport safe */ _traversal_visitor__WEBPACK_IMPORTED_MODULE_39__.getVisitFn),
24842
24845
  /* harmony export */ isJsonArray: () => (/* reexport safe */ _json_nodes_predicates__WEBPACK_IMPORTED_MODULE_14__.isArray),