@swagger-api/apidom-core 0.76.2 → 0.78.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 (64) hide show
  1. package/CHANGELOG.md +17 -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 +4 -5
  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 +4554 -17668
  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/media-types.mjs +3 -3
  50. package/es/transformers/dehydrate.mjs +9 -0
  51. package/es/transformers/from.mjs +22 -0
  52. package/es/{serializers → transformers/serializers}/value/index.mjs +7 -0
  53. package/es/{serializers → transformers/serializers}/value/visitor.mjs +1 -1
  54. package/es/{serializers → transformers/serializers}/yaml-1-2.mjs +1 -1
  55. package/es/{sexprs.mjs → transformers/sexprs.mjs} +1 -1
  56. package/es/transformers/to-string.mjs +10 -0
  57. package/es/traversal/findAtOffset.mjs +3 -2
  58. package/es/traversal/visitor.mjs +13 -2
  59. package/package.json +5 -5
  60. package/types/dist.d.ts +52 -38
  61. package/types/minim.d.ts +14 -2
  62. /package/es/{serializers → transformers/serializers}/json.mjs +0 -0
  63. /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-array.mjs +0 -0
  64. /package/es/{serializers → transformers/serializers}/value/ast/ephemeral-object.mjs +0 -0
@@ -0,0 +1,3 @@
1
+ import { ApiDOMStructuredError } from '@swagger-api/apidom-error';
2
+ class CloneError extends ApiDOMStructuredError {}
3
+ export default CloneError;
@@ -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";
@@ -4,17 +4,17 @@ class MediaTypes extends Array {
4
4
 
5
5
  // eslint-disable-next-line class-methods-use-this
6
6
  filterByFormat() {
7
- throw new NotImplementedError('"filterByFormat" method is not implemented.');
7
+ throw new NotImplementedError('filterByFormat method in MediaTypes class is not yet implemented.');
8
8
  }
9
9
 
10
10
  // eslint-disable-next-line class-methods-use-this
11
11
  findBy() {
12
- throw new NotImplementedError('"findBy" method is not implemented.');
12
+ throw new NotImplementedError('findBy method in MediaTypes class is not yet implemented.');
13
13
  }
14
14
 
15
15
  // eslint-disable-next-line class-methods-use-this
16
16
  latest() {
17
- throw new NotImplementedError('"latest" method is not implemented.');
17
+ throw new NotImplementedError('latest method in MediaTypes class is not yet implemented.');
18
18
  }
19
19
  }
20
20
  export default MediaTypes;
@@ -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.78.0",
4
4
  "description": "Tools for manipulating ApiDOM structures.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -42,9 +42,9 @@
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",
47
- "@types/ramda": "~0.29.3",
45
+ "@swagger-api/apidom-ast": "^0.78.0",
46
+ "@swagger-api/apidom-error": "^0.78.0",
47
+ "@types/ramda": "~0.29.6",
48
48
  "minim": "~0.23.8",
49
49
  "ramda": "~0.29.0",
50
50
  "ramda-adjunct": "^4.1.1",
@@ -62,5 +62,5 @@
62
62
  "README.md",
63
63
  "CHANGELOG.md"
64
64
  ],
65
- "gitHead": "8c6c02f813a663cfaf0ac0963f2b4fd25b8dffe8"
65
+ "gitHead": "d6587217f8a7bec5bbc49ca4dabff8d3d66e0913"
66
66
  }
package/types/dist.d.ts CHANGED
@@ -1,8 +1,8 @@
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
- import { Pred } from 'ramda';
5
4
  import stampit from 'stampit';
5
+ import { ApiDOMStructuredError } from '@swagger-api/apidom-error';
6
6
  export { BREAK, mergeAllVisitors } from '@swagger-api/apidom-ast';
7
7
 
8
8
  declare const dispatchPlugins: <T extends Element>(element: T, plugins: any[], options?: {}) => T;
