@swagger-api/apidom-core 0.68.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 (79) hide show
  1. package/CHANGELOG.md +366 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/MIT.txt +9 -0
  4. package/README.md +679 -0
  5. package/cjs/deepmerge.cjs +87 -0
  6. package/cjs/elements/Annotation.cjs +21 -0
  7. package/cjs/elements/Comment.cjs +13 -0
  8. package/cjs/elements/ParseResult.cjs +51 -0
  9. package/cjs/elements/SourceMap.cjs +29 -0
  10. package/cjs/index.cjs +144 -0
  11. package/cjs/media-types.cjs +24 -0
  12. package/cjs/namespace.cjs +32 -0
  13. package/cjs/predicates/helpers.cjs +28 -0
  14. package/cjs/predicates/index.cjs +149 -0
  15. package/cjs/refractor/index.cjs +37 -0
  16. package/cjs/refractor/plugins/element-identity.cjs +36 -0
  17. package/cjs/refractor/plugins/semantic-element-identity.cjs +36 -0
  18. package/cjs/refractor/plugins/utils/index.cjs +26 -0
  19. package/cjs/refractor/registration.cjs +34 -0
  20. package/cjs/refractor/toolbox.cjs +20 -0
  21. package/cjs/serializers/json.cjs +9 -0
  22. package/cjs/serializers/value/ast/ephemeral-array.cjs +22 -0
  23. package/cjs/serializers/value/ast/ephemeral-object.cjs +21 -0
  24. package/cjs/serializers/value/index.cjs +67 -0
  25. package/cjs/serializers/value/visitor.cjs +54 -0
  26. package/cjs/serializers/yaml-1-2.cjs +93 -0
  27. package/cjs/sexprs.cjs +38 -0
  28. package/cjs/transcluder/Transcluder.cjs +110 -0
  29. package/cjs/transcluder/index.cjs +19 -0
  30. package/cjs/traversal/filter.cjs +20 -0
  31. package/cjs/traversal/find.cjs +20 -0
  32. package/cjs/traversal/findAtOffset.cjs +71 -0
  33. package/cjs/traversal/index.cjs +19 -0
  34. package/cjs/traversal/parents.cjs +47 -0
  35. package/cjs/traversal/reject.cjs +14 -0
  36. package/cjs/traversal/some.cjs +15 -0
  37. package/cjs/traversal/traverse.cjs +54 -0
  38. package/cjs/traversal/visitor.cjs +114 -0
  39. package/cjs/util.cjs +27 -0
  40. package/dist/apidom-core.browser.js +30952 -0
  41. package/dist/apidom-core.browser.min.js +1 -0
  42. package/es/deepmerge.js +84 -0
  43. package/es/elements/Annotation.js +16 -0
  44. package/es/elements/Comment.js +8 -0
  45. package/es/elements/ParseResult.js +46 -0
  46. package/es/elements/SourceMap.js +24 -0
  47. package/es/index.js +72 -0
  48. package/es/media-types.js +22 -0
  49. package/es/namespace.js +24 -0
  50. package/es/predicates/helpers.js +22 -0
  51. package/es/predicates/index.js +124 -0
  52. package/es/refractor/index.js +32 -0
  53. package/es/refractor/plugins/element-identity.js +30 -0
  54. package/es/refractor/plugins/semantic-element-identity.js +34 -0
  55. package/es/refractor/plugins/utils/index.js +19 -0
  56. package/es/refractor/registration.js +19 -0
  57. package/es/refractor/toolbox.js +13 -0
  58. package/es/serializers/json.js +3 -0
  59. package/es/serializers/value/ast/ephemeral-array.js +18 -0
  60. package/es/serializers/value/ast/ephemeral-object.js +17 -0
  61. package/es/serializers/value/index.js +61 -0
  62. package/es/serializers/value/visitor.js +54 -0
  63. package/es/serializers/yaml-1-2.js +87 -0
  64. package/es/sexprs.js +32 -0
  65. package/es/transcluder/Transcluder.js +104 -0
  66. package/es/transcluder/index.js +12 -0
  67. package/es/traversal/filter.js +14 -0
  68. package/es/traversal/find.js +14 -0
  69. package/es/traversal/findAtOffset.js +65 -0
  70. package/es/traversal/index.js +7 -0
  71. package/es/traversal/parents.js +40 -0
  72. package/es/traversal/reject.js +7 -0
  73. package/es/traversal/some.js +8 -0
  74. package/es/traversal/traverse.js +47 -0
  75. package/es/traversal/visitor.js +110 -0
  76. package/es/util.js +23 -0
  77. package/package.json +65 -0
  78. package/types/dist.d.ts +260 -0
  79. package/types/minim.d.ts +222 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _shortUniqueId = _interopRequireDefault(require("short-unique-id"));
