@speclynx/apidom-ns-json-schema-draft-4 1.12.2 → 2.0.1

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 (82) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/NOTICE +16 -7
  3. package/README.md +24 -24
  4. package/dist/apidom-ns-json-schema-draft-4.browser.js +1 -1
  5. package/package.json +8 -8
  6. package/src/elements/JSONReference.cjs +2 -2
  7. package/src/elements/JSONReference.mjs +1 -2
  8. package/src/elements/JSONSchema.cjs +9 -9
  9. package/src/elements/JSONSchema.mjs +8 -8
  10. package/src/elements/LinkDescription.cjs +2 -2
  11. package/src/elements/LinkDescription.mjs +1 -1
  12. package/src/elements/Media.cjs +2 -2
  13. package/src/elements/Media.mjs +1 -2
  14. package/src/index.cjs +24 -21
  15. package/src/index.mjs +3 -4
  16. package/src/predicates.cjs +8 -29
  17. package/src/predicates.mjs +4 -29
  18. package/src/refractor/index.cjs +57 -16
  19. package/src/refractor/index.mjs +51 -15
  20. package/src/refractor/inspect.cjs +55 -0
  21. package/src/refractor/inspect.mjs +47 -0
  22. package/src/refractor/plugins/replace-empty-element.cjs +27 -21
  23. package/src/refractor/plugins/replace-empty-element.mjs +14 -8
  24. package/src/refractor/predicates.cjs +2 -2
  25. package/src/refractor/predicates.mjs +1 -1
  26. package/src/refractor/specification.cjs +14 -3
  27. package/src/refractor/specification.mjs +14 -3
  28. package/src/refractor/toolbox.cjs +10 -3
  29. package/src/refractor/toolbox.mjs +8 -2
  30. package/src/refractor/visitors/FallbackVisitor.cjs +4 -4
  31. package/src/refractor/visitors/FallbackVisitor.mjs +4 -4
  32. package/src/refractor/visitors/SpecificationVisitor.cjs +4 -3
  33. package/src/refractor/visitors/SpecificationVisitor.mjs +3 -2
  34. package/src/refractor/visitors/Visitor.cjs +10 -8
  35. package/src/refractor/visitors/Visitor.mjs +11 -9
  36. package/src/refractor/visitors/generics/AlternatingVisitor.cjs +3 -3
  37. package/src/refractor/visitors/generics/AlternatingVisitor.mjs +3 -3
  38. package/src/refractor/visitors/generics/FixedFieldsVisitor.cjs +10 -7
  39. package/src/refractor/visitors/generics/FixedFieldsVisitor.mjs +9 -6
  40. package/src/refractor/visitors/generics/PatternedFieldsVisitor.cjs +9 -6
  41. package/src/refractor/visitors/generics/PatternedFieldsVisitor.mjs +8 -5
  42. package/src/refractor/visitors/json-schema/AllOfVisitor.cjs +7 -10
  43. package/src/refractor/visitors/json-schema/AllOfVisitor.mjs +6 -8
  44. package/src/refractor/visitors/json-schema/AnyOfVisitor.cjs +7 -10
  45. package/src/refractor/visitors/json-schema/AnyOfVisitor.mjs +6 -8
  46. package/src/refractor/visitors/json-schema/DefinitionsVisitor.cjs +4 -8
  47. package/src/refractor/visitors/json-schema/DefinitionsVisitor.mjs +3 -6
  48. package/src/refractor/visitors/json-schema/DependenciesVisitor.cjs +4 -8
  49. package/src/refractor/visitors/json-schema/DependenciesVisitor.mjs +3 -6
  50. package/src/refractor/visitors/json-schema/EnumVisitor.cjs +2 -3
  51. package/src/refractor/visitors/json-schema/EnumVisitor.mjs +2 -3
  52. package/src/refractor/visitors/json-schema/ItemsVisitor.cjs +10 -12
  53. package/src/refractor/visitors/json-schema/ItemsVisitor.mjs +9 -10
  54. package/src/refractor/visitors/json-schema/LinksVisitor.cjs +7 -10
  55. package/src/refractor/visitors/json-schema/LinksVisitor.mjs +6 -8
  56. package/src/refractor/visitors/json-schema/OneOfVisitor.cjs +7 -10
  57. package/src/refractor/visitors/json-schema/OneOfVisitor.mjs +6 -8
  58. package/src/refractor/visitors/json-schema/PatternPropertiesVisitor.cjs +4 -8
  59. package/src/refractor/visitors/json-schema/PatternPropertiesVisitor.mjs +3 -6
  60. package/src/refractor/visitors/json-schema/PropertiesVisitor.cjs +4 -8
  61. package/src/refractor/visitors/json-schema/PropertiesVisitor.mjs +3 -6
  62. package/src/refractor/visitors/json-schema/RequiredVisitor.cjs +2 -3
  63. package/src/refractor/visitors/json-schema/RequiredVisitor.mjs +2 -3
  64. package/src/refractor/visitors/json-schema/TypeVisitor.cjs +4 -6
  65. package/src/refractor/visitors/json-schema/TypeVisitor.mjs +4 -6
  66. package/src/refractor/visitors/json-schema/bases.cjs +45 -0
  67. package/src/refractor/visitors/json-schema/bases.mjs +39 -0
  68. package/src/refractor/visitors/json-schema/index.cjs +12 -12
  69. package/src/refractor/visitors/json-schema/index.mjs +11 -11
  70. package/src/refractor/visitors/json-schema/json-reference/$RefVisitor.cjs +2 -3
  71. package/src/refractor/visitors/json-schema/json-reference/$RefVisitor.mjs +2 -3
  72. package/src/refractor/visitors/json-schema/json-reference/index.cjs +6 -8
  73. package/src/refractor/visitors/json-schema/json-reference/index.mjs +5 -7
  74. package/src/refractor/visitors/json-schema/link-description/index.cjs +2 -4
  75. package/src/refractor/visitors/json-schema/link-description/index.mjs +2 -4
  76. package/src/refractor/visitors/json-schema/media/index.cjs +2 -4
  77. package/src/refractor/visitors/json-schema/media/index.mjs +2 -4
  78. package/types/apidom-ns-json-schema-draft-4.d.ts +169 -151
  79. package/src/refractor/registration.cjs +0 -19
  80. package/src/refractor/registration.mjs +0 -10
  81. package/src/traversal/visitor.cjs +0 -26
  82. package/src/traversal/visitor.mjs +0 -22