@@ -122,9 +122,9 @@ interface PredicateHelpers {
122
122
  type PredicateCreator = (helpers: PredicateHelpers) => (element: any) => boolean;
123
123
  declare const createPredicate: (predicateCreator: PredicateCreator) => (element: any) => boolean;
124
124
 
125
- declare const filter: <T extends Element>(predicate: Pred, element: T) => ArraySlice;
125
+ declare const filter: <T extends Element>(predicate: (element: any) => boolean, element: T) => ArraySlice;
126
126
 
127
- declare const find: <T extends Element>(predicate: Pred, element: T) => T | undefined;
127
+ declare const find: <T extends Element>(predicate: (element: any) => boolean, element: T) => T | undefined;
128
128
 
129
129
  interface FindAtOffsetOptions {
130
130
  offset: number;
@@ -132,20 +132,21 @@ interface FindAtOffsetOptions {
132
132
  }
133
133
  declare const findAtOffset: <T extends Element>(options: number | FindAtOffsetOptions, element: T) => T | undefined;
134
134
 
135
- declare const reject: <T extends Element>(predicate: Pred, element: T) => ArraySlice;
135
+ declare const reject: <T extends Element>(predicate: (element: any) => boolean, element: T) => ArraySlice;
136
136
 
137
- declare const some: <T extends Element>(predicate: Pred, element: T) => boolean;
137
+ declare const some: <T extends Element>(predicate: (element: any) => boolean, element: T) => boolean;
138
138
 
139
139
  type Callback = <T extends Element>(element: T) => void;
140
140
  interface TraverseOptions {
141
141
  callback?: Callback;
142
- predicate?: Pred;
142
+ predicate?: (element: any) => boolean;
143
143
  }
144
144
  declare const traverse: <T extends Element>(options: Callback | TraverseOptions, element: T) => void;
145
145
 
146
146
  declare const parents: <T extends Element>(element: T) => WeakMap<Element, Element>;
147
147
 
148
148
  declare const getNodeType: <T extends Element>(element: T) => string | undefined;
149
+ declare const cloneNode: <T>(node: T) => T;
149
150
  declare const keyMapDefault: {
150
151
  ObjectElement: string[];
151
152
  ArrayElement: string[];
@@ -200,6 +201,49 @@ declare const transclude: (search: Element, replace: Element, element: Element)
200
201
  */
201
202
  declare const dereference: (object: Record<string, any>, root?: Record<string, any>) => Record<string, any>;
202
203
 
204
+ type FinalCloneTypes = KeyValuePair | ArraySlice | ObjectSlice;
205
+ declare const cloneDeep: {
206
+ <T extends Element | FinalCloneTypes>(value: T): T;
207
+ safe<T_1>(value: T_1): T_1;
208
+ };
209
+ declare const cloneShallow: {
210
+ <T extends Element | FinalCloneTypes>(value: T): T;
211
+ safe<T_1>(value: T_1): T_1;
212
+ };
213
+
214
+ declare class CloneError extends ApiDOMStructuredError {
215
+ }
216
+
217
+ declare class DeepCloneError extends CloneError {
218
+ }
219
+
220
+ declare class ShallowCloneError extends CloneError {
221
+ }
222
+
223
+ /**
224
+ * Transforms data to an Element from a particular namespace.
225
+ */
226
+ declare const from: (data: any, namespace?: Namespace$1) => Element;
227
+
228
+ declare const serializer$2: <T extends unknown>(element: T) => any;
229
+
230
+ declare const serializer$1: (element: Element, replacer?: ((this: any, key: string, value: any) => any) | undefined, space?: string | number) => string;
231
+
232
+ declare const serializer: (element: Element, { directive }?: {
233
+ directive?: boolean | undefined;
234
+ }) => string;
235
+
236
+ /**
237
+ * Creates a refract representation of an Element.
238
+ * https://github.com/refractproject/refract-spec
239
+ */
240
+ declare const dehydrate: (element: Element, namespace?: Namespace$1) => any;
241
+
242
+ /**
243
+ * Create a refracted string representation of an Element.
244
+ */
245
+ declare const toString: (element: Element, namespace?: Namespace$1) => string;
246
+
203
247
  declare const sexprs: (element: Element) => string;
204
248
 
205
249
  type ObjectOrArrayElement = ObjectElement | ArrayElement;
@@ -227,34 +271,4 @@ declare namespace deepmerge {
227
271
  var all: (list: ObjectOrArrayElement[], options?: DeepMergeOptions | undefined) => any;
228
272
  }
229
273
 
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 };
274
+ export { Annotation as AnnotationElement, CloneError, Comment as CommentElement, DeepCloneError, MediaTypes, Namespace, ParseResult as ParseResultElement, type Position, type 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
  }