7
+ var _minim = require("minim");
8
+ // @ts-ignore
9
+
10
+ const plugin = ({
11
+ length = 6
12
+ } = {}) => ({
13
+ predicates
14
+ }) => {
15
+ let uuid;
16
+ return {
17
+ pre() {
18
+ uuid = new _shortUniqueId.default({
19
+ length
20
+ });
21
+ },
22
+ visitor: {
23
+ enter(element) {
24
+ if (!predicates.isPrimitiveElement(element)) {
25
+ // eslint-disable-next-line no-param-reassign
26
+ element.id = new _minim.StringElement(uuid());
27
+ }
28
+ }
29
+ },
30
+ post() {
31
+ uuid = null;
32
+ }
33
+ };
34
+ };
35
+ var _default = plugin;
36
+ exports.default = _default;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.dispatchPlugins = void 0;
6
+ var _ramda = require("ramda");
7
+ var _ramdaAdjunct = require("ramda-adjunct");
8
+ var _toolbox = _interopRequireDefault(require("../../toolbox.cjs"));
9
+ var _visitor = require("../../../traversal/visitor.cjs");
10
+ // eslint-disable-next-line import/prefer-default-export
11
+ const dispatchPlugins = (element, plugins, options = {}) => {
12
+ if (plugins.length === 0) return element;
13
+ const toolboxCreator = (0, _ramda.propOr)(_toolbox.default, 'toolboxCreator', options);
14
+ const visitorOptions = (0, _ramda.propOr)({}, 'visitorOptions', options);
15
+ const nodeTypeGetter = (0, _ramda.propOr)(_visitor.getNodeType, 'nodeTypeGetter', visitorOptions);
16
+ const toolbox = toolboxCreator();
17
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
18
+ const pluginsVisitor = (0, _visitor.mergeAllVisitors)(pluginsSpecs.map((0, _ramda.propOr)({}, 'visitor')), {
19
+ nodeTypeGetter
20
+ });
21
+ pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['pre'], []));
22
+ const newElement = (0, _visitor.visit)(element, pluginsVisitor, visitorOptions);
23
+ pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['post'], []));
24
+ return newElement;
25
+ };
26
+ exports.dispatchPlugins = dispatchPlugins;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
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,20 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var basePredicates = _interopRequireWildcard(require("../predicates/index.cjs"));
7
+ var _namespace = _interopRequireDefault(require("../namespace.cjs"));
8
+ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
9
+ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
10
+ const createToolbox = () => {
11
+ const predicates = {
12
+ ...basePredicates
13
+ };
14
+ return {
15
+ predicates,
16
+ namespace: _namespace.default
17
+ };
18
+ };
19
+ var _default = createToolbox;
20
+ exports.default = _default;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _index = _interopRequireDefault(require("./value/index.cjs"));
7
+ const serializer = element => JSON.stringify((0, _index.default)(element));
8
+ var _default = serializer;
9
+ exports.default = _default;
@@ -0,0 +1,22 @@
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 = EphemeralArray;
22
+ exports.default = _default;
@@ -0,0 +1,21 @@
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 = EphemeralObject;
21
+ exports.default = _default;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _visitor = require("./visitor.cjs");
8
+ var _ephemeralArray = _interopRequireDefault(require("./ast/ephemeral-array.cjs"));
9
+ var _ephemeralObject = _interopRequireDefault(require("./ast/ephemeral-object.cjs"));
10
+ /* eslint-disable @typescript-eslint/naming-convention */
11
+ const Visitor = _stampit.default.init(function _Visitor() {
12
+ const references = new WeakMap();
13
+ this.BooleanElement = function _BooleanElement(element) {
14
+ return element.toValue();
15
+ };
16
+ this.NumberElement = function _NumberElement(element) {
17
+ return element.toValue();
18
+ };
19
+ this.StringElement = function _StringElement(element) {
20
+ return element.toValue();
21
+ };
22
+ this.NullElement = function _NullElement() {
23
+ return null;
24
+ };
25
+ this.ObjectElement = {
26
+ enter(element) {
27
+ if (references.has(element)) {
28
+ return references.get(element).toReference();
29
+ }
30
+ const ephemeral = new _ephemeralObject.default(element.content);
31
+ references.set(element, ephemeral);
32
+ return ephemeral;
33
+ }
34
+ };
35
+ this.EphemeralObject = {
36
+ leave(ephemeral) {
37
+ return ephemeral.toObject();
38
+ }
39
+ };
40
+ this.MemberElement = {
41
+ enter(element) {
42
+ return [element.key, element.value];
43
+ }
44
+ };
45
+ this.ArrayElement = {
46
+ enter(element) {
47
+ if (references.has(element)) {
48
+ return references.get(element).toReference();
49
+ }
50
+ const ephemeral = new _ephemeralArray.default(element.content);
51
+ references.set(element, ephemeral);
52
+ return ephemeral;
53
+ }
54
+ };
55
+ this.EphemeralArray = {
56
+ leave(ephemeral) {
57
+ return ephemeral.toArray();
58
+ }
59
+ };
60
+ });
61
+ /* eslint-enable */
62
+
63
+ const serializer = element => {
64
+ return (0, _visitor.visit)(element, Visitor());
65
+ };
66
+ var _default = serializer;
67
+ exports.default = _default;
@@ -0,0 +1,54 @@
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 === null || node === void 0 ? void 0 : 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
+
19
+ // eslint-disable-next-line import/prefer-default-export
20
+ const visit = (root,
21
+ // @ts-ignore
22
+ visitor, {
23
+ keyMap = keyMapDefault,
24
+ ...rest
25
+ } = {}) => {
26
+ return (0, _visitor.visit)(root, visitor, {
27
+ keyMap,
28
+ // @ts-ignore
29
+ nodeTypeGetter,
30
+ nodePredicate: _ramda.T,
31
+ detectCycles: false,
32
+ deleteNodeSymbol: Symbol.for('delete-node'),
33
+ skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
34
+ ...rest
35
+ });
36
+ };
37
+
38
+ // @ts-ignore
39
+ exports.visit = visit;
40
+ visit[Symbol.for('nodejs.util.promisify.custom')] = async (root, {
41
+ keyMap = keyMapDefault,
42
+ ...rest
43
+ } = {}) => {
44
+ // @ts-ignore
45
+ return _visitor.visit[Symbol.for('nodejs.util.promisify.custom')](root, visitor, {
46
+ keyMap,
47
+ nodeTypeGetter,
48
+ nodePredicate: _ramda.T,
49
+ detectCycles: false,
50
+ deleteNodeSymbol: Symbol.for('delete-node'),
51
+ skipVisitingNodeSymbol: Symbol.for('skip-visiting-node'),
52
+ ...rest
53
+ });
54
+ };
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _visitor = require("../traversal/visitor.cjs");
8
+ var _index = _interopRequireDefault(require("./value/index.cjs"));
9
+ const YamlVisitor = (0, _stampit.default)({
10
+ props: {
11
+ result: '',
12
+ indent: 0,
13
+ indentChar: ' '
14
+ },
15
+ init({
16
+ signature = '',
17
+ indent = 0,
18
+ indentChar = ' '
19
+ } = {}) {
20
+ this.result = signature;
21
+ this.indent = indent;
22
+ this.indentChard = indentChar;
23
+ },
24
+ methods: {
25
+ NumberElement(element) {
26
+ this.result += (0, _index.default)(element);
27
+ },
28
+ BooleanElement(element) {
29
+ const value = (0, _index.default)(element);
30
+ this.result += value ? 'true' : 'false';
31
+ },
32
+ StringElement(element) {
33
+ // for simplicity and avoiding ambiguity we always wrap strings in quotes
34
+ this.result += JSON.stringify((0, _index.default)(element));
35
+ },
36
+ NullElement() {
37
+ this.result += 'null';
38
+ },
39
+ ArrayElement(element) {
40
+ if (element.length === 0) {
41
+ this.result += '[]';
42
+ return false;
43
+ }
44
+ element.forEach(item => {
45
+ const visitor = YamlVisitor({
46
+ indent: this.indent + 1
47
+ });
48
+ const indent = this.indentChar.repeat(this.indent);
49
+ (0, _visitor.visit)(item, visitor);
50
+ const {
51
+ result
52
+ } = visitor;
53
+ this.result += result.startsWith('\n') ? `\n${indent}-${visitor.result}` : `\n${indent}- ${visitor.result}`;
54
+ });
55
+ return false;
56
+ },
57
+ ObjectElement(element) {
58
+ if (element.length === 0) {
59
+ this.result += '{}';
60
+ return false;
61
+ }
62
+ element.forEach((value, key) => {
63
+ const keyVisitor = YamlVisitor({
64
+ indent: this.indent + 1
65
+ });
66
+ const valueVisitor = YamlVisitor({
67
+ indent: this.indent + 1
68
+ });
69
+ const indent = this.indentChar.repeat(this.indent);
70
+ (0, _visitor.visit)(key, keyVisitor);
71
+ (0, _visitor.visit)(value, valueVisitor);
72
+ const {
73
+ result: keyResult
74
+ } = keyVisitor;
75
+ const {
76
+ result: valueResult
77
+ } = valueVisitor;
78
+ this.result += valueResult.startsWith('\n') ? `\n${indent}${keyResult}:${valueResult}` : `\n${indent}${keyResult}: ${valueResult}`;
79
+ });
80
+ return false;
81
+ }
82
+ }
83
+ });
84
+ const serializer = element => {
85
+ const signature = '%YAML 1.2\n---\n';
86
+ const visitor = YamlVisitor({
87
+ signature
88
+ });
89
+ (0, _visitor.visit)(element, visitor);
90
+ return visitor.result;
91
+ };
92
+ var _default = serializer;
93
+ exports.default = _default;
package/cjs/sexprs.cjs ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _visitor = require("./traversal/visitor.cjs");
8
+ const SymbolicExpressionsVisitor = (0, _stampit.default)({
9
+ props: {
10
+ nestingLevel: 0,
11
+ result: ''
12
+ },
13
+ methods: {
14
+ enter(element) {
15
+ const {
16
+ element: elementName
17
+ } = element;
18
+ const capitalizedElementName = elementName.charAt(0).toUpperCase() + elementName.slice(1);
19
+ const indent = ' '.repeat(this.nestingLevel);
20
+ this.result += this.nestingLevel > 0 ? '\n' : '';
21
+ this.result += `${indent}(${capitalizedElementName}Element`;
22
+ this.nestingLevel += 1;
23
+ },
24
+ leave() {
25
+ this.nestingLevel -= 1;
26
+ this.result += ')';
27
+ }
28
+ }
29
+ });
30
+
31
+ // transforms ApiDOM into S-expressions (Symbolic Expressions)
32
+ const sexprs = element => {
33
+ const visitor = SymbolicExpressionsVisitor();
34
+ (0, _visitor.visit)(element, visitor);
35
+ return visitor.result;
36
+ };
37
+ var _default = sexprs;
38
+ exports.default = _default;
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _ramdaAdjunct = require("ramda-adjunct");
8
+ var _index = require("../predicates/index.cjs");
9
+ const computeEdges = (element, edges = new WeakMap()) => {
10
+ if ((0, _index.isMemberElement)(element)) {
11
+ // @ts-ignore
12
+ edges.set(element.key, element);
13
+ // @ts-ignore
14
+ computeEdges(element.key, edges);
15
+ // @ts-ignore
16
+ edges.set(element.value, element);
17
+ // @ts-ignore
18
+ computeEdges(element.value, edges);
19
+ } else {
20
+ element.children.forEach(childElement => {
21
+ edges.set(childElement, element);
22
+ computeEdges(childElement, edges);
23
+ });
24
+ }
25
+ return edges;
26
+ };
27
+ const transcludeChildOfMemberElement = (search, replace, edges) => {
28
+ const memberElement = edges.get(search);
29
+ if (!(0, _index.isMemberElement)(memberElement)) {
30
+ return;
31
+ }
32
+ if (memberElement.key === search) {
33
+ memberElement.key = replace;
34
+ edges.delete(search);
35
+ edges.set(replace, memberElement);
36
+ }
37
+ if (memberElement.value === search) {
38
+ memberElement.value = replace;
39
+ edges.delete(search);
40
+ edges.set(replace, memberElement);
41
+ }
42
+ };
43
+ const transcludeChildOfObjectElement = (search, replace, edges) => {
44
+ const objectElement = edges.get(search);
45
+ if (!(0, _index.isObjectElement)(objectElement)) {
46
+ return;
47
+ }
48
+ objectElement.content = objectElement.map((value, key, member) => {
49
+ if (member === search) {
50
+ edges.delete(search);
51
+ edges.set(replace, objectElement);
52
+ return replace;
53
+ }
54
+ return member;
55
+ });
56
+ };
57
+ const transcludeChildOfArrayElement = (search, replace, edges) => {
58
+ const arrayElement = edges.get(search);
59
+ if (!(0, _index.isArrayElement)(arrayElement)) {
60
+ return;
61
+ }
62
+ arrayElement.content = arrayElement.map(element => {
63
+ if (element === search) {
64
+ edges.delete(search);
65
+ edges.set(replace, arrayElement);
66
+ return replace;
67
+ }
68
+ return element;
69
+ });
70
+ };
71
+
72
+ /**
73
+ * This is a mutating stamp. If you don't want your Element to be mutated,
74
+ * clone in before passing it to initializer of this stamp.
75
+ */
76
+
77
+ const Transcluder = _stampit.default.init(function TranscluderConstructor({
78
+ element
79
+ }) {
80
+ let edges;
81
+ this.transclude = function transclude(search, replace) {
82
+ var _edges;
83
+ // shortcut 1. - replacing entire ApiDOM tree
84
+ if (search === element) return replace;
85
+ // shortcut 2. - replacing nothing
86
+ if (search === replace) return element;
87
+ edges = (_edges = edges) !== null && _edges !== void 0 ? _edges : computeEdges(element);
88
+ const parent = edges.get(search);
89
+ if ((0, _ramdaAdjunct.isUndefined)(parent)) {
90
+ return undefined;
91
+ }
92
+
93
+ /**
94
+ * This predicate must be first because ObjectElement extends ArrayElement.
95
+ * isArrayElement returns true for ObjectElements.
96
+ * (classical problems with polymorphism)
97
+ */
98
+ if ((0, _index.isObjectElement)(parent)) {
99
+ // @ts-ignore
100
+ transcludeChildOfObjectElement(search, replace, edges);
101
+ } else if ((0, _index.isArrayElement)(parent)) {
102
+ transcludeChildOfArrayElement(search, replace, edges);
103
+ } else if ((0, _index.isMemberElement)(parent)) {
104
+ transcludeChildOfMemberElement(search, replace, edges);
105
+ }
106
+ return element;
107
+ };
108
+ });
109
+ var _default = Transcluder;
110
+ exports.default = _default;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
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
+ */
11
+ const transclude = (search, replace, element) => {
12
+ const transcluder = (0, _Transcluder.default)({
13
+ element
14
+ });
15
+ return transcluder.transclude(search, replace);
16
+ };
17
+ exports.transclude = transclude;
18
+ var _default = _Transcluder.default;
19
+ exports.default = _default;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports.default = void 0;
5
+ var _ramda = require("ramda");
6
+ var _minim = require("minim");
7
+ var _visitor = require("./visitor.cjs");
8
+ // finds all elements matching the predicate
9
+ // filter :: Pred -> Element -> ArraySlice
10
+ const filter = (0, _ramda.curry)((predicate, element) => {
11
+ const visitor = (0, _visitor.PredicateVisitor)({
12
+ predicate
13
+ });
14
+
15
+ // @ts-ignore
16
+ (0, _visitor.visit)(element, visitor);
17
+ return new _minim.ArraySlice(visitor.result);
18
+ });
19
+ var _default = filter;
20
+ exports.default = _default;
@@ -0,0 +1,20 @@
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
+ // find first element that satisfies the provided predicate
8
+ // find :: Pred -> Element -> Element | Undefined
9
+ const find = (0, _ramda.curry)((predicate, element) => {
10
+ const visitor = (0, _visitor.PredicateVisitor)({
11
+ predicate,
12
+ returnOnTrue: _visitor.BREAK
13
+ });
14
+
15
+ // @ts-ignore
16
+ (0, _visitor.visit)(element, visitor);
17
+ return (0, _ramda.pathOr)(undefined, [0], visitor.result);
18
+ });
19
+ var _default = find;
20
+ exports.default = _default;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ exports.__esModule = true;
5
+ exports.default = void 0;
6
+ var _stampit = _interopRequireDefault(require("stampit"));
7
+ var _ramda = require("ramda");
8
+ var _ramdaAdjunct = require("ramda-adjunct");
9
+ var _index = require("../predicates/index.cjs");
10
+ var _visitor = require("./visitor.cjs");
11
+ const Visitor = (0, _stampit.default)({
12
+ props: {
13
+ result: [],
14
+ offset: 0,
15
+ includeRightBound: false
16
+ },
17
+ // @ts-ignore
18
+ init({
19
+ offset = this.offset,
20
+ includeRightBound = this.includeRightBound
21
+ }) {
22
+ this.result = [];
23
+ this.offset = offset;
24
+ this.includeRightBound = includeRightBound;
25
+ },
26
+ methods: {
27
+ enter(element) {
28
+ if (!(0, _index.hasElementSourceMap)(element)) {
29
+ return undefined; // dive in
30
+ }
31
+
32
+ const sourceMapElement = element.getMetaProperty('sourceMap');
33
+ const charStart = sourceMapElement.positionStart.get(2).toValue();
34
+ const charEnd = sourceMapElement.positionEnd.get(2).toValue();
35
+ const isWithinOffsetRange = this.offset >= charStart && (this.offset < charEnd || this.includeRightBound && this.offset <= charEnd);
36
+ if (isWithinOffsetRange) {
37
+ this.result.push(element);
38
+ return undefined; // push to stack and dive in
39
+ }
40
+
41
+ return false; // skip entire sub-tree
42
+ }
43
+ }
44
+ });
45
+
46
+ // Finds the most inner node at the given offset.
47
+ // If includeRightBound is set, also finds nodes that end at the given offset.
48
+ // findAtOffset :: Number -> Element -> Element | Undefined
49
+ const findAtOffset = (0, _ramda.curry)((options, element) => {
50
+ let offset;
51
+ let includeRightBound;
52
+ if ((0, _ramdaAdjunct.isNumber)(options)) {
53
+ offset = options;
54
+ includeRightBound = false;
55
+ } else {
56
+ offset = (0, _ramda.pathOr)(0, ['offset'], options);
57
+ includeRightBound = (0, _ramda.pathOr)(false, ['includeRightBound'], options);
58
+ }
59
+ const visitor = Visitor({
60
+ offset,
61
+ includeRightBound
62
+ });
63
+
64
+ // @ts-ignore
65
+ (0, _visitor.visit)(element, visitor);
66
+
67
+ // @ts-ignore
68
+ return (0, _ramda.last)(visitor.result);
69
+ });
70
+ var _default = findAtOffset;
71
+ exports.default = _default;