@@ -3,11 +3,12 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
5
  exports.default = void 0;
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
6
7
  var _apidomCore = require("@speclynx/apidom-core");
8
+ var _apidomTraverse = require("@speclynx/apidom-traverse");
7
9
  var _JSONSchema = _interopRequireDefault(require("../../elements/JSONSchema.cjs"));
8
10
  var _LinkDescription = _interopRequireDefault(require("../../elements/LinkDescription.cjs"));
9
11
  var _Media = _interopRequireDefault(require("../../elements/Media.cjs"));
10
- var _visitor = require("../../traversal/visitor.cjs");
11
12
  /**
12
13
  * JSON Schema Draft 4 specification elements.
13
14
  */
@@ -46,7 +47,7 @@ var _visitor = require("../../traversal/visitor.cjs");
46
47
  * (JSONSchemaElement))
47
48
  */
48
49
 
49
- const isEmptyElement = element => (0, _apidomCore.isStringElement)(element) && (0, _apidomCore.includesClasses)(['yaml-e-node', 'yaml-e-scalar'], element);
50
+ const isEmptyElement = element => (0, _apidomDatamodel.isStringElement)(element) && (0, _apidomDatamodel.includesClasses)(element, ['yaml-e-node', 'yaml-e-scalar']);
50
51
  const schema = {
51
52
  JSONSchemaDraft4Element: {
52
53
  additionalItems(...args) {
@@ -56,12 +57,12 @@ const schema = {
56
57
  return new _JSONSchema.default(...args);
57
58
  },
58
59
  required(...args) {
59
- const element = new _apidomCore.ArrayElement(...args);
60
+ const element = new _apidomDatamodel.ArrayElement(...args);
60
61
  element.classes.push('json-schema-required');
61
62
  return element;
62
63
  },
63
64
  properties(...args) {
64
- const element = new _apidomCore.ObjectElement(...args);
65
+ const element = new _apidomDatamodel.ObjectElement(...args);
65
66
  element.classes.push('json-schema-properties');
66
67
  return element;
67
68
  },
@@ -69,32 +70,32 @@ const schema = {
69
70
  return new _JSONSchema.default(...args);
70
71
  },
71
72
  patternProperties(...args) {
72
- const element = new _apidomCore.ObjectElement(...args);
73
+ const element = new _apidomDatamodel.ObjectElement(...args);
73
74
  element.classes.push('json-schema-patternProperties');
74
75
  return element;
75
76
  },
76
77
  dependencies(...args) {
77
- const element = new _apidomCore.ObjectElement(...args);
78
+ const element = new _apidomDatamodel.ObjectElement(...args);
78
79
  element.classes.push('json-schema-dependencies');
79
80
  return element;
80
81
  },
81
82
  enum(...args) {
82
- const element = new _apidomCore.ArrayElement(...args);
83
+ const element = new _apidomDatamodel.ArrayElement(...args);
83
84
  element.classes.push('json-schema-enum');
84
85
  return element;
85
86
  },
86
87
  allOf(...args) {
87
- const element = new _apidomCore.ArrayElement(...args);
88
+ const element = new _apidomDatamodel.ArrayElement(...args);
88
89
  element.classes.push('json-schema-allOf');
89
90
  return element;
90
91
  },
91
92
  anyOf(...args) {
92
- const element = new _apidomCore.ArrayElement(...args);
93
+ const element = new _apidomDatamodel.ArrayElement(...args);
93
94
  element.classes.push('json-schema-anyOf');
94
95
  return element;
95
96
  },
96
97
  oneOf(...args) {
97
- const element = new _apidomCore.ArrayElement(...args);
98
+ const element = new _apidomDatamodel.ArrayElement(...args);
98
99
  element.classes.push('json-schema-oneOf');
99
100
  return element;
100
101
  },
@@ -102,12 +103,12 @@ const schema = {
102
103
  return new _JSONSchema.default(...args);
103
104
  },
104
105
  definitions(...args) {
105
- const element = new _apidomCore.ObjectElement(...args);
106
+ const element = new _apidomDatamodel.ObjectElement(...args);
106
107
  element.classes.push('json-schema-definitions');
107
108
  return element;
108
109
  },
109
110
  links(...args) {
110
- const element = new _apidomCore.ArrayElement(...args);
111
+ const element = new _apidomDatamodel.ArrayElement(...args);
111
112
  element.classes.push('json-schema-links');
112
113
  return element;
113
114
  },
@@ -165,7 +166,7 @@ const schema = {
165
166
  }
166
167
  };
167
168
  const findElementFactory = (ancestor, keyName) => {
168
- const elementType = (0, _visitor.getNodeType)(ancestor); // @ts-ignore
169
+ const elementType = (0, _apidomTraverse.getNodeType)(ancestor); // @ts-ignore
169
170
  const keyMapping = schema[elementType] || schema[(0, _apidomCore.toValue)(ancestor.classes.first)];
170
171
  return typeof keyMapping === 'undefined' ? undefined : Object.hasOwn(keyMapping, '[key: *]') ? keyMapping['[key: *]'] : keyMapping[keyName];
171
172
  };
@@ -175,25 +176,30 @@ const findElementFactory = (ancestor, keyName) => {
175
176
  */
176
177
  const plugin = () => () => ({
177
178
  visitor: {
178
- StringElement(element, key, parent, path, ancestors) {
179
- if (!isEmptyElement(element)) return undefined;
180
- const lineage = [...ancestors, parent].filter(_apidomCore.isElement);
179
+ StringElement(path) {
180
+ const element = path.node;
181
+ if (!isEmptyElement(element)) return;
182
+
183
+ // getAncestorNodes() returns [parent, grandparent, ..., root], so reverse to get [root, ..., parent]
184
+ const lineage = path.getAncestorNodes().reverse().filter(_apidomDatamodel.isElement);
181
185
  const parentElement = lineage.at(-1);
182
186
  let elementFactory;
183
187
  let context;
184
- if ((0, _apidomCore.isArrayElement)(parentElement)) {
188
+ if ((0, _apidomDatamodel.isArrayElement)(parentElement)) {
185
189
  context = element;
186
190
  elementFactory = findElementFactory(parentElement, '<*>');
187
- } else if ((0, _apidomCore.isMemberElement)(parentElement)) {
191
+ } else if ((0, _apidomDatamodel.isMemberElement)(parentElement)) {
188
192
  context = lineage.at(-2);
189
193
  elementFactory = findElementFactory(context, (0, _apidomCore.toValue)(parentElement.key));
190
194
  }
191
195
 
192
196
  // no element factory found
193
- if (typeof elementFactory !== 'function') return undefined;
194
- return elementFactory.call({
197
+ if (typeof elementFactory !== 'function') return;
198
+ const replacement = elementFactory.call({
195
199
  context
196
- }, undefined, (0, _apidomCore.cloneDeep)(element.meta), (0, _apidomCore.cloneDeep)(element.attributes));
200
+ }, undefined, (0, _apidomDatamodel.cloneDeep)(element.meta), (0, _apidomDatamodel.cloneDeep)(element.attributes));
201
+ _apidomDatamodel.SourceMapElement.transfer(element, replacement);
202
+ path.replaceWith(replacement);
197
203
  }
198
204
  }
199
205
  });
@@ -1,4 +1,6 @@
1
- import { ArrayElement, ObjectElement, isArrayElement, isElement, isMemberElement, isStringElement, includesClasses, cloneDeep, toValue } from '@speclynx/apidom-core';
1
+ import { ArrayElement, ObjectElement, isArrayElement, isElement, isMemberElement, isStringElement, includesClasses, cloneDeep, SourceMapElement } from '@speclynx/apidom-datamodel';
2
+ import { toValue } from '@speclynx/apidom-core';
3
+ import { getNodeType } from '@speclynx/apidom-traverse';
2
4
 
3
5
  /**
4
6
  * JSON Schema Draft 4 specification elements.
@@ -6,7 +8,6 @@ import { ArrayElement, ObjectElement, isArrayElement, isElement, isMemberElement
6
8
  import JSONSchemaElement from "../../elements/JSONSchema.mjs";
7
9
  import LinkDescriptionElement from "../../elements/LinkDescription.mjs";
8
10
  import MediaElement from "../../elements/Media.mjs";
9
- import { getNodeType } from "../../traversal/visitor.mjs";
10
11
  /**
11
12
  * This plugin is specific to YAML 1.2 format, which allows defining key-value pairs
12
13
  * with empty key, empty value, or both. If the value is not provided in YAML format,
@@ -40,7 +41,7 @@ import { getNodeType } from "../../traversal/visitor.mjs";
40
41
  * (StringElement)
41
42
  * (JSONSchemaElement))
42
43
  */
43
- const isEmptyElement = element => isStringElement(element) && includesClasses(['yaml-e-node', 'yaml-e-scalar'], element);
44
+ const isEmptyElement = element => isStringElement(element) && includesClasses(element, ['yaml-e-node', 'yaml-e-scalar']);
44
45
  const schema = {
45
46
  JSONSchemaDraft4Element: {
46
47
  additionalItems(...args) {
@@ -169,9 +170,12 @@ const findElementFactory = (ancestor, keyName) => {
169
170
  */
170
171
  const plugin = () => () => ({
171
172
  visitor: {
172
- StringElement(element, key, parent, path, ancestors) {
173
- if (!isEmptyElement(element)) return undefined;
174
- const lineage = [...ancestors, parent].filter(isElement);
173
+ StringElement(path) {
174
+ const element = path.node;
175
+ if (!isEmptyElement(element)) return;
176
+
177
+ // getAncestorNodes() returns [parent, grandparent, ..., root], so reverse to get [root, ..., parent]
178
+ const lineage = path.getAncestorNodes().reverse().filter(isElement);
175
179
  const parentElement = lineage.at(-1);
176
180
  let elementFactory;
177
181
  let context;
@@ -184,10 +188,12 @@ const plugin = () => () => ({
184
188
  }
185
189
 
186
190
  // no element factory found
187
- if (typeof elementFactory !== 'function') return undefined;
188
- return elementFactory.call({
191
+ if (typeof elementFactory !== 'function') return;
192
+ const replacement = elementFactory.call({
189
193
  context
190
194
  }, undefined, cloneDeep(element.meta), cloneDeep(element.attributes));
195
+ SourceMapElement.transfer(element, replacement);
196
+ path.replaceWith(replacement);
191
197
  }
192
198
  }
193
199
  });
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.isJSONReferenceLikeElement = void 0;
5
- var _apidomCore = require("@speclynx/apidom-core");
5
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
6
6
  /**
7
7
  * @public
8
8
  */
@@ -11,6 +11,6 @@ var _apidomCore = require("@speclynx/apidom-core");
11
11
  * @public
12
12
  */
13
13
  const isJSONReferenceLikeElement = element => {
14
- return (0, _apidomCore.isObjectElement)(element) && element.hasKey('$ref');
14
+ return (0, _apidomDatamodel.isObjectElement)(element) && element.hasKey('$ref');
15
15
  };
16
16
  exports.isJSONReferenceLikeElement = isJSONReferenceLikeElement;
@@ -1,4 +1,4 @@
1
- import { isObjectElement } from '@speclynx/apidom-core';
1
+ import { isObjectElement } from '@speclynx/apidom-datamodel';
2
2
 
3
3
  /**
4
4
  * @public
@@ -38,11 +38,13 @@ const specification = {
38
38
  document: {
39
39
  objects: {
40
40
  JSONSchema: {
41
+ element: 'jSONSchemaDraft4',
41
42
  $visitor: _index.default,
42
43
  fixedFields: {
43
44
  // core vocabulary
44
45
  id: {
45
- $ref: '#/visitors/value'
46
+ $visitor: _FallbackVisitor.default,
47
+ alias: 'idField'
46
48
  },
47
49
  $schema: {
48
50
  $ref: '#/visitors/value'
@@ -76,7 +78,10 @@ const specification = {
76
78
  },
77
79
  // validation keywords for arrays
78
80
  additionalItems: _JSONSchemaOrJSONReferenceVisitor.default,
79
- items: _ItemsVisitor.default,
81
+ items: {
82
+ $visitor: _ItemsVisitor.default,
83
+ alias: 'itemsField'
84
+ },
80
85
  maxItems: {
81
86
  $ref: '#/visitors/value'
82
87
  },
@@ -124,7 +129,10 @@ const specification = {
124
129
  base: {
125
130
  $ref: '#/visitors/value'
126
131
  },
127
- links: _LinksVisitor.default,
132
+ links: {
133
+ $visitor: _LinksVisitor.default,
134
+ alias: 'linksField'
135
+ },
128
136
  media: {
129
137
  $ref: '#/visitors/document/objects/Media'
130
138
  },
@@ -134,12 +142,14 @@ const specification = {
134
142
  }
135
143
  },
136
144
  JSONReference: {
145
+ element: 'jSONReference',
137
146
  $visitor: _index2.default,
138
147
  fixedFields: {
139
148
  $ref: _$RefVisitor.default
140
149
  }
141
150
  },
142
151
  Media: {
152
+ element: 'media',
143
153
  $visitor: _index3.default,
144
154
  fixedFields: {
145
155
  binaryEncoding: {
@@ -151,6 +161,7 @@ const specification = {
151
161
  }
152
162
  },
153
163
  LinkDescription: {
164
+ element: 'linkDescription',
154
165
  $visitor: _index4.default,
155
166
  fixedFields: {
156
167
  href: {
@@ -33,11 +33,13 @@ const specification = {
33
33
  document: {
34
34
  objects: {
35
35
  JSONSchema: {
36
+ element: 'jSONSchemaDraft4',
36
37
  $visitor: JSONSchemaVisitor,
37
38
  fixedFields: {
38
39
  // core vocabulary
39
40
  id: {
40
- $ref: '#/visitors/value'
41
+ $visitor: FallbackVisitor,
42
+ alias: 'idField'
41
43
  },
42
44
  $schema: {
43
45
  $ref: '#/visitors/value'
@@ -71,7 +73,10 @@ const specification = {
71
73
  },
72
74
  // validation keywords for arrays
73
75
  additionalItems: JSONSchemaOrJSONReferenceVisitor,
74
- items: JSONSchemaItemsVisitor,
76
+ items: {
77
+ $visitor: JSONSchemaItemsVisitor,
78
+ alias: 'itemsField'
79
+ },
75
80
  maxItems: {
76
81
  $ref: '#/visitors/value'
77
82
  },
@@ -119,7 +124,10 @@ const specification = {
119
124
  base: {
120
125
  $ref: '#/visitors/value'
121
126
  },
122
- links: JSONSchemaLinksVisitor,
127
+ links: {
128
+ $visitor: JSONSchemaLinksVisitor,
129
+ alias: 'linksField'
130
+ },
123
131
  media: {
124
132
  $ref: '#/visitors/document/objects/Media'
125
133
  },
@@ -129,12 +137,14 @@ const specification = {
129
137
  }
130
138
  },
131
139
  JSONReference: {
140
+ element: 'jSONReference',
132
141
  $visitor: JSONReferenceVisitor,
133
142
  fixedFields: {
134
143
  $ref: JSONReference$RefVisitor
135
144
  }
136
145
  },
137
146
  Media: {
147
+ element: 'media',
138
148
  $visitor: MediaVisitor,
139
149
  fixedFields: {
140
150
  binaryEncoding: {
@@ -146,6 +156,7 @@ const specification = {
146
156
  }
147
157
  },
148
158
  LinkDescription: {
159
+ element: 'linkDescription',
149
160
  $visitor: LinkDescriptionVisitor,
150
161
  fixedFields: {
151
162
  href: {
@@ -4,15 +4,22 @@ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequ
4
4
  var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
5
5
  exports.__esModule = true;
6
6
  exports.default = void 0;
7
- var _apidomCore = require("@speclynx/apidom-core");
7
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
8
8
  var jsonSchemaDraft4Predicates = _interopRequireWildcard(require("../predicates.cjs"));
9
+ var refractorPredicates = _interopRequireWildcard(require("./predicates.cjs"));
9
10
  var _namespace = _interopRequireDefault(require("../namespace.cjs"));
11
+ /**
12
+ * @public
13
+ */
14
+
10
15
  const createToolbox = () => {
11
- const namespace = (0, _apidomCore.createNamespace)(_namespace.default);
16
+ const namespace = new _apidomDatamodel.Namespace();
12
17
  const predicates = {
18
+ ...refractorPredicates,
13
19
  ...jsonSchemaDraft4Predicates,
14
- isStringElement: _apidomCore.isStringElement
20
+ isStringElement: _apidomDatamodel.isStringElement
15
21
  };
22
+ namespace.use(_namespace.default);
16
23
  return {
17
24
  predicates,
18
25
  namespace
@@ -1,12 +1,18 @@
1
- import { createNamespace, isStringElement } from '@speclynx/apidom-core';
1
+ import { isStringElement, Namespace } from '@speclynx/apidom-datamodel';
2
2
  import * as jsonSchemaDraft4Predicates from "../predicates.mjs";
3
+ import * as refractorPredicates from "./predicates.mjs";
3
4
  import jsonSchemaDraft4Namespace from "../namespace.mjs";
5
+ /**
6
+ * @public
7
+ */
4
8
  const createToolbox = () => {
5
- const namespace = createNamespace(jsonSchemaDraft4Namespace);
9
+ const namespace = new Namespace();
6
10
  const predicates = {
11
+ ...refractorPredicates,
7
12
  ...jsonSchemaDraft4Predicates,
8
13
  isStringElement
9
14
  };
15
+ namespace.use(jsonSchemaDraft4Namespace);
10
16
  return {
11
17
  predicates,
12
18
  namespace
@@ -3,7 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
5
  exports.default = void 0;
6
- var _apidomCore = require("@speclynx/apidom-core");
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
7
7
  var _Visitor = _interopRequireDefault(require("./Visitor.cjs"));
8
8
  /**
9
9
  * This visitor is responsible for falling back to current traversed element
@@ -17,9 +17,9 @@ var _Visitor = _interopRequireDefault(require("./Visitor.cjs"));
17
17
  * @public
18
18
  */
19
19
  class FallbackVisitor extends _Visitor.default {
20
- enter(element) {
21
- this.element = (0, _apidomCore.cloneDeep)(element);
22
- return _apidomCore.BREAK;
20
+ enter(path) {
21
+ this.element = (0, _apidomDatamodel.cloneDeep)(path.node);
22
+ path.stop();
23
23
  }
24
24
  }
25
25
  var _default = exports.default = FallbackVisitor;
@@ -1,4 +1,4 @@
1
- import { BREAK, cloneDeep } from '@speclynx/apidom-core';
1
+ import { cloneDeep } from '@speclynx/apidom-datamodel';
2
2
  import Visitor from "./Visitor.mjs";
3
3
  /**
4
4
  * This visitor is responsible for falling back to current traversed element
@@ -11,9 +11,9 @@ import Visitor from "./Visitor.mjs";
11
11
  * @public
12
12
  */
13
13
  class FallbackVisitor extends Visitor {
14
- enter(element) {
15
- this.element = cloneDeep(element);
16
- return BREAK;
14
+ enter(path) {
15
+ this.element = cloneDeep(path.node);
16
+ path.stop();
17
17
  }
18
18
  }
19
19
  export default FallbackVisitor;
@@ -5,7 +5,8 @@ exports.__esModule = true;
5
5
  exports.default = void 0;
6
6
  var _ramda = require("ramda");
7
7
  var _ramdaAdjunct = require("ramda-adjunct");
8
- var _apidomCore = require("@speclynx/apidom-core");
8
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
9
+ var _apidomTraverse = require("@speclynx/apidom-traverse");
9
10
  var _Visitor = _interopRequireDefault(require("./Visitor.cjs"));
10
11
  var _FallbackVisitor = _interopRequireDefault(require("./FallbackVisitor.cjs"));
11
12
  /**
@@ -65,9 +66,9 @@ class SpecificationVisitor extends _Visitor.default {
65
66
  */
66
67
  const visitor = this.retrieveVisitorInstance(specPath, options);
67
68
  if (visitor instanceof _FallbackVisitor.default && visitor?.constructor === _FallbackVisitor.default) {
68
- return (0, _apidomCore.cloneDeep)(element);
69
+ return (0, _apidomDatamodel.cloneDeep)(element);
69
70
  }
70
- (0, _apidomCore.visit)(element, visitor, options);
71
+ (0, _apidomTraverse.traverse)(element, visitor, options);
71
72
  return visitor.element;
72
73
  }
73
74
  }
@@ -1,6 +1,7 @@
1
1
  import { pathSatisfies, path, pick } from 'ramda';
2
2
  import { isFunction } from 'ramda-adjunct';
3
- import { visit, cloneDeep } from '@speclynx/apidom-core';
3
+ import { cloneDeep } from '@speclynx/apidom-datamodel';
4
+ import { traverse } from '@speclynx/apidom-traverse';
4
5
  import Visitor from "./Visitor.mjs";
5
6
  import FallbackVisitor from "./FallbackVisitor.mjs";
6
7
  /**
@@ -61,7 +62,7 @@ class SpecificationVisitor extends Visitor {
61
62
  if (visitor instanceof FallbackVisitor && visitor?.constructor === FallbackVisitor) {
62
63
  return cloneDeep(element);
63
64
  }
64
- visit(element, visitor, options);
65
+ traverse(element, visitor, options);
65
66
  return visitor.element;
66
67
  }
67
68
  }
@@ -3,6 +3,7 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _apidomCore = require("@speclynx/apidom-core");
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
6
7
  /**
7
8
  * @public
8
9
  */
@@ -16,16 +17,17 @@ class Visitor {
16
17
  Object.assign(this, options);
17
18
  }
18
19
  copyMetaAndAttributes(from, to) {
19
- if (from.meta.length > 0 || to.meta.length > 0) {
20
- to.meta = (0, _apidomCore.deepmerge)(to.meta, from.meta);
21
- if ((0, _apidomCore.hasElementSourceMap)(from)) {
22
- // avoid deep merging of source maps
23
- to.meta.set('sourceMap', from.meta.get('sourceMap'));
24
- }
20
+ if (!from.isMetaEmpty || !to.isMetaEmpty) {
21
+ const target = to.isMetaEmpty ? new _apidomDatamodel.ObjectElement() : to.meta;
22
+ const source = from.isMetaEmpty ? new _apidomDatamodel.ObjectElement() : from.meta;
23
+ to.meta = (0, _apidomCore.deepmerge)(target, source);
25
24
  }
26
- if (from.attributes.length > 0 || from.meta.length > 0) {
27
- to.attributes = (0, _apidomCore.deepmerge)(to.attributes, from.attributes);
25
+ if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
26
+ const target = to.isAttributesEmpty ? new _apidomDatamodel.ObjectElement() : to.attributes;
27
+ const source = from.isAttributesEmpty ? new _apidomDatamodel.ObjectElement() : from.attributes;
28
+ to.attributes = (0, _apidomCore.deepmerge)(target, source);
28
29
  }
30
+ _apidomDatamodel.SourceMapElement.transfer(from, to);
29
31
  }
30
32
  }
31
33
  var _default = exports.default = Visitor;
@@ -1,4 +1,5 @@
1
- import { hasElementSourceMap, deepmerge } from '@speclynx/apidom-core';
1
+ import { deepmerge } from '@speclynx/apidom-core';
2
+ import { ObjectElement, SourceMapElement } from '@speclynx/apidom-datamodel';
2
3
 
3
4
  /**
4
5
  * @public
@@ -13,16 +14,17 @@ class Visitor {
13
14
  Object.assign(this, options);
14
15
  }
15
16
  copyMetaAndAttributes(from, to) {
16
- if (from.meta.length > 0 || to.meta.length > 0) {
17
- to.meta = deepmerge(to.meta, from.meta);
18
- if (hasElementSourceMap(from)) {
19
- // avoid deep merging of source maps
20
- to.meta.set('sourceMap', from.meta.get('sourceMap'));
21
- }
17
+ if (!from.isMetaEmpty || !to.isMetaEmpty) {
18
+ const target = to.isMetaEmpty ? new ObjectElement() : to.meta;
19
+ const source = from.isMetaEmpty ? new ObjectElement() : from.meta;
20
+ to.meta = deepmerge(target, source);
22
21
  }
23
- if (from.attributes.length > 0 || from.meta.length > 0) {
24
- to.attributes = deepmerge(to.attributes, from.attributes);
22
+ if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
23
+ const target = to.isAttributesEmpty ? new ObjectElement() : to.attributes;
24
+ const source = from.isAttributesEmpty ? new ObjectElement() : from.attributes;
25
+ to.attributes = deepmerge(target, source);
25
26
  }
27
+ SourceMapElement.transfer(from, to);
26
28
  }
27
29
  }
28
30
  export default Visitor;
@@ -5,7 +5,6 @@ exports.__esModule = true;
5
5
  exports.default = void 0;
6
6
  var _ramda = require("ramda");
7
7
  var _ramdaAdjunct = require("ramda-adjunct");
8
- var _apidomCore = require("@speclynx/apidom-core");
9
8
  var _SpecificationVisitor = _interopRequireDefault(require("../SpecificationVisitor.cjs"));
10
9
  /**
11
10
  * @public
@@ -29,14 +28,15 @@ class AlternatingVisitor extends _SpecificationVisitor.default {
29
28
  });
30
29
  this.alternator = alternator;
31
30
  }
32
- enter(element) {
31
+ enter(path) {
32
+ const element = path.node;
33
33
  const functions = this.alternator.map(({
34
34
  predicate,
35
35
  specPath
36
36
  }) => (0, _ramda.ifElse)(predicate, (0, _ramda.always)(specPath), _ramdaAdjunct.stubUndefined));
37
37
  const specPath = (0, _ramdaAdjunct.dispatch)(functions)(element);
38
38
  this.element = this.toRefractedElement(specPath, element);
39
- return _apidomCore.BREAK;
39
+ path.stop();
40
40
  }
41
41
  }
42
42
  var _default = exports.default = AlternatingVisitor;
@@ -1,6 +1,5 @@
1
1
  import { ifElse, always } from 'ramda';
2
2
  import { dispatch, stubUndefined } from 'ramda-adjunct';
3
- import { BREAK } from '@speclynx/apidom-core';
4
3
  import SpecificationVisitor from "../SpecificationVisitor.mjs";
5
4
  /**
6
5
  * @public
@@ -22,14 +21,15 @@ class AlternatingVisitor extends SpecificationVisitor {
22
21
  });
23
22
  this.alternator = alternator;
24
23
  }
25
- enter(element) {
24
+ enter(path) {
25
+ const element = path.node;
26
26
  const functions = this.alternator.map(({
27
27
  predicate,
28
28
  specPath
29
29
  }) => ifElse(predicate, always(specPath), stubUndefined));
30
30
  const specPath = dispatch(functions)(element);
31
31
  this.element = this.toRefractedElement(specPath, element);
32
- return BREAK;
32
+ path.stop();
33
33
  }
34
34
  }
35
35
  export default AlternatingVisitor;
@@ -3,6 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
5
  exports.default = void 0;
6
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
6
7
  var _apidomCore = require("@speclynx/apidom-core");
7
8
  var _SpecificationVisitor = _interopRequireDefault(require("../SpecificationVisitor.cjs"));
8
9
  /**
@@ -30,24 +31,26 @@ class FixedFieldsVisitor extends _SpecificationVisitor.default {
30
31
  this.specPath = specPath;
31
32
  this.ignoredFields = ignoredFields || [];
32
33
  }
33
- ObjectElement(objectElement) {
34
+ ObjectElement(path) {
35
+ const objectElement = path.node;
34
36
  const specPath = this.specPath(objectElement);
35
37
  const fields = this.retrieveFixedFields(specPath);
36
38
 
37
39
  // @ts-ignore
38
40
  objectElement.forEach((value, key, memberElement) => {
39
- if ((0, _apidomCore.isStringElement)(key) && fields.includes((0, _apidomCore.toValue)(key)) && !this.ignoredFields.includes((0, _apidomCore.toValue)(key))) {
40
- const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', (0, _apidomCore.toValue)(key)], value);
41
- const newMemberElement = new _apidomCore.MemberElement((0, _apidomCore.cloneDeep)(key), fixedFieldElement);
41
+ const keyValue = (0, _apidomCore.toValue)(key);
42
+ if ((0, _apidomDatamodel.isStringElement)(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
43
+ const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
44
+ const newMemberElement = new _apidomDatamodel.MemberElement((0, _apidomDatamodel.cloneDeep)(key), fixedFieldElement);
42
45
  this.copyMetaAndAttributes(memberElement, newMemberElement);
43
46
  newMemberElement.classes.push('fixed-field');
44
47
  this.element.content.push(newMemberElement);
45
- } else if (!this.ignoredFields.includes((0, _apidomCore.toValue)(key))) {
46
- this.element.content.push((0, _apidomCore.cloneDeep)(memberElement));
48
+ } else if (!this.ignoredFields.includes(keyValue)) {
49
+ this.element.content.push((0, _apidomDatamodel.cloneDeep)(memberElement));
47
50
  }
48
51
  });
49
52
  this.copyMetaAndAttributes(objectElement, this.element);
50
- return _apidomCore.BREAK;
53
+ path.stop();
51
54
  }
52
55
  }
53
56
  var _default = exports.default = FixedFieldsVisitor;