@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.
Files changed (105) hide show
  1. package/CHANGELOG.md +82 -0
  2. package/LICENSE +202 -0
  3. package/LICENSES/AFL-3.0.txt +182 -0
  4. package/LICENSES/Apache-2.0.txt +202 -0
  5. package/LICENSES/BSD-3-Clause.txt +26 -0
  6. package/LICENSES/MIT.txt +9 -0
  7. package/NOTICE +65 -0
  8. package/README.md +881 -0
  9. package/dist/apidom-core.browser.js +14724 -0
  10. package/dist/apidom-core.browser.min.js +1 -0
  11. package/package.json +67 -0
  12. package/src/clone/errors/CloneError.cjs +22 -0
  13. package/src/clone/errors/CloneError.mjs +19 -0
  14. package/src/clone/errors/DeepCloneError.cjs +11 -0
  15. package/src/clone/errors/DeepCloneError.mjs +6 -0
  16. package/src/clone/errors/ShallowCloneError.cjs +11 -0
  17. package/src/clone/errors/ShallowCloneError.mjs +6 -0
  18. package/src/clone/index.cjs +155 -0
  19. package/src/clone/index.mjs +146 -0
  20. package/src/elements/Annotation.cjs +23 -0
  21. package/src/elements/Annotation.mjs +20 -0
  22. package/src/elements/Comment.cjs +15 -0
  23. package/src/elements/Comment.mjs +12 -0
  24. package/src/elements/ParseResult.cjs +53 -0
  25. package/src/elements/ParseResult.mjs +50 -0
  26. package/src/elements/SourceMap.cjs +39 -0
  27. package/src/elements/SourceMap.mjs +36 -0
  28. package/src/identity/errors/ElementIdentityError.cjs +22 -0
  29. package/src/identity/errors/ElementIdentityError.mjs +19 -0
  30. package/src/identity/index.cjs +62 -0
  31. package/src/identity/index.mjs +56 -0
  32. package/src/index.cjs +112 -0
  33. package/src/index.mjs +50 -0
  34. package/src/media-types.cjs +21 -0
  35. package/src/media-types.mjs +18 -0
  36. package/src/merge/deepmerge.cjs +151 -0
  37. package/src/merge/deepmerge.mjs +135 -0
  38. package/src/merge/merge-left.cjs +16 -0
  39. package/src/merge/merge-left.mjs +11 -0
  40. package/src/merge/merge-right.cjs +35 -0
  41. package/src/merge/merge-right.mjs +29 -0
  42. package/src/namespace.cjs +42 -0
  43. package/src/namespace.mjs +35 -0
  44. package/src/predicates/helpers.cjs +85 -0
  45. package/src/predicates/helpers.mjs +77 -0
  46. package/src/predicates/index.cjs +208 -0
  47. package/src/predicates/index.mjs +198 -0
  48. package/src/refractor/index.cjs +46 -0
  49. package/src/refractor/index.mjs +40 -0
  50. package/src/refractor/plugins/dispatcher/index.cjs +71 -0
  51. package/src/refractor/plugins/dispatcher/index.mjs +61 -0
  52. package/src/refractor/plugins/element-identity.cjs +31 -0
  53. package/src/refractor/plugins/element-identity.mjs +26 -0
  54. package/src/refractor/plugins/semantic-element-identity.cjs +38 -0
  55. package/src/refractor/plugins/semantic-element-identity.mjs +33 -0
  56. package/src/refractor/registration.cjs +34 -0
  57. package/src/refractor/registration.mjs +19 -0
  58. package/src/refractor/toolbox.cjs +29 -0
  59. package/src/refractor/toolbox.mjs +21 -0
  60. package/src/transcluder/Transcluder.cjs +111 -0
  61. package/src/transcluder/Transcluder.mjs +107 -0
  62. package/src/transcluder/index.cjs +19 -0
  63. package/src/transcluder/index.mjs +13 -0
  64. package/src/transformers/dehydrate.cjs +15 -0
  65. package/src/transformers/dehydrate.mjs +10 -0
  66. package/src/transformers/from.cjs +34 -0
  67. package/src/transformers/from.mjs +29 -0
  68. package/src/transformers/serializers/json.cjs +11 -0
  69. package/src/transformers/serializers/json.mjs +6 -0
  70. package/src/transformers/serializers/value/ast/ephemeral-array.cjs +21 -0
  71. package/src/transformers/serializers/value/ast/ephemeral-array.mjs +17 -0
  72. package/src/transformers/serializers/value/ast/ephemeral-object.cjs +20 -0
  73. package/src/transformers/serializers/value/ast/ephemeral-object.mjs +16 -0
  74. package/src/transformers/serializers/value/index.cjs +85 -0
  75. package/src/transformers/serializers/value/index.mjs +80 -0
  76. package/src/transformers/serializers/value/visitor.cjs +52 -0
  77. package/src/transformers/serializers/value/visitor.mjs +47 -0
  78. package/src/transformers/serializers/yaml-1-2.cjs +90 -0
  79. package/src/transformers/serializers/yaml-1-2.mjs +85 -0
  80. package/src/transformers/sexprs.cjs +34 -0
  81. package/src/transformers/sexprs.mjs +30 -0
  82. package/src/transformers/to-string.cjs +16 -0
  83. package/src/transformers/to-string.mjs +11 -0
  84. package/src/traversal/filter.cjs +18 -0
  85. package/src/traversal/filter.mjs +14 -0
  86. package/src/traversal/find.cjs +19 -0
  87. package/src/traversal/find.mjs +15 -0
  88. package/src/traversal/findAtOffset.cjs +65 -0
  89. package/src/traversal/findAtOffset.mjs +60 -0
  90. package/src/traversal/index.cjs +19 -0
  91. package/src/traversal/index.mjs +7 -0
  92. package/src/traversal/parents.cjs +38 -0
  93. package/src/traversal/parents.mjs +34 -0
  94. package/src/traversal/reject.cjs +15 -0
  95. package/src/traversal/reject.mjs +10 -0
  96. package/src/traversal/some.cjs +15 -0
  97. package/src/traversal/some.mjs +10 -0
  98. package/src/traversal/traverse.cjs +60 -0
  99. package/src/traversal/traverse.mjs +53 -0
  100. package/src/traversal/visitor.cjs +123 -0
  101. package/src/traversal/visitor.mjs +115 -0
  102. package/src/util.cjs +28 -0
  103. package/src/util.mjs +24 -0
  104. package/types/apidom-core.d.ts +806 -0
  105. 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;