@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.
Files changed (63) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +53 -5
  3. package/cjs/clone/errors/CloneError.cjs +7 -0
  4. package/cjs/clone/errors/DeepCloneError.cjs +8 -0
  5. package/cjs/clone/errors/ShallowCloneError.cjs +8 -0
  6. package/cjs/clone/index.cjs +105 -0
  7. package/cjs/deepmerge.cjs +9 -7
  8. package/cjs/elements/Annotation.cjs +1 -2
  9. package/cjs/elements/Comment.cjs +1 -2
  10. package/cjs/elements/ParseResult.cjs +1 -2
  11. package/cjs/elements/SourceMap.cjs +1 -2
  12. package/cjs/index.cjs +61 -101
  13. package/cjs/media-types.cjs +1 -2
  14. package/cjs/namespace.cjs +1 -2
  15. package/cjs/predicates/helpers.cjs +1 -2
  16. package/cjs/predicates/index.cjs +14 -28
  17. package/cjs/refractor/index.cjs +1 -2
  18. package/cjs/refractor/plugins/element-identity.cjs +1 -2
  19. package/cjs/refractor/plugins/semantic-element-identity.cjs +1 -2
  20. package/cjs/refractor/toolbox.cjs +1 -2
  21. package/cjs/transcluder/Transcluder.cjs +1 -2
  22. package/cjs/transcluder/index.cjs +1 -2
  23. package/cjs/transformers/dehydrate.cjs +14 -0
  24. package/cjs/transformers/from.cjs +27 -0
  25. package/cjs/{serializers → transformers/serializers}/json.cjs +1 -2
  26. package/cjs/{serializers → transformers/serializers}/value/ast/ephemeral-array.cjs +1 -2
  27. package/cjs/{serializers → transformers/serializers}/value/ast/ephemeral-object.cjs +1 -2
  28. package/cjs/{serializers → transformers/serializers}/value/index.cjs +8 -2
  29. package/cjs/{serializers → transformers/serializers}/value/visitor.cjs +1 -1
  30. package/cjs/{serializers → transformers/serializers}/yaml-1-2.cjs +2 -3
  31. package/cjs/{sexprs.cjs → transformers/sexprs.cjs} +2 -3
  32. package/cjs/transformers/to-string.cjs +15 -0
  33. package/cjs/traversal/filter.cjs +1 -2
  34. package/cjs/traversal/find.cjs +1 -2
  35. package/cjs/traversal/findAtOffset.cjs +4 -4
  36. package/cjs/traversal/parents.cjs +1 -2
  37. package/cjs/traversal/reject.cjs +1 -2
  38. package/cjs/traversal/some.cjs +1 -2
  39. package/cjs/traversal/traverse.cjs +2 -4
  40. package/cjs/traversal/visitor.cjs +17 -8
  41. package/dist/apidom-core.browser.js +661 -375
  42. package/dist/apidom-core.browser.min.js +1 -1
  43. package/es/clone/errors/CloneError.mjs +3 -0
  44. package/es/clone/errors/DeepCloneError.mjs +3 -0
  45. package/es/clone/errors/ShallowCloneError.mjs +3 -0
  46. package/es/clone/index.mjs +98 -0
  47. package/es/deepmerge.mjs +9 -8
  48. package/es/index.mjs +12 -38
  49. package/es/transformers/dehydrate.mjs +9 -0
  50. package/es/transformers/from.mjs +22 -0
  51. package/es/{serializers → transformers/serializers}/value/index.mjs +7 -0
  52. package/es/{serializers → transformers/serializers}/value/visitor.mjs +1 -1
  53. package/es/{serializers → transformers/serializers}/yaml-1-2.mjs +1 -1
  54. package/es/{sexprs.mjs → transformers/sexprs.mjs} +1 -1
  55. package/es/transformers/to-string.mjs +10 -0
  56. package/es/traversal/findAtOffset.mjs +3 -2
  57. package/es/traversal/visitor.mjs +13 -2
  58. package/package.json +4 -4
  59. package/types/dist.d.ts +47 -32
  60. package/types/minim.d.ts +14 -2
  61. /package/es/{serializers → transformers/serializers}/json.mjs +0 -0
  62. /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-array.mjs +0 -0
  63. /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-object.mjs +0 -0
@@ -0,0 +1,3 @@
1
+ import CloneError from "./CloneError.mjs";
2
+ class DeepCloneError extends CloneError {}
3
+ export default DeepCloneError;
@@ -0,0 +1,3 @@
1
+ import CloneError from "./CloneError.mjs";
2
+ class ShallowCloneError extends CloneError {}
3
+ export default ShallowCloneError;
@@ -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, MemberElement } from 'minim';
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.clone();
6
- const attributes = element.attributes.clone();
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 = cloneMemberElement(member);
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 = key.toValue();
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 = cloneMemberElement(member);
36
+ clonedMember = cloneShallow(member);
36
37
  clonedMember.value = getMergeFunction(key, options)(targetValue, value);
37
38
  } else {
38
- clonedMember = cloneMemberElement(member);
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 const from = (data, namespace = defaultNamespaceInstance) => {
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 const toValue = serializeValue;
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 const toJSON = serializeJSON;
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 const toYAML = serializeYAML;
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 const dehydrate = (element, namespace = defaultNamespaceInstance) => {
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 const toString = (element, namespace = defaultNamespaceInstance) => {
68
- const refractStructure = dehydrate(element, namespace);
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 "../../traversal/visitor.mjs";
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;
@@ -1,5 +1,5 @@
1
1
  import stampit from 'stampit';
2
- import { visit } from "../traversal/visitor.mjs";
2
+ import { visit } from "../../traversal/visitor.mjs";
3
3
  import serializeValue from "./value/index.mjs";
4
4
  const YamlVisitor = stampit({
5
5
  props: {
@@ -1,5 +1,5 @@
1
1
  import stampit from 'stampit';
2
- import { visit } from "./traversal/visitor.mjs";
2
+ import { visit } from "../traversal/visitor.mjs";
3
3
  const SymbolicExpressionsVisitor = stampit({
4
4
  props: {
5
5
  nestingLevel: 0,
@@ -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).toValue();
29
- const charEnd = sourceMapElement.positionEnd.get(2).toValue();
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);
@@ -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.76.2",
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.76.2",
46
- "@swagger-api/apidom-error": "^0.76.2",
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": "8c6c02f813a663cfaf0ac0963f2b4fd25b8dffe8"
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 ObjectSlice extends ArraySlice {}
225
+ export class KeyValuePair {
226
+ public key: Element | undefined;
220
227
 
221
- export class KeyValuePair {}
228
+ public value: Element | undefined;
229
+
230
+ constructor(key?: Element, value?: Element);
231
+
232
+ clone(): KeyValuePair;
233
+ }
222
234
  }