@speclynx/apidom-ns-json-schema-draft-6 3.2.1 → 4.0.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.
- package/CHANGELOG.md +12 -0
- package/dist/apidom-ns-json-schema-draft-6.browser.js +24 -20
- package/package.json +7 -7
- package/src/elements/JSONSchema.cjs +0 -124
- package/src/elements/JSONSchema.mjs +0 -121
- package/src/elements/LinkDescription.cjs +0 -60
- package/src/elements/LinkDescription.mjs +0 -56
- package/src/index.cjs +0 -46
- package/src/index.mjs +0 -14
- package/src/media-types.cjs +0 -34
- package/src/media-types.mjs +0 -30
- package/src/namespace.cjs +0 -24
- package/src/namespace.mjs +0 -19
- package/src/predicates.cjs +0 -30
- package/src/predicates.mjs +0 -21
- package/src/refractor/index.cjs +0 -76
- package/src/refractor/index.mjs +0 -67
- package/src/refractor/inspect.cjs +0 -47
- package/src/refractor/inspect.mjs +0 -39
- package/src/refractor/plugins/replace-empty-element.cjs +0 -218
- package/src/refractor/plugins/replace-empty-element.mjs +0 -212
- package/src/refractor/specification.cjs +0 -29
- package/src/refractor/specification.mjs +0 -24
- package/src/refractor/toolbox.cjs +0 -26
- package/src/refractor/toolbox.mjs +0 -19
- package/src/refractor/visitors/json-schema/ExamplesVisitor.cjs +0 -15
- package/src/refractor/visitors/json-schema/ExamplesVisitor.mjs +0 -11
- package/src/refractor/visitors/json-schema/ItemsVisitor.cjs +0 -15
- package/src/refractor/visitors/json-schema/ItemsVisitor.mjs +0 -11
- package/src/refractor/visitors/json-schema/index.cjs +0 -29
- package/src/refractor/visitors/json-schema/index.mjs +0 -24
- package/src/refractor/visitors/json-schema/link-description/index.cjs +0 -19
- package/src/refractor/visitors/json-schema/link-description/index.mjs +0 -14
package/src/media-types.mjs
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { last } from 'ramda';
|
|
2
|
-
import { MediaTypes } from '@speclynx/apidom-core';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @public
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* @public
|
|
10
|
-
*/
|
|
11
|
-
export class JSONSchemaDraft6MediaTypes extends MediaTypes {
|
|
12
|
-
filterByFormat(format = 'generic') {
|
|
13
|
-
const effectiveFormat = format === 'generic' ? 'schema;version' : format;
|
|
14
|
-
return this.filter(mediaType => mediaType.includes(effectiveFormat));
|
|
15
|
-
}
|
|
16
|
-
findBy(version = 'draft-06', format = 'generic') {
|
|
17
|
-
const search = format === 'generic' ? `schema;version=${version}` : `schema+${format};version=${version}`;
|
|
18
|
-
const found = this.find(mediaType => mediaType.includes(search));
|
|
19
|
-
return found || this.unknownMediaType;
|
|
20
|
-
}
|
|
21
|
-
latest(format = 'generic') {
|
|
22
|
-
return last(this.filterByFormat(format));
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/**
|
|
27
|
-
* @public
|
|
28
|
-
*/
|
|
29
|
-
const mediaTypes = new JSONSchemaDraft6MediaTypes('application/schema;version=draft-06', 'application/schema+json;version=draft-06', 'application/schema+yaml;version=draft-06');
|
|
30
|
-
export default mediaTypes;
|
package/src/namespace.cjs
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.default = void 0;
|
|
6
|
-
var _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
|
|
7
|
-
var _JSONSchema = _interopRequireDefault(require("./elements/JSONSchema.cjs"));
|
|
8
|
-
var _LinkDescription = _interopRequireDefault(require("./elements/LinkDescription.cjs"));
|
|
9
|
-
/**
|
|
10
|
-
* @public
|
|
11
|
-
*/
|
|
12
|
-
const jsonSchemaDraft6 = {
|
|
13
|
-
namespace: options => {
|
|
14
|
-
const {
|
|
15
|
-
base
|
|
16
|
-
} = options;
|
|
17
|
-
base.register('jSONSchemaDraft6', _JSONSchema.default);
|
|
18
|
-
base.register('jSONReference', _apidomNsJsonSchemaDraft.JSONReferenceElement);
|
|
19
|
-
base.register('media', _apidomNsJsonSchemaDraft.MediaElement);
|
|
20
|
-
base.register('linkDescription', _LinkDescription.default);
|
|
21
|
-
return base;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
var _default = exports.default = jsonSchemaDraft6;
|
package/src/namespace.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { JSONReferenceElement, MediaElement } from '@speclynx/apidom-ns-json-schema-draft-4';
|
|
2
|
-
import JSONSchemaElement from "./elements/JSONSchema.mjs";
|
|
3
|
-
import LinkDescriptionElement from "./elements/LinkDescription.mjs";
|
|
4
|
-
/**
|
|
5
|
-
* @public
|
|
6
|
-
*/
|
|
7
|
-
const jsonSchemaDraft6 = {
|
|
8
|
-
namespace: options => {
|
|
9
|
-
const {
|
|
10
|
-
base
|
|
11
|
-
} = options;
|
|
12
|
-
base.register('jSONSchemaDraft6', JSONSchemaElement);
|
|
13
|
-
base.register('jSONReference', JSONReferenceElement);
|
|
14
|
-
base.register('media', MediaElement);
|
|
15
|
-
base.register('linkDescription', LinkDescriptionElement);
|
|
16
|
-
return base;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
export default jsonSchemaDraft6;
|
package/src/predicates.cjs
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.isMediaElement = exports.isLinkDescriptionElement = exports.isJSONSchemaElement = exports.isJSONReferenceElement = exports.isBooleanJSONSchemaElement = void 0;
|
|
6
|
-
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
7
|
-
var _JSONSchema = _interopRequireDefault(require("./elements/JSONSchema.cjs"));
|
|
8
|
-
var _LinkDescription = _interopRequireDefault(require("./elements/LinkDescription.cjs"));
|
|
9
|
-
var _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
|
|
10
|
-
exports.isJSONReferenceElement = _apidomNsJsonSchemaDraft.isJSONReferenceElement;
|
|
11
|
-
exports.isMediaElement = _apidomNsJsonSchemaDraft.isMediaElement;
|
|
12
|
-
/**
|
|
13
|
-
* @public
|
|
14
|
-
*/
|
|
15
|
-
const isBooleanJSONSchemaElement = element => {
|
|
16
|
-
return (0, _apidomDatamodel.isBooleanElement)(element) && (0, _apidomDatamodel.includesClasses)(element, ['boolean-json-schema']);
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* @public
|
|
21
|
-
*/
|
|
22
|
-
exports.isBooleanJSONSchemaElement = isBooleanJSONSchemaElement;
|
|
23
|
-
const isJSONSchemaElement = element => element instanceof _JSONSchema.default;
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @public
|
|
27
|
-
*/
|
|
28
|
-
exports.isJSONSchemaElement = isJSONSchemaElement;
|
|
29
|
-
const isLinkDescriptionElement = element => element instanceof _LinkDescription.default;
|
|
30
|
-
exports.isLinkDescriptionElement = isLinkDescriptionElement;
|
package/src/predicates.mjs
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { isBooleanElement, includesClasses } from '@speclynx/apidom-datamodel';
|
|
2
|
-
import JSONSchemaElement from "./elements/JSONSchema.mjs";
|
|
3
|
-
import LinkDescriptionElement from "./elements/LinkDescription.mjs";
|
|
4
|
-
export { isJSONReferenceElement, isMediaElement } from '@speclynx/apidom-ns-json-schema-draft-4';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* @public
|
|
8
|
-
*/
|
|
9
|
-
export const isBooleanJSONSchemaElement = element => {
|
|
10
|
-
return isBooleanElement(element) && includesClasses(element, ['boolean-json-schema']);
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* @public
|
|
15
|
-
*/
|
|
16
|
-
export const isJSONSchemaElement = element => element instanceof JSONSchemaElement;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @public
|
|
20
|
-
*/
|
|
21
|
-
export const isLinkDescriptionElement = element => element instanceof LinkDescriptionElement;
|
package/src/refractor/index.cjs
DELETED
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.refractLinkDescription = exports.refractJSONSchema = exports.default = void 0;
|
|
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");
|
|
10
|
-
var _specification = _interopRequireDefault(require("./specification.cjs"));
|
|
11
|
-
var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
|
|
12
|
-
/**
|
|
13
|
-
* @public
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @public
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @public
|
|
22
|
-
*/
|
|
23
|
-
const refract = (value, {
|
|
24
|
-
element = 'jSONSchemaDraft6',
|
|
25
|
-
plugins = [],
|
|
26
|
-
specificationObj = _specification.default,
|
|
27
|
-
consume = false
|
|
28
|
-
} = {}) => {
|
|
29
|
-
const genericElement = (0, _apidomDatamodel.refract)(value);
|
|
30
|
-
const resolvedSpec = (0, _apidomCore.resolveSpecification)(specificationObj);
|
|
31
|
-
const elementMap = resolvedSpec.elementMap;
|
|
32
|
-
const specPath = elementMap[element];
|
|
33
|
-
if (!specPath) {
|
|
34
|
-
throw new Error(`Unknown element type: "${element}"`);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* This is where generic ApiDOM becomes semantic (namespace applied).
|
|
39
|
-
* We don't allow consumers to hook into this translation.
|
|
40
|
-
* Though we allow consumers to define their own plugins on already transformed ApiDOM.
|
|
41
|
-
*/
|
|
42
|
-
const RootVisitorClass = (0, _ramda.path)(specPath, resolvedSpec);
|
|
43
|
-
const rootVisitor = new RootVisitorClass({
|
|
44
|
-
specObj: resolvedSpec,
|
|
45
|
-
consume
|
|
46
|
-
});
|
|
47
|
-
(0, _apidomTraverse.traverse)(genericElement, rootVisitor);
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Running plugins visitors means extra single traversal === performance hit.
|
|
51
|
-
*/
|
|
52
|
-
return (0, _apidomCore.dispatchRefractorPlugins)(rootVisitor.element, plugins, {
|
|
53
|
-
toolboxCreator: _toolbox.default
|
|
54
|
-
});
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Refracts a value into a JSONSchemaElement.
|
|
59
|
-
* @public
|
|
60
|
-
*/
|
|
61
|
-
const refractJSONSchema = (value, options = {}) => refract(value, {
|
|
62
|
-
...options,
|
|
63
|
-
element: 'jSONSchemaDraft6'
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Refracts a value into a LinkDescriptionElement.
|
|
68
|
-
* @public
|
|
69
|
-
*/
|
|
70
|
-
exports.refractJSONSchema = refractJSONSchema;
|
|
71
|
-
const refractLinkDescription = (value, options = {}) => refract(value, {
|
|
72
|
-
...options,
|
|
73
|
-
element: 'linkDescription'
|
|
74
|
-
});
|
|
75
|
-
exports.refractLinkDescription = refractLinkDescription;
|
|
76
|
-
var _default = exports.default = refract;
|
package/src/refractor/index.mjs
DELETED
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { resolveSpecification, dispatchRefractorPlugins } from '@speclynx/apidom-core';
|
|
2
|
-
import { traverse } from '@speclynx/apidom-traverse';
|
|
3
|
-
import { refract as baseRefract } from '@speclynx/apidom-datamodel';
|
|
4
|
-
import { path } from 'ramda';
|
|
5
|
-
import specification from "./specification.mjs";
|
|
6
|
-
import createToolbox from "./toolbox.mjs";
|
|
7
|
-
/**
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* @public
|
|
12
|
-
*/
|
|
13
|
-
/**
|
|
14
|
-
* @public
|
|
15
|
-
*/
|
|
16
|
-
const refract = (value, {
|
|
17
|
-
element = 'jSONSchemaDraft6',
|
|
18
|
-
plugins = [],
|
|
19
|
-
specificationObj = specification,
|
|
20
|
-
consume = false
|
|
21
|
-
} = {}) => {
|
|
22
|
-
const genericElement = baseRefract(value);
|
|
23
|
-
const resolvedSpec = resolveSpecification(specificationObj);
|
|
24
|
-
const elementMap = resolvedSpec.elementMap;
|
|
25
|
-
const specPath = elementMap[element];
|
|
26
|
-
if (!specPath) {
|
|
27
|
-
throw new Error(`Unknown element type: "${element}"`);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* This is where generic ApiDOM becomes semantic (namespace applied).
|
|
32
|
-
* We don't allow consumers to hook into this translation.
|
|
33
|
-
* Though we allow consumers to define their own plugins on already transformed ApiDOM.
|
|
34
|
-
*/
|
|
35
|
-
const RootVisitorClass = path(specPath, resolvedSpec);
|
|
36
|
-
const rootVisitor = new RootVisitorClass({
|
|
37
|
-
specObj: resolvedSpec,
|
|
38
|
-
consume
|
|
39
|
-
});
|
|
40
|
-
traverse(genericElement, rootVisitor);
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Running plugins visitors means extra single traversal === performance hit.
|
|
44
|
-
*/
|
|
45
|
-
return dispatchRefractorPlugins(rootVisitor.element, plugins, {
|
|
46
|
-
toolboxCreator: createToolbox
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Refracts a value into a JSONSchemaElement.
|
|
52
|
-
* @public
|
|
53
|
-
*/
|
|
54
|
-
export const refractJSONSchema = (value, options = {}) => refract(value, {
|
|
55
|
-
...options,
|
|
56
|
-
element: 'jSONSchemaDraft6'
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Refracts a value into a LinkDescriptionElement.
|
|
61
|
-
* @public
|
|
62
|
-
*/
|
|
63
|
-
export const refractLinkDescription = (value, options = {}) => refract(value, {
|
|
64
|
-
...options,
|
|
65
|
-
element: 'linkDescription'
|
|
66
|
-
});
|
|
67
|
-
export default refract;
|
|
@@ -1,47 +0,0 @@
|
|
|
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
|
-
});
|
|
@@ -1,39 +0,0 @@
|
|
|
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 };
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.default = void 0;
|
|
6
|
-
var _apidomDatamodel = require("@speclynx/apidom-datamodel");
|
|
7
|
-
var _apidomCore = require("@speclynx/apidom-core");
|
|
8
|
-
var _apidomTraverse = require("@speclynx/apidom-traverse");
|
|
9
|
-
var _apidomNsJsonSchemaDraft = require("@speclynx/apidom-ns-json-schema-draft-4");
|
|
10
|
-
var _JSONSchema = _interopRequireDefault(require("../../elements/JSONSchema.cjs"));
|
|
11
|
-
var _LinkDescription = _interopRequireDefault(require("../../elements/LinkDescription.cjs"));
|
|
12
|
-
/**
|
|
13
|
-
* This plugin is specific to YAML 1.2 format, which allows defining key-value pairs
|
|
14
|
-
* with empty key, empty value, or both. If the value is not provided in YAML format,
|
|
15
|
-
* this plugin compensates for this missing value with the most appropriate semantic element type.
|
|
16
|
-
*
|
|
17
|
-
* https://yaml.org/spec/1.2.2/#72-empty-nodes
|
|
18
|
-
*
|
|
19
|
-
* @example
|
|
20
|
-
*
|
|
21
|
-
* ```yaml
|
|
22
|
-
* $schema: http://json-schema.org/draft-06/schema#
|
|
23
|
-
* items:
|
|
24
|
-
* ```
|
|
25
|
-
* Refracting result without this plugin:
|
|
26
|
-
*
|
|
27
|
-
* (JSONSchemaElement
|
|
28
|
-
* (MemberElement
|
|
29
|
-
* (StringElement)
|
|
30
|
-
* (StringElement))
|
|
31
|
-
* (MemberElement
|
|
32
|
-
* (StringElement)
|
|
33
|
-
* (StringElement))
|
|
34
|
-
*
|
|
35
|
-
* Refracting result with this plugin:
|
|
36
|
-
*
|
|
37
|
-
* (JSONSchemaElement
|
|
38
|
-
* (MemberElement
|
|
39
|
-
* (StringElement)
|
|
40
|
-
* (StringElement))
|
|
41
|
-
* (MemberElement
|
|
42
|
-
* (StringElement)
|
|
43
|
-
* (JSONSchemaElement))
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
const isEmptyElement = element => (0, _apidomDatamodel.isStringElement)(element) && (0, _apidomDatamodel.includesClasses)(element, ['yaml-e-node', 'yaml-e-scalar']);
|
|
47
|
-
const schema = {
|
|
48
|
-
JSONSchemaDraft6Element: {
|
|
49
|
-
additionalItems(...args) {
|
|
50
|
-
return new _JSONSchema.default(...args);
|
|
51
|
-
},
|
|
52
|
-
items(...args) {
|
|
53
|
-
return new _JSONSchema.default(...args);
|
|
54
|
-
},
|
|
55
|
-
contains(...args) {
|
|
56
|
-
return new _JSONSchema.default(...args);
|
|
57
|
-
},
|
|
58
|
-
required(...args) {
|
|
59
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
60
|
-
element.classes.push('json-schema-required');
|
|
61
|
-
return element;
|
|
62
|
-
},
|
|
63
|
-
properties(...args) {
|
|
64
|
-
const element = new _apidomDatamodel.ObjectElement(...args);
|
|
65
|
-
element.classes.push('json-schema-properties');
|
|
66
|
-
return element;
|
|
67
|
-
},
|
|
68
|
-
additionalProperties(...args) {
|
|
69
|
-
return new _JSONSchema.default(...args);
|
|
70
|
-
},
|
|
71
|
-
patternProperties(...args) {
|
|
72
|
-
const element = new _apidomDatamodel.ObjectElement(...args);
|
|
73
|
-
element.classes.push('json-schema-patternProperties');
|
|
74
|
-
return element;
|
|
75
|
-
},
|
|
76
|
-
dependencies(...args) {
|
|
77
|
-
const element = new _apidomDatamodel.ObjectElement(...args);
|
|
78
|
-
element.classes.push('json-schema-dependencies');
|
|
79
|
-
return element;
|
|
80
|
-
},
|
|
81
|
-
propertyNames(...args) {
|
|
82
|
-
return new _JSONSchema.default(...args);
|
|
83
|
-
},
|
|
84
|
-
enum(...args) {
|
|
85
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
86
|
-
element.classes.push('json-schema-enum');
|
|
87
|
-
return element;
|
|
88
|
-
},
|
|
89
|
-
allOf(...args) {
|
|
90
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
91
|
-
element.classes.push('json-schema-allOf');
|
|
92
|
-
return element;
|
|
93
|
-
},
|
|
94
|
-
anyOf(...args) {
|
|
95
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
96
|
-
element.classes.push('json-schema-anyOf');
|
|
97
|
-
return element;
|
|
98
|
-
},
|
|
99
|
-
oneOf(...args) {
|
|
100
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
101
|
-
element.classes.push('json-schema-oneOf');
|
|
102
|
-
return element;
|
|
103
|
-
},
|
|
104
|
-
not(...args) {
|
|
105
|
-
return new _JSONSchema.default(...args);
|
|
106
|
-
},
|
|
107
|
-
definitions(...args) {
|
|
108
|
-
const element = new _apidomDatamodel.ObjectElement(...args);
|
|
109
|
-
element.classes.push('json-schema-definitions');
|
|
110
|
-
return element;
|
|
111
|
-
},
|
|
112
|
-
examples(...args) {
|
|
113
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
114
|
-
element.classes.push('json-schema-examples');
|
|
115
|
-
return element;
|
|
116
|
-
},
|
|
117
|
-
links(...args) {
|
|
118
|
-
const element = new _apidomDatamodel.ArrayElement(...args);
|
|
119
|
-
element.classes.push('json-schema-links');
|
|
120
|
-
return element;
|
|
121
|
-
},
|
|
122
|
-
media(...args) {
|
|
123
|
-
return new _apidomNsJsonSchemaDraft.MediaElement(...args);
|
|
124
|
-
}
|
|
125
|
-
},
|
|
126
|
-
LinkDescriptionElement: {
|
|
127
|
-
hrefSchema(...args) {
|
|
128
|
-
return new _JSONSchema.default(...args);
|
|
129
|
-
},
|
|
130
|
-
targetSchema(...args) {
|
|
131
|
-
return new _JSONSchema.default(...args);
|
|
132
|
-
},
|
|
133
|
-
submissionSchema(...args) {
|
|
134
|
-
return new _JSONSchema.default(...args);
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
'json-schema-properties': {
|
|
138
|
-
'[key: *]': function key(...args) {
|
|
139
|
-
return new _JSONSchema.default(...args);
|
|
140
|
-
}
|
|
141
|
-
},
|
|
142
|
-
'json-schema-patternProperties': {
|
|
143
|
-
'[key: *]': function key(...args) {
|
|
144
|
-
return new _JSONSchema.default(...args);
|
|
145
|
-
}
|
|
146
|
-
},
|
|
147
|
-
'json-schema-dependencies': {
|
|
148
|
-
'[key: *]': function key(...args) {
|
|
149
|
-
return new _JSONSchema.default(...args);
|
|
150
|
-
}
|
|
151
|
-
},
|
|
152
|
-
'json-schema-allOf': {
|
|
153
|
-
'<*>': function asterisk(...args) {
|
|
154
|
-
return new _JSONSchema.default(...args);
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
'json-schema-anyOf': {
|
|
158
|
-
'<*>': function asterisk(...args) {
|
|
159
|
-
return new _JSONSchema.default(...args);
|
|
160
|
-
}
|
|
161
|
-
},
|
|
162
|
-
'json-schema-oneOf': {
|
|
163
|
-
'<*>': function asterisk(...args) {
|
|
164
|
-
return new _JSONSchema.default(...args);
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
'json-schema-definitions': {
|
|
168
|
-
'[key: *]': function key(...args) {
|
|
169
|
-
return new _JSONSchema.default(...args);
|
|
170
|
-
}
|
|
171
|
-
},
|
|
172
|
-
'json-schema-links': {
|
|
173
|
-
'<*>': function asterisk(...args) {
|
|
174
|
-
return new _LinkDescription.default(...args);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
};
|
|
178
|
-
const findElementFactory = (ancestor, keyName) => {
|
|
179
|
-
const elementType = (0, _apidomTraverse.getNodeType)(ancestor);
|
|
180
|
-
const classType = ancestor.isMetaEmpty ? undefined : ancestor.classes.at(0); // @ts-ignore
|
|
181
|
-
const keyMapping = schema[elementType] || schema[classType];
|
|
182
|
-
return typeof keyMapping === 'undefined' ? undefined : Object.hasOwn(keyMapping, '[key: *]') ? keyMapping['[key: *]'] : keyMapping[keyName];
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* @public
|
|
187
|
-
*/
|
|
188
|
-
const plugin = () => () => ({
|
|
189
|
-
visitor: {
|
|
190
|
-
StringElement(path) {
|
|
191
|
-
const element = path.node;
|
|
192
|
-
if (!isEmptyElement(element)) return;
|
|
193
|
-
|
|
194
|
-
// getAncestorNodes() returns [parent, grandparent, ..., root], so reverse to get [root, ..., parent]
|
|
195
|
-
const lineage = path.getAncestorNodes().reverse().filter(_apidomDatamodel.isElement);
|
|
196
|
-
const parentElement = lineage.at(-1);
|
|
197
|
-
let elementFactory;
|
|
198
|
-
let context;
|
|
199
|
-
if ((0, _apidomDatamodel.isArrayElement)(parentElement)) {
|
|
200
|
-
context = element;
|
|
201
|
-
elementFactory = findElementFactory(parentElement, '<*>');
|
|
202
|
-
} else if ((0, _apidomDatamodel.isMemberElement)(parentElement)) {
|
|
203
|
-
context = lineage.at(-2);
|
|
204
|
-
elementFactory = findElementFactory(context, (0, _apidomCore.toValue)(parentElement.key));
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
// no element factory found
|
|
208
|
-
if (typeof elementFactory !== 'function') return;
|
|
209
|
-
const replacement = elementFactory.call({
|
|
210
|
-
context
|
|
211
|
-
}, undefined, element.isMetaEmpty ? undefined : element.meta.cloneDeep(), element.isAttributesEmpty ? undefined : (0, _apidomDatamodel.cloneDeep)(element.attributes));
|
|
212
|
-
_apidomDatamodel.SourceMapElement.transfer(element, replacement);
|
|
213
|
-
_apidomDatamodel.StyleElement.transfer(element, replacement);
|
|
214
|
-
path.replaceWith(replacement);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
});
|
|
218
|
-
var _default = exports.default = plugin;
|