@speclynx/apidom-core 1.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +82 -0
- package/LICENSE +202 -0
- package/LICENSES/AFL-3.0.txt +182 -0
- package/LICENSES/Apache-2.0.txt +202 -0
- package/LICENSES/BSD-3-Clause.txt +26 -0
- package/LICENSES/MIT.txt +9 -0
- package/NOTICE +65 -0
- package/README.md +881 -0
- package/dist/apidom-core.browser.js +14724 -0
- package/dist/apidom-core.browser.min.js +1 -0
- package/package.json +67 -0
- package/src/clone/errors/CloneError.cjs +22 -0
- package/src/clone/errors/CloneError.mjs +19 -0
- package/src/clone/errors/DeepCloneError.cjs +11 -0
- package/src/clone/errors/DeepCloneError.mjs +6 -0
- package/src/clone/errors/ShallowCloneError.cjs +11 -0
- package/src/clone/errors/ShallowCloneError.mjs +6 -0
- package/src/clone/index.cjs +155 -0
- package/src/clone/index.mjs +146 -0
- package/src/elements/Annotation.cjs +23 -0
- package/src/elements/Annotation.mjs +20 -0
- package/src/elements/Comment.cjs +15 -0
- package/src/elements/Comment.mjs +12 -0
- package/src/elements/ParseResult.cjs +53 -0
- package/src/elements/ParseResult.mjs +50 -0
- package/src/elements/SourceMap.cjs +39 -0
- package/src/elements/SourceMap.mjs +36 -0
- package/src/identity/errors/ElementIdentityError.cjs +22 -0
- package/src/identity/errors/ElementIdentityError.mjs +19 -0
- package/src/identity/index.cjs +62 -0
- package/src/identity/index.mjs +56 -0
- package/src/index.cjs +112 -0
- package/src/index.mjs +50 -0
- package/src/media-types.cjs +21 -0
- package/src/media-types.mjs +18 -0
- package/src/merge/deepmerge.cjs +151 -0
- package/src/merge/deepmerge.mjs +135 -0
- package/src/merge/merge-left.cjs +16 -0
- package/src/merge/merge-left.mjs +11 -0
- package/src/merge/merge-right.cjs +35 -0
- package/src/merge/merge-right.mjs +29 -0
- package/src/namespace.cjs +42 -0
- package/src/namespace.mjs +35 -0
- package/src/predicates/helpers.cjs +85 -0
- package/src/predicates/helpers.mjs +77 -0
- package/src/predicates/index.cjs +208 -0
- package/src/predicates/index.mjs +198 -0
- package/src/refractor/index.cjs +46 -0
- package/src/refractor/index.mjs +40 -0
- package/src/refractor/plugins/dispatcher/index.cjs +71 -0
- package/src/refractor/plugins/dispatcher/index.mjs +61 -0
- package/src/refractor/plugins/element-identity.cjs +31 -0
- package/src/refractor/plugins/element-identity.mjs +26 -0
- package/src/refractor/plugins/semantic-element-identity.cjs +38 -0
- package/src/refractor/plugins/semantic-element-identity.mjs +33 -0
- package/src/refractor/registration.cjs +34 -0
- package/src/refractor/registration.mjs +19 -0
- package/src/refractor/toolbox.cjs +29 -0
- package/src/refractor/toolbox.mjs +21 -0
- package/src/transcluder/Transcluder.cjs +111 -0
- package/src/transcluder/Transcluder.mjs +107 -0
- package/src/transcluder/index.cjs +19 -0
- package/src/transcluder/index.mjs +13 -0
- package/src/transformers/dehydrate.cjs +15 -0
- package/src/transformers/dehydrate.mjs +10 -0
- package/src/transformers/from.cjs +34 -0
- package/src/transformers/from.mjs +29 -0
- package/src/transformers/serializers/json.cjs +11 -0
- package/src/transformers/serializers/json.mjs +6 -0
- package/src/transformers/serializers/value/ast/ephemeral-array.cjs +21 -0
- package/src/transformers/serializers/value/ast/ephemeral-array.mjs +17 -0
- package/src/transformers/serializers/value/ast/ephemeral-object.cjs +20 -0
- package/src/transformers/serializers/value/ast/ephemeral-object.mjs +16 -0
- package/src/transformers/serializers/value/index.cjs +85 -0
- package/src/transformers/serializers/value/index.mjs +80 -0
- package/src/transformers/serializers/value/visitor.cjs +52 -0
- package/src/transformers/serializers/value/visitor.mjs +47 -0
- package/src/transformers/serializers/yaml-1-2.cjs +90 -0
- package/src/transformers/serializers/yaml-1-2.mjs +85 -0
- package/src/transformers/sexprs.cjs +34 -0
- package/src/transformers/sexprs.mjs +30 -0
- package/src/transformers/to-string.cjs +16 -0
- package/src/transformers/to-string.mjs +11 -0
- package/src/traversal/filter.cjs +18 -0
- package/src/traversal/filter.mjs +14 -0
- package/src/traversal/find.cjs +19 -0
- package/src/traversal/find.mjs +15 -0
- package/src/traversal/findAtOffset.cjs +65 -0
- package/src/traversal/findAtOffset.mjs +60 -0
- package/src/traversal/index.cjs +19 -0
- package/src/traversal/index.mjs +7 -0
- package/src/traversal/parents.cjs +38 -0
- package/src/traversal/parents.mjs +34 -0
- package/src/traversal/reject.cjs +15 -0
- package/src/traversal/reject.mjs +10 -0
- package/src/traversal/some.cjs +15 -0
- package/src/traversal/some.mjs +10 -0
- package/src/traversal/traverse.cjs +60 -0
- package/src/traversal/traverse.mjs +53 -0
- package/src/traversal/visitor.cjs +123 -0
- package/src/traversal/visitor.mjs +115 -0
- package/src/util.cjs +28 -0
- package/src/util.mjs +24 -0
- package/types/apidom-core.d.ts +806 -0
- package/types/minim.d.ts +236 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _index = require("../../identity/index.cjs");
|
|
6
|
+
/**
|
|
7
|
+
* Plugin for decorating every element in ApiDOM tree with UUID.
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const plugin = ({
|
|
12
|
+
length = 6
|
|
13
|
+
} = {}) => () => {
|
|
14
|
+
let identityManager;
|
|
15
|
+
return {
|
|
16
|
+
pre() {
|
|
17
|
+
identityManager = new _index.IdentityManager({
|
|
18
|
+
length
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
visitor: {
|
|
22
|
+
enter(element) {
|
|
23
|
+
element.id = identityManager.identify(element);
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
post() {
|
|
27
|
+
identityManager = null;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
var _default = exports.default = plugin;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { IdentityManager } from "../../identity/index.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Plugin for decorating every element in ApiDOM tree with UUID.
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
const plugin = ({
|
|
7
|
+
length = 6
|
|
8
|
+
} = {}) => () => {
|
|
9
|
+
let identityManager;
|
|
10
|
+
return {
|
|
11
|
+
pre() {
|
|
12
|
+
identityManager = new IdentityManager({
|
|
13
|
+
length
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
visitor: {
|
|
17
|
+
enter(element) {
|
|
18
|
+
element.id = identityManager.identify(element);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
post() {
|
|
22
|
+
identityManager = null;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export default plugin;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _index = require("../../identity/index.cjs");
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Plugin for decorating every semantic element in ApiDOM tree with UUID.
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
const plugin = ({
|
|
15
|
+
length = 6
|
|
16
|
+
} = {}) => ({
|
|
17
|
+
predicates
|
|
18
|
+
}) => {
|
|
19
|
+
let identityManager;
|
|
20
|
+
return {
|
|
21
|
+
pre() {
|
|
22
|
+
identityManager = new _index.IdentityManager({
|
|
23
|
+
length
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
visitor: {
|
|
27
|
+
enter(element) {
|
|
28
|
+
if (!predicates.isPrimitiveElement(element)) {
|
|
29
|
+
element.id = identityManager.identify(element);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
post() {
|
|
34
|
+
identityManager = null;
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
var _default = exports.default = plugin;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { IdentityManager } from "../../identity/index.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* @public
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Plugin for decorating every semantic element in ApiDOM tree with UUID.
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
const plugin = ({
|
|
10
|
+
length = 6
|
|
11
|
+
} = {}) => ({
|
|
12
|
+
predicates
|
|
13
|
+
}) => {
|
|
14
|
+
let identityManager;
|
|
15
|
+
return {
|
|
16
|
+
pre() {
|
|
17
|
+
identityManager = new IdentityManager({
|
|
18
|
+
length
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
visitor: {
|
|
22
|
+
enter(element) {
|
|
23
|
+
if (!predicates.isPrimitiveElement(element)) {
|
|
24
|
+
element.id = identityManager.identify(element);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
post() {
|
|
29
|
+
identityManager = null;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
export default plugin;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
exports.ObjectElement = _minim.ObjectElement;
|
|
7
|
+
exports.ArrayElement = _minim.ArrayElement;
|
|
8
|
+
exports.StringElement = _minim.StringElement;
|
|
9
|
+
exports.BooleanElement = _minim.BooleanElement;
|
|
10
|
+
exports.NullElement = _minim.NullElement;
|
|
11
|
+
exports.NumberElement = _minim.NumberElement;
|
|
12
|
+
exports.LinkElement = _minim.LinkElement;
|
|
13
|
+
exports.RefElement = _minim.RefElement;
|
|
14
|
+
var _Annotation = _interopRequireDefault(require("../elements/Annotation.cjs"));
|
|
15
|
+
exports.AnnotationElement = _Annotation.default;
|
|
16
|
+
var _Comment = _interopRequireDefault(require("../elements/Comment.cjs"));
|
|
17
|
+
exports.CommentElement = _Comment.default;
|
|
18
|
+
var _ParseResult = _interopRequireDefault(require("../elements/ParseResult.cjs"));
|
|
19
|
+
exports.ParseResultElement = _ParseResult.default;
|
|
20
|
+
var _SourceMap = _interopRequireDefault(require("../elements/SourceMap.cjs"));
|
|
21
|
+
exports.SourceMapElement = _SourceMap.default;
|
|
22
|
+
var _index = require("./index.cjs");
|
|
23
|
+
_minim.ObjectElement.refract = (0, _index.createRefractor)(_minim.ObjectElement);
|
|
24
|
+
_minim.ArrayElement.refract = (0, _index.createRefractor)(_minim.ArrayElement);
|
|
25
|
+
_minim.StringElement.refract = (0, _index.createRefractor)(_minim.StringElement);
|
|
26
|
+
_minim.BooleanElement.refract = (0, _index.createRefractor)(_minim.BooleanElement);
|
|
27
|
+
_minim.NullElement.refract = (0, _index.createRefractor)(_minim.NullElement);
|
|
28
|
+
_minim.NumberElement.refract = (0, _index.createRefractor)(_minim.NumberElement);
|
|
29
|
+
_minim.LinkElement.refract = (0, _index.createRefractor)(_minim.LinkElement);
|
|
30
|
+
_minim.RefElement.refract = (0, _index.createRefractor)(_minim.RefElement);
|
|
31
|
+
_Annotation.default.refract = (0, _index.createRefractor)(_Annotation.default);
|
|
32
|
+
_Comment.default.refract = (0, _index.createRefractor)(_Comment.default);
|
|
33
|
+
_ParseResult.default.refract = (0, _index.createRefractor)(_ParseResult.default);
|
|
34
|
+
_SourceMap.default.refract = (0, _index.createRefractor)(_SourceMap.default);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ObjectElement, ArrayElement, StringElement, BooleanElement, NullElement, NumberElement, LinkElement, RefElement } from 'minim';
|
|
2
|
+
import AnnotationElement from "../elements/Annotation.mjs";
|
|
3
|
+
import CommentElement from "../elements/Comment.mjs";
|
|
4
|
+
import ParseResultElement from "../elements/ParseResult.mjs";
|
|
5
|
+
import SourceMapElement from "../elements/SourceMap.mjs";
|
|
6
|
+
import { createRefractor } from "./index.mjs";
|
|
7
|
+
ObjectElement.refract = createRefractor(ObjectElement);
|
|
8
|
+
ArrayElement.refract = createRefractor(ArrayElement);
|
|
9
|
+
StringElement.refract = createRefractor(StringElement);
|
|
10
|
+
BooleanElement.refract = createRefractor(BooleanElement);
|
|
11
|
+
NullElement.refract = createRefractor(NullElement);
|
|
12
|
+
NumberElement.refract = createRefractor(NumberElement);
|
|
13
|
+
LinkElement.refract = createRefractor(LinkElement);
|
|
14
|
+
RefElement.refract = createRefractor(RefElement);
|
|
15
|
+
AnnotationElement.refract = createRefractor(AnnotationElement);
|
|
16
|
+
CommentElement.refract = createRefractor(CommentElement);
|
|
17
|
+
ParseResultElement.refract = createRefractor(ParseResultElement);
|
|
18
|
+
SourceMapElement.refract = createRefractor(SourceMapElement);
|
|
19
|
+
export { ObjectElement, ArrayElement, StringElement, BooleanElement, NullElement, NumberElement, LinkElement, RefElement, AnnotationElement, CommentElement, ParseResultElement, SourceMapElement };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
|
|
5
|
+
exports.__esModule = true;
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var basePredicates = _interopRequireWildcard(require("../predicates/index.cjs"));
|
|
8
|
+
var _namespace = _interopRequireDefault(require("../namespace.cjs"));
|
|
9
|
+
/**
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
20
|
+
const createToolbox = () => {
|
|
21
|
+
const predicates = {
|
|
22
|
+
...basePredicates
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
predicates,
|
|
26
|
+
namespace: _namespace.default
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
var _default = exports.default = createToolbox;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as basePredicates from "../predicates/index.mjs";
|
|
2
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* @public
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* @public
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
const createToolbox = () => {
|
|
13
|
+
const predicates = {
|
|
14
|
+
...basePredicates
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
predicates,
|
|
18
|
+
namespace: defaultNamespaceInstance
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
export default createToolbox;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _ramdaAdjunct = require("ramda-adjunct");
|
|
6
|
+
var _index = require("../predicates/index.cjs");
|
|
7
|
+
const computeEdges = (element, edges = new WeakMap()) => {
|
|
8
|
+
if ((0, _index.isMemberElement)(element)) {
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
edges.set(element.key, element);
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
computeEdges(element.key, edges);
|
|
13
|
+
// @ts-ignore
|
|
14
|
+
edges.set(element.value, element);
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
computeEdges(element.value, edges);
|
|
17
|
+
} else {
|
|
18
|
+
element.children.forEach(childElement => {
|
|
19
|
+
edges.set(childElement, element);
|
|
20
|
+
computeEdges(childElement, edges);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return edges;
|
|
24
|
+
};
|
|
25
|
+
const transcludeChildOfMemberElement = (search, replace, edges) => {
|
|
26
|
+
const memberElement = edges.get(search);
|
|
27
|
+
if (!(0, _index.isMemberElement)(memberElement)) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (memberElement.key === search) {
|
|
31
|
+
memberElement.key = replace;
|
|
32
|
+
edges.delete(search);
|
|
33
|
+
edges.set(replace, memberElement);
|
|
34
|
+
}
|
|
35
|
+
if (memberElement.value === search) {
|
|
36
|
+
memberElement.value = replace;
|
|
37
|
+
edges.delete(search);
|
|
38
|
+
edges.set(replace, memberElement);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
const transcludeChildOfObjectElement = (search, replace, edges) => {
|
|
42
|
+
const objectElement = edges.get(search);
|
|
43
|
+
if (!(0, _index.isObjectElement)(objectElement)) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
objectElement.content = objectElement.map((value, key, member) => {
|
|
47
|
+
if (member === search) {
|
|
48
|
+
edges.delete(search);
|
|
49
|
+
edges.set(replace, objectElement);
|
|
50
|
+
return replace;
|
|
51
|
+
}
|
|
52
|
+
return member;
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const transcludeChildOfArrayElement = (search, replace, edges) => {
|
|
56
|
+
const arrayElement = edges.get(search);
|
|
57
|
+
if (!(0, _index.isArrayElement)(arrayElement)) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
arrayElement.content = arrayElement.map(element => {
|
|
61
|
+
if (element === search) {
|
|
62
|
+
edges.delete(search);
|
|
63
|
+
edges.set(replace, arrayElement);
|
|
64
|
+
return replace;
|
|
65
|
+
}
|
|
66
|
+
return element;
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* This is a mutating stamp. If you don't want your Element to be mutated,
|
|
72
|
+
* clone in before passing it to initializer of this stamp.
|
|
73
|
+
* @public
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
class Transcluder {
|
|
77
|
+
element;
|
|
78
|
+
edges;
|
|
79
|
+
constructor({
|
|
80
|
+
element
|
|
81
|
+
}) {
|
|
82
|
+
this.element = element;
|
|
83
|
+
}
|
|
84
|
+
transclude(search, replace) {
|
|
85
|
+
// shortcut 1. - replacing entire ApiDOM tree
|
|
86
|
+
if (search === this.element) return replace;
|
|
87
|
+
// shortcut 2. - replacing nothing
|
|
88
|
+
if (search === replace) return this.element;
|
|
89
|
+
this.edges = this.edges ?? computeEdges(this.element);
|
|
90
|
+
const parent = this.edges.get(search);
|
|
91
|
+
if ((0, _ramdaAdjunct.isUndefined)(parent)) {
|
|
92
|
+
return undefined;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* This predicate must be first because ObjectElement extends ArrayElement.
|
|
97
|
+
* isArrayElement returns true for ObjectElements.
|
|
98
|
+
* (classical problems with polymorphism)
|
|
99
|
+
*/
|
|
100
|
+
if ((0, _index.isObjectElement)(parent)) {
|
|
101
|
+
// @ts-ignore
|
|
102
|
+
transcludeChildOfObjectElement(search, replace, this.edges);
|
|
103
|
+
} else if ((0, _index.isArrayElement)(parent)) {
|
|
104
|
+
transcludeChildOfArrayElement(search, replace, this.edges);
|
|
105
|
+
} else if ((0, _index.isMemberElement)(parent)) {
|
|
106
|
+
transcludeChildOfMemberElement(search, replace, this.edges);
|
|
107
|
+
}
|
|
108
|
+
return this.element;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
var _default = exports.default = Transcluder;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { isUndefined } from 'ramda-adjunct';
|
|
2
|
+
import { isObjectElement, isArrayElement, isMemberElement } from "../predicates/index.mjs";
|
|
3
|
+
const computeEdges = (element, edges = new WeakMap()) => {
|
|
4
|
+
if (isMemberElement(element)) {
|
|
5
|
+
// @ts-ignore
|
|
6
|
+
edges.set(element.key, element);
|
|
7
|
+
// @ts-ignore
|
|
8
|
+
computeEdges(element.key, edges);
|
|
9
|
+
// @ts-ignore
|
|
10
|
+
edges.set(element.value, element);
|
|
11
|
+
// @ts-ignore
|
|
12
|
+
computeEdges(element.value, edges);
|
|
13
|
+
} else {
|
|
14
|
+
element.children.forEach(childElement => {
|
|
15
|
+
edges.set(childElement, element);
|
|
16
|
+
computeEdges(childElement, edges);
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
return edges;
|
|
20
|
+
};
|
|
21
|
+
const transcludeChildOfMemberElement = (search, replace, edges) => {
|
|
22
|
+
const memberElement = edges.get(search);
|
|
23
|
+
if (!isMemberElement(memberElement)) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (memberElement.key === search) {
|
|
27
|
+
memberElement.key = replace;
|
|
28
|
+
edges.delete(search);
|
|
29
|
+
edges.set(replace, memberElement);
|
|
30
|
+
}
|
|
31
|
+
if (memberElement.value === search) {
|
|
32
|
+
memberElement.value = replace;
|
|
33
|
+
edges.delete(search);
|
|
34
|
+
edges.set(replace, memberElement);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const transcludeChildOfObjectElement = (search, replace, edges) => {
|
|
38
|
+
const objectElement = edges.get(search);
|
|
39
|
+
if (!isObjectElement(objectElement)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
objectElement.content = objectElement.map((value, key, member) => {
|
|
43
|
+
if (member === search) {
|
|
44
|
+
edges.delete(search);
|
|
45
|
+
edges.set(replace, objectElement);
|
|
46
|
+
return replace;
|
|
47
|
+
}
|
|
48
|
+
return member;
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
const transcludeChildOfArrayElement = (search, replace, edges) => {
|
|
52
|
+
const arrayElement = edges.get(search);
|
|
53
|
+
if (!isArrayElement(arrayElement)) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
arrayElement.content = arrayElement.map(element => {
|
|
57
|
+
if (element === search) {
|
|
58
|
+
edges.delete(search);
|
|
59
|
+
edges.set(replace, arrayElement);
|
|
60
|
+
return replace;
|
|
61
|
+
}
|
|
62
|
+
return element;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* This is a mutating stamp. If you don't want your Element to be mutated,
|
|
68
|
+
* clone in before passing it to initializer of this stamp.
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
class Transcluder {
|
|
73
|
+
element;
|
|
74
|
+
edges;
|
|
75
|
+
constructor({
|
|
76
|
+
element
|
|
77
|
+
}) {
|
|
78
|
+
this.element = element;
|
|
79
|
+
}
|
|
80
|
+
transclude(search, replace) {
|
|
81
|
+
// shortcut 1. - replacing entire ApiDOM tree
|
|
82
|
+
if (search === this.element) return replace;
|
|
83
|
+
// shortcut 2. - replacing nothing
|
|
84
|
+
if (search === replace) return this.element;
|
|
85
|
+
this.edges = this.edges ?? computeEdges(this.element);
|
|
86
|
+
const parent = this.edges.get(search);
|
|
87
|
+
if (isUndefined(parent)) {
|
|
88
|
+
return undefined;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* This predicate must be first because ObjectElement extends ArrayElement.
|
|
93
|
+
* isArrayElement returns true for ObjectElements.
|
|
94
|
+
* (classical problems with polymorphism)
|
|
95
|
+
*/
|
|
96
|
+
if (isObjectElement(parent)) {
|
|
97
|
+
// @ts-ignore
|
|
98
|
+
transcludeChildOfObjectElement(search, replace, this.edges);
|
|
99
|
+
} else if (isArrayElement(parent)) {
|
|
100
|
+
transcludeChildOfArrayElement(search, replace, this.edges);
|
|
101
|
+
} else if (isMemberElement(parent)) {
|
|
102
|
+
transcludeChildOfMemberElement(search, replace, this.edges);
|
|
103
|
+
}
|
|
104
|
+
return this.element;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export default Transcluder;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.transclude = exports.default = void 0;
|
|
6
|
+
var _Transcluder = _interopRequireDefault(require("./Transcluder.cjs"));
|
|
7
|
+
/**
|
|
8
|
+
* This is a mutating function. If you don't want your Element to be mutated,
|
|
9
|
+
* clone in before passing it to this function.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
const transclude = (search, replace, element) => {
|
|
13
|
+
const transcluder = new _Transcluder.default({
|
|
14
|
+
element
|
|
15
|
+
});
|
|
16
|
+
return transcluder.transclude(search, replace);
|
|
17
|
+
};
|
|
18
|
+
exports.transclude = transclude;
|
|
19
|
+
var _default = exports.default = _Transcluder.default;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Transcluder from "./Transcluder.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* This is a mutating function. If you don't want your Element to be mutated,
|
|
4
|
+
* clone in before passing it to this function.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export const transclude = (search, replace, element) => {
|
|
8
|
+
const transcluder = new Transcluder({
|
|
9
|
+
element
|
|
10
|
+
});
|
|
11
|
+
return transcluder.transclude(search, replace);
|
|
12
|
+
};
|
|
13
|
+
export default Transcluder;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _namespace = _interopRequireDefault(require("../namespace.cjs"));
|
|
7
|
+
/**
|
|
8
|
+
* Creates a refract representation of an Element.
|
|
9
|
+
* https://github.com/refractproject/refract-spec
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
const dehydrate = (element, namespace = _namespace.default) => {
|
|
13
|
+
return namespace.toRefract(element);
|
|
14
|
+
};
|
|
15
|
+
var _default = exports.default = dehydrate;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a refract representation of an Element.
|
|
4
|
+
* https://github.com/refractproject/refract-spec
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
const dehydrate = (element, namespace = defaultNamespaceInstance) => {
|
|
8
|
+
return namespace.toRefract(element);
|
|
9
|
+
};
|
|
10
|
+
export default dehydrate;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _ramda = require("ramda");
|
|
7
|
+
var _ramdaAdjunct = require("ramda-adjunct");
|
|
8
|
+
var _namespace = _interopRequireDefault(require("../namespace.cjs"));
|
|
9
|
+
/**
|
|
10
|
+
* Transforms data to an Element from a particular namespace.
|
|
11
|
+
*
|
|
12
|
+
* The name of the function was originally `from`,
|
|
13
|
+
* but it was renamed to `fromFn` to avoid issues with Parcel.js:
|
|
14
|
+
*
|
|
15
|
+
* - https://github.com/parcel-bundler/parcel/issues/9473
|
|
16
|
+
* - https://github.com/swagger-api/swagger-ui/issues/9466#issuecomment-1881053410
|
|
17
|
+
* @public
|
|
18
|
+
*/
|
|
19
|
+
const fromFn = (data, namespace = _namespace.default) => {
|
|
20
|
+
if ((0, _ramdaAdjunct.isString)(data)) {
|
|
21
|
+
// JSON serialized refract
|
|
22
|
+
try {
|
|
23
|
+
return namespace.fromRefract(JSON.parse(data));
|
|
24
|
+
} catch {
|
|
25
|
+
// noop
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if ((0, _ramdaAdjunct.isPlainObject)(data) && (0, _ramda.has)('element', data)) {
|
|
29
|
+
// refract javascript structure
|
|
30
|
+
return namespace.fromRefract(data);
|
|
31
|
+
}
|
|
32
|
+
return namespace.toElement(data);
|
|
33
|
+
};
|
|
34
|
+
var _default = exports.default = fromFn;
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
* The name of the function was originally `from`,
|
|
8
|
+
* but it was renamed to `fromFn` to avoid issues with Parcel.js:
|
|
9
|
+
*
|
|
10
|
+
* - https://github.com/parcel-bundler/parcel/issues/9473
|
|
11
|
+
* - https://github.com/swagger-api/swagger-ui/issues/9466#issuecomment-1881053410
|
|
12
|
+
* @public
|
|
13
|
+
*/
|
|
14
|
+
const fromFn = (data, namespace = defaultNamespaceInstance) => {
|
|
15
|
+
if (isString(data)) {
|
|
16
|
+
// JSON serialized refract
|
|
17
|
+
try {
|
|
18
|
+
return namespace.fromRefract(JSON.parse(data));
|
|
19
|
+
} catch {
|
|
20
|
+
// noop
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
if (isPlainObject(data) && has('element', data)) {
|
|
24
|
+
// refract javascript structure
|
|
25
|
+
return namespace.fromRefract(data);
|
|
26
|
+
}
|
|
27
|
+
return namespace.toElement(data);
|
|
28
|
+
};
|
|
29
|
+
export default fromFn;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
+
exports.__esModule = true;
|
|
5
|
+
exports.default = void 0;
|
|
6
|
+
var _index = _interopRequireDefault(require("./value/index.cjs"));
|
|
7
|
+
/**
|
|
8
|
+
* @public
|
|
9
|
+
*/
|
|
10
|
+
const serializer = (element, replacer, space) => JSON.stringify((0, _index.default)(element), replacer, space);
|
|
11
|
+
var _default = exports.default = serializer;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
class EphemeralArray {
|
|
6
|
+
type = 'EphemeralArray';
|
|
7
|
+
content = [];
|
|
8
|
+
reference = undefined;
|
|
9
|
+
constructor(content) {
|
|
10
|
+
this.content = content;
|
|
11
|
+
this.reference = [];
|
|
12
|
+
}
|
|
13
|
+
toReference() {
|
|
14
|
+
return this.reference;
|
|
15
|
+
}
|
|
16
|
+
toArray() {
|
|
17
|
+
this.reference.push(...this.content);
|
|
18
|
+
return this.reference;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
var _default = exports.default = EphemeralArray;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class EphemeralArray {
|
|
2
|
+
type = 'EphemeralArray';
|
|
3
|
+
content = [];
|
|
4
|
+
reference = undefined;
|
|
5
|
+
constructor(content) {
|
|
6
|
+
this.content = content;
|
|
7
|
+
this.reference = [];
|
|
8
|
+
}
|
|
9
|
+
toReference() {
|
|
10
|
+
return this.reference;
|
|
11
|
+
}
|
|
12
|
+
toArray() {
|
|
13
|
+
this.reference.push(...this.content);
|
|
14
|
+
return this.reference;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export default EphemeralArray;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
class EphemeralObject {
|
|
6
|
+
type = 'EphemeralObject';
|
|
7
|
+
content = [];
|
|
8
|
+
reference = undefined;
|
|
9
|
+
constructor(content) {
|
|
10
|
+
this.content = content;
|
|
11
|
+
this.reference = {};
|
|
12
|
+
}
|
|
13
|
+
toReference() {
|
|
14
|
+
return this.reference;
|
|
15
|
+
}
|
|
16
|
+
toObject() {
|
|
17
|
+
return Object.assign(this.reference, Object.fromEntries(this.content));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
var _default = exports.default = EphemeralObject;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
class EphemeralObject {
|
|
2
|
+
type = 'EphemeralObject';
|
|
3
|
+
content = [];
|
|
4
|
+
reference = undefined;
|
|
5
|
+
constructor(content) {
|
|
6
|
+
this.content = content;
|
|
7
|
+
this.reference = {};
|
|
8
|
+
}
|
|
9
|
+
toReference() {
|
|
10
|
+
return this.reference;
|
|
11
|
+
}
|
|
12
|
+
toObject() {
|
|
13
|
+
return Object.assign(this.reference, Object.fromEntries(this.content));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export default EphemeralObject;
|