@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,85 @@
|
|
|
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 _visitor = require("./visitor.cjs");
|
|
7
|
+
var _ephemeralArray = _interopRequireDefault(require("./ast/ephemeral-array.cjs"));
|
|
8
|
+
var _ephemeralObject = _interopRequireDefault(require("./ast/ephemeral-object.cjs"));
|
|
9
|
+
var _index = require("../../../predicates/index.cjs");
|
|
10
|
+
class Visitor {
|
|
11
|
+
ObjectElement = {
|
|
12
|
+
enter: element => {
|
|
13
|
+
if (this.references.has(element)) {
|
|
14
|
+
return this.references.get(element).toReference();
|
|
15
|
+
}
|
|
16
|
+
const ephemeral = new _ephemeralObject.default(element.content);
|
|
17
|
+
this.references.set(element, ephemeral);
|
|
18
|
+
return ephemeral;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
EphemeralObject = {
|
|
22
|
+
leave: ephemeral => {
|
|
23
|
+
return ephemeral.toObject();
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
MemberElement = {
|
|
27
|
+
enter: element => {
|
|
28
|
+
return [element.key, element.value];
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
ArrayElement = {
|
|
32
|
+
enter: element => {
|
|
33
|
+
if (this.references.has(element)) {
|
|
34
|
+
return this.references.get(element).toReference();
|
|
35
|
+
}
|
|
36
|
+
const ephemeral = new _ephemeralArray.default(element.content);
|
|
37
|
+
this.references.set(element, ephemeral);
|
|
38
|
+
return ephemeral;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
EphemeralArray = {
|
|
42
|
+
leave: ephemeral => {
|
|
43
|
+
return ephemeral.toArray();
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
references = new WeakMap();
|
|
47
|
+
BooleanElement(element) {
|
|
48
|
+
return element.toValue();
|
|
49
|
+
}
|
|
50
|
+
NumberElement(element) {
|
|
51
|
+
return element.toValue();
|
|
52
|
+
}
|
|
53
|
+
StringElement(element) {
|
|
54
|
+
return element.toValue();
|
|
55
|
+
}
|
|
56
|
+
NullElement() {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
RefElement(element, ...rest) {
|
|
60
|
+
const ancestors = rest[3];
|
|
61
|
+
if (ancestors[ancestors.length - 1]?.type === 'EphemeralObject') {
|
|
62
|
+
return Symbol.for('delete-node');
|
|
63
|
+
}
|
|
64
|
+
return String(element.toValue());
|
|
65
|
+
}
|
|
66
|
+
LinkElement(element) {
|
|
67
|
+
if ((0, _index.isStringElement)(element.href)) {
|
|
68
|
+
return element.href.toValue();
|
|
69
|
+
}
|
|
70
|
+
return '';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
const serializer = element => {
|
|
77
|
+
if (!(0, _index.isElement)(element)) return element;
|
|
78
|
+
|
|
79
|
+
// shortcut optimization for certain element types
|
|
80
|
+
if ((0, _index.isStringElement)(element) || (0, _index.isNumberElement)(element) || (0, _index.isBooleanElement)(element) || (0, _index.isNullElement)(element)) {
|
|
81
|
+
return element.toValue();
|
|
82
|
+
}
|
|
83
|
+
return (0, _visitor.visit)(element, new Visitor());
|
|
84
|
+
};
|
|
85
|
+
var _default = exports.default = serializer;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { visit } from "./visitor.mjs";
|
|
2
|
+
import EphemeralArray from "./ast/ephemeral-array.mjs";
|
|
3
|
+
import EphemeralObject from "./ast/ephemeral-object.mjs";
|
|
4
|
+
import { isElement, isBooleanElement, isNumberElement, isStringElement, isNullElement } from "../../../predicates/index.mjs";
|
|
5
|
+
class Visitor {
|
|
6
|
+
ObjectElement = {
|
|
7
|
+
enter: element => {
|
|
8
|
+
if (this.references.has(element)) {
|
|
9
|
+
return this.references.get(element).toReference();
|
|
10
|
+
}
|
|
11
|
+
const ephemeral = new EphemeralObject(element.content);
|
|
12
|
+
this.references.set(element, ephemeral);
|
|
13
|
+
return ephemeral;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
EphemeralObject = {
|
|
17
|
+
leave: ephemeral => {
|
|
18
|
+
return ephemeral.toObject();
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
MemberElement = {
|
|
22
|
+
enter: element => {
|
|
23
|
+
return [element.key, element.value];
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
ArrayElement = {
|
|
27
|
+
enter: element => {
|
|
28
|
+
if (this.references.has(element)) {
|
|
29
|
+
return this.references.get(element).toReference();
|
|
30
|
+
}
|
|
31
|
+
const ephemeral = new EphemeralArray(element.content);
|
|
32
|
+
this.references.set(element, ephemeral);
|
|
33
|
+
return ephemeral;
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
EphemeralArray = {
|
|
37
|
+
leave: ephemeral => {
|
|
38
|
+
return ephemeral.toArray();
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
references = new WeakMap();
|
|
42
|
+
BooleanElement(element) {
|
|
43
|
+
return element.toValue();
|
|
44
|
+
}
|
|
45
|
+
NumberElement(element) {
|
|
46
|
+
return element.toValue();
|
|
47
|
+
}
|
|
48
|
+
StringElement(element) {
|
|
49
|
+
return element.toValue();
|
|
50
|
+
}
|
|
51
|
+
NullElement() {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
RefElement(element, ...rest) {
|
|
55
|
+
const ancestors = rest[3];
|
|
56
|
+
if (ancestors[ancestors.length - 1]?.type === 'EphemeralObject') {
|
|
57
|
+
return Symbol.for('delete-node');
|
|
58
|
+
}
|
|
59
|
+
return String(element.toValue());
|
|
60
|
+
}
|
|
61
|
+
LinkElement(element) {
|
|
62
|
+
if (isStringElement(element.href)) {
|
|
63
|
+
return element.href.toValue();
|
|
64
|
+
}
|
|
65
|
+
return '';
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
const serializer = element => {
|
|
72
|
+
if (!isElement(element)) return element;
|
|
73
|
+
|
|
74
|
+
// shortcut optimization for certain element types
|
|
75
|
+
if (isStringElement(element) || isNumberElement(element) || isBooleanElement(element) || isNullElement(element)) {
|
|
76
|
+
return element.toValue();
|
|
77
|
+
}
|
|
78
|
+
return visit(element, new Visitor());
|
|
79
|
+
};
|
|
80
|
+
export default serializer;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.visit = void 0;
|
|
5
|
+
var _ramda = require("ramda");
|
|
6
|
+
var _visitor = require("../../../traversal/visitor.cjs");
|
|
7
|
+
const nodeTypeGetter = node => {
|
|
8
|
+
if (typeof node?.type === 'string') {
|
|
9
|
+
return node.type;
|
|
10
|
+
}
|
|
11
|
+
return (0, _visitor.getNodeType)(node);
|
|
12
|
+
};
|
|
13
|
+
const keyMapDefault = {
|
|
14
|
+
EphemeralObject: ['content'],
|
|
15
|
+
EphemeralArray: ['content'],
|
|
16
|
+
..._visitor.keyMapDefault
|
|
17
|
+
};
|
|
18
|
+
const visit = (root,
|
|
19
|
+
// @ts-ignore
|
|
20
|
+
visitor, {
|
|
21
|
+
keyMap = keyMapDefault,
|
|
22
|
+
...rest
|
|
23
|
+
} = {}) => {
|
|
24
|
+
return (0, _visitor.visit)(root, visitor, {
|
|
25
|
+
keyMap,
|
|
26
|
+
// @ts-ignore
|
|
27
|
+
nodeTypeGetter,
|
|
28
|
+
nodePredicate: _ramda.T,
|
|
29
|
+
detectCycles: false,
|
|
30
|
+
deleteNodeSymbol: Symbol.for('delete-node'),
|
|
31
|
+
skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
|
|
32
|
+
...rest
|
|
33
|
+
});
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
exports.visit = visit;
|
|
38
|
+
visit[Symbol.for('nodejs.util.promisify.custom')] = async (root, {
|
|
39
|
+
keyMap = keyMapDefault,
|
|
40
|
+
...rest
|
|
41
|
+
} = {}) => {
|
|
42
|
+
// @ts-ignore
|
|
43
|
+
return _visitor.visit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, {
|
|
44
|
+
keyMap,
|
|
45
|
+
nodeTypeGetter,
|
|
46
|
+
nodePredicate: _ramda.T,
|
|
47
|
+
detectCycles: false,
|
|
48
|
+
deleteNodeSymbol: Symbol.for('delete-node'),
|
|
49
|
+
skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
|
|
50
|
+
...rest
|
|
51
|
+
});
|
|
52
|
+
};
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { T as stubTrue } from 'ramda';
|
|
2
|
+
import { visit as astVisit, keyMapDefault as baseKeyMap, getNodeType as baseGetNodeType } from "../../../traversal/visitor.mjs";
|
|
3
|
+
const nodeTypeGetter = node => {
|
|
4
|
+
if (typeof node?.type === 'string') {
|
|
5
|
+
return node.type;
|
|
6
|
+
}
|
|
7
|
+
return baseGetNodeType(node);
|
|
8
|
+
};
|
|
9
|
+
const keyMapDefault = {
|
|
10
|
+
EphemeralObject: ['content'],
|
|
11
|
+
EphemeralArray: ['content'],
|
|
12
|
+
...baseKeyMap
|
|
13
|
+
};
|
|
14
|
+
export const visit = (root,
|
|
15
|
+
// @ts-ignore
|
|
16
|
+
visitor, {
|
|
17
|
+
keyMap = keyMapDefault,
|
|
18
|
+
...rest
|
|
19
|
+
} = {}) => {
|
|
20
|
+
return astVisit(root, visitor, {
|
|
21
|
+
keyMap,
|
|
22
|
+
// @ts-ignore
|
|
23
|
+
nodeTypeGetter,
|
|
24
|
+
nodePredicate: stubTrue,
|
|
25
|
+
detectCycles: false,
|
|
26
|
+
deleteNodeSymbol: Symbol.for('delete-node'),
|
|
27
|
+
skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
|
|
28
|
+
...rest
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// @ts-ignore
|
|
33
|
+
visit[Symbol.for('nodejs.util.promisify.custom')] = async (root, {
|
|
34
|
+
keyMap = keyMapDefault,
|
|
35
|
+
...rest
|
|
36
|
+
} = {}) => {
|
|
37
|
+
// @ts-ignore
|
|
38
|
+
return astVisit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, {
|
|
39
|
+
keyMap,
|
|
40
|
+
nodeTypeGetter,
|
|
41
|
+
nodePredicate: stubTrue,
|
|
42
|
+
detectCycles: false,
|
|
43
|
+
deleteNodeSymbol: Symbol.for('delete-node'),
|
|
44
|
+
skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
|
|
45
|
+
...rest
|
|
46
|
+
});
|
|
47
|
+
};
|
|
@@ -0,0 +1,90 @@
|
|
|
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 _visitor = require("../../traversal/visitor.cjs");
|
|
7
|
+
var _index = _interopRequireDefault(require("./value/index.cjs"));
|
|
8
|
+
class YamlVisitor {
|
|
9
|
+
static indentChar = ' ';
|
|
10
|
+
result;
|
|
11
|
+
indent;
|
|
12
|
+
constructor({
|
|
13
|
+
directive = false,
|
|
14
|
+
indent = 0
|
|
15
|
+
} = {}) {
|
|
16
|
+
this.result = directive ? '%YAML 1.2\n---\n' : '';
|
|
17
|
+
this.indent = indent;
|
|
18
|
+
}
|
|
19
|
+
NumberElement(element) {
|
|
20
|
+
this.result += (0, _index.default)(element);
|
|
21
|
+
}
|
|
22
|
+
BooleanElement(element) {
|
|
23
|
+
const value = (0, _index.default)(element);
|
|
24
|
+
this.result += value ? 'true' : 'false';
|
|
25
|
+
}
|
|
26
|
+
StringElement(element) {
|
|
27
|
+
// for simplicity and avoiding ambiguity we always wrap strings in quotes
|
|
28
|
+
this.result += JSON.stringify((0, _index.default)(element));
|
|
29
|
+
}
|
|
30
|
+
NullElement() {
|
|
31
|
+
this.result += 'null';
|
|
32
|
+
}
|
|
33
|
+
ArrayElement(element) {
|
|
34
|
+
if (element.length === 0) {
|
|
35
|
+
this.result += '[]';
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
element.forEach(item => {
|
|
39
|
+
const visitor = new YamlVisitor({
|
|
40
|
+
indent: this.indent + 1
|
|
41
|
+
});
|
|
42
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
43
|
+
(0, _visitor.visit)(item, visitor);
|
|
44
|
+
const {
|
|
45
|
+
result
|
|
46
|
+
} = visitor;
|
|
47
|
+
this.result += result.startsWith('\n') ? `\n${indent}-${result}` : `\n${indent}- ${result}`;
|
|
48
|
+
});
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
ObjectElement(element) {
|
|
52
|
+
if (element.length === 0) {
|
|
53
|
+
this.result += '{}';
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
element.forEach((value, key) => {
|
|
57
|
+
const keyVisitor = new YamlVisitor({
|
|
58
|
+
indent: this.indent + 1
|
|
59
|
+
});
|
|
60
|
+
const valueVisitor = new YamlVisitor({
|
|
61
|
+
indent: this.indent + 1
|
|
62
|
+
});
|
|
63
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
64
|
+
(0, _visitor.visit)(key, keyVisitor);
|
|
65
|
+
(0, _visitor.visit)(value, valueVisitor);
|
|
66
|
+
const {
|
|
67
|
+
result: keyResult
|
|
68
|
+
} = keyVisitor;
|
|
69
|
+
const {
|
|
70
|
+
result: valueResult
|
|
71
|
+
} = valueVisitor;
|
|
72
|
+
this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
|
|
73
|
+
});
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @public
|
|
80
|
+
*/
|
|
81
|
+
const serializer = (element, {
|
|
82
|
+
directive = false
|
|
83
|
+
} = {}) => {
|
|
84
|
+
const visitor = new YamlVisitor({
|
|
85
|
+
directive
|
|
86
|
+
});
|
|
87
|
+
(0, _visitor.visit)(element, visitor);
|
|
88
|
+
return visitor.result;
|
|
89
|
+
};
|
|
90
|
+
var _default = exports.default = serializer;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { visit } from "../../traversal/visitor.mjs";
|
|
2
|
+
import serializeValue from "./value/index.mjs";
|
|
3
|
+
class YamlVisitor {
|
|
4
|
+
static indentChar = ' ';
|
|
5
|
+
result;
|
|
6
|
+
indent;
|
|
7
|
+
constructor({
|
|
8
|
+
directive = false,
|
|
9
|
+
indent = 0
|
|
10
|
+
} = {}) {
|
|
11
|
+
this.result = directive ? '%YAML 1.2\n---\n' : '';
|
|
12
|
+
this.indent = indent;
|
|
13
|
+
}
|
|
14
|
+
NumberElement(element) {
|
|
15
|
+
this.result += serializeValue(element);
|
|
16
|
+
}
|
|
17
|
+
BooleanElement(element) {
|
|
18
|
+
const value = serializeValue(element);
|
|
19
|
+
this.result += value ? 'true' : 'false';
|
|
20
|
+
}
|
|
21
|
+
StringElement(element) {
|
|
22
|
+
// for simplicity and avoiding ambiguity we always wrap strings in quotes
|
|
23
|
+
this.result += JSON.stringify(serializeValue(element));
|
|
24
|
+
}
|
|
25
|
+
NullElement() {
|
|
26
|
+
this.result += 'null';
|
|
27
|
+
}
|
|
28
|
+
ArrayElement(element) {
|
|
29
|
+
if (element.length === 0) {
|
|
30
|
+
this.result += '[]';
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
element.forEach(item => {
|
|
34
|
+
const visitor = new YamlVisitor({
|
|
35
|
+
indent: this.indent + 1
|
|
36
|
+
});
|
|
37
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
38
|
+
visit(item, visitor);
|
|
39
|
+
const {
|
|
40
|
+
result
|
|
41
|
+
} = visitor;
|
|
42
|
+
this.result += result.startsWith('\n') ? `\n${indent}-${result}` : `\n${indent}- ${result}`;
|
|
43
|
+
});
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
ObjectElement(element) {
|
|
47
|
+
if (element.length === 0) {
|
|
48
|
+
this.result += '{}';
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
element.forEach((value, key) => {
|
|
52
|
+
const keyVisitor = new YamlVisitor({
|
|
53
|
+
indent: this.indent + 1
|
|
54
|
+
});
|
|
55
|
+
const valueVisitor = new YamlVisitor({
|
|
56
|
+
indent: this.indent + 1
|
|
57
|
+
});
|
|
58
|
+
const indent = YamlVisitor.indentChar.repeat(this.indent);
|
|
59
|
+
visit(key, keyVisitor);
|
|
60
|
+
visit(value, valueVisitor);
|
|
61
|
+
const {
|
|
62
|
+
result: keyResult
|
|
63
|
+
} = keyVisitor;
|
|
64
|
+
const {
|
|
65
|
+
result: valueResult
|
|
66
|
+
} = valueVisitor;
|
|
67
|
+
this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
|
|
68
|
+
});
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* @public
|
|
75
|
+
*/
|
|
76
|
+
const serializer = (element, {
|
|
77
|
+
directive = false
|
|
78
|
+
} = {}) => {
|
|
79
|
+
const visitor = new YamlVisitor({
|
|
80
|
+
directive
|
|
81
|
+
});
|
|
82
|
+
visit(element, visitor);
|
|
83
|
+
return visitor.result;
|
|
84
|
+
};
|
|
85
|
+
export default serializer;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _visitor = require("../traversal/visitor.cjs");
|
|
6
|
+
class SymbolicExpressionsVisitor {
|
|
7
|
+
result = '';
|
|
8
|
+
nestingLevel = 0;
|
|
9
|
+
enter(element) {
|
|
10
|
+
const {
|
|
11
|
+
element: elementName
|
|
12
|
+
} = element;
|
|
13
|
+
const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
|
|
14
|
+
const indent = ' '.repeat(this.nestingLevel);
|
|
15
|
+
this.result += this.nestingLevel > 0 ? '\n' : '';
|
|
16
|
+
this.result += `${indent}(${capitalizedElementName}Element`;
|
|
17
|
+
this.nestingLevel += 1;
|
|
18
|
+
}
|
|
19
|
+
leave() {
|
|
20
|
+
this.nestingLevel -= 1;
|
|
21
|
+
this.result += ')';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Transforms ApiDOM into S-expressions (Symbolic Expressions).
|
|
27
|
+
* @public
|
|
28
|
+
*/
|
|
29
|
+
const sexprs = element => {
|
|
30
|
+
const visitor = new SymbolicExpressionsVisitor();
|
|
31
|
+
(0, _visitor.visit)(element, visitor);
|
|
32
|
+
return visitor.result;
|
|
33
|
+
};
|
|
34
|
+
var _default = exports.default = sexprs;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { visit } from "../traversal/visitor.mjs";
|
|
2
|
+
class SymbolicExpressionsVisitor {
|
|
3
|
+
result = '';
|
|
4
|
+
nestingLevel = 0;
|
|
5
|
+
enter(element) {
|
|
6
|
+
const {
|
|
7
|
+
element: elementName
|
|
8
|
+
} = element;
|
|
9
|
+
const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
|
|
10
|
+
const indent = ' '.repeat(this.nestingLevel);
|
|
11
|
+
this.result += this.nestingLevel > 0 ? '\n' : '';
|
|
12
|
+
this.result += `${indent}(${capitalizedElementName}Element`;
|
|
13
|
+
this.nestingLevel += 1;
|
|
14
|
+
}
|
|
15
|
+
leave() {
|
|
16
|
+
this.nestingLevel -= 1;
|
|
17
|
+
this.result += ')';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Transforms ApiDOM into S-expressions (Symbolic Expressions).
|
|
23
|
+
* @public
|
|
24
|
+
*/
|
|
25
|
+
const sexprs = element => {
|
|
26
|
+
const visitor = new SymbolicExpressionsVisitor();
|
|
27
|
+
visit(element, visitor);
|
|
28
|
+
return visitor.result;
|
|
29
|
+
};
|
|
30
|
+
export default sexprs;
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
var _dehydrate = _interopRequireDefault(require("./dehydrate.cjs"));
|
|
8
|
+
/**
|
|
9
|
+
* Create a refracted string representation of an Element.
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
const toString = (element, namespace = _namespace.default) => {
|
|
13
|
+
const refractStructure = (0, _dehydrate.default)(element, namespace);
|
|
14
|
+
return JSON.stringify(refractStructure);
|
|
15
|
+
};
|
|
16
|
+
var _default = exports.default = toString;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import defaultNamespaceInstance from "../namespace.mjs";
|
|
2
|
+
import dehydrate from "./dehydrate.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Create a refracted string representation of an Element.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
const toString = (element, namespace = defaultNamespaceInstance) => {
|
|
8
|
+
const refractStructure = dehydrate(element, namespace);
|
|
9
|
+
return JSON.stringify(refractStructure);
|
|
10
|
+
};
|
|
11
|
+
export default toString;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _minim = require("minim");
|
|
6
|
+
var _visitor = require("./visitor.cjs");
|
|
7
|
+
/**
|
|
8
|
+
* Finds all elements matching the predicate.
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
const filter = (predicate, element) => {
|
|
12
|
+
const visitor = new _visitor.PredicateVisitor({
|
|
13
|
+
predicate
|
|
14
|
+
});
|
|
15
|
+
(0, _visitor.visit)(element, visitor);
|
|
16
|
+
return new _minim.ArraySlice(visitor.result);
|
|
17
|
+
};
|
|
18
|
+
var _default = exports.default = filter;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ArraySlice } from 'minim';
|
|
2
|
+
import { PredicateVisitor, visit } from "./visitor.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Finds all elements matching the predicate.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
const filter = (predicate, element) => {
|
|
8
|
+
const visitor = new PredicateVisitor({
|
|
9
|
+
predicate
|
|
10
|
+
});
|
|
11
|
+
visit(element, visitor);
|
|
12
|
+
return new ArraySlice(visitor.result);
|
|
13
|
+
};
|
|
14
|
+
export default filter;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
exports.__esModule = true;
|
|
4
|
+
exports.default = void 0;
|
|
5
|
+
var _ramda = require("ramda");
|
|
6
|
+
var _visitor = require("./visitor.cjs");
|
|
7
|
+
/**
|
|
8
|
+
* Find first element that satisfies the provided predicate.
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
const find = (predicate, element) => {
|
|
12
|
+
const visitor = new _visitor.PredicateVisitor({
|
|
13
|
+
predicate,
|
|
14
|
+
returnOnTrue: _visitor.BREAK
|
|
15
|
+
});
|
|
16
|
+
(0, _visitor.visit)(element, visitor);
|
|
17
|
+
return (0, _ramda.pathOr)(undefined, [0], visitor.result);
|
|
18
|
+
};
|
|
19
|
+
var _default = exports.default = find;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { pathOr } from 'ramda';
|
|
2
|
+
import { PredicateVisitor, BREAK, visit } from "./visitor.mjs";
|
|
3
|
+
/**
|
|
4
|
+
* Find first element that satisfies the provided predicate.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
const find = (predicate, element) => {
|
|
8
|
+
const visitor = new PredicateVisitor({
|
|
9
|
+
predicate,
|
|
10
|
+
returnOnTrue: BREAK
|
|
11
|
+
});
|
|
12
|
+
visit(element, visitor);
|
|
13
|
+
return pathOr(undefined, [0], visitor.result);
|
|
14
|
+
};
|
|
15
|
+
export default find;
|
|
@@ -0,0 +1,65 @@
|
|
|
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 _index = require("../predicates/index.cjs");
|
|
9
|
+
var _visitor = require("./visitor.cjs");
|
|
10
|
+
var _index2 = _interopRequireDefault(require("../transformers/serializers/value/index.cjs"));
|
|
11
|
+
class Visitor {
|
|
12
|
+
result;
|
|
13
|
+
offset;
|
|
14
|
+
includeRightBound;
|
|
15
|
+
constructor({
|
|
16
|
+
offset = 0,
|
|
17
|
+
includeRightBound = false
|
|
18
|
+
} = {}) {
|
|
19
|
+
this.result = [];
|
|
20
|
+
this.offset = offset;
|
|
21
|
+
this.includeRightBound = includeRightBound;
|
|
22
|
+
}
|
|
23
|
+
enter(element) {
|
|
24
|
+
if (!(0, _index.hasElementSourceMap)(element)) {
|
|
25
|
+
return undefined; // dive in
|
|
26
|
+
}
|
|
27
|
+
const sourceMapElement = element.getMetaProperty('sourceMap');
|
|
28
|
+
const charStart = (0, _index2.default)(sourceMapElement.positionStart.get(2));
|
|
29
|
+
const charEnd = (0, _index2.default)(sourceMapElement.positionEnd.get(2));
|
|
30
|
+
const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
|
|
31
|
+
if (isWithinOffsetRange) {
|
|
32
|
+
this.result.push(element);
|
|
33
|
+
return undefined; // push to stack and dive in
|
|
34
|
+
}
|
|
35
|
+
return false; // skip entire sub-tree
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @public
|
|
41
|
+
*/
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Finds the most inner node at the given offset.
|
|
45
|
+
* If includeRightBound is set, also finds nodes that end at the given offset.
|
|
46
|
+
* @public
|
|
47
|
+
*/
|
|
48
|
+
const findAtOffset = (options, element) => {
|
|
49
|
+
let offset;
|
|
50
|
+
let includeRightBound;
|
|
51
|
+
if ((0, _ramdaAdjunct.isNumber)(options)) {
|
|
52
|
+
offset = options;
|
|
53
|
+
includeRightBound = false;
|
|
54
|
+
} else {
|
|
55
|
+
offset = (0, _ramda.pathOr)(0, ['offset'], options);
|
|
56
|
+
includeRightBound = (0, _ramda.pathOr)(false, ['includeRightBound'], options);
|
|
57
|
+
}
|
|
58
|
+
const visitor = new Visitor({
|
|
59
|
+
offset,
|
|
60
|
+
includeRightBound
|
|
61
|
+
});
|
|
62
|
+
(0, _visitor.visit)(element, visitor);
|
|
63
|
+
return (0, _ramda.last)(visitor.result);
|
|
64
|
+
};
|
|
65
|
+
var _default = exports.default = findAtOffset;
|