@speclynx/apidom-ns-json-schema-2020-12 1.12.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.
- package/CHANGELOG.md +82 -0
- package/LICENSE +202 -0
- package/LICENSES/AFL-3.0.txt +182 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/BSD-3-Clause.txt +26 -0
- package/LICENSES/MIT.txt +9 -0
- package/NOTICE +65 -0
- package/README.md +186 -0
- package/dist/apidom-ns-json-schema-2020-12.browser.js +1 -0
- package/package.json +65 -0
- package/src/elements/JSONSchema.cjs +60 -0
- package/src/elements/JSONSchema.mjs +57 -0
- package/src/elements/LinkDescription.cjs +48 -0
- package/src/elements/LinkDescription.mjs +44 -0
- package/src/index.cjs +61 -0
- package/src/index.mjs +26 -0
- package/src/media-types.cjs +34 -0
- package/src/media-types.mjs +30 -0
- package/src/namespace.cjs +21 -0
- package/src/namespace.mjs +16 -0
- package/src/predicates.cjs +29 -0
- package/src/predicates.mjs +24 -0
- package/src/refractor/index.cjs +54 -0
- package/src/refractor/index.mjs +48 -0
- package/src/refractor/plugins/replace-empty-element.cjs +264 -0
- package/src/refractor/plugins/replace-empty-element.mjs +257 -0
- package/src/refractor/registration.cjs +13 -0
- package/src/refractor/registration.mjs +6 -0
- package/src/refractor/specification.cjs +16 -0
- package/src/refractor/specification.mjs +11 -0
- package/src/refractor/toolbox.cjs +21 -0
- package/src/refractor/toolbox.mjs +15 -0
- package/src/refractor/visitors/json-schema/PrefixItemsVisitor.cjs +30 -0
- package/src/refractor/visitors/json-schema/PrefixItemsVisitor.mjs +27 -0
- package/src/refractor/visitors/json-schema/index.cjs +20 -0
- package/src/refractor/visitors/json-schema/index.mjs +15 -0
- package/src/refractor/visitors/json-schema/link-description/index.cjs +17 -0
- package/src/refractor/visitors/json-schema/link-description/index.mjs +12 -0
- package/src/traversal/visitor.cjs +15 -0
- package/src/traversal/visitor.mjs +10 -0
- package/types/apidom-ns-json-schema-2020-12.d.ts +475 -0
package/src/index.cjs
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.specificationObj = exports.refractorPluginReplaceEmptyElement = exports.refract = exports.mediaTypes = exports.isStringElement = exports.isRefElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isLinkDescriptionElement = exports.isJSONSchemaElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.default = exports.createRefractor = exports.Visitor = exports.SpecificationVisitor = exports.PropertiesVisitor = exports.PrefixItemsVisitor = exports.PatternedFieldsVisitor = exports.PatternPropertiesVisitor = exports.ParentSchemaAwareVisitor = exports.OneOfVisitor = exports.MapVisitor = exports.LinkDescriptionVisitor = exports.LinkDescriptionElement = exports.JSONSchemaVisitor = exports.JSONSchemaElement = exports.JSONSchema202012MediaTypes = exports.ItemsVisitor = exports.FixedFieldsVisitor = exports.FallbackVisitor = exports.DependentSchemasVisitor = exports.DependentRequiredVisitor = exports.AnyOfVisitor = exports.AlternatingVisitor = exports.AllOfVisitor = exports.$vocabularyVisitor = exports.$refVisitor = exports.$defsVisitor = 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;
|
|
18
|
+
var _mediaTypes = _interopRequireWildcard(require("./media-types.cjs"));
|
|
19
|
+
exports.mediaTypes = _mediaTypes.default;
|
|
20
|
+
exports.JSONSchema202012MediaTypes = _mediaTypes.JSONSchema202012MediaTypes;
|
|
21
|
+
var _namespace = _interopRequireDefault(require("./namespace.cjs"));
|
|
22
|
+
exports.default = _namespace.default;
|
|
23
|
+
var _replaceEmptyElement = _interopRequireDefault(require("./refractor/plugins/replace-empty-element.cjs"));
|
|
24
|
+
exports.refractorPluginReplaceEmptyElement = _replaceEmptyElement.default;
|
|
25
|
+
var _index = _interopRequireWildcard(require("./refractor/index.cjs"));
|
|
26
|
+
exports.refract = _index.default;
|
|
27
|
+
exports.createRefractor = _index.createRefractor;
|
|
28
|
+
var _specification = _interopRequireDefault(require("./refractor/specification.cjs"));
|
|
29
|
+
exports.specificationObj = _specification.default;
|
|
30
|
+
var _predicates = require("./predicates.cjs");
|
|
31
|
+
exports.isJSONSchemaElement = _predicates.isJSONSchemaElement;
|
|
32
|
+
exports.isLinkDescriptionElement = _predicates.isLinkDescriptionElement;
|
|
33
|
+
var _apidomNsJsonSchema = require("@speclynx/apidom-ns-json-schema-2019-09");
|
|
34
|
+
exports.SpecificationVisitor = _apidomNsJsonSchema.SpecificationVisitor;
|
|
35
|
+
exports.FallbackVisitor = _apidomNsJsonSchema.FallbackVisitor;
|
|
36
|
+
exports.FixedFieldsVisitor = _apidomNsJsonSchema.FixedFieldsVisitor;
|
|
37
|
+
exports.PatternedFieldsVisitor = _apidomNsJsonSchema.PatternedFieldsVisitor;
|
|
38
|
+
exports.MapVisitor = _apidomNsJsonSchema.MapVisitor;
|
|
39
|
+
exports.AlternatingVisitor = _apidomNsJsonSchema.AlternatingVisitor;
|
|
40
|
+
exports.ParentSchemaAwareVisitor = _apidomNsJsonSchema.ParentSchemaAwareVisitor;
|
|
41
|
+
exports.Visitor = _apidomNsJsonSchema.Visitor;
|
|
42
|
+
exports.$defsVisitor = _apidomNsJsonSchema.$defsVisitor;
|
|
43
|
+
exports.$refVisitor = _apidomNsJsonSchema.$refVisitor;
|
|
44
|
+
exports.$vocabularyVisitor = _apidomNsJsonSchema.$vocabularyVisitor;
|
|
45
|
+
exports.AllOfVisitor = _apidomNsJsonSchema.AllOfVisitor;
|
|
46
|
+
exports.AnyOfVisitor = _apidomNsJsonSchema.AnyOfVisitor;
|
|
47
|
+
exports.DependentRequiredVisitor = _apidomNsJsonSchema.DependentRequiredVisitor;
|
|
48
|
+
exports.DependentSchemasVisitor = _apidomNsJsonSchema.DependentSchemasVisitor;
|
|
49
|
+
exports.ItemsVisitor = _apidomNsJsonSchema.ItemsVisitor;
|
|
50
|
+
exports.OneOfVisitor = _apidomNsJsonSchema.OneOfVisitor;
|
|
51
|
+
exports.PatternPropertiesVisitor = _apidomNsJsonSchema.PatternPropertiesVisitor;
|
|
52
|
+
exports.PropertiesVisitor = _apidomNsJsonSchema.PropertiesVisitor;
|
|
53
|
+
var _index2 = _interopRequireDefault(require("./refractor/visitors/json-schema/index.cjs"));
|
|
54
|
+
exports.JSONSchemaVisitor = _index2.default;
|
|
55
|
+
var _index3 = _interopRequireDefault(require("./refractor/visitors/json-schema/link-description/index.cjs"));
|
|
56
|
+
exports.LinkDescriptionVisitor = _index3.default;
|
|
57
|
+
var _PrefixItemsVisitor = _interopRequireDefault(require("./refractor/visitors/json-schema/PrefixItemsVisitor.cjs"));
|
|
58
|
+
exports.PrefixItemsVisitor = _PrefixItemsVisitor.default;
|
|
59
|
+
var _registration = require("./refractor/registration.cjs");
|
|
60
|
+
exports.JSONSchemaElement = _registration.JSONSchemaElement;
|
|
61
|
+
exports.LinkDescriptionElement = _registration.LinkDescriptionElement;
|
package/src/index.mjs
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export { isRefElement, isLinkElement, isMemberElement, isObjectElement, isArrayElement, isBooleanElement, isNullElement, isElement, isNumberElement, isStringElement } from '@speclynx/apidom-core';
|
|
2
|
+
export { default as mediaTypes, JSONSchema202012MediaTypes } from "./media-types.mjs";
|
|
3
|
+
export { default } from "./namespace.mjs";
|
|
4
|
+
export { default as refractorPluginReplaceEmptyElement } from "./refractor/plugins/replace-empty-element.mjs";
|
|
5
|
+
export { default as refract, createRefractor } from "./refractor/index.mjs";
|
|
6
|
+
export { default as specificationObj } from "./refractor/specification.mjs";
|
|
7
|
+
export { isJSONSchemaElement, isLinkDescriptionElement } from "./predicates.mjs";
|
|
8
|
+
export { SpecificationVisitor, FallbackVisitor, FixedFieldsVisitor, PatternedFieldsVisitor, MapVisitor, AlternatingVisitor, ParentSchemaAwareVisitor, Visitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
9
|
+
export { default as JSONSchemaVisitor } from "./refractor/visitors/json-schema/index.mjs";
|
|
10
|
+
export { default as LinkDescriptionVisitor } from "./refractor/visitors/json-schema/link-description/index.mjs";
|
|
11
|
+
export { $defsVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
12
|
+
export { $refVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
13
|
+
export { $vocabularyVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
14
|
+
export { AllOfVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
15
|
+
export { AnyOfVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
16
|
+
export { DependentRequiredVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
17
|
+
export { DependentSchemasVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
18
|
+
export { ItemsVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
19
|
+
export { OneOfVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
20
|
+
export { PatternPropertiesVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
21
|
+
export { PropertiesVisitor } from '@speclynx/apidom-ns-json-schema-2019-09';
|
|
22
|
+
export { default as PrefixItemsVisitor } from "./refractor/visitors/json-schema/PrefixItemsVisitor.mjs";
|
|
23
|
+
/**
|
|
24
|
+
* JSON Schema 2020-12 specification elements.
|
|
25
|
+
*/
|
|
26
|
+
export { JSONSchemaElement, LinkDescriptionElement } from "./refractor/registration.mjs";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = exports.JSONSchema202012MediaTypes = void 0;
|
|
5
|
+
var _ramda = require("ramda");
|
|
6
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
class JSONSchema202012MediaTypes extends _apidomCore.MediaTypes {
|
|
15
|
+
filterByFormat(format = 'generic') {
|
|
16
|
+
const effectiveFormat = format === 'generic' ? 'schema;version' : format;
|
|
17
|
+
return this.filter(mediaType => mediaType.includes(effectiveFormat));
|
|
18
|
+
}
|
|
19
|
+
findBy(version = '2020-12', format = 'generic') {
|
|
20
|
+
const search = format === 'generic' ? `schema;version=${version}` : `schema+${format};version=${version}`;
|
|
21
|
+
const found = this.find(mediaType => mediaType.includes(search));
|
|
22
|
+
return found || this.unknownMediaType;
|
|
23
|
+
}
|
|
24
|
+
latest(format = 'generic') {
|
|
25
|
+
return (0, _ramda.last)(this.filterByFormat(format));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @public
|
|
31
|
+
*/
|
|
32
|
+
exports.JSONSchema202012MediaTypes = JSONSchema202012MediaTypes;
|
|
33
|
+
const mediaTypes = new JSONSchema202012MediaTypes('application/schema;version=2020-12', 'application/schema+json;version=2020-12', 'application/schema+yaml;version=2020-12');
|
|
34
|
+
var _default = exports.default = mediaTypes;
|
|
@@ -0,0 +1,30 @@
|
|
|
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 JSONSchema202012MediaTypes 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 = '2020-12', 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 JSONSchema202012MediaTypes('application/schema;version=2020-12', 'application/schema+json;version=2020-12', 'application/schema+yaml;version=2020-12');
|
|
30
|
+
export default mediaTypes;
|
|
@@ -0,0 +1,21 @@
|
|
|
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 _JSONSchema = _interopRequireDefault(require("./elements/JSONSchema.cjs"));
|
|
7
|
+
var _LinkDescription = _interopRequireDefault(require("./elements/LinkDescription.cjs"));
|
|
8
|
+
/**
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
const jsonSchema202012 = {
|
|
12
|
+
namespace: options => {
|
|
13
|
+
const {
|
|
14
|
+
base
|
|
15
|
+
} = options;
|
|
16
|
+
base.register('jSONSchema202012', _JSONSchema.default);
|
|
17
|
+
base.register('linkDescription', _LinkDescription.default);
|
|
18
|
+
return base;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var _default = exports.default = jsonSchema202012;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import JSONSchemaElement from "./elements/JSONSchema.mjs";
|
|
2
|
+
import LinkDescriptionElement from "./elements/LinkDescription.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
const jsonSchema202012 = {
|
|
7
|
+
namespace: options => {
|
|
8
|
+
const {
|
|
9
|
+
base
|
|
10
|
+
} = options;
|
|
11
|
+
base.register('jSONSchema202012', JSONSchemaElement);
|
|
12
|
+
base.register('linkDescription', LinkDescriptionElement);
|
|
13
|
+
return base;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export default jsonSchema202012;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.isLinkDescriptionElement = exports.isJSONSchemaElement = void 0;
|
|
6
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
7
|
+
var _JSONSchema = _interopRequireDefault(require("./elements/JSONSchema.cjs"));
|
|
8
|
+
var _LinkDescription = _interopRequireDefault(require("./elements/LinkDescription.cjs"));
|
|
9
|
+
/**
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
const isJSONSchemaElement = exports.isJSONSchemaElement = (0, _apidomCore.createPredicate)(({
|
|
13
|
+
hasBasicElementProps,
|
|
14
|
+
isElementType,
|
|
15
|
+
primitiveEq
|
|
16
|
+
}) => {
|
|
17
|
+
return element => element instanceof _JSONSchema.default || hasBasicElementProps(element) && isElementType('JSONSchema202012', element) && primitiveEq('object', element);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @public
|
|
22
|
+
*/
|
|
23
|
+
const isLinkDescriptionElement = exports.isLinkDescriptionElement = (0, _apidomCore.createPredicate)(({
|
|
24
|
+
hasBasicElementProps,
|
|
25
|
+
isElementType,
|
|
26
|
+
primitiveEq
|
|
27
|
+
}) => {
|
|
28
|
+
return element => element instanceof _LinkDescription.default || hasBasicElementProps(element) && isElementType('linkDescription', element) && primitiveEq('object', element);
|
|
29
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { createPredicate } from '@speclynx/apidom-core';
|
|
2
|
+
import JSONSchemaElement from "./elements/JSONSchema.mjs";
|
|
3
|
+
import LinkDescriptionElement from "./elements/LinkDescription.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export const isJSONSchemaElement = createPredicate(({
|
|
8
|
+
hasBasicElementProps,
|
|
9
|
+
isElementType,
|
|
10
|
+
primitiveEq
|
|
11
|
+
}) => {
|
|
12
|
+
return element => element instanceof JSONSchemaElement || hasBasicElementProps(element) && isElementType('JSONSchema202012', element) && primitiveEq('object', element);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @public
|
|
17
|
+
*/
|
|
18
|
+
export const isLinkDescriptionElement = createPredicate(({
|
|
19
|
+
hasBasicElementProps,
|
|
20
|
+
isElementType,
|
|
21
|
+
primitiveEq
|
|
22
|
+
}) => {
|
|
23
|
+
return element => element instanceof LinkDescriptionElement || hasBasicElementProps(element) && isElementType('linkDescription', element) && primitiveEq('object', element);
|
|
24
|
+
});
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = exports.createRefractor = void 0;
|
|
6
|
+
var _ramda = require("ramda");
|
|
7
|
+
var _apidomCore = require("@speclynx/apidom-core");
|
|
8
|
+
var _specification = _interopRequireDefault(require("./specification.cjs"));
|
|
9
|
+
var _visitor = require("../traversal/visitor.cjs");
|
|
10
|
+
var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
|
|
11
|
+
/**
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
const refract = (value, {
|
|
15
|
+
specPath = ['visitors', 'document', 'objects', 'JSONSchema', '$visitor'],
|
|
16
|
+
plugins = [],
|
|
17
|
+
specificationObj = _specification.default
|
|
18
|
+
} = {}) => {
|
|
19
|
+
const element = (0, _apidomCore.refract)(value);
|
|
20
|
+
const resolvedSpec = (0, _apidomCore.dereference)(specificationObj);
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* This is where generic ApiDOM becomes semantic (namespace applied).
|
|
24
|
+
* We don't allow consumers to hook into this translation.
|
|
25
|
+
* Though we allow consumers to define their onw plugins on already transformed ApiDOM.
|
|
26
|
+
*/
|
|
27
|
+
const RootVisitorClass = (0, _ramda.path)(specPath, resolvedSpec);
|
|
28
|
+
const rootVisitor = new RootVisitorClass({
|
|
29
|
+
specObj: resolvedSpec
|
|
30
|
+
});
|
|
31
|
+
(0, _apidomCore.visit)(element, rootVisitor);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Run plugins only when necessary.
|
|
35
|
+
* Running plugins visitors means extra single traversal === performance hit.
|
|
36
|
+
*/
|
|
37
|
+
return (0, _apidomCore.dispatchRefractorPlugins)(rootVisitor.element, plugins, {
|
|
38
|
+
toolboxCreator: _toolbox.default,
|
|
39
|
+
visitorOptions: {
|
|
40
|
+
keyMap: _visitor.keyMap,
|
|
41
|
+
nodeTypeGetter: _visitor.getNodeType
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* @public
|
|
48
|
+
*/
|
|
49
|
+
const createRefractor = specPath => (value, options = {}) => refract(value, {
|
|
50
|
+
specPath,
|
|
51
|
+
...options
|
|
52
|
+
});
|
|
53
|
+
exports.createRefractor = createRefractor;
|
|
54
|
+
var _default = exports.default = refract;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { path } from 'ramda';
|
|
2
|
+
import { visit, dereference, refract as baseRefract, dispatchRefractorPlugins } from '@speclynx/apidom-core';
|
|
3
|
+
import specification from "./specification.mjs";
|
|
4
|
+
import { keyMap, getNodeType } from "../traversal/visitor.mjs";
|
|
5
|
+
import createToolbox from "./toolbox.mjs";
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
const refract = (value, {
|
|
10
|
+
specPath = ['visitors', 'document', 'objects', 'JSONSchema', '$visitor'],
|
|
11
|
+
plugins = [],
|
|
12
|
+
specificationObj = specification
|
|
13
|
+
} = {}) => {
|
|
14
|
+
const element = baseRefract(value);
|
|
15
|
+
const resolvedSpec = dereference(specificationObj);
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* This is where generic ApiDOM becomes semantic (namespace applied).
|
|
19
|
+
* We don't allow consumers to hook into this translation.
|
|
20
|
+
* Though we allow consumers to define their onw plugins on already transformed ApiDOM.
|
|
21
|
+
*/
|
|
22
|
+
const RootVisitorClass = path(specPath, resolvedSpec);
|
|
23
|
+
const rootVisitor = new RootVisitorClass({
|
|
24
|
+
specObj: resolvedSpec
|
|
25
|
+
});
|
|
26
|
+
visit(element, rootVisitor);
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Run plugins only when necessary.
|
|
30
|
+
* Running plugins visitors means extra single traversal === performance hit.
|
|
31
|
+
*/
|
|
32
|
+
return dispatchRefractorPlugins(rootVisitor.element, plugins, {
|
|
33
|
+
toolboxCreator: createToolbox,
|
|
34
|
+
visitorOptions: {
|
|
35
|
+
keyMap,
|
|
36
|
+
nodeTypeGetter: getNodeType
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @public
|
|
43
|
+
*/
|
|
44
|
+
export const createRefractor = specPath => (value, options = {}) => refract(value, {
|
|
45
|
+
specPath,
|
|
46
|
+
...options
|
|
47
|
+
});
|
|
48
|
+
export default refract;
|
|
@@ -0,0 +1,264 @@
|
|
|
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 _apidomCore = require("@speclynx/apidom-core");
|
|
7
|
+
var _JSONSchema = _interopRequireDefault(require("../../elements/JSONSchema.cjs"));
|
|
8
|
+
var _LinkDescription = _interopRequireDefault(require("../../elements/LinkDescription.cjs"));
|
|
9
|
+
var _visitor = require("../../traversal/visitor.cjs");
|
|
10
|
+
/**
|
|
11
|
+
* JSON Schema 2020-12 specification elements.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* This plugin is specific to YAML 1.2 format, which allows defining key-value pairs
|
|
16
|
+
* with empty key, empty value, or both. If the value is not provided in YAML format,
|
|
17
|
+
* this plugin compensates for this missing value with the most appropriate semantic element type.
|
|
18
|
+
*
|
|
19
|
+
* https://yaml.org/spec/1.2.2/#72-empty-nodes
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
*
|
|
23
|
+
* ```yaml
|
|
24
|
+
* $schema: https://json-schema.org/draft/2020-12/schema
|
|
25
|
+
* items:
|
|
26
|
+
* ```
|
|
27
|
+
* Refracting result without this plugin:
|
|
28
|
+
*
|
|
29
|
+
* (JSONSchemaElement
|
|
30
|
+
* (MemberElement
|
|
31
|
+
* (StringElement)
|
|
32
|
+
* (StringElement))
|
|
33
|
+
* (MemberElement
|
|
34
|
+
* (StringElement)
|
|
35
|
+
* (StringElement))
|
|
36
|
+
*
|
|
37
|
+
* Refracting result with this plugin:
|
|
38
|
+
*
|
|
39
|
+
* (JSONSchemaElement
|
|
40
|
+
* (MemberElement
|
|
41
|
+
* (StringElement)
|
|
42
|
+
* (StringElement))
|
|
43
|
+
* (MemberElement
|
|
44
|
+
* (StringElement)
|
|
45
|
+
* (JSONSchemaElement))
|
|
46
|
+
*/
|
|
47
|
+
|
|
48
|
+
const isEmptyElement = element => (0, _apidomCore.isStringElement)(element) && (0, _apidomCore.includesClasses)(['yaml-e-node', 'yaml-e-scalar'], element);
|
|
49
|
+
const schema = {
|
|
50
|
+
JSONSchema202012Element: {
|
|
51
|
+
prefixItems(...args) {
|
|
52
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
53
|
+
element.classes.push('json-schema-prefixItems');
|
|
54
|
+
return element;
|
|
55
|
+
},
|
|
56
|
+
items(...args) {
|
|
57
|
+
return new _JSONSchema.default(...args);
|
|
58
|
+
},
|
|
59
|
+
contains(...args) {
|
|
60
|
+
return new _JSONSchema.default(...args);
|
|
61
|
+
},
|
|
62
|
+
required(...args) {
|
|
63
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
64
|
+
element.classes.push('json-schema-required');
|
|
65
|
+
return element;
|
|
66
|
+
},
|
|
67
|
+
properties(...args) {
|
|
68
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
69
|
+
element.classes.push('json-schema-properties');
|
|
70
|
+
return element;
|
|
71
|
+
},
|
|
72
|
+
additionalProperties(...args) {
|
|
73
|
+
return new _JSONSchema.default(...args);
|
|
74
|
+
},
|
|
75
|
+
patternProperties(...args) {
|
|
76
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
77
|
+
element.classes.push('json-schema-patternProperties');
|
|
78
|
+
return element;
|
|
79
|
+
},
|
|
80
|
+
dependentSchemas(...args) {
|
|
81
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
82
|
+
element.classes.push('json-schema-dependentSchemas');
|
|
83
|
+
return element;
|
|
84
|
+
},
|
|
85
|
+
propertyNames(...args) {
|
|
86
|
+
return new _JSONSchema.default(...args);
|
|
87
|
+
},
|
|
88
|
+
enum(...args) {
|
|
89
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
90
|
+
element.classes.push('json-schema-enum');
|
|
91
|
+
return element;
|
|
92
|
+
},
|
|
93
|
+
allOf(...args) {
|
|
94
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
95
|
+
element.classes.push('json-schema-allOf');
|
|
96
|
+
return element;
|
|
97
|
+
},
|
|
98
|
+
anyOf(...args) {
|
|
99
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
100
|
+
element.classes.push('json-schema-anyOf');
|
|
101
|
+
return element;
|
|
102
|
+
},
|
|
103
|
+
oneOf(...args) {
|
|
104
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
105
|
+
element.classes.push('json-schema-oneOf');
|
|
106
|
+
return element;
|
|
107
|
+
},
|
|
108
|
+
if(...args) {
|
|
109
|
+
return new _JSONSchema.default(...args);
|
|
110
|
+
},
|
|
111
|
+
then(...args) {
|
|
112
|
+
return new _JSONSchema.default(...args);
|
|
113
|
+
},
|
|
114
|
+
else(...args) {
|
|
115
|
+
return new _JSONSchema.default(...args);
|
|
116
|
+
},
|
|
117
|
+
not(...args) {
|
|
118
|
+
return new _JSONSchema.default(...args);
|
|
119
|
+
},
|
|
120
|
+
$defs(...args) {
|
|
121
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
122
|
+
element.classes.push('json-schema-$defs');
|
|
123
|
+
return element;
|
|
124
|
+
},
|
|
125
|
+
examples(...args) {
|
|
126
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
127
|
+
element.classes.push('json-schema-examples');
|
|
128
|
+
return element;
|
|
129
|
+
},
|
|
130
|
+
links(...args) {
|
|
131
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
132
|
+
element.classes.push('json-schema-links');
|
|
133
|
+
return element;
|
|
134
|
+
},
|
|
135
|
+
$vocabulary(...args) {
|
|
136
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
137
|
+
element.classes.push('json-schema-$vocabulary');
|
|
138
|
+
return element;
|
|
139
|
+
},
|
|
140
|
+
unevaluatedItems(...args) {
|
|
141
|
+
return new _JSONSchema.default(...args);
|
|
142
|
+
},
|
|
143
|
+
unevaluatedProperties(...args) {
|
|
144
|
+
return new _JSONSchema.default(...args);
|
|
145
|
+
},
|
|
146
|
+
$dependentRequired(...args) {
|
|
147
|
+
const element = new _apidomCore.ObjectElement(...args);
|
|
148
|
+
element.classes.push('json-schema-$dependentRequired');
|
|
149
|
+
return element;
|
|
150
|
+
},
|
|
151
|
+
contentSchema(...args) {
|
|
152
|
+
return new _JSONSchema.default(...args);
|
|
153
|
+
},
|
|
154
|
+
type(...args) {
|
|
155
|
+
const element = new _apidomCore.ArrayElement(...args);
|
|
156
|
+
element.classes.push('json-schema-type');
|
|
157
|
+
return element;
|
|
158
|
+
}
|
|
159
|
+
},
|
|
160
|
+
LinkDescriptionElement: {
|
|
161
|
+
hrefSchema(...args) {
|
|
162
|
+
return new _JSONSchema.default(...args);
|
|
163
|
+
},
|
|
164
|
+
targetSchema(...args) {
|
|
165
|
+
return new _JSONSchema.default(...args);
|
|
166
|
+
},
|
|
167
|
+
submissionSchema(...args) {
|
|
168
|
+
return new _JSONSchema.default(...args);
|
|
169
|
+
},
|
|
170
|
+
templatePointers(...args) {
|
|
171
|
+
return new _apidomCore.ObjectElement(...args);
|
|
172
|
+
},
|
|
173
|
+
templateRequired(...args) {
|
|
174
|
+
return new _apidomCore.ArrayElement(...args);
|
|
175
|
+
},
|
|
176
|
+
targetHints(...args) {
|
|
177
|
+
return new _apidomCore.ObjectElement(...args);
|
|
178
|
+
},
|
|
179
|
+
headerSchema(...args) {
|
|
180
|
+
return new _JSONSchema.default(...args);
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
'json-schema-prefixItems': {
|
|
184
|
+
'<*>': function asterisk(...args) {
|
|
185
|
+
return new _JSONSchema.default(...args);
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
'json-schema-properties': {
|
|
189
|
+
'[key: *]': function key(...args) {
|
|
190
|
+
return new _JSONSchema.default(...args);
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
'json-schema-patternProperties': {
|
|
194
|
+
'[key: *]': function key(...args) {
|
|
195
|
+
return new _JSONSchema.default(...args);
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
'json-schema-dependentSchemas': {
|
|
199
|
+
'[key: *]': function key(...args) {
|
|
200
|
+
return new _JSONSchema.default(...args);
|
|
201
|
+
}
|
|
202
|
+
},
|
|
203
|
+
'json-schema-allOf': {
|
|
204
|
+
'<*>': function asterisk(...args) {
|
|
205
|
+
return new _JSONSchema.default(...args);
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
'json-schema-anyOf': {
|
|
209
|
+
'<*>': function asterisk(...args) {
|
|
210
|
+
return new _JSONSchema.default(...args);
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
'json-schema-oneOf': {
|
|
214
|
+
'<*>': function asterisk(...args) {
|
|
215
|
+
return new _JSONSchema.default(...args);
|
|
216
|
+
}
|
|
217
|
+
},
|
|
218
|
+
'json-schema-$defs': {
|
|
219
|
+
'[key: *]': function key(...args) {
|
|
220
|
+
return new _JSONSchema.default(...args);
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
'json-schema-links': {
|
|
224
|
+
'<*>': function asterisk(...args) {
|
|
225
|
+
return new _LinkDescription.default(...args);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
const findElementFactory = (ancestor, keyName) => {
|
|
230
|
+
const elementType = (0, _visitor.getNodeType)(ancestor); // @ts-ignore
|
|
231
|
+
const keyMapping = schema[elementType] || schema[(0, _apidomCore.toValue)(ancestor.classes.first)];
|
|
232
|
+
return typeof keyMapping === 'undefined' ? undefined : Object.hasOwn(keyMapping, '[key: *]') ? keyMapping['[key: *]'] : keyMapping[keyName];
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* @public
|
|
237
|
+
*/
|
|
238
|
+
const plugin = () => () => {
|
|
239
|
+
return {
|
|
240
|
+
visitor: {
|
|
241
|
+
StringElement(element, key, parent, path, ancestors) {
|
|
242
|
+
if (!isEmptyElement(element)) return undefined;
|
|
243
|
+
const lineage = [...ancestors, parent].filter(_apidomCore.isElement);
|
|
244
|
+
const parentElement = lineage.at(-1);
|
|
245
|
+
let elementFactory;
|
|
246
|
+
let context;
|
|
247
|
+
if ((0, _apidomCore.isArrayElement)(parentElement)) {
|
|
248
|
+
context = element;
|
|
249
|
+
elementFactory = findElementFactory(parentElement, '<*>');
|
|
250
|
+
} else if ((0, _apidomCore.isMemberElement)(parentElement)) {
|
|
251
|
+
context = lineage.at(-2);
|
|
252
|
+
elementFactory = findElementFactory(context, (0, _apidomCore.toValue)(parentElement.key));
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// no element factory found
|
|
256
|
+
if (typeof elementFactory !== 'function') return undefined;
|
|
257
|
+
return elementFactory.call({
|
|
258
|
+
context
|
|
259
|
+
}, undefined, (0, _apidomCore.cloneDeep)(element.meta), (0, _apidomCore.cloneDeep)(element.attributes));
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
var _default = exports.default = plugin;
|