@swagger-api/apidom-core 0.76.2 → 0.77.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 +11 -0
- package/README.md +53 -5
- package/cjs/clone/errors/CloneError.cjs +7 -0
- package/cjs/clone/errors/DeepCloneError.cjs +8 -0
- package/cjs/clone/errors/ShallowCloneError.cjs +8 -0
- package/cjs/clone/index.cjs +105 -0
- package/cjs/deepmerge.cjs +9 -7
- package/cjs/elements/Annotation.cjs +1 -2
- package/cjs/elements/Comment.cjs +1 -2
- package/cjs/elements/ParseResult.cjs +1 -2
- package/cjs/elements/SourceMap.cjs +1 -2
- package/cjs/index.cjs +61 -101
- package/cjs/media-types.cjs +1 -2
- package/cjs/namespace.cjs +1 -2
- package/cjs/predicates/helpers.cjs +1 -2
- package/cjs/predicates/index.cjs +14 -28
- package/cjs/refractor/index.cjs +1 -2
- package/cjs/refractor/plugins/element-identity.cjs +1 -2
- package/cjs/refractor/plugins/semantic-element-identity.cjs +1 -2
- package/cjs/refractor/toolbox.cjs +1 -2
- package/cjs/transcluder/Transcluder.cjs +1 -2
- package/cjs/transcluder/index.cjs +1 -2
- package/cjs/transformers/dehydrate.cjs +14 -0
- package/cjs/transformers/from.cjs +27 -0
- package/cjs/{serializers → transformers/serializers}/json.cjs +1 -2
- package/cjs/{serializers → transformers/serializers}/value/ast/ephemeral-array.cjs +1 -2
- package/cjs/{serializers → transformers/serializers}/value/ast/ephemeral-object.cjs +1 -2
- package/cjs/{serializers → transformers/serializers}/value/index.cjs +8 -2
- package/cjs/{serializers → transformers/serializers}/value/visitor.cjs +1 -1
- package/cjs/{serializers → transformers/serializers}/yaml-1-2.cjs +2 -3
- package/cjs/{sexprs.cjs → transformers/sexprs.cjs} +2 -3
- package/cjs/transformers/to-string.cjs +15 -0
- package/cjs/traversal/filter.cjs +1 -2
- package/cjs/traversal/find.cjs +1 -2
- package/cjs/traversal/findAtOffset.cjs +4 -4
- package/cjs/traversal/parents.cjs +1 -2
- package/cjs/traversal/reject.cjs +1 -2
- package/cjs/traversal/some.cjs +1 -2
- package/cjs/traversal/traverse.cjs +2 -4
- package/cjs/traversal/visitor.cjs +17 -8
- package/dist/apidom-core.browser.js +661 -375
- package/dist/apidom-core.browser.min.js +1 -1
- package/es/clone/errors/CloneError.mjs +3 -0
- package/es/clone/errors/DeepCloneError.mjs +3 -0
- package/es/clone/errors/ShallowCloneError.mjs +3 -0
- package/es/clone/index.mjs +98 -0
- package/es/deepmerge.mjs +9 -8
- package/es/index.mjs +12 -38
- package/es/transformers/dehydrate.mjs +9 -0
- package/es/transformers/from.mjs +22 -0
- package/es/{serializers → transformers/serializers}/value/index.mjs +7 -0
- package/es/{serializers → transformers/serializers}/value/visitor.mjs +1 -1
- package/es/{serializers → transformers/serializers}/yaml-1-2.mjs +1 -1
- package/es/{sexprs.mjs → transformers/sexprs.mjs} +1 -1
- package/es/transformers/to-string.mjs +10 -0
- package/es/traversal/findAtOffset.mjs +3 -2
- package/es/traversal/visitor.mjs +13 -2
- package/package.json +4 -4
- package/types/dist.d.ts +47 -32
- package/types/minim.d.ts +14 -2
- /package/es/{serializers → transformers/serializers}/json.mjs +0 -0
- /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-array.mjs +0 -0
- /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-object.mjs +0 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { ArraySlice, ObjectSlice, KeyValuePair } from 'minim';
|
|
2
|
+
import { isElement } from "../predicates/index.mjs";
|
|
3
|
+
import DeepCloneError from "./errors/DeepCloneError.mjs";
|
|
4
|
+
import ShallowCloneError from "./errors/ShallowCloneError.mjs";
|
|
5
|
+
const invokeClone = value => {
|
|
6
|
+
if (typeof (value === null || value === void 0 ? void 0 : value.clone) === 'function') {
|
|
7
|
+
return value.clone();
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
};
|
|
11
|
+
export const cloneDeep = value => {
|
|
12
|
+
if (value instanceof ObjectSlice) {
|
|
13
|
+
const items = [...value].map(invokeClone);
|
|
14
|
+
return new ObjectSlice(items);
|
|
15
|
+
}
|
|
16
|
+
if (value instanceof ArraySlice) {
|
|
17
|
+
const items = [...value].map(invokeClone);
|
|
18
|
+
return new ArraySlice(items);
|
|
19
|
+
}
|
|
20
|
+
if (typeof (value === null || value === void 0 ? void 0 : value.clone) === 'function') {
|
|
21
|
+
return value.clone();
|
|
22
|
+
}
|
|
23
|
+
throw new DeepCloneError("Value provided to cloneDeep function couldn't be cloned", {
|
|
24
|
+
value
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
cloneDeep.safe = value => {
|
|
28
|
+
try {
|
|
29
|
+
return cloneDeep(value);
|
|
30
|
+
} catch {
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
const cloneShallowKeyValuePair = keyValuePair => {
|
|
35
|
+
const {
|
|
36
|
+
key,
|
|
37
|
+
value
|
|
38
|
+
} = keyValuePair;
|
|
39
|
+
return new KeyValuePair(key, value);
|
|
40
|
+
};
|
|
41
|
+
const cloneShallowArraySlice = arraySlice => {
|
|
42
|
+
const items = [...arraySlice];
|
|
43
|
+
return new ArraySlice(items);
|
|
44
|
+
};
|
|
45
|
+
const cloneShallowObjectSlice = objectSlice => {
|
|
46
|
+
const items = [...objectSlice];
|
|
47
|
+
return new ObjectSlice(items);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/* eslint-disable no-underscore-dangle */
|
|
51
|
+
const cloneShallowElement = element => {
|
|
52
|
+
// @ts-ignore
|
|
53
|
+
const copy = new element.constructor();
|
|
54
|
+
copy.element = element.element;
|
|
55
|
+
if (element.meta.length > 0) {
|
|
56
|
+
copy._meta = cloneDeep(element.meta);
|
|
57
|
+
}
|
|
58
|
+
if (element.attributes.length > 0) {
|
|
59
|
+
copy._attributes = cloneDeep(element.attributes);
|
|
60
|
+
}
|
|
61
|
+
if (isElement(element.content)) {
|
|
62
|
+
const content = element.content;
|
|
63
|
+
copy.content = cloneShallowElement(content);
|
|
64
|
+
} else if (Array.isArray(element.content)) {
|
|
65
|
+
copy.content = [...element.content];
|
|
66
|
+
} else if (element.content instanceof KeyValuePair) {
|
|
67
|
+
copy.content = cloneShallowKeyValuePair(element.content);
|
|
68
|
+
} else {
|
|
69
|
+
copy.content = element.content;
|
|
70
|
+
}
|
|
71
|
+
return copy;
|
|
72
|
+
};
|
|
73
|
+
/* eslint-enable */
|
|
74
|
+
|
|
75
|
+
export const cloneShallow = value => {
|
|
76
|
+
if (value instanceof KeyValuePair) {
|
|
77
|
+
return cloneShallowKeyValuePair(value);
|
|
78
|
+
}
|
|
79
|
+
if (value instanceof ObjectSlice) {
|
|
80
|
+
return cloneShallowObjectSlice(value);
|
|
81
|
+
}
|
|
82
|
+
if (value instanceof ArraySlice) {
|
|
83
|
+
return cloneShallowArraySlice(value);
|
|
84
|
+
}
|
|
85
|
+
if (isElement(value)) {
|
|
86
|
+
return cloneShallowElement(value);
|
|
87
|
+
}
|
|
88
|
+
throw new ShallowCloneError("Value provided to cloneShallow function couldn't be cloned", {
|
|
89
|
+
value
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
cloneShallow.safe = value => {
|
|
93
|
+
try {
|
|
94
|
+
return cloneShallow(value);
|
|
95
|
+
} catch {
|
|
96
|
+
return value;
|
|
97
|
+
}
|
|
98
|
+
};
|
package/es/deepmerge.mjs
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { ObjectElement
|
|
1
|
+
import { ObjectElement } from 'minim';
|
|
2
2
|
import { isObjectElement, isArrayElement } from "./predicates/index.mjs";
|
|
3
|
+
import { cloneDeep, cloneShallow } from "./clone/index.mjs";
|
|
4
|
+
import toValue from "./transformers/serializers/value/index.mjs";
|
|
3
5
|
/* eslint-disable @typescript-eslint/no-use-before-define */
|
|
4
6
|
const emptyElement = element => {
|
|
5
|
-
const meta = element.meta
|
|
6
|
-
const attributes = element.attributes
|
|
7
|
+
const meta = cloneDeep(element.meta);
|
|
8
|
+
const attributes = cloneDeep(element.attributes);
|
|
7
9
|
|
|
8
10
|
// @ts-ignore
|
|
9
11
|
return new element.constructor(undefined, meta, attributes);
|
|
10
12
|
};
|
|
11
|
-
const cloneMemberElement = memberElement => new MemberElement(memberElement.key, memberElement.value, memberElement.meta.clone(), memberElement.attributes.clone());
|
|
12
13
|
const cloneUnlessOtherwiseSpecified = (element, options) => options.clone && options.isMergeableElement(element) ? deepmerge(emptyElement(element), element, options) : element;
|
|
13
14
|
const getMergeFunction = (keyElement, options) => {
|
|
14
15
|
if (typeof options.customMerge !== 'function') {
|
|
@@ -22,20 +23,20 @@ const mergeObjectElement = (targetElement, sourceElement, options) => {
|
|
|
22
23
|
const destination = isObjectElement(targetElement) ? emptyElement(targetElement) : emptyElement(sourceElement);
|
|
23
24
|
if (isObjectElement(targetElement)) {
|
|
24
25
|
targetElement.forEach((value, key, member) => {
|
|
25
|
-
const clonedMember =
|
|
26
|
+
const clonedMember = cloneShallow(member);
|
|
26
27
|
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
27
28
|
destination.content.push(clonedMember);
|
|
28
29
|
});
|
|
29
30
|
}
|
|
30
31
|
sourceElement.forEach((value, key, member) => {
|
|
31
|
-
const keyValue =
|
|
32
|
+
const keyValue = toValue(key);
|
|
32
33
|
let clonedMember;
|
|
33
34
|
if (isObjectElement(targetElement) && targetElement.hasKey(keyValue) && options.isMergeableElement(value)) {
|
|
34
35
|
const targetValue = targetElement.get(keyValue);
|
|
35
|
-
clonedMember =
|
|
36
|
+
clonedMember = cloneShallow(member);
|
|
36
37
|
clonedMember.value = getMergeFunction(key, options)(targetValue, value);
|
|
37
38
|
} else {
|
|
38
|
-
clonedMember =
|
|
39
|
+
clonedMember = cloneShallow(member);
|
|
39
40
|
clonedMember.value = cloneUnlessOtherwiseSpecified(value, options);
|
|
40
41
|
}
|
|
41
42
|
destination.remove(keyValue);
|
package/es/index.mjs
CHANGED
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
import { has } from 'ramda';
|
|
2
|
-
import { isPlainObject, isString } from 'ramda-adjunct';
|
|
3
|
-
import defaultNamespaceInstance from "./namespace.mjs";
|
|
4
|
-
import serializeValue from "./serializers/value/index.mjs";
|
|
5
|
-
import serializeJSON from "./serializers/json.mjs";
|
|
6
|
-
import serializeYAML from "./serializers/yaml-1-2.mjs";
|
|
7
1
|
export { dispatchPlugins as dispatchRefractorPlugins } from "./refractor/plugins/utils/index.mjs";
|
|
8
2
|
export { default as refractorPluginElementIdentity } from "./refractor/plugins/element-identity.mjs";
|
|
9
3
|
export { default as refractorPluginSemanticElementIdentity } from "./refractor/plugins/semantic-element-identity.mjs";
|
|
@@ -14,59 +8,39 @@ export { ObjectElement, ArrayElement, BooleanElement, NullElement, NumberElement
|
|
|
14
8
|
export { isElement, isStringElement, isNumberElement, isNullElement, isBooleanElement, isArrayElement, isObjectElement, isMemberElement, isLinkElement, isRefElement, isAnnotationElement, isParseResultElement, isSourceMapElement, isPrimitiveElement, hasElementSourceMap, includesSymbols, includesClasses } from "./predicates/index.mjs";
|
|
15
9
|
export { default as createPredicate } from "./predicates/helpers.mjs";
|
|
16
10
|
export { filter, reject, find, findAtOffset, some, traverse, parents } from "./traversal/index.mjs";
|
|
17
|
-
export { visit, BREAK, mergeAllVisitors, getNodeType, keyMapDefault as keyMap } from "./traversal/visitor.mjs";
|
|
11
|
+
export { visit, BREAK, mergeAllVisitors, getNodeType, cloneNode, keyMapDefault as keyMap } from "./traversal/visitor.mjs";
|
|
18
12
|
export { transclude, default as Transcluder } from "./transcluder/index.mjs";
|
|
19
13
|
export { dereference } from "./util.mjs";
|
|
14
|
+
export { cloneShallow, cloneDeep } from "./clone/index.mjs";
|
|
15
|
+
export { default as CloneError } from "./clone/errors/CloneError.mjs";
|
|
16
|
+
export { default as DeepCloneError } from "./clone/errors/DeepCloneError.mjs";
|
|
17
|
+
export { default as ShallowCloneError } from "./clone/errors/ShallowCloneError.mjs";
|
|
20
18
|
/**
|
|
21
19
|
* Transforms data to an Element from a particular namespace.
|
|
22
20
|
*/
|
|
23
|
-
export
|
|
24
|
-
if (isString(data)) {
|
|
25
|
-
// JSON serialized refract
|
|
26
|
-
try {
|
|
27
|
-
return namespace.fromRefract(JSON.parse(data));
|
|
28
|
-
} catch {
|
|
29
|
-
// noop
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
if (isPlainObject(data) && has('element', data)) {
|
|
33
|
-
// refract javascript structure
|
|
34
|
-
return namespace.fromRefract(data);
|
|
35
|
-
}
|
|
36
|
-
return namespace.toElement(data);
|
|
37
|
-
};
|
|
38
|
-
|
|
21
|
+
export { default as from } from "./transformers/from.mjs";
|
|
39
22
|
/**
|
|
40
23
|
* Transforms the ApiDOM into JavaScript POJO.
|
|
41
24
|
* This POJO would be the result of interpreting the ApiDOM
|
|
42
25
|
* into JavaScript structure.
|
|
43
26
|
*/
|
|
44
|
-
export
|
|
45
|
-
|
|
27
|
+
export { default as toValue } from "./transformers/serializers/value/index.mjs";
|
|
46
28
|
/**
|
|
47
29
|
* Transforms the ApiDOM into JSON string.
|
|
48
30
|
*/
|
|
49
|
-
export
|
|
50
|
-
|
|
31
|
+
export { default as toJSON } from "./transformers/serializers/json.mjs";
|
|
51
32
|
/**
|
|
52
33
|
* Transforms the ApiDOM into YAML string.
|
|
53
34
|
*/
|
|
54
|
-
export
|
|
55
|
-
|
|
35
|
+
export { default as toYAML } from "./transformers/serializers/yaml-1-2.mjs";
|
|
56
36
|
/**
|
|
57
37
|
* Creates a refract representation of an Element.
|
|
58
38
|
* https://github.com/refractproject/refract-spec
|
|
59
39
|
*/
|
|
60
|
-
export
|
|
61
|
-
return namespace.toRefract(element);
|
|
62
|
-
};
|
|
63
|
-
|
|
40
|
+
export { default as dehydrate } from "./transformers/dehydrate.mjs";
|
|
64
41
|
/**
|
|
65
42
|
* Create a refracted string representation of an Element.
|
|
66
43
|
*/
|
|
67
|
-
export
|
|
68
|
-
|
|
69
|
-
return JSON.stringify(refractStructure);
|
|
70
|
-
};
|
|
71
|
-
export { default as sexprs } from "./sexprs.mjs";
|
|
44
|
+
export { default as toString } from "./transformers/to-string.mjs";
|
|
45
|
+
export { default as sexprs } from "./transformers/sexprs.mjs";
|
|
72
46
|
export { default as deepmerge } from "./deepmerge.mjs";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a refract representation of an Element.
|
|
4
|
+
* https://github.com/refractproject/refract-spec
|
|
5
|
+
*/
|
|
6
|
+
const dehydrate = (element, namespace = defaultNamespaceInstance) => {
|
|
7
|
+
return namespace.toRefract(element);
|
|
8
|
+
};
|
|
9
|
+
export default dehydrate;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { has } from 'ramda';
|
|
2
|
+
import { isPlainObject, isString } from 'ramda-adjunct';
|
|
3
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
4
|
+
/**
|
|
5
|
+
* Transforms data to an Element from a particular namespace.
|
|
6
|
+
*/
|
|
7
|
+
const from = (data, namespace = defaultNamespaceInstance) => {
|
|
8
|
+
if (isString(data)) {
|
|
9
|
+
// JSON serialized refract
|
|
10
|
+
try {
|
|
11
|
+
return namespace.fromRefract(JSON.parse(data));
|
|
12
|
+
} catch {
|
|
13
|
+
// noop
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
if (isPlainObject(data) && has('element', data)) {
|
|
17
|
+
// refract javascript structure
|
|
18
|
+
return namespace.fromRefract(data);
|
|
19
|
+
}
|
|
20
|
+
return namespace.toElement(data);
|
|
21
|
+
};
|
|
22
|
+
export default from;
|
|
@@ -2,6 +2,7 @@ import stampit from 'stampit';
|
|
|
2
2
|
import { visit } from "./visitor.mjs";
|
|
3
3
|
import EphemeralArray from "./ast/ephemeral-array.mjs";
|
|
4
4
|
import EphemeralObject from "./ast/ephemeral-object.mjs";
|
|
5
|
+
import { isElement, isBooleanElement, isNumberElement, isStringElement, isNullElement } from "../../../predicates/index.mjs";
|
|
5
6
|
/* eslint-disable @typescript-eslint/naming-convention */
|
|
6
7
|
const Visitor = stampit.init(function _Visitor() {
|
|
7
8
|
const references = new WeakMap();
|
|
@@ -56,6 +57,12 @@ const Visitor = stampit.init(function _Visitor() {
|
|
|
56
57
|
/* eslint-enable */
|
|
57
58
|
|
|
58
59
|
const serializer = element => {
|
|
60
|
+
if (!isElement(element)) return element;
|
|
61
|
+
|
|
62
|
+
// shortcut optimization for certain element types
|
|
63
|
+
if (isStringElement(element) || isNumberElement(element) || isBooleanElement(element) || isNullElement(element)) {
|
|
64
|
+
return element.toValue();
|
|
65
|
+
}
|
|
59
66
|
return visit(element, Visitor());
|
|
60
67
|
};
|
|
61
68
|
export default serializer;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { T as stubTrue } from 'ramda';
|
|
2
|
-
import { visit as astVisit, keyMapDefault as baseKeyMap, getNodeType as baseGetNodeType } from "
|
|
2
|
+
import { visit as astVisit, keyMapDefault as baseKeyMap, getNodeType as baseGetNodeType } from "../../../traversal/visitor.mjs";
|
|
3
3
|
const nodeTypeGetter = node => {
|
|
4
4
|
if (typeof (node === null || node === void 0 ? void 0 : node.type) === 'string') {
|
|
5
5
|
return node.type;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
2
|
+
import dehydrate from "./dehydrate.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Create a refracted string representation of an Element.
|
|
5
|
+
*/
|
|
6
|
+
const toString = (element, namespace = defaultNamespaceInstance) => {
|
|
7
|
+
const refractStructure = dehydrate(element, namespace);
|
|
8
|
+
return JSON.stringify(refractStructure);
|
|
9
|
+
};
|
|
10
|
+
export default toString;
|
|
@@ -3,6 +3,7 @@ import { last, pathOr } from 'ramda';
|
|
|
3
3
|
import { isNumber } from 'ramda-adjunct';
|
|
4
4
|
import { hasElementSourceMap } from "../predicates/index.mjs";
|
|
5
5
|
import { visit } from "./visitor.mjs";
|
|
6
|
+
import toValue from "../transformers/serializers/value/index.mjs";
|
|
6
7
|
const Visitor = stampit({
|
|
7
8
|
props: {
|
|
8
9
|
result: [],
|
|
@@ -25,8 +26,8 @@ const Visitor = stampit({
|
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
const sourceMapElement = element.getMetaProperty('sourceMap');
|
|
28
|
-
const charStart = sourceMapElement.positionStart.get(2)
|
|
29
|
-
const charEnd = sourceMapElement.positionEnd.get(2)
|
|
29
|
+
const charStart = toValue(sourceMapElement.positionStart.get(2));
|
|
30
|
+
const charEnd = toValue(sourceMapElement.positionEnd.get(2));
|
|
30
31
|
const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
|
|
31
32
|
if (isWithinOffsetRange) {
|
|
32
33
|
this.result.push(element);
|
package/es/traversal/visitor.mjs
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import stampit from 'stampit';
|
|
2
2
|
import { F as stubFalse, pipe } from 'ramda';
|
|
3
3
|
import { isString } from 'ramda-adjunct';
|
|
4
|
-
import { visit as astVisit, BREAK, mergeAllVisitors } from '@swagger-api/apidom-ast';
|
|
5
|
-
import { isMemberElement, isArrayElement, isStringElement, isBooleanElement, isLinkElement, isRefElement, isObjectElement, isNullElement, isNumberElement } from "../predicates/index.mjs";
|
|
4
|
+
import { visit as astVisit, BREAK, mergeAllVisitors, cloneNode as cloneNodeDefault } from '@swagger-api/apidom-ast';
|
|
5
|
+
import { isElement, isMemberElement, isArrayElement, isStringElement, isBooleanElement, isLinkElement, isRefElement, isObjectElement, isNullElement, isNumberElement } from "../predicates/index.mjs";
|
|
6
|
+
import { cloneShallow } from "../clone/index.mjs";
|
|
6
7
|
export { BREAK, mergeAllVisitors };
|
|
7
8
|
|
|
8
9
|
// getNodeType :: Node -> String
|
|
@@ -19,6 +20,14 @@ export const getNodeType = element => {
|
|
|
19
20
|
/* eslint-enable */
|
|
20
21
|
};
|
|
21
22
|
|
|
23
|
+
// cloneNode :: a -> a
|
|
24
|
+
export const cloneNode = node => {
|
|
25
|
+
if (isElement(node)) {
|
|
26
|
+
return cloneShallow(node);
|
|
27
|
+
}
|
|
28
|
+
return cloneNodeDefault(node);
|
|
29
|
+
};
|
|
30
|
+
|
|
22
31
|
// isNode :: Node -> Boolean
|
|
23
32
|
export const isNode = pipe(getNodeType, isString);
|
|
24
33
|
export const keyMapDefault = {
|
|
@@ -81,6 +90,7 @@ visitor, {
|
|
|
81
90
|
// @ts-ignore
|
|
82
91
|
nodeTypeGetter: getNodeType,
|
|
83
92
|
nodePredicate: isNode,
|
|
93
|
+
nodeCloneFn: cloneNode,
|
|
84
94
|
...rest
|
|
85
95
|
});
|
|
86
96
|
};
|
|
@@ -99,6 +109,7 @@ visitor, {
|
|
|
99
109
|
// @ts-ignore
|
|
100
110
|
nodeTypeGetter: getNodeType,
|
|
101
111
|
nodePredicate: isNode,
|
|
112
|
+
nodeCloneFn: cloneNode,
|
|
102
113
|
...rest
|
|
103
114
|
});
|
|
104
115
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@swagger-api/apidom-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.77.0",
|
|
4
4
|
"description": "Tools for manipulating ApiDOM structures.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
"license": "Apache-2.0",
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@babel/runtime-corejs3": "^7.20.7",
|
|
45
|
-
"@swagger-api/apidom-ast": "^0.
|
|
46
|
-
"@swagger-api/apidom-error": "^0.
|
|
45
|
+
"@swagger-api/apidom-ast": "^0.77.0",
|
|
46
|
+
"@swagger-api/apidom-error": "^0.77.0",
|
|
47
47
|
"@types/ramda": "~0.29.3",
|
|
48
48
|
"minim": "~0.23.8",
|
|
49
49
|
"ramda": "~0.29.0",
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
"README.md",
|
|
63
63
|
"CHANGELOG.md"
|
|
64
64
|
],
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "cd8a9d7d2ea8bb8c335c23cd4632830a79c426c9"
|
|
66
66
|
}
|
package/types/dist.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/// <reference path="./minim.d.ts" />
|
|
2
|
-
import { Element, ArrayElement, Meta, Attributes, Namespace as Namespace$1, NamespacePlugin, StringElement, ArraySlice, ObjectElement } from 'minim';
|
|
2
|
+
import { Element, ArrayElement, Meta, Attributes, Namespace as Namespace$1, NamespacePlugin, StringElement, ArraySlice, KeyValuePair, ObjectSlice, ObjectElement } from 'minim';
|
|
3
3
|
export { ArrayElement, ArraySlice, Attributes, BooleanElement, Element, KeyValuePair, LinkElement, MemberElement, Meta, NamespacePluginOptions, NullElement, NumberElement, ObjectElement, ObjectSlice, RefElement, StringElement, refract } from 'minim';
|
|
4
4
|
import { Pred } from 'ramda';
|
|
5
5
|
import stampit from 'stampit';
|
|
6
|
+
import { ApiDOMStructuredError } from '@swagger-api/apidom-error';
|
|
6
7
|
export { BREAK, mergeAllVisitors } from '@swagger-api/apidom-ast';
|
|
7
8
|
|
|
8
9
|
declare const dispatchPlugins: <T extends Element>(element: T, plugins: any[], options?: {}) => T;
|
|
@@ -146,6 +147,7 @@ declare const traverse: <T extends Element>(options: Callback | TraverseOptions,
|
|
|
146
147
|
declare const parents: <T extends Element>(element: T) => WeakMap<Element, Element>;
|
|
147
148
|
|
|
148
149
|
declare const getNodeType: <T extends Element>(element: T) => string | undefined;
|
|
150
|
+
declare const cloneNode: <T>(node: T) => T;
|
|
149
151
|
declare const keyMapDefault: {
|
|
150
152
|
ObjectElement: string[];
|
|
151
153
|
ArrayElement: string[];
|
|
@@ -200,6 +202,49 @@ declare const transclude: (search: Element, replace: Element, element: Element)
|
|
|
200
202
|
*/
|
|
201
203
|
declare const dereference: (object: Record<string, any>, root?: Record<string, any>) => Record<string, any>;
|
|
202
204
|
|
|
205
|
+
type FinalCloneTypes = KeyValuePair | ArraySlice | ObjectSlice;
|
|
206
|
+
declare const cloneDeep: {
|
|
207
|
+
<T extends Element | FinalCloneTypes>(value: T): T;
|
|
208
|
+
safe<T_1>(value: T_1): T_1;
|
|
209
|
+
};
|
|
210
|
+
declare const cloneShallow: {
|
|
211
|
+
<T extends Element | FinalCloneTypes>(value: T): T;
|
|
212
|
+
safe<T_1>(value: T_1): T_1;
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
declare class CloneError extends ApiDOMStructuredError {
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
declare class DeepCloneError extends CloneError {
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
declare class ShallowCloneError extends CloneError {
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Transforms data to an Element from a particular namespace.
|
|
226
|
+
*/
|
|
227
|
+
declare const from: (data: any, namespace?: Namespace$1) => Element;
|
|
228
|
+
|
|
229
|
+
declare const serializer$2: <T extends unknown>(element: T) => any;
|
|
230
|
+
|
|
231
|
+
declare const serializer$1: (element: Element, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number) => string;
|
|
232
|
+
|
|
233
|
+
declare const serializer: (element: Element, { directive }?: {
|
|
234
|
+
directive?: boolean | undefined;
|
|
235
|
+
}) => string;
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* Creates a refract representation of an Element.
|
|
239
|
+
* https://github.com/refractproject/refract-spec
|
|
240
|
+
*/
|
|
241
|
+
declare const dehydrate: (element: Element, namespace?: Namespace$1) => any;
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Create a refracted string representation of an Element.
|
|
245
|
+
*/
|
|
246
|
+
declare const toString: (element: Element, namespace?: Namespace$1) => string;
|
|
247
|
+
|
|
203
248
|
declare const sexprs: (element: Element) => string;
|
|
204
249
|
|
|
205
250
|
type ObjectOrArrayElement = ObjectElement | ArrayElement;
|
|
@@ -227,34 +272,4 @@ declare namespace deepmerge {
|
|
|
227
272
|
var all: (list: ObjectOrArrayElement[], options?: DeepMergeOptions | undefined) => any;
|
|
228
273
|
}
|
|
229
274
|
|
|
230
|
-
|
|
231
|
-
* Transforms data to an Element from a particular namespace.
|
|
232
|
-
*/
|
|
233
|
-
declare const from: (data: any, namespace?: Namespace$1) => Element;
|
|
234
|
-
/**
|
|
235
|
-
* Transforms the ApiDOM into JavaScript POJO.
|
|
236
|
-
* This POJO would be the result of interpreting the ApiDOM
|
|
237
|
-
* into JavaScript structure.
|
|
238
|
-
*/
|
|
239
|
-
declare const toValue: <T extends Element>(element: T) => any;
|
|
240
|
-
/**
|
|
241
|
-
* Transforms the ApiDOM into JSON string.
|
|
242
|
-
*/
|
|
243
|
-
declare const toJSON: (element: Element, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number | undefined) => string;
|
|
244
|
-
/**
|
|
245
|
-
* Transforms the ApiDOM into YAML string.
|
|
246
|
-
*/
|
|
247
|
-
declare const toYAML: (element: Element, { directive }?: {
|
|
248
|
-
directive?: boolean | undefined;
|
|
249
|
-
}) => string;
|
|
250
|
-
/**
|
|
251
|
-
* Creates a refract representation of an Element.
|
|
252
|
-
* https://github.com/refractproject/refract-spec
|
|
253
|
-
*/
|
|
254
|
-
declare const dehydrate: (element: Element, namespace?: Namespace$1) => any;
|
|
255
|
-
/**
|
|
256
|
-
* Create a refracted string representation of an Element.
|
|
257
|
-
*/
|
|
258
|
-
declare const toString: (element: Element, namespace?: Namespace$1) => string;
|
|
259
|
-
|
|
260
|
-
export { Annotation as AnnotationElement, Comment as CommentElement, MediaTypes, Namespace, ParseResult as ParseResultElement, Position, PositionRange, SourceMap as SourceMapElement, Transcluder, createNamespace, createPredicate, deepmerge, dehydrate, dereference, dispatchPlugins as dispatchRefractorPlugins, filter, find, findAtOffset, from, getNodeType, hasElementSourceMap, includesClasses, includesSymbols, isAnnotationElement, isArrayElement, isBooleanElement, isElement, isLinkElement, isMemberElement, isNullElement, isNumberElement, isObjectElement, isParseResultElement, isPrimitiveElement, isRefElement, isSourceMapElement, isStringElement, keyMapDefault as keyMap, namespace, parents, plugin$1 as refractorPluginElementIdentity, plugin as refractorPluginSemanticElementIdentity, reject, sexprs, some, toJSON, toString, toValue, toYAML, transclude, traverse, visit };
|
|
275
|
+
export { Annotation as AnnotationElement, CloneError, Comment as CommentElement, DeepCloneError, MediaTypes, Namespace, ParseResult as ParseResultElement, Position, PositionRange, ShallowCloneError, SourceMap as SourceMapElement, Transcluder, cloneDeep, cloneNode, cloneShallow, createNamespace, createPredicate, deepmerge, dehydrate, dereference, dispatchPlugins as dispatchRefractorPlugins, filter, find, findAtOffset, from, getNodeType, hasElementSourceMap, includesClasses, includesSymbols, isAnnotationElement, isArrayElement, isBooleanElement, isElement, isLinkElement, isMemberElement, isNullElement, isNumberElement, isObjectElement, isParseResultElement, isPrimitiveElement, isRefElement, isSourceMapElement, isStringElement, keyMapDefault as keyMap, namespace, parents, plugin$1 as refractorPluginElementIdentity, plugin as refractorPluginSemanticElementIdentity, reject, sexprs, some, serializer$1 as toJSON, toString, serializer$2 as toValue, serializer as toYAML, transclude, traverse, visit };
|
package/types/minim.d.ts
CHANGED
|
@@ -214,9 +214,21 @@ declare module 'minim' {
|
|
|
214
214
|
[Symbol.iterator](): IterableIterator<any>;
|
|
215
215
|
|
|
216
216
|
toValue(): any;
|
|
217
|
+
|
|
218
|
+
clone(): ArraySlice;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
export class ObjectSlice extends ArraySlice {
|
|
222
|
+
clone(): ObjectSlice;
|
|
217
223
|
}
|
|
218
224
|
|
|
219
|
-
export class
|
|
225
|
+
export class KeyValuePair {
|
|
226
|
+
public key: Element | undefined;
|
|
220
227
|
|
|
221
|
-
|
|
228
|
+
public value: Element | undefined;
|
|
229
|
+
|
|
230
|
+
constructor(key?: Element, value?: Element);
|
|
231
|
+
|
|
232
|
+
clone(): KeyValuePair;
|
|
233
|
+
}
|
|
222
234
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|