@speclynx/apidom-ns-json-schema-draft-6 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 (36) 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-6.browser.js +1 -1
  5. package/package.json +11 -9
  6. package/src/elements/JSONSchema.cjs +14 -6
  7. package/src/elements/JSONSchema.mjs +14 -6
  8. package/src/elements/LinkDescription.cjs +4 -0
  9. package/src/elements/LinkDescription.mjs +4 -0
  10. package/src/index.cjs +8 -21
  11. package/src/index.mjs +2 -5
  12. package/src/predicates.cjs +4 -15
  13. package/src/predicates.mjs +2 -15
  14. package/src/refractor/index.cjs +38 -17
  15. package/src/refractor/index.mjs +33 -15
  16. package/src/refractor/inspect.cjs +47 -0
  17. package/src/refractor/inspect.mjs +39 -0
  18. package/src/refractor/plugins/replace-empty-element.cjs +28 -26
  19. package/src/refractor/plugins/replace-empty-element.mjs +14 -11
  20. package/src/refractor/specification.cjs +14 -2
  21. package/src/refractor/specification.mjs +14 -2
  22. package/src/refractor/toolbox.cjs +8 -3
  23. package/src/refractor/toolbox.mjs +6 -2
  24. package/src/refractor/visitors/json-schema/ExamplesVisitor.cjs +2 -3
  25. package/src/refractor/visitors/json-schema/ExamplesVisitor.mjs +2 -3
  26. package/src/refractor/visitors/json-schema/ItemsVisitor.cjs +3 -4
  27. package/src/refractor/visitors/json-schema/ItemsVisitor.mjs +3 -4
  28. package/src/refractor/visitors/json-schema/index.cjs +4 -3
  29. package/src/refractor/visitors/json-schema/index.mjs +4 -3
  30. package/src/refractor/visitors/json-schema/link-description/index.cjs +2 -0
  31. package/src/refractor/visitors/json-schema/link-description/index.mjs +2 -0
  32. package/types/apidom-ns-json-schema-draft-6.d.ts +90 -245
  33. package/src/refractor/registration.cjs +0 -13
  34. package/src/refractor/registration.mjs +0 -6
  35. package/src/traversal/visitor.cjs +0 -17
  36. package/src/traversal/visitor.mjs +0 -13
