@swagger-api/apidom-core 0.82.2 → 0.84.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/README.md +19 -0
- package/cjs/clone/errors/CloneError.cjs +1 -1
- package/cjs/identity/errors/ElementIdentityError.cjs +14 -0
- package/cjs/identity/index.cjs +63 -0
- package/cjs/index.cjs +8 -3
- package/cjs/refractor/plugins/element-identity.cjs +6 -7
- package/cjs/refractor/plugins/semantic-element-identity.cjs +6 -7
- package/cjs/refractor/plugins/utils/index.cjs +16 -6
- package/cjs/traversal/visitor.cjs +0 -2
- package/dist/apidom-core.browser.js +8473 -8179
- package/dist/apidom-core.browser.min.js +1 -1
- package/es/clone/errors/CloneError.mjs +1 -1
- package/es/identity/errors/ElementIdentityError.mjs +10 -0
- package/es/identity/index.mjs +58 -0
- package/es/index.mjs +2 -0
- package/es/refractor/plugins/element-identity.mjs +6 -8
- package/es/refractor/plugins/semantic-element-identity.mjs +6 -8
- package/es/refractor/plugins/utils/index.mjs +19 -8
- package/es/traversal/visitor.mjs +0 -2
- package/package.json +6 -6
- package/types/dist.d.ts +70 -50
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [0.84.0](https://github.com/swagger-api/apidom/compare/v0.83.0...v0.84.0) (2023-11-24)
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
- **ast:** see edits by the following merged visitors ([#3412](https://github.com/swagger-api/apidom/issues/3412)) ([6499557](https://github.com/swagger-api/apidom/commit/64995573f5df1f7f291c20833cf274173f6a7bac))
|
|
11
|
+
|
|
12
|
+
# [0.83.0](https://github.com/swagger-api/apidom/compare/v0.82.2...v0.83.0) (2023-11-07)
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
- **core:** add support for formalized element identity management ([#3366](https://github.com/swagger-api/apidom/issues/3366)) ([65dcd0e](https://github.com/swagger-api/apidom/commit/65dcd0e8a96544773001560fe142a9768a2c3668))
|
|
17
|
+
|
|
6
18
|
## [0.82.2](https://github.com/swagger-api/apidom/compare/v0.82.1...v0.82.2) (2023-11-03)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @swagger-api/apidom-core
|
package/README.md
CHANGED
|
@@ -687,6 +687,25 @@ const numberElement = new NumberElement(1);
|
|
|
687
687
|
dehyrate(numberElement); // => { element: 'number', content: 1 }
|
|
688
688
|
```
|
|
689
689
|
|
|
690
|
+
### S-Expression
|
|
691
|
+
|
|
692
|
+
Transforms ApiDOM into [symbolic expression](https://en.wikipedia.org/wiki/S-expression).
|
|
693
|
+
|
|
694
|
+
```js
|
|
695
|
+
import { sexprs, ObjectElement } from '@swagger-api/apidom-core';
|
|
696
|
+
|
|
697
|
+
const objectElement = new ObjectElement({ a: 1 });
|
|
698
|
+
|
|
699
|
+
sexprs(objectElement);
|
|
700
|
+
// =>
|
|
701
|
+
// (ObjectElement
|
|
702
|
+
// (MemberElement
|
|
703
|
+
// (StringElement)
|
|
704
|
+
// (NumberElement)))
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
```
|
|
708
|
+
|
|
690
709
|
### toString
|
|
691
710
|
|
|
692
711
|
Create a [refracted string](https://github.com/refractproject/refract-spec) representation of an Element.
|
|
@@ -7,7 +7,7 @@ class CloneError extends _apidomError.ApiDOMStructuredError {
|
|
|
7
7
|
constructor(message, structuredOptions) {
|
|
8
8
|
super(message, structuredOptions);
|
|
9
9
|
if (typeof structuredOptions !== 'undefined') {
|
|
10
|
-
this.value = structuredOptions.
|
|
10
|
+
this.value = structuredOptions.value;
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _apidomError = require("@swagger-api/apidom-error");
|
|
6
|
+
class ElementIdentityError extends _apidomError.ApiDOMStructuredError {
|
|
7
|
+
constructor(message, structuredOptions) {
|
|
8
|
+
super(message, structuredOptions);
|
|
9
|
+
if (typeof structuredOptions !== 'undefined') {
|
|
10
|
+
this.value = structuredOptions.value;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
var _default = exports.default = ElementIdentityError;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.defaultIdentityManager = exports.IdentityManager = void 0;
|
|
6
|
+
var _minim = require("minim");
|
|
7
|
+
var _stampit = _interopRequireDefault(require("stampit"));
|
|
8
|
+
var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
|
|
9
|
+
var _ElementIdentityError = _interopRequireDefault(require("./errors/ElementIdentityError.cjs"));
|
|
10
|
+
var _index = require("../predicates/index.cjs");
|
|
11
|
+
const IdentityManager = exports.IdentityManager = (0, _stampit.default)({
|
|
12
|
+
props: {
|
|
13
|
+
uuid: null,
|
|
14
|
+
length: null,
|
|
15
|
+
identityMap: null
|
|
16
|
+
},
|
|
17
|
+
init({
|
|
18
|
+
length = 6
|
|
19
|
+
} = {}) {
|
|
20
|
+
this.length = 6;
|
|
21
|
+
this.uuid = new _shortUniqueId.default({
|
|
22
|
+
length
|
|
23
|
+
});
|
|
24
|
+
this.identityMap = new WeakMap();
|
|
25
|
+
},
|
|
26
|
+
methods: {
|
|
27
|
+
identify(element) {
|
|
28
|
+
if (!(0, _index.isElement)(element)) {
|
|
29
|
+
throw new _ElementIdentityError.default('Cannot not identify the element. `element` is neither structurally compatible nor a subclass of an Element class.', {
|
|
30
|
+
value: element
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// use already assigned identity
|
|
35
|
+
if (element.meta.hasKey('id') && (0, _index.isStringElement)(element.meta.id) && !element.meta.id.equals('')) {
|
|
36
|
+
return element.id;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// assign identity in immutable way
|
|
40
|
+
if (this.identityMap.has(element)) {
|
|
41
|
+
return this.identityMap.get(element);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// return element identity
|
|
45
|
+
const id = new _minim.StringElement(this.generateId());
|
|
46
|
+
this.identityMap.set(element, id);
|
|
47
|
+
return id;
|
|
48
|
+
},
|
|
49
|
+
forget(element) {
|
|
50
|
+
if (this.identityMap.has(element)) {
|
|
51
|
+
this.identityMap.delete(element);
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
},
|
|
56
|
+
generateId() {
|
|
57
|
+
return this.uuid.randomUUID();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
const defaultIdentityManager = exports.defaultIdentityManager = IdentityManager({
|
|
62
|
+
length: 6
|
|
63
|
+
});
|
package/cjs/index.cjs
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
4
4
|
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
5
5
|
exports.__esModule = true;
|
|
6
|
-
exports.visit = exports.traverse = exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.some = exports.sexprs = exports.reject = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.refract = exports.parents = exports.namespace = exports.mergeAllVisitors = exports.keyMap = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = exports.getNodeType = exports.from = exports.findAtOffset = exports.find = exports.filter = exports.dispatchRefractorPlugins = exports.dereference = exports.dehydrate = exports.deepmerge = exports.createPredicate = exports.createNamespace = exports.cloneShallow = exports.cloneNode = exports.cloneDeep = exports.Transcluder = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.MediaTypes = exports.LinkElement = exports.KeyValuePair = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CloneError = exports.BooleanElement = exports.BREAK = exports.ArraySlice = exports.ArrayElement = exports.AnnotationElement = void 0;
|
|
6
|
+
exports.visit = exports.traverse = exports.transclude = exports.toYAML = exports.toValue = exports.toString = exports.toJSON = exports.some = exports.sexprs = exports.reject = exports.refractorPluginSemanticElementIdentity = exports.refractorPluginElementIdentity = exports.refract = exports.parents = exports.namespace = exports.mergeAllVisitors = exports.keyMap = exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = exports.getNodeType = exports.from = exports.findAtOffset = exports.find = exports.filter = exports.dispatchRefractorPlugins = exports.dereference = exports.dehydrate = exports.defaultIdentityManager = exports.deepmerge = exports.createPredicate = exports.createNamespace = exports.cloneShallow = exports.cloneNode = exports.cloneDeep = exports.Transcluder = exports.StringElement = exports.SourceMapElement = exports.ShallowCloneError = exports.RefElement = exports.ParseResultElement = exports.ObjectSlice = exports.ObjectElement = exports.NumberElement = exports.NullElement = exports.Namespace = exports.MemberElement = exports.MediaTypes = exports.LinkElement = exports.KeyValuePair = exports.IdentityManager = exports.ElementIdentityError = exports.Element = exports.DeepCloneError = exports.CommentElement = exports.CloneError = exports.BooleanElement = exports.BREAK = exports.ArraySlice = exports.ArrayElement = exports.AnnotationElement = void 0;
|
|
7
7
|
var _index = require("./refractor/plugins/utils/index.cjs");
|
|
8
8
|
exports.dispatchRefractorPlugins = _index.dispatchPlugins;
|
|
9
9
|
var _elementIdentity = _interopRequireDefault(require("./refractor/plugins/element-identity.cjs"));
|
|
@@ -85,10 +85,15 @@ var _DeepCloneError = _interopRequireDefault(require("./clone/errors/DeepCloneEr
|
|
|
85
85
|
exports.DeepCloneError = _DeepCloneError.default;
|
|
86
86
|
var _ShallowCloneError = _interopRequireDefault(require("./clone/errors/ShallowCloneError.cjs"));
|
|
87
87
|
exports.ShallowCloneError = _ShallowCloneError.default;
|
|
88
|
+
var _index6 = require("./identity/index.cjs");
|
|
89
|
+
exports.defaultIdentityManager = _index6.defaultIdentityManager;
|
|
90
|
+
exports.IdentityManager = _index6.IdentityManager;
|
|
91
|
+
var _ElementIdentityError = _interopRequireDefault(require("./identity/errors/ElementIdentityError.cjs"));
|
|
92
|
+
exports.ElementIdentityError = _ElementIdentityError.default;
|
|
88
93
|
var _from = _interopRequireDefault(require("./transformers/from.cjs"));
|
|
89
94
|
exports.from = _from.default;
|
|
90
|
-
var
|
|
91
|
-
exports.toValue =
|
|
95
|
+
var _index7 = _interopRequireDefault(require("./transformers/serializers/value/index.cjs"));
|
|
96
|
+
exports.toValue = _index7.default;
|
|
92
97
|
var _json = _interopRequireDefault(require("./transformers/serializers/json.cjs"));
|
|
93
98
|
exports.toJSON = _json.default;
|
|
94
99
|
var _yaml = _interopRequireDefault(require("./transformers/serializers/yaml-1-2.cjs"));
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = void 0;
|
|
6
|
-
var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
|
|
7
5
|
var _minim = require("minim");
|
|
6
|
+
var _index = require("../../identity/index.cjs");
|
|
8
7
|
/**
|
|
9
8
|
* Plugin for decorating every element in ApiDOM tree with UUID.
|
|
10
9
|
*/
|
|
@@ -12,21 +11,21 @@ var _minim = require("minim");
|
|
|
12
11
|
const plugin = ({
|
|
13
12
|
length = 6
|
|
14
13
|
} = {}) => () => {
|
|
15
|
-
let
|
|
14
|
+
let identityManager;
|
|
16
15
|
return {
|
|
17
16
|
pre() {
|
|
18
|
-
|
|
17
|
+
identityManager = (0, _index.IdentityManager)({
|
|
19
18
|
length
|
|
20
19
|
});
|
|
21
20
|
},
|
|
22
21
|
visitor: {
|
|
23
22
|
enter(element) {
|
|
24
|
-
// eslint-disable-
|
|
25
|
-
element.id = new _minim.StringElement(uuid.randomUUID());
|
|
23
|
+
element.id = new _minim.StringElement(identityManager.generateId()); // eslint-disable-line no-param-reassign
|
|
26
24
|
}
|
|
27
25
|
},
|
|
26
|
+
|
|
28
27
|
post() {
|
|
29
|
-
|
|
28
|
+
identityManager = null;
|
|
30
29
|
}
|
|
31
30
|
};
|
|
32
31
|
};
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
3
|
exports.__esModule = true;
|
|
5
4
|
exports.default = void 0;
|
|
6
|
-
var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
|
|
7
5
|
var _minim = require("minim");
|
|
6
|
+
var _index = require("../../identity/index.cjs");
|
|
8
7
|
/**
|
|
9
8
|
* Plugin for decorating every semantic element in ApiDOM tree with UUID.
|
|
10
9
|
*/
|
|
@@ -14,23 +13,23 @@ const plugin = ({
|
|
|
14
13
|
} = {}) => ({
|
|
15
14
|
predicates
|
|
16
15
|
}) => {
|
|
17
|
-
let
|
|
16
|
+
let identityManager;
|
|
18
17
|
return {
|
|
19
18
|
pre() {
|
|
20
|
-
|
|
19
|
+
identityManager = (0, _index.IdentityManager)({
|
|
21
20
|
length
|
|
22
21
|
});
|
|
23
22
|
},
|
|
24
23
|
visitor: {
|
|
25
24
|
enter(element) {
|
|
26
25
|
if (!predicates.isPrimitiveElement(element)) {
|
|
27
|
-
// eslint-disable-
|
|
28
|
-
element.id = new _minim.StringElement(uuid.randomUUID());
|
|
26
|
+
element.id = new _minim.StringElement(identityManager.generateId()); // eslint-disable-line no-param-reassign
|
|
29
27
|
}
|
|
30
28
|
}
|
|
31
29
|
},
|
|
30
|
+
|
|
32
31
|
post() {
|
|
33
|
-
|
|
32
|
+
identityManager = null;
|
|
34
33
|
}
|
|
35
34
|
};
|
|
36
35
|
};
|
|
@@ -7,19 +7,29 @@ var _ramda = require("ramda");
|
|
|
7
7
|
var _ramdaAdjunct = require("ramda-adjunct");
|
|
8
8
|
var _toolbox = _interopRequireDefault(require("../../toolbox.cjs"));
|
|
9
9
|
var _visitor = require("../../../traversal/visitor.cjs");
|
|
10
|
+
const defaultDispatchPluginsOptions = {
|
|
11
|
+
toolboxCreator: _toolbox.default,
|
|
12
|
+
visitorOptions: {
|
|
13
|
+
nodeTypeGetter: _visitor.getNodeType,
|
|
14
|
+
exposeEdits: true
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
10
18
|
// eslint-disable-next-line import/prefer-default-export
|
|
11
19
|
const dispatchPlugins = (element, plugins, options = {}) => {
|
|
12
20
|
if (plugins.length === 0) return element;
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
21
|
+
const mergedOptions = (0, _ramda.mergeDeepRight)(defaultDispatchPluginsOptions, options);
|
|
22
|
+
const {
|
|
23
|
+
toolboxCreator,
|
|
24
|
+
visitorOptions
|
|
25
|
+
} = mergedOptions;
|
|
16
26
|
const toolbox = toolboxCreator();
|
|
17
27
|
const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
|
|
18
|
-
const
|
|
19
|
-
|
|
28
|
+
const mergedPluginsVisitor = (0, _visitor.mergeAllVisitors)(pluginsSpecs.map((0, _ramda.propOr)({}, 'visitor')), {
|
|
29
|
+
...visitorOptions
|
|
20
30
|
});
|
|
21
31
|
pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['pre'], []));
|
|
22
|
-
const newElement = (0, _visitor.visit)(element,
|
|
32
|
+
const newElement = (0, _visitor.visit)(element, mergedPluginsVisitor, visitorOptions);
|
|
23
33
|
pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['post'], []));
|
|
24
34
|
return newElement;
|
|
25
35
|
};
|
|
@@ -20,9 +20,7 @@ const getNodeType = element => {
|
|
|
20
20
|
*
|
|
21
21
|
* There is a problem with naming visitor methods described here: https://github.com/babel/babel/discussions/12874
|
|
22
22
|
*/
|
|
23
|
-
/* eslint-disable no-nested-ternary */
|
|
24
23
|
return (0, _index.isObjectElement)(element) ? 'ObjectElement' : (0, _index.isArrayElement)(element) ? 'ArrayElement' : (0, _index.isMemberElement)(element) ? 'MemberElement' : (0, _index.isStringElement)(element) ? 'StringElement' : (0, _index.isBooleanElement)(element) ? 'BooleanElement' : (0, _index.isNumberElement)(element) ? 'NumberElement' : (0, _index.isNullElement)(element) ? 'NullElement' : (0, _index.isLinkElement)(element) ? 'LinkElement' : (0, _index.isRefElement)(element) ? 'RefElement' : undefined;
|
|
25
|
-
/* eslint-enable */
|
|
26
24
|
};
|
|
27
25
|
|
|
28
26
|
// cloneNode :: a -> a
|