@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,77 @@
1
+ import { ArrayElement } from 'minim';
2
+
3
+ /**
4
+ * @public
5
+ */
6
+
7
+ /**
8
+ * @public
9
+ */
10
+
11
+ /**
12
+ * @public
13
+ */
14
+
15
+ /**
16
+ * @public
17
+ */
18
+
19
+ /**
20
+ * @public
21
+ */
22
+
23
+ /**
24
+ * @public
25
+ */
26
+
27
+ /**
28
+ * @public
29
+ */
30
+
31
+ /**
32
+ * @public
33
+ */
34
+ export const hasMethod = (name, element) => {
35
+ return typeof element === 'object' && element !== null && name in element && typeof element[name] === 'function';
36
+ };
37
+
38
+ /**
39
+ * @public
40
+ */
41
+ export const hasBasicElementProps = element => typeof element === 'object' && element != null && '_storedElement' in element && typeof element._storedElement === 'string' && '_content' in element;
42
+
43
+ /**
44
+ * @public
45
+ */
46
+ export const primitiveEq = (val, element) => {
47
+ if (typeof element === 'object' && element !== null && 'primitive' in element) {
48
+ return typeof element.primitive === 'function' && element.primitive() === val;
49
+ }
50
+ return false;
51
+ };
52
+
53
+ /**
54
+ * @public
55
+ */
56
+ export const hasClass = (cls, element) => {
57
+ return typeof element === 'object' && element !== null && 'classes' in element && (Array.isArray(element.classes) || element.classes instanceof ArrayElement) && element.classes.includes(cls);
58
+ };
59
+
60
+ /**
61
+ * @public
62
+ */
63
+ export const isElementType = (name, element) => typeof element === 'object' && element !== null && 'element' in element && element.element === name;
64
+
65
+ /**
66
+ * @public
67
+ */
68
+ const createPredicate = predicateCreator => {
69
+ return predicateCreator({
70
+ hasMethod,
71
+ hasBasicElementProps,
72
+ primitiveEq,
73
+ isElementType,
74
+ hasClass
75
+ });
76
+ };
77
+ export default createPredicate;
@@ -0,0 +1,208 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime-corejs3/helpers/interopRequireWildcard").default;
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
5
+ exports.__esModule = true;
6
+ exports.isStringElement = exports.isSourceMapElement = exports.isRefElement = exports.isPrimitiveElement = exports.isParseResultElement = exports.isObjectElement = exports.isNumberElement = exports.isNullElement = exports.isMemberElement = exports.isLinkElement = exports.isElement = exports.isCommentElement = exports.isBooleanElement = exports.isArrayElement = exports.isAnnotationElement = exports.includesSymbols = exports.includesClasses = exports.hasElementSourceMap = void 0;
7
+ var _minim = require("minim");
8
+ var _ramda = require("ramda");
9
+ var _ramdaAdjunct = require("ramda-adjunct");
10
+ var _Annotation = _interopRequireDefault(require("../elements/Annotation.cjs"));
11
+ var _Comment = _interopRequireDefault(require("../elements/Comment.cjs"));
12
+ var _ParseResult = _interopRequireDefault(require("../elements/ParseResult.cjs"));
13
+ var _SourceMap = _interopRequireDefault(require("../elements/SourceMap.cjs"));
14
+ var _helpers = _interopRequireWildcard(require("./helpers.cjs"));
15
+ /**
16
+ * @public
17
+ */
18
+ const isElement = exports.isElement = (0, _helpers.default)(({
19
+ hasBasicElementProps,
20
+ primitiveEq
21
+ }) => {
22
+ return element => element instanceof _minim.Element || hasBasicElementProps(element) && primitiveEq(undefined, element);
23
+ });
24
+
25
+ /**
26
+ * @public
27
+ */
28
+ const isStringElement = exports.isStringElement = (0, _helpers.default)(({
29
+ hasBasicElementProps,
30
+ primitiveEq
31
+ }) => {
32
+ return element => element instanceof _minim.StringElement || hasBasicElementProps(element) && primitiveEq('string', element);
33
+ });
34
+
35
+ /**
36
+ * @public
37
+ */
38
+ const isNumberElement = exports.isNumberElement = (0, _helpers.default)(({
39
+ hasBasicElementProps,
40
+ primitiveEq
41
+ }) => {
42
+ return element => element instanceof _minim.NumberElement || hasBasicElementProps(element) && primitiveEq('number', element);
43
+ });
44
+
45
+ /**
46
+ * @public
47
+ */
48
+ const isNullElement = exports.isNullElement = (0, _helpers.default)(({
49
+ hasBasicElementProps,
50
+ primitiveEq
51
+ }) => {
52
+ return element => element instanceof _minim.NullElement || hasBasicElementProps(element) && primitiveEq('null', element);
53
+ });
54
+
55
+ /**
56
+ * @public
57
+ */
58
+ const isBooleanElement = exports.isBooleanElement = (0, _helpers.default)(({
59
+ hasBasicElementProps,
60
+ primitiveEq
61
+ }) => {
62
+ return element => element instanceof _minim.BooleanElement || hasBasicElementProps(element) && primitiveEq('boolean', element);
63
+ });
64
+
65
+ /**
66
+ * @public
67
+ */
68
+ const isObjectElement = exports.isObjectElement = (0, _helpers.default)(({
69
+ hasBasicElementProps,
70
+ primitiveEq,
71
+ hasMethod
72
+ }) => {
73
+ return element => element instanceof _minim.ObjectElement || hasBasicElementProps(element) && primitiveEq('object', element) && hasMethod('keys', element) && hasMethod('values', element) && hasMethod('items', element);
74
+ });
75
+
76
+ /**
77
+ * @public
78
+ */
79
+ const isArrayElement = exports.isArrayElement = (0, _helpers.default)(({
80
+ hasBasicElementProps,
81
+ primitiveEq,
82
+ hasMethod
83
+ }) => {
84
+ return element => element instanceof _minim.ArrayElement && !(element instanceof _minim.ObjectElement) || hasBasicElementProps(element) && primitiveEq('array', element) && hasMethod('push', element) && hasMethod('unshift', element) && hasMethod('map', element) && hasMethod('reduce', element);
85
+ });
86
+
87
+ /**
88
+ * @public
89
+ */
90
+ const isMemberElement = exports.isMemberElement = (0, _helpers.default)(({
91
+ hasBasicElementProps,
92
+ isElementType,
93
+ primitiveEq
94
+ }) => {
95
+ return element => element instanceof _minim.MemberElement || hasBasicElementProps(element) && isElementType('member', element) && primitiveEq(undefined, element);
96
+ });
97
+
98
+ /**
99
+ * @public
100
+ */
101
+ const isLinkElement = exports.isLinkElement = (0, _helpers.default)(({
102
+ hasBasicElementProps,
103
+ isElementType,
104
+ primitiveEq
105
+ }) => {
106
+ return element => element instanceof _minim.LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq(undefined, element);
107
+ });
108
+
109
+ /**
110
+ * @public
111
+ */
112
+ const isRefElement = exports.isRefElement = (0, _helpers.default)(({
113
+ hasBasicElementProps,
114
+ isElementType,
115
+ primitiveEq
116
+ }) => {
117
+ return element => element instanceof _minim.RefElement || hasBasicElementProps(element) && isElementType('ref', element) && primitiveEq(undefined, element);
118
+ });
119
+
120
+ /**
121
+ * @public
122
+ */
123
+ const isAnnotationElement = exports.isAnnotationElement = (0, _helpers.default)(({
124
+ hasBasicElementProps,
125
+ isElementType,
126
+ primitiveEq
127
+ }) => {
128
+ return element => element instanceof _Annotation.default || hasBasicElementProps(element) && isElementType('annotation', element) && primitiveEq('array', element);
129
+ });
130
+
131
+ /**
132
+ * @public
133
+ */
134
+ const isCommentElement = exports.isCommentElement = (0, _helpers.default)(({
135
+ hasBasicElementProps,
136
+ isElementType,
137
+ primitiveEq
138
+ }) => {
139
+ return element => element instanceof _Comment.default || hasBasicElementProps(element) && isElementType('comment', element) && primitiveEq('string', element);
140
+ });
141
+
142
+ /**
143
+ * @public
144
+ */
145
+ const isParseResultElement = exports.isParseResultElement = (0, _helpers.default)(({
146
+ hasBasicElementProps,
147
+ isElementType,
148
+ primitiveEq
149
+ }) => {
150
+ return element => element instanceof _ParseResult.default || hasBasicElementProps(element) && isElementType('parseResult', element) && primitiveEq('array', element);
151
+ });
152
+
153
+ /**
154
+ * @public
155
+ */
156
+ const isSourceMapElement = exports.isSourceMapElement = (0, _helpers.default)(({
157
+ hasBasicElementProps,
158
+ isElementType,
159
+ primitiveEq
160
+ }) => {
161
+ return element => element instanceof _SourceMap.default || hasBasicElementProps(element) && isElementType('sourceMap', element) && primitiveEq('array', element);
162
+ });
163
+
164
+ /**
165
+ * @public
166
+ */
167
+
168
+ /**
169
+ * @public
170
+ */
171
+ const isPrimitiveElement = element => {
172
+ return (0, _helpers.isElementType)('object', element) || (0, _helpers.isElementType)('array', element) || (0, _helpers.isElementType)('boolean', element) || (0, _helpers.isElementType)('number', element) || (0, _helpers.isElementType)('string', element) || (0, _helpers.isElementType)('null', element) || (0, _helpers.isElementType)('member', element);
173
+ };
174
+
175
+ /**
176
+ * @public
177
+ */
178
+ exports.isPrimitiveElement = isPrimitiveElement;
179
+ const hasElementSourceMap = element => {
180
+ return isSourceMapElement(element.meta.get('sourceMap'));
181
+ };
182
+
183
+ /**
184
+ * @public
185
+ */
186
+ exports.hasElementSourceMap = hasElementSourceMap;
187
+ const includesSymbols = (symbols, element) => {
188
+ if (symbols.length === 0) {
189
+ return true;
190
+ }
191
+ const elementSymbols = element.attributes.get('symbols');
192
+ if (!isArrayElement(elementSymbols)) {
193
+ return false;
194
+ }
195
+ return (0, _ramda.all)((0, _ramdaAdjunct.included)(elementSymbols.toValue()), symbols);
196
+ };
197
+
198
+ /**
199
+ * @public
200
+ */
201
+ exports.includesSymbols = includesSymbols;
202
+ const includesClasses = (classes, element) => {
203
+ if (classes.length === 0) {
204
+ return true;
205
+ }
206
+ return (0, _ramda.all)((0, _ramdaAdjunct.included)(element.classes.toValue()), classes);
207
+ };
208
+ exports.includesClasses = includesClasses;
@@ -0,0 +1,198 @@
1
+ import { Element, StringElement, NumberElement, NullElement, BooleanElement, ArrayElement, ObjectElement, MemberElement, LinkElement, RefElement } from 'minim';
2
+ import { all } from 'ramda';
3
+ import { included } from 'ramda-adjunct';
4
+ import AnnotationElement from "../elements/Annotation.mjs";
5
+ import CommentElement from "../elements/Comment.mjs";
6
+ import ParserResultElement from "../elements/ParseResult.mjs";
7
+ import SourceMapElement from "../elements/SourceMap.mjs";
8
+ import createPredicate, { isElementType as isElementTypeHelper } from "./helpers.mjs";
9
+ /**
10
+ * @public
11
+ */
12
+ export const isElement = createPredicate(({
13
+ hasBasicElementProps,
14
+ primitiveEq
15
+ }) => {
16
+ return element => element instanceof Element || hasBasicElementProps(element) && primitiveEq(undefined, element);
17
+ });
18
+
19
+ /**
20
+ * @public
21
+ */
22
+ export const isStringElement = createPredicate(({
23
+ hasBasicElementProps,
24
+ primitiveEq
25
+ }) => {
26
+ return element => element instanceof StringElement || hasBasicElementProps(element) && primitiveEq('string', element);
27
+ });
28
+
29
+ /**
30
+ * @public
31
+ */
32
+ export const isNumberElement = createPredicate(({
33
+ hasBasicElementProps,
34
+ primitiveEq
35
+ }) => {
36
+ return element => element instanceof NumberElement || hasBasicElementProps(element) && primitiveEq('number', element);
37
+ });
38
+
39
+ /**
40
+ * @public
41
+ */
42
+ export const isNullElement = createPredicate(({
43
+ hasBasicElementProps,
44
+ primitiveEq
45
+ }) => {
46
+ return element => element instanceof NullElement || hasBasicElementProps(element) && primitiveEq('null', element);
47
+ });
48
+
49
+ /**
50
+ * @public
51
+ */
52
+ export const isBooleanElement = createPredicate(({
53
+ hasBasicElementProps,
54
+ primitiveEq
55
+ }) => {
56
+ return element => element instanceof BooleanElement || hasBasicElementProps(element) && primitiveEq('boolean', element);
57
+ });
58
+
59
+ /**
60
+ * @public
61
+ */
62
+ export const isObjectElement = createPredicate(({
63
+ hasBasicElementProps,
64
+ primitiveEq,
65
+ hasMethod
66
+ }) => {
67
+ return element => element instanceof ObjectElement || hasBasicElementProps(element) && primitiveEq('object', element) && hasMethod('keys', element) && hasMethod('values', element) && hasMethod('items', element);
68
+ });
69
+
70
+ /**
71
+ * @public
72
+ */
73
+ export const isArrayElement = createPredicate(({
74
+ hasBasicElementProps,
75
+ primitiveEq,
76
+ hasMethod
77
+ }) => {
78
+ return element => element instanceof ArrayElement && !(element instanceof ObjectElement) || hasBasicElementProps(element) && primitiveEq('array', element) && hasMethod('push', element) && hasMethod('unshift', element) && hasMethod('map', element) && hasMethod('reduce', element);
79
+ });
80
+
81
+ /**
82
+ * @public
83
+ */
84
+ export const isMemberElement = createPredicate(({
85
+ hasBasicElementProps,
86
+ isElementType,
87
+ primitiveEq
88
+ }) => {
89
+ return element => element instanceof MemberElement || hasBasicElementProps(element) && isElementType('member', element) && primitiveEq(undefined, element);
90
+ });
91
+
92
+ /**
93
+ * @public
94
+ */
95
+ export const isLinkElement = createPredicate(({
96
+ hasBasicElementProps,
97
+ isElementType,
98
+ primitiveEq
99
+ }) => {
100
+ return element => element instanceof LinkElement || hasBasicElementProps(element) && isElementType('link', element) && primitiveEq(undefined, element);
101
+ });
102
+
103
+ /**
104
+ * @public
105
+ */
106
+ export const isRefElement = createPredicate(({
107
+ hasBasicElementProps,
108
+ isElementType,
109
+ primitiveEq
110
+ }) => {
111
+ return element => element instanceof RefElement || hasBasicElementProps(element) && isElementType('ref', element) && primitiveEq(undefined, element);
112
+ });
113
+
114
+ /**
115
+ * @public
116
+ */
117
+ export const isAnnotationElement = createPredicate(({
118
+ hasBasicElementProps,
119
+ isElementType,
120
+ primitiveEq
121
+ }) => {
122
+ return element => element instanceof AnnotationElement || hasBasicElementProps(element) && isElementType('annotation', element) && primitiveEq('array', element);
123
+ });
124
+
125
+ /**
126
+ * @public
127
+ */
128
+ export const isCommentElement = createPredicate(({
129
+ hasBasicElementProps,
130
+ isElementType,
131
+ primitiveEq
132
+ }) => {
133
+ return element => element instanceof CommentElement || hasBasicElementProps(element) && isElementType('comment', element) && primitiveEq('string', element);
134
+ });
135
+
136
+ /**
137
+ * @public
138
+ */
139
+ export const isParseResultElement = createPredicate(({
140
+ hasBasicElementProps,
141
+ isElementType,
142
+ primitiveEq
143
+ }) => {
144
+ return element => element instanceof ParserResultElement || hasBasicElementProps(element) && isElementType('parseResult', element) && primitiveEq('array', element);
145
+ });
146
+
147
+ /**
148
+ * @public
149
+ */
150
+ export const isSourceMapElement = createPredicate(({
151
+ hasBasicElementProps,
152
+ isElementType,
153
+ primitiveEq
154
+ }) => {
155
+ return element => element instanceof SourceMapElement || hasBasicElementProps(element) && isElementType('sourceMap', element) && primitiveEq('array', element);
156
+ });
157
+
158
+ /**
159
+ * @public
160
+ */
161
+
162
+ /**
163
+ * @public
164
+ */
165
+ export const isPrimitiveElement = element => {
166
+ return isElementTypeHelper('object', element) || isElementTypeHelper('array', element) || isElementTypeHelper('boolean', element) || isElementTypeHelper('number', element) || isElementTypeHelper('string', element) || isElementTypeHelper('null', element) || isElementTypeHelper('member', element);
167
+ };
168
+
169
+ /**
170
+ * @public
171
+ */
172
+ export const hasElementSourceMap = element => {
173
+ return isSourceMapElement(element.meta.get('sourceMap'));
174
+ };
175
+
176
+ /**
177
+ * @public
178
+ */
179
+ export const includesSymbols = (symbols, element) => {
180
+ if (symbols.length === 0) {
181
+ return true;
182
+ }
183
+ const elementSymbols = element.attributes.get('symbols');
184
+ if (!isArrayElement(elementSymbols)) {
185
+ return false;
186
+ }
187
+ return all(included(elementSymbols.toValue()), symbols);
188
+ };
189
+
190
+ /**
191
+ * @public
192
+ */
193
+ export const includesClasses = (classes, element) => {
194
+ if (classes.length === 0) {
195
+ return true;
196
+ }
197
+ return all(included(element.classes.toValue()), classes);
198
+ };
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.default = exports.createRefractor = void 0;
6
+ var _index = require("./plugins/dispatcher/index.cjs");
7
+ var _visitor = require("../traversal/visitor.cjs");
8
+ var _index2 = require("../clone/index.cjs");
9
+ var _index3 = require("../predicates/index.cjs");
10
+ var _toolbox = _interopRequireDefault(require("./toolbox.cjs"));
11
+ const refract = (value, {
12
+ Type,
13
+ plugins = []
14
+ }) => {
15
+ /**
16
+ * This is where values gets refracted into generic ApiDOM.
17
+ * We don't allow consumers to hook into this translation.
18
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
19
+ */
20
+ const element = new Type(value);
21
+ if ((0, _index3.isElement)(value)) {
22
+ if (value.meta.length > 0) {
23
+ element.meta = (0, _index2.cloneDeep)(value.meta);
24
+ }
25
+ if (value.attributes.length > 0) {
26
+ element.attributes = (0, _index2.cloneDeep)(value.attributes);
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Run plugins only when necessary.
32
+ * Running plugins visitors means extra single traversal === performance hit.
33
+ */
34
+ return (0, _index.dispatchPluginsSync)(element, plugins, {
35
+ toolboxCreator: _toolbox.default,
36
+ visitorOptions: {
37
+ nodeTypeGetter: _visitor.getNodeType
38
+ }
39
+ });
40
+ };
41
+ const createRefractor = Type => (value, options = {}) => refract(value, {
42
+ ...options,
43
+ Type
44
+ });
45
+ exports.createRefractor = createRefractor;
46
+ var _default = exports.default = refract;
@@ -0,0 +1,40 @@
1
+ import { dispatchPluginsSync } from "./plugins/dispatcher/index.mjs";
2
+ import { getNodeType } from "../traversal/visitor.mjs";
3
+ import { cloneDeep } from "../clone/index.mjs";
4
+ import { isElement } from "../predicates/index.mjs";
5
+ import createToolbox from "./toolbox.mjs";
6
+ const refract = (value, {
7
+ Type,
8
+ plugins = []
9
+ }) => {
10
+ /**
11
+ * This is where values gets refracted into generic ApiDOM.
12
+ * We don't allow consumers to hook into this translation.
13
+ * Though we allow consumers to define their onw plugins on already transformed ApiDOM.
14
+ */
15
+ const element = new Type(value);
16
+ if (isElement(value)) {
17
+ if (value.meta.length > 0) {
18
+ element.meta = cloneDeep(value.meta);
19
+ }
20
+ if (value.attributes.length > 0) {
21
+ element.attributes = cloneDeep(value.attributes);
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Run plugins only when necessary.
27
+ * Running plugins visitors means extra single traversal === performance hit.
28
+ */
29
+ return dispatchPluginsSync(element, plugins, {
30
+ toolboxCreator: createToolbox,
31
+ visitorOptions: {
32
+ nodeTypeGetter: getNodeType
33
+ }
34
+ });
35
+ };
36
+ export const createRefractor = Type => (value, options = {}) => refract(value, {
37
+ ...options,
38
+ Type
39
+ });
40
+ export default refract;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.dispatchPluginsSync = exports.dispatchPluginsAsync = 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
+ /**
11
+ * @public
12
+ */
13
+
14
+ /**
15
+ * @public
16
+ */
17
+
18
+ /**
19
+ * @public
20
+ */
21
+
22
+ const defaultDispatchPluginsOptions = {
23
+ toolboxCreator: _toolbox.default,
24
+ visitorOptions: {
25
+ nodeTypeGetter: _visitor.getNodeType,
26
+ exposeEdits: true
27
+ }
28
+ };
29
+
30
+ /**
31
+ * @public
32
+ */
33
+ const dispatchPluginsSync = (element, plugins, options = {}) => {
34
+ if (plugins.length === 0) return element;
35
+ const mergedOptions = (0, _ramda.mergeDeepRight)(defaultDispatchPluginsOptions, options);
36
+ const {
37
+ toolboxCreator,
38
+ visitorOptions
39
+ } = mergedOptions;
40
+ const toolbox = toolboxCreator();
41
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
42
+ const mergedPluginsVisitor = (0, _visitor.mergeAllVisitors)(pluginsSpecs.map((0, _ramda.propOr)({}, 'visitor')), {
43
+ ...visitorOptions
44
+ });
45
+ pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['pre'], []));
46
+ const newElement = (0, _visitor.visit)(element, mergedPluginsVisitor, visitorOptions);
47
+ pluginsSpecs.forEach((0, _ramdaAdjunct.invokeArgs)(['post'], []));
48
+ return newElement;
49
+ };
50
+ exports.dispatchPluginsSync = dispatchPluginsSync;
51
+ const dispatchPluginsAsync = async (element, plugins, options = {}) => {
52
+ if (plugins.length === 0) return element;
53
+ const mergedOptions = (0, _ramda.mergeDeepRight)(defaultDispatchPluginsOptions, options);
54
+ const {
55
+ toolboxCreator,
56
+ visitorOptions
57
+ } = mergedOptions;
58
+ const toolbox = toolboxCreator();
59
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
60
+ const mergeAllVisitorsAsync = _visitor.mergeAllVisitors[Symbol.for('nodejs.util.promisify.custom')];
61
+ const visitAsync = _visitor.visit[Symbol.for('nodejs.util.promisify.custom')];
62
+ const mergedPluginsVisitor = mergeAllVisitorsAsync(pluginsSpecs.map((0, _ramda.propOr)({}, 'visitor')), {
63
+ ...visitorOptions
64
+ });
65
+ await Promise.allSettled(pluginsSpecs.map((0, _ramdaAdjunct.invokeArgs)(['pre'], [])));
66
+ const newElement = await visitAsync(element, mergedPluginsVisitor, visitorOptions);
67
+ await Promise.allSettled(pluginsSpecs.map((0, _ramdaAdjunct.invokeArgs)(['post'], [])));
68
+ return newElement;
69
+ };
70
+ exports.dispatchPluginsAsync = dispatchPluginsAsync;
71
+ dispatchPluginsSync[Symbol.for('nodejs.util.promisify.custom')] = dispatchPluginsAsync;
@@ -0,0 +1,61 @@
1
+ import { mergeDeepRight, propOr } from 'ramda';
2
+ import { invokeArgs } from 'ramda-adjunct';
3
+ import createToolbox from "../../toolbox.mjs";
4
+ import { getNodeType, mergeAllVisitors, visit } from "../../../traversal/visitor.mjs";
5
+ /**
6
+ * @public
7
+ */
8
+ /**
9
+ * @public
10
+ */
11
+ /**
12
+ * @public
13
+ */
14
+ const defaultDispatchPluginsOptions = {
15
+ toolboxCreator: createToolbox,
16
+ visitorOptions: {
17
+ nodeTypeGetter: getNodeType,
18
+ exposeEdits: true
19
+ }
20
+ };
21
+
22
+ /**
23
+ * @public
24
+ */
25
+ export const dispatchPluginsSync = (element, plugins, options = {}) => {
26
+ if (plugins.length === 0) return element;
27
+ const mergedOptions = mergeDeepRight(defaultDispatchPluginsOptions, options);
28
+ const {
29
+ toolboxCreator,
30
+ visitorOptions
31
+ } = mergedOptions;
32
+ const toolbox = toolboxCreator();
33
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
34
+ const mergedPluginsVisitor = mergeAllVisitors(pluginsSpecs.map(propOr({}, 'visitor')), {
35
+ ...visitorOptions
36
+ });
37
+ pluginsSpecs.forEach(invokeArgs(['pre'], []));
38
+ const newElement = visit(element, mergedPluginsVisitor, visitorOptions);
39
+ pluginsSpecs.forEach(invokeArgs(['post'], []));
40
+ return newElement;
41
+ };
42
+ export const dispatchPluginsAsync = async (element, plugins, options = {}) => {
43
+ if (plugins.length === 0) return element;
44
+ const mergedOptions = mergeDeepRight(defaultDispatchPluginsOptions, options);
45
+ const {
46
+ toolboxCreator,
47
+ visitorOptions
48
+ } = mergedOptions;
49
+ const toolbox = toolboxCreator();
50
+ const pluginsSpecs = plugins.map(plugin => plugin(toolbox));
51
+ const mergeAllVisitorsAsync = mergeAllVisitors[Symbol.for('nodejs.util.promisify.custom')];
52
+ const visitAsync = visit[Symbol.for('nodejs.util.promisify.custom')];
53
+ const mergedPluginsVisitor = mergeAllVisitorsAsync(pluginsSpecs.map(propOr({}, 'visitor')), {
54
+ ...visitorOptions
55
+ });
56
+ await Promise.allSettled(pluginsSpecs.map(invokeArgs(['pre'], [])));
57
+ const newElement = await visitAsync(element, mergedPluginsVisitor, visitorOptions);
58
+ await Promise.allSettled(pluginsSpecs.map(invokeArgs(['post'], [])));
59
+ return newElement;
60
+ };
61
+ dispatchPluginsSync[Symbol.for('nodejs.util.promisify.custom')] = dispatchPluginsAsync;