@@ -16,10 +16,10 @@ class JSONSchema extends JSONSchemaElement {
16
16
  * URI: https://datatracker.ietf.org/doc/html/draft-wright-json-schema-01
17
17
  */
18
18
 
19
- get idProp() {
19
+ get idField() {
20
20
  throw new UnsupportedOperationError('id keyword from Core vocabulary has been renamed to $id.');
21
21
  }
22
- set idProp(id) {
22
+ set idField(id) {
23
23
  throw new UnsupportedOperationError('id keyword from Core vocabulary has been renamed to $id.');
24
24
  }
25
25
  get $id() {
@@ -56,16 +56,20 @@ class JSONSchema extends JSONSchemaElement {
56
56
  * Validation keywords for arrays
57
57
  */
58
58
 
59
- get containsProp() {
59
+ get containsField() {
60
60
  return this.get('contains');
61
61
  }
62
- set containsProp(contains) {
62
+ set containsField(contains) {
63
63
  this.set('contains', contains);
64
64
  }
65
- get items() {
65
+
66
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
67
+ get itemsField() {
66
68
  return this.get('items');
67
69
  }
68
- set items(items) {
70
+
71
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
72
+ set itemsField(items) {
69
73
  this.set('items', items);
70
74
  }
71
75
 
@@ -90,9 +94,13 @@ class JSONSchema extends JSONSchemaElement {
90
94
  set const(constValue) {
91
95
  this.set('const', constValue);
92
96
  }
97
+
98
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
93
99
  get not() {
94
100
  return this.get('not');
95
101
  }
102
+
103
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
96
104
  set not(not) {
97
105
  this.set('not', not);
98
106
  }
@@ -16,9 +16,13 @@ class LinkDescription extends _apidomNsJsonSchemaDraft.LinkDescriptionElement {
16
16
  set hrefSchema(hrefSchema) {
17
17
  this.set('hrefSchema', hrefSchema);
18
18
  }
19
+
20
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
19
21
  get targetSchema() {
20
22
  return this.get('targetSchema');
21
23
  }
24
+
25
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
22
26
  set targetSchema(targetSchema) {
23
27
  this.set('targetSchema', targetSchema);
24
28
  }
@@ -12,9 +12,13 @@ class LinkDescription extends LinkDescriptionElement {
12
12
  set hrefSchema(hrefSchema) {
13
13
  this.set('hrefSchema', hrefSchema);
14
14
  }
15
+
16
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
15
17
  get targetSchema() {
16
18
  return this.get('targetSchema');
17
19
  }
20
+
21
+ // @ts-expect-error - widening type to include BooleanElement (boolean schemas introduced in draft-6)
18
22
  set targetSchema(targetSchema) {
19
23
  this.set('targetSchema', targetSchema);
20
24
  }
package/src/index.cjs CHANGED
@@ -3,18 +3,7 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
5
5
  exports.__esModule = true;
6
- exports.specificationObj = exports.refractorPluginReplaceEmptyElement = exports.refract = exports.mediaTypes = exports.keyMap = exports.isStringElement = exports.isRefElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isMediaElement = exports.isLinkElement = exports.isLinkDescriptionElement = exports.isJSONSchemaElement = exports.isJSONReferenceLikeElement = exports.isJSONReferenceElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.getNodeType = exports.default = exports.createRefractor = exports.Visitor = exports.SpecificationVisitor = exports.PatternedFieldsVisitor = exports.ParentSchemaAwareVisitor = exports.MediaElement = exports.MapVisitor = exports.LinkDescriptionVisitor = exports.LinkDescriptionElement = exports.JSONSchemaVisitor = exports.JSONSchemaElement = exports.JSONSchemaDraft6MediaTypes = exports.JSONReferenceElement = exports.ItemsVisitor = exports.FixedFieldsVisitor = exports.FallbackVisitor = exports.AlternatingVisitor = void 0;
7
- var _apidomCore = require("@speclynx/apidom-core");
8
- exports.isRefElement = _apidomCore.isRefElement;
9
- exports.isLinkElement = _apidomCore.isLinkElement;
10
- exports.isMemberElement = _apidomCore.isMemberElement;
11
- exports.isObjectElement = _apidomCore.isObjectElement;
12
- exports.isArrayElement = _apidomCore.isArrayElement;
13
- exports.isBooleanElement = _apidomCore.isBooleanElement;
14
- exports.isNullElement = _apidomCore.isNullElement;
15
- exports.isElement = _apidomCore.isElement;
16
- exports.isNumberElement = _apidomCore.isNumberElement;
17
- exports.isStringElement = _apidomCore.isStringElement;
6
+ exports.specificationObj = exports.refractorPluginReplaceEmptyElement = exports.refractLinkDescription = exports.refractJSONSchema = exports.refract = exports.mediaTypes = exports.isMediaElement = exports.isLinkDescriptionElement = exports.isJSONSchemaElement = exports.isJSONReferenceLikeElement = exports.isJSONReferenceElement = exports.default = exports.Visitor = exports.SpecificationVisitor = exports.PatternedFieldsVisitor = exports.ParentSchemaAwareVisitor = exports.MediaElement = exports.MapVisitor = exports.LinkDescriptionVisitor = exports.LinkDescriptionElement = exports.JSONSchemaVisitor = exports.JSONSchemaElement = exports.JSONSchemaDraft6MediaTypes = exports.JSONReferenceElement = exports.ItemsVisitor = exports.FixedFieldsVisitor = exports.FallbackVisitor = exports.AlternatingVisitor = void 0;
18
7
  var _mediaTypes = _interopRequireWildcard(require("./media-types.cjs"));
19
8
  exports.mediaTypes = _mediaTypes.default;
20
9
  exports.JSONSchemaDraft6MediaTypes = _mediaTypes.JSONSchemaDraft6MediaTypes;
@@ -24,7 +13,8 @@ var _replaceEmptyElement = _interopRequireDefault(require("./refractor/plugins/r
24
13
  exports.refractorPluginReplaceEmptyElement = _replaceEmptyElement.default;
25
14
  var _index = _interopRequireWildcard(require("./refractor/index.cjs"));
26
15
  exports.refract = _index.default;
27
- exports.createRefractor = _index.createRefractor;
16
+ exports.refractJSONSchema = _index.refractJSONSchema;
17
+ exports.refractLinkDescription = _index.refractLinkDescription;
28
18
  var _specification = _interopRequireDefault(require("./refractor/specification.cjs"));
29
19
  exports.specificationObj = _specification.default;
30
20
  var _predicates = require("./predicates.cjs");
@@ -42,17 +32,14 @@ exports.MapVisitor = _apidomNsJsonSchemaDraft.MapVisitor;
42
32
  exports.AlternatingVisitor = _apidomNsJsonSchemaDraft.AlternatingVisitor;
43
33
  exports.ParentSchemaAwareVisitor = _apidomNsJsonSchemaDraft.ParentSchemaAwareVisitor;
44
34
  exports.Visitor = _apidomNsJsonSchemaDraft.Visitor;
45
- exports.JSONReferenceElement = _apidomNsJsonSchemaDraft.JSONReferenceElement;
46
- exports.MediaElement = _apidomNsJsonSchemaDraft.MediaElement;
47
35
  var _index2 = _interopRequireDefault(require("./refractor/visitors/json-schema/link-description/index.cjs"));
48
36
  exports.LinkDescriptionVisitor = _index2.default;
49
37
  var _index3 = _interopRequireDefault(require("./refractor/visitors/json-schema/index.cjs"));
50
38
  exports.JSONSchemaVisitor = _index3.default;
51
39
  var _ItemsVisitor = _interopRequireDefault(require("./refractor/visitors/json-schema/ItemsVisitor.cjs"));
52
40
  exports.ItemsVisitor = _ItemsVisitor.default;
53
- var _visitor = require("./traversal/visitor.cjs");
54
- exports.keyMap = _visitor.keyMap;
55
- exports.getNodeType = _visitor.getNodeType;
56
- var _registration = require("./refractor/registration.cjs");
57
- exports.JSONSchemaElement = _registration.JSONSchemaElement;
58
- exports.LinkDescriptionElement = _registration.LinkDescriptionElement;
41
+ var _inspect = require("./refractor/inspect.cjs");
42
+ exports.JSONSchemaElement = _inspect.JSONSchemaElement;
43
+ exports.JSONReferenceElement = _inspect.JSONReferenceElement;
44
+ exports.MediaElement = _inspect.MediaElement;
45
+ exports.LinkDescriptionElement = _inspect.LinkDescriptionElement;
package/src/index.mjs CHANGED
@@ -1,17 +1,14 @@
1
- export { isRefElement, isLinkElement, isMemberElement, isObjectElement, isArrayElement, isBooleanElement, isNullElement, isElement, isNumberElement, isStringElement } from '@speclynx/apidom-core';
2
1
  export { default as mediaTypes, JSONSchemaDraft6MediaTypes } from "./media-types.mjs";
3
2
  export { default } from "./namespace.mjs";
4
3
  export { default as refractorPluginReplaceEmptyElement } from "./refractor/plugins/replace-empty-element.mjs";
5
- export { default as refract, createRefractor } from "./refractor/index.mjs";
4
+ export { default as refract, refractJSONSchema, refractLinkDescription } from "./refractor/index.mjs";
6
5
  export { default as specificationObj } from "./refractor/specification.mjs";
7
6
  export { isJSONReferenceElement, isJSONSchemaElement, isLinkDescriptionElement, isMediaElement } from "./predicates.mjs";
8
7
  export { isJSONReferenceLikeElement, SpecificationVisitor, FallbackVisitor, FixedFieldsVisitor, PatternedFieldsVisitor, MapVisitor, AlternatingVisitor, ParentSchemaAwareVisitor, Visitor } from '@speclynx/apidom-ns-json-schema-draft-4';
9
8
  export { default as LinkDescriptionVisitor } from "./refractor/visitors/json-schema/link-description/index.mjs";
10
9
  export { default as JSONSchemaVisitor } from "./refractor/visitors/json-schema/index.mjs";
11
10
  export { default as ItemsVisitor } from "./refractor/visitors/json-schema/ItemsVisitor.mjs";
12
- export { keyMap, getNodeType } from "./traversal/visitor.mjs";
13
11
  /**
14
12
  * JSON Schema Draft 6 specification elements.
15
13
  */
16
- export { JSONSchemaElement, LinkDescriptionElement } from "./refractor/registration.mjs";
17
- export { JSONReferenceElement, MediaElement } from '@speclynx/apidom-ns-json-schema-draft-4';
14
+ export { JSONSchemaElement, JSONReferenceElement, MediaElement, LinkDescriptionElement } from "./refractor/inspect.mjs";
@@ -3,7 +3,6 @@
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
5
  exports.isMediaElement = exports.isLinkDescriptionElement = exports.isJSONSchemaElement = exports.isJSONReferenceElement = void 0;
6
- var _apidomCore = require("@speclynx/apidom-core");
7
6
  var _JSONSchema = _interopRequireDefault(require("./elements/JSONSchema.cjs"));
8
7
  var _LinkDescription = _interopRequireDefault(require("./elements/LinkDescription.cjs"));
9
8
  var _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
@@ -12,21 +11,11 @@ exports.isMediaElement = _apidomNsJsonSchemaDraft.isMediaElement;
12
11
  /**
13
12
  * @public
14
13
  */
15
- const isJSONSchemaElement = exports.isJSONSchemaElement = (0, _apidomCore.createPredicate)(({
16
- hasBasicElementProps,
17
- isElementType,
18
- primitiveEq
19
- }) => {
20
- return element => element instanceof _JSONSchema.default || hasBasicElementProps(element) && isElementType('JSONSchemaDraft6', element) && primitiveEq('object', element);
21
- });
14
+ const isJSONSchemaElement = element => element instanceof _JSONSchema.default;
22
15
 
23
16
  /**
24
17
  * @public
25
18
  */
26
- const isLinkDescriptionElement = exports.isLinkDescriptionElement = (0, _apidomCore.createPredicate)(({
27
- hasBasicElementProps,
28
- isElementType,
29
- primitiveEq
30
- }) => {
31
- return element => element instanceof _LinkDescription.default || hasBasicElementProps(element) && isElementType('linkDescription', element) && primitiveEq('object', element);
32
- });
19
+ exports.isJSONSchemaElement = isJSONSchemaElement;
20
+ const isLinkDescriptionElement = element => element instanceof _LinkDescription.default;
21
+ exports.isLinkDescriptionElement = isLinkDescriptionElement;
@@ -1,4 +1,3 @@
1
- import { createPredicate } from '@speclynx/apidom-core';
2
1
  import JSONSchemaElement from "./elements/JSONSchema.mjs";
3
2
  import LinkDescriptionElement from "./elements/LinkDescription.mjs";
4
3
  export { isJSONReferenceElement, isMediaElement } from '@speclynx/apidom-ns-json-schema-draft-4';
@@ -6,21 +5,9 @@ export { isJSONReferenceElement, isMediaElement } from '@speclynx/apidom-ns-json
6
5
  /**
7
6
  * @public
8
7
  */
9
- export const isJSONSchemaElement = createPredicate(({
10
- hasBasicElementProps,
11
- isElementType,
12
- primitiveEq
13
- }) => {
14
- return element => element instanceof JSONSchemaElement || hasBasicElementProps(element) && isElementType('JSONSchemaDraft6', element) && primitiveEq('object', element);
15
- });
8
+ export const isJSONSchemaElement = element => element instanceof JSONSchemaElement;
16
9
 
17
10
  /**
18
11
  * @public
19
12
  */
20
- export const isLinkDescriptionElement = createPredicate(({
21
- hasBasicElementProps,
22
- isElementType,
23
- primitiveEq
24
- }) => {
25
- return element => element instanceof LinkDescriptionElement || hasBasicElementProps(element) && isElementType('linkDescription', element) && primitiveEq('object', element);
26
- });
13
+ export const isLinkDescriptionElement = element => element instanceof LinkDescriptionElement;
@@ -2,52 +2,73 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
4
  exports.__esModule = true;
5
- exports.default = exports.createRefractor = void 0;
6
- var _ramda = require("ramda");
5
+ exports.refractLinkDescription = exports.refractJSONSchema = exports.default = void 0;
7
6
  var _apidomCore = require("@speclynx/apidom-core");
7
+ var _apidomTraverse = require("@speclynx/apidom-traverse");
8
+ var _apidomDatamodel = require("@speclynx/apidom-datamodel");
9
+ var _ramda = require("ramda");
8
10
  var _specification = _interopRequireDefault(require("./specification.cjs"));
9
- var _visitor = require("../traversal/visitor.cjs");
10
11
  var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
12
+ /**
13
+ * @public
14
+ */
15
+
16
+ /**
17
+ * @public
18
+ */
19
+
11
20
  /**
12
21
  * @public
13
22
  */
14
23
  const refract = (value, {
15
- specPath = ['visitors', 'document', 'objects', 'JSONSchema', '$visitor'],
24
+ element = 'jSONSchemaDraft6',
16
25
  plugins = [],
17
26
  specificationObj = _specification.default
18
27
  } = {}) => {
19
- const element = (0, _apidomCore.refract)(value);
20
- const resolvedSpec = (0, _apidomCore.dereference)(specificationObj);
28
+ const genericElement = (0, _apidomDatamodel.refract)(value);
29
+ const resolvedSpec = (0, _apidomCore.resolveSpecification)(specificationObj);
30
+ const elementMap = resolvedSpec.elementMap;
31
+ const specPath = elementMap[element];
32
+ if (!specPath) {
33
+ throw new Error(`Unknown element type: "${element}"`);
34
+ }
21
35
 
22
36
  /**
23
37
  * This is where generic ApiDOM becomes semantic (namespace applied).
24
38
  * We don't allow consumers to hook into this translation.
25
- * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
39
+ * Though we allow consumers to define their own plugins on already transformed ApiDOM.
26
40
  */
27
41
  const RootVisitorClass = (0, _ramda.path)(specPath, resolvedSpec);
28
42
  const rootVisitor = new RootVisitorClass({
29
43
  specObj: resolvedSpec
30
44
  });
31
- (0, _apidomCore.visit)(element, rootVisitor);
45
+ (0, _apidomTraverse.traverse)(genericElement, rootVisitor);
32
46
 
33
47
  /**
34
48
  * Running plugins visitors means extra single traversal === performance hit.
35
49
  */
36
50
  return (0, _apidomCore.dispatchRefractorPlugins)(rootVisitor.element, plugins, {
37
- toolboxCreator: _toolbox.default,
38
- visitorOptions: {
39
- keyMap: _visitor.keyMap,
40
- nodeTypeGetter: _visitor.getNodeType
41
- }
51
+ toolboxCreator: _toolbox.default
42
52
  });
43
53
  };
44
54
 
45
55
  /**
56
+ * Refracts a value into a JSONSchemaElement.
57
+ * @public
58
+ */
59
+ const refractJSONSchema = (value, options = {}) => refract(value, {
60
+ ...options,
61
+ element: 'jSONSchemaDraft6'
62
+ });
63
+
64
+ /**
65
+ * Refracts a value into a LinkDescriptionElement.
46
66
  * @public
47
67
  */
48
- const createRefractor = specPath => (value, options = {}) => refract(value, {
49
- specPath,
50
- ...options
68
+ exports.refractJSONSchema = refractJSONSchema;
69
+ const refractLinkDescription = (value, options = {}) => refract(value, {
70
+ ...options,
71
+ element: 'linkDescription'
51
72
  });
52
- exports.createRefractor = createRefractor;
73
+ exports.refractLinkDescription = refractLinkDescription;
53
74
  var _default = exports.default = refract;
@@ -1,47 +1,65 @@
1
+ import { resolveSpecification, dispatchRefractorPlugins } from '@speclynx/apidom-core';
2
+ import { traverse } from '@speclynx/apidom-traverse';
3
+ import { refract as baseRefract } from '@speclynx/apidom-datamodel';
1
4
  import { path } from 'ramda';
2
- import { visit, dereference, refract as baseRefract, dispatchRefractorPlugins } from '@speclynx/apidom-core';
3
5
  import specification from "./specification.mjs";
4
- import { keyMap, getNodeType } from "../traversal/visitor.mjs";
5
6
  import createToolbox from "./toolbox.mjs";
7
+ /**
8
+ * @public
9
+ */
10
+ /**
11
+ * @public
12
+ */
6
13
  /**
7
14
  * @public
8
15
  */
9
16
  const refract = (value, {
10
- specPath = ['visitors', 'document', 'objects', 'JSONSchema', '$visitor'],
17
+ element = 'jSONSchemaDraft6',
11
18
  plugins = [],
12
19
  specificationObj = specification
13
20
  } = {}) => {
14
- const element = baseRefract(value);
15
- const resolvedSpec = dereference(specificationObj);
21
+ const genericElement = baseRefract(value);
22
+ const resolvedSpec = resolveSpecification(specificationObj);
23
+ const elementMap = resolvedSpec.elementMap;
24
+ const specPath = elementMap[element];
25
+ if (!specPath) {
26
+ throw new Error(`Unknown element type: "${element}"`);
27
+ }
16
28
 
17
29
  /**
18
30
  * This is where generic ApiDOM becomes semantic (namespace applied).
19
31
  * We don't allow consumers to hook into this translation.
20
- * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
32
+ * Though we allow consumers to define their own plugins on already transformed ApiDOM.
21
33
  */
22
34
  const RootVisitorClass = path(specPath, resolvedSpec);
23
35
  const rootVisitor = new RootVisitorClass({
24
36
  specObj: resolvedSpec
25
37
  });
26
- visit(element, rootVisitor);
38
+ traverse(genericElement, rootVisitor);
27
39
 
28
40
  /**
29
41
  * Running plugins visitors means extra single traversal === performance hit.
30
42
  */
31
43
  return dispatchRefractorPlugins(rootVisitor.element, plugins, {
32
- toolboxCreator: createToolbox,
33
- visitorOptions: {
34
- keyMap,
35
- nodeTypeGetter: getNodeType
36
- }
44
+ toolboxCreator: createToolbox
37
45
  });
38
46
  };
39
47
 
40
48
  /**
49
+ * Refracts a value into a JSONSchemaElement.
50
+ * @public
51
+ */
52
+ export const refractJSONSchema = (value, options = {}) => refract(value, {
53
+ ...options,
54
+ element: 'jSONSchemaDraft6'
55
+ });
56
+
57
+ /**
58
+ * Refracts a value into a LinkDescriptionElement.
41
59
  * @public
42
60
  */
43
- export const createRefractor = specPath => (value, options = {}) => refract(value, {
44
- specPath,
45
- ...options
61
+ export const refractLinkDescription = (value, options = {}) => refract(value, {
62
+ ...options,
63
+ element: 'linkDescription'
46
64
  });
47
65
  export default refract;
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ var _apidomCore = require("@speclynx/apidom-core");
6
+ var _ramdaAdjunct = require("ramda-adjunct");
7
+ var _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
8
+ exports.JSONReferenceElement = _apidomNsJsonSchemaDraft.JSONReferenceElement;
9
+ exports.MediaElement = _apidomNsJsonSchemaDraft.MediaElement;
10
+ var _JSONSchema = _interopRequireDefault(require("../elements/JSONSchema.cjs"));
11
+ exports.JSONSchemaElement = _JSONSchema.default;
12
+ var _LinkDescription = _interopRequireDefault(require("../elements/LinkDescription.cjs"));
13
+ exports.LinkDescriptionElement = _LinkDescription.default;
14
+ var _specification = _interopRequireDefault(require("./specification.cjs"));
15
+ /**
16
+ * @public
17
+ */
18
+
19
+ // Resolve specification to dereference $ref pointers
20
+ const resolvedSpec = (0, _apidomCore.resolveSpecification)(_specification.default);
21
+
22
+ // Extract fixed fields as list of { name, alias?, $visitor }
23
+ const getFixedFields = fixedFieldsSpec => {
24
+ return Object.entries(fixedFieldsSpec).map(([name, fieldSpec]) => {
25
+ if ((0, _ramdaAdjunct.isPlainObject)(fieldSpec)) {
26
+ return {
27
+ name,
28
+ ...fieldSpec
29
+ };
30
+ }
31
+ return {
32
+ name,
33
+ $visitor: fieldSpec
34
+ };
35
+ });
36
+ };
37
+
38
+ // Define lazy getters for fixedFields on element classes
39
+ // Note: JSONReferenceElement and MediaElement inherit fixedFields from draft-4
40
+ Object.defineProperty(_JSONSchema.default, 'fixedFields', {
41
+ get: () => getFixedFields(resolvedSpec.visitors.document.objects.JSONSchema.fixedFields),
42
+ enumerable: true
43
+ });
44
+ Object.defineProperty(_LinkDescription.default, 'fixedFields', {
45
+ get: () => getFixedFields(resolvedSpec.visitors.document.objects.LinkDescription.fixedFields),
46
+ enumerable: true
47
+ });
@@ -0,0 +1,39 @@
1
+ import { resolveSpecification } from '@speclynx/apidom-core';
2
+ import { isPlainObject } from 'ramda-adjunct';
3
+ import { JSONReferenceElement, MediaElement } from '@speclynx/apidom-ns-json-schema-draft-4';
4
+ import JSONSchemaElement from "../elements/JSONSchema.mjs";
5
+ import LinkDescriptionElement from "../elements/LinkDescription.mjs";
6
+ import specification from "./specification.mjs";
7
+ /**
8
+ * @public
9
+ */
10
+ // Resolve specification to dereference $ref pointers
11
+ const resolvedSpec = resolveSpecification(specification);
12
+
13
+ // Extract fixed fields as list of { name, alias?, $visitor }
14
+ const getFixedFields = fixedFieldsSpec => {
15
+ return Object.entries(fixedFieldsSpec).map(([name, fieldSpec]) => {
16
+ if (isPlainObject(fieldSpec)) {
17
+ return {
18
+ name,
19
+ ...fieldSpec
20
+ };
21
+ }
22
+ return {
23
+ name,
24
+ $visitor: fieldSpec
25
+ };
26
+ });
27
+ };
28
+
29
+ // Define lazy getters for fixedFields on element classes
30
+ // Note: JSONReferenceElement and MediaElement inherit fixedFields from draft-4
31
+ Object.defineProperty(JSONSchemaElement, 'fixedFields', {
32
+ get: () => getFixedFields(resolvedSpec.visitors.document.objects.JSONSchema.fixedFields),
33
+ enumerable: true
34
+ });
35
+ Object.defineProperty(LinkDescriptionElement, 'fixedFields', {
36
+ get: () => getFixedFields(resolvedSpec.visitors.document.objects.LinkDescription.fixedFields),
37
+ enumerable: true
38
+ });
39
+ export { JSONSchemaElement, JSONReferenceElement, MediaElement, LinkDescriptionElement };
@@ -3,15 +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 _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
8
10
  var _JSONSchema = _interopRequireDefault(require("../../elements/JSONSchema.cjs"));
9
11
  var _LinkDescription = _interopRequireDefault(require("../../elements/LinkDescription.cjs"));
10
- var _visitor = require("../../traversal/visitor.cjs");
11
- /**
12
- * JSON Schema Draft 6 specification elements.
13
- */
14
-
15
12
  /**
16
13
  * This plugin is specific to YAML 1.2 format, which allows defining key-value pairs
17
14
  * with empty key, empty value, or both. If the value is not provided in YAML format,
@@ -46,7 +43,7 @@ var _visitor = require("../../traversal/visitor.cjs");
46
43
  * (JSONSchemaElement))
47
44
  */
48
45
 
49
- const isEmptyElement = element => (0, _apidomCore.isStringElement)(element) && (0, _apidomCore.includesClasses)(['yaml-e-node', 'yaml-e-scalar'], element);
46
+ const isEmptyElement = element => (0, _apidomDatamodel.isStringElement)(element) && (0, _apidomDatamodel.includesClasses)(element, ['yaml-e-node', 'yaml-e-scalar']);
50
47
  const schema = {
51
48
  JSONSchemaDraft6Element: {
52
49
  additionalItems(...args) {
@@ -59,12 +56,12 @@ const schema = {
59
56
  return new _JSONSchema.default(...args);
60
57
  },
61
58
  required(...args) {
62
- const element = new _apidomCore.ArrayElement(...args);
59
+ const element = new _apidomDatamodel.ArrayElement(...args);
63
60
  element.classes.push('json-schema-required');
64
61
  return element;
65
62
  },
66
63
  properties(...args) {
67
- const element = new _apidomCore.ObjectElement(...args);
64
+ const element = new _apidomDatamodel.ObjectElement(...args);
68
65
  element.classes.push('json-schema-properties');
69
66
  return element;
70
67
  },
@@ -72,12 +69,12 @@ const schema = {
72
69
  return new _JSONSchema.default(...args);
73
70
  },
74
71
  patternProperties(...args) {
75
- const element = new _apidomCore.ObjectElement(...args);
72
+ const element = new _apidomDatamodel.ObjectElement(...args);
76
73
  element.classes.push('json-schema-patternProperties');
77
74
  return element;
78
75
  },
79
76
  dependencies(...args) {
80
- const element = new _apidomCore.ObjectElement(...args);
77
+ const element = new _apidomDatamodel.ObjectElement(...args);
81
78
  element.classes.push('json-schema-dependencies');
82
79
  return element;
83
80
  },
@@ -85,22 +82,22 @@ const schema = {
85
82
  return new _JSONSchema.default(...args);
86
83
  },
87
84
  enum(...args) {
88
- const element = new _apidomCore.ArrayElement(...args);
85
+ const element = new _apidomDatamodel.ArrayElement(...args);
89
86
  element.classes.push('json-schema-enum');
90
87
  return element;
91
88
  },
92
89
  allOf(...args) {
93
- const element = new _apidomCore.ArrayElement(...args);
90
+ const element = new _apidomDatamodel.ArrayElement(...args);
94
91
  element.classes.push('json-schema-allOf');
95
92
  return element;
96
93
  },
97
94
  anyOf(...args) {
98
- const element = new _apidomCore.ArrayElement(...args);
95
+ const element = new _apidomDatamodel.ArrayElement(...args);
99
96
  element.classes.push('json-schema-anyOf');
100
97
  return element;
101
98
  },
102
99
  oneOf(...args) {
103
- const element = new _apidomCore.ArrayElement(...args);
100
+ const element = new _apidomDatamodel.ArrayElement(...args);
104
101
  element.classes.push('json-schema-oneOf');
105
102
  return element;
106
103
  },
@@ -108,17 +105,17 @@ const schema = {
108
105
  return new _JSONSchema.default(...args);
109
106
  },
110
107
  definitions(...args) {
111
- const element = new _apidomCore.ObjectElement(...args);
108
+ const element = new _apidomDatamodel.ObjectElement(...args);
112
109
  element.classes.push('json-schema-definitions');
113
110
  return element;
114
111
  },
115
112
  examples(...args) {
116
- const element = new _apidomCore.ArrayElement(...args);
113
+ const element = new _apidomDatamodel.ArrayElement(...args);
117
114
  element.classes.push('json-schema-examples');
118
115
  return element;
119
116
  },
120
117
  links(...args) {
121
- const element = new _apidomCore.ArrayElement(...args);
118
+ const element = new _apidomDatamodel.ArrayElement(...args);
122
119
  element.classes.push('json-schema-links');
123
120
  return element;
124
121
  },
@@ -179,7 +176,7 @@ const schema = {
179
176
  }
180
177
  };
181
178
  const findElementFactory = (ancestor, keyName) => {
182
- const elementType = (0, _visitor.getNodeType)(ancestor); // @ts-ignore
179
+ const elementType = (0, _apidomTraverse.getNodeType)(ancestor); // @ts-ignore
183
180
  const keyMapping = schema[elementType] || schema[(0, _apidomCore.toValue)(ancestor.classes.first)];
184
181
  return typeof keyMapping === 'undefined' ? undefined : Object.hasOwn(keyMapping, '[key: *]') ? keyMapping['[key: *]'] : keyMapping[keyName];
185
182
  };
@@ -189,25 +186,30 @@ const findElementFactory = (ancestor, keyName) => {
189
186
  */
190
187
  const plugin = () => () => ({
191
188
  visitor: {
192
- StringElement(element, key, parent, path, ancestors) {
193
- if (!isEmptyElement(element)) return undefined;
194
- const lineage = [...ancestors, parent].filter(_apidomCore.isElement);
189
+ StringElement(path) {
190
+ const element = path.node;
191
+ if (!isEmptyElement(element)) return;
192
+
193
+ // getAncestorNodes() returns [parent, grandparent, ..., root], so reverse to get [root, ..., parent]
194
+ const lineage = path.getAncestorNodes().reverse().filter(_apidomDatamodel.isElement);
195
195
  const parentElement = lineage.at(-1);
196
196
  let elementFactory;
197
197
  let context;
198
- if ((0, _apidomCore.isArrayElement)(parentElement)) {
198
+ if ((0, _apidomDatamodel.isArrayElement)(parentElement)) {
199
199
  context = element;
200
200
  elementFactory = findElementFactory(parentElement, '<*>');
201
- } else if ((0, _apidomCore.isMemberElement)(parentElement)) {
201
+ } else if ((0, _apidomDatamodel.isMemberElement)(parentElement)) {
202
202
  context = lineage.at(-2);
203
203
  elementFactory = findElementFactory(context, (0, _apidomCore.toValue)(parentElement.key));
204
204
  }
205
205
 
206
206
  // no element factory found
207
- if (typeof elementFactory !== 'function') return undefined;
208
- return elementFactory.call({
207
+ if (typeof elementFactory !== 'function') return;
208
+ const replacement = elementFactory.call({
209
209
  context
210
- }, undefined, (0, _apidomCore.cloneDeep)(element.meta), (0, _apidomCore.cloneDeep)(element.attributes));
210
+ }, undefined, (0, _apidomDatamodel.cloneDeep)(element.meta), (0, _apidomDatamodel.cloneDeep)(element.attributes));
211
+ _apidomDatamodel.SourceMapElement.transfer(element, replacement);
212
+ path.replaceWith(replacement);
211
213
  }
212
214
  }
213
215
  });