@speclynx/apidom-datamodel 1.12.2

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 (46) hide show
  1. package/LICENSES/AFL-3.0.txt +182 -0
  2. package/LICENSES/Apache-2.0.txt +202 -0
  3. package/LICENSES/BSD-3-Clause.txt +26 -0
  4. package/LICENSES/MIT.txt +9 -0
  5. package/NOTICE +74 -0
  6. package/README.md +479 -0
  7. package/dist/apidom-datamodel.browser.js +2717 -0
  8. package/dist/apidom-datamodel.browser.min.js +1 -0
  9. package/package.json +53 -0
  10. package/src/KeyValuePair.cjs +38 -0
  11. package/src/KeyValuePair.mjs +34 -0
  12. package/src/Namespace.cjs +212 -0
  13. package/src/Namespace.mjs +206 -0
  14. package/src/ObjectSlice.cjs +206 -0
  15. package/src/ObjectSlice.mjs +202 -0
  16. package/src/elements/LinkElement.cjs +44 -0
  17. package/src/elements/LinkElement.mjs +39 -0
  18. package/src/elements/RefElement.cjs +31 -0
  19. package/src/elements/RefElement.mjs +26 -0
  20. package/src/index.cjs +25 -0
  21. package/src/index.mjs +6 -0
  22. package/src/primitives/ArrayElement.cjs +176 -0
  23. package/src/primitives/ArrayElement.mjs +169 -0
  24. package/src/primitives/BooleanElement.cjs +20 -0
  25. package/src/primitives/BooleanElement.mjs +15 -0
  26. package/src/primitives/CollectionElement.cjs +194 -0
  27. package/src/primitives/CollectionElement.mjs +187 -0
  28. package/src/primitives/Element.cjs +438 -0
  29. package/src/primitives/Element.mjs +433 -0
  30. package/src/primitives/MemberElement.cjs +54 -0
  31. package/src/primitives/MemberElement.mjs +49 -0
  32. package/src/primitives/NullElement.cjs +28 -0
  33. package/src/primitives/NullElement.mjs +23 -0
  34. package/src/primitives/NumberElement.cjs +20 -0
  35. package/src/primitives/NumberElement.mjs +15 -0
  36. package/src/primitives/ObjectElement.cjs +222 -0
  37. package/src/primitives/ObjectElement.mjs +216 -0
  38. package/src/primitives/StringElement.cjs +27 -0
  39. package/src/primitives/StringElement.mjs +22 -0
  40. package/src/registration.cjs +87 -0
  41. package/src/registration.mjs +70 -0
  42. package/src/serialisers/JSONSerialiser.cjs +144 -0
  43. package/src/serialisers/JSONSerialiser.mjs +140 -0
  44. package/src/types.cjs +3 -0
  45. package/src/types.mjs +1 -0
  46. package/types/apidom-datamodel.d.ts +887 -0
@@ -0,0 +1,222 @@
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 _CollectionElement = _interopRequireDefault(require("./CollectionElement.cjs"));
7
+ var _MemberElement = _interopRequireDefault(require("./MemberElement.cjs"));
8
+ var _ObjectSlice = _interopRequireDefault(require("../ObjectSlice.cjs"));
9
+ /**
10
+ * Callback type for ObjectElement iteration methods.
11
+ * @public
12
+ */
13
+
14
+ /**
15
+ * ObjectElement represents an object/dictionary of key-value pairs in ApiDOM.
16
+ *
17
+ * @typeParam K - The key element type, defaults to Element
18
+ * @typeParam V - The value element type, defaults to Element
19
+ * @public
20
+ */
21
+ class ObjectElement extends _CollectionElement.default {
22
+ constructor(content, meta, attributes) {
23
+ super(content || [], meta, attributes);
24
+ this.element = 'object';
25
+ }
26
+ primitive() {
27
+ return 'object';
28
+ }
29
+ toValue() {
30
+ return this._content.reduce((results, el) => {
31
+ results[el.key.toValue()] = el.value ? el.value.toValue() : undefined;
32
+ return results;
33
+ }, {});
34
+ }
35
+
36
+ /**
37
+ * Gets the value element for the given key.
38
+ */
39
+ get(name) {
40
+ const member = this.getMember(name);
41
+ if (member) {
42
+ return member.value;
43
+ }
44
+ return undefined;
45
+ }
46
+
47
+ /**
48
+ * Helper for returning the value of an item by key.
49
+ */
50
+ getValue(name) {
51
+ const item = this.get(name);
52
+ if (item) {
53
+ return item.toValue();
54
+ }
55
+ return undefined;
56
+ }
57
+
58
+ /**
59
+ * Gets the member element for the given key.
60
+ */
61
+ getMember(name) {
62
+ if (name === undefined) {
63
+ return undefined;
64
+ }
65
+ return this._content.find(element => element.key.toValue() === name);
66
+ }
67
+
68
+ /**
69
+ * Removes the member with the given key.
70
+ */
71
+ remove(name) {
72
+ let removed = null;
73
+ this.content = this._content.filter(item => {
74
+ if (item.key.toValue() === name) {
75
+ removed = item;
76
+ return false;
77
+ }
78
+ return true;
79
+ });
80
+ return removed;
81
+ }
82
+
83
+ /**
84
+ * Gets the key element for the given key name.
85
+ */
86
+ getKey(name) {
87
+ const member = this.getMember(name);
88
+ if (member) {
89
+ return member.key;
90
+ }
91
+ return undefined;
92
+ }
93
+
94
+ /**
95
+ * Set allows either a key/value pair to be given or an object.
96
+ * If an object is given, each key is set to its respective value.
97
+ */
98
+ set(keyOrObject, value) {
99
+ if (typeof keyOrObject === 'string') {
100
+ const member = this.getMember(keyOrObject);
101
+ if (member) {
102
+ member.value = value;
103
+ } else {
104
+ this._content.push(new _MemberElement.default(keyOrObject, value));
105
+ }
106
+ } else if (typeof keyOrObject === 'object' && !Array.isArray(keyOrObject)) {
107
+ for (const objectKey of Object.keys(keyOrObject)) {
108
+ this.set(objectKey, keyOrObject[objectKey]);
109
+ }
110
+ }
111
+ return this;
112
+ }
113
+
114
+ /**
115
+ * Returns an array of all keys' values.
116
+ */
117
+ keys() {
118
+ return this._content.map(item => item.key.toValue());
119
+ }
120
+
121
+ /**
122
+ * Returns an array of all values' values.
123
+ */
124
+ values() {
125
+ return this._content.map(item => item.value.toValue());
126
+ }
127
+
128
+ /**
129
+ * Returns whether the object has the given key.
130
+ */
131
+ hasKey(value) {
132
+ return this._content.some(member => member.key.equals(value));
133
+ }
134
+
135
+ /**
136
+ * Returns an array of [key, value] pairs.
137
+ */
138
+ items() {
139
+ return this._content.map(item => [item.key.toValue(), item.value.toValue()]);
140
+ }
141
+
142
+ /**
143
+ * Maps over the member elements, calling callback with (value, key, member).
144
+ */
145
+ map(callback, thisArg) {
146
+ return this._content.map(item => callback.call(thisArg, item.value, item.key, item));
147
+ }
148
+
149
+ /**
150
+ * Returns an array containing the truthy results of calling the given transformation.
151
+ */
152
+ compactMap(callback, thisArg) {
153
+ const results = [];
154
+ this.forEach((value, key, member) => {
155
+ const result = callback.call(thisArg, value, key, member);
156
+ if (result) {
157
+ results.push(result);
158
+ }
159
+ });
160
+ return results;
161
+ }
162
+
163
+ /**
164
+ * Filters member elements using the provided callback.
165
+ */
166
+ filter(callback, thisArg) {
167
+ return new _ObjectSlice.default(this._content).filter(callback, thisArg);
168
+ }
169
+
170
+ /**
171
+ * Rejects member elements that match the provided callback.
172
+ */
173
+ reject(callback, thisArg) {
174
+ const results = [];
175
+ for (const member of this._content) {
176
+ if (!callback.call(thisArg, member.value, member.key, member)) {
177
+ results.push(member);
178
+ }
179
+ }
180
+ return new _ObjectSlice.default(results);
181
+ }
182
+
183
+ /**
184
+ * Executes a provided function once for each member element.
185
+ */
186
+ forEach(callback, thisArg) {
187
+ this._content.forEach(item => callback.call(thisArg, item.value, item.key, item));
188
+ }
189
+
190
+ /**
191
+ * Reduces the object to a single value.
192
+ * Callback receives (memo, value, key, member, obj).
193
+ */
194
+ reduce(callback, initialValue) {
195
+ let startIndex;
196
+ let memo;
197
+ if (initialValue !== undefined) {
198
+ startIndex = 0;
199
+ memo = this.refract(initialValue);
200
+ } else {
201
+ startIndex = 1;
202
+ // For objects, memo starts as the first member's value
203
+ memo = this._content[0]?.value;
204
+ }
205
+ for (let i = startIndex; i < this._content.length; i += 1) {
206
+ const member = this._content[i];
207
+ const result = callback(memo, member.value, member.key, member, this);
208
+ memo = result === undefined ? result : this.refract(result);
209
+ }
210
+ return memo;
211
+ }
212
+
213
+ // Fantasy Land
214
+
215
+ /**
216
+ * Returns an empty object element.
217
+ */
218
+ empty() {
219
+ return new this.constructor([]);
220
+ }
221
+ }
222
+ var _default = exports.default = ObjectElement;
@@ -0,0 +1,216 @@
1
+ import CollectionElement from "./CollectionElement.mjs";
2
+ import MemberElement from "./MemberElement.mjs";
3
+ import ObjectSlice from "../ObjectSlice.mjs";
4
+ /**
5
+ * Callback type for ObjectElement iteration methods.
6
+ * @public
7
+ */
8
+ /**
9
+ * ObjectElement represents an object/dictionary of key-value pairs in ApiDOM.
10
+ *
11
+ * @typeParam K - The key element type, defaults to Element
12
+ * @typeParam V - The value element type, defaults to Element
13
+ * @public
14
+ */
15
+ class ObjectElement extends CollectionElement {
16
+ constructor(content, meta, attributes) {
17
+ super(content || [], meta, attributes);
18
+ this.element = 'object';
19
+ }
20
+ primitive() {
21
+ return 'object';
22
+ }
23
+ toValue() {
24
+ return this._content.reduce((results, el) => {
25
+ results[el.key.toValue()] = el.value ? el.value.toValue() : undefined;
26
+ return results;
27
+ }, {});
28
+ }
29
+
30
+ /**
31
+ * Gets the value element for the given key.
32
+ */
33
+ get(name) {
34
+ const member = this.getMember(name);
35
+ if (member) {
36
+ return member.value;
37
+ }
38
+ return undefined;
39
+ }
40
+
41
+ /**
42
+ * Helper for returning the value of an item by key.
43
+ */
44
+ getValue(name) {
45
+ const item = this.get(name);
46
+ if (item) {
47
+ return item.toValue();
48
+ }
49
+ return undefined;
50
+ }
51
+
52
+ /**
53
+ * Gets the member element for the given key.
54
+ */
55
+ getMember(name) {
56
+ if (name === undefined) {
57
+ return undefined;
58
+ }
59
+ return this._content.find(element => element.key.toValue() === name);
60
+ }
61
+
62
+ /**
63
+ * Removes the member with the given key.
64
+ */
65
+ remove(name) {
66
+ let removed = null;
67
+ this.content = this._content.filter(item => {
68
+ if (item.key.toValue() === name) {
69
+ removed = item;
70
+ return false;
71
+ }
72
+ return true;
73
+ });
74
+ return removed;
75
+ }
76
+
77
+ /**
78
+ * Gets the key element for the given key name.
79
+ */
80
+ getKey(name) {
81
+ const member = this.getMember(name);
82
+ if (member) {
83
+ return member.key;
84
+ }
85
+ return undefined;
86
+ }
87
+
88
+ /**
89
+ * Set allows either a key/value pair to be given or an object.
90
+ * If an object is given, each key is set to its respective value.
91
+ */
92
+ set(keyOrObject, value) {
93
+ if (typeof keyOrObject === 'string') {
94
+ const member = this.getMember(keyOrObject);
95
+ if (member) {
96
+ member.value = value;
97
+ } else {
98
+ this._content.push(new MemberElement(keyOrObject, value));
99
+ }
100
+ } else if (typeof keyOrObject === 'object' && !Array.isArray(keyOrObject)) {
101
+ for (const objectKey of Object.keys(keyOrObject)) {
102
+ this.set(objectKey, keyOrObject[objectKey]);
103
+ }
104
+ }
105
+ return this;
106
+ }
107
+
108
+ /**
109
+ * Returns an array of all keys' values.
110
+ */
111
+ keys() {
112
+ return this._content.map(item => item.key.toValue());
113
+ }
114
+
115
+ /**
116
+ * Returns an array of all values' values.
117
+ */
118
+ values() {
119
+ return this._content.map(item => item.value.toValue());
120
+ }
121
+
122
+ /**
123
+ * Returns whether the object has the given key.
124
+ */
125
+ hasKey(value) {
126
+ return this._content.some(member => member.key.equals(value));
127
+ }
128
+
129
+ /**
130
+ * Returns an array of [key, value] pairs.
131
+ */
132
+ items() {
133
+ return this._content.map(item => [item.key.toValue(), item.value.toValue()]);
134
+ }
135
+
136
+ /**
137
+ * Maps over the member elements, calling callback with (value, key, member).
138
+ */
139
+ map(callback, thisArg) {
140
+ return this._content.map(item => callback.call(thisArg, item.value, item.key, item));
141
+ }
142
+
143
+ /**
144
+ * Returns an array containing the truthy results of calling the given transformation.
145
+ */
146
+ compactMap(callback, thisArg) {
147
+ const results = [];
148
+ this.forEach((value, key, member) => {
149
+ const result = callback.call(thisArg, value, key, member);
150
+ if (result) {
151
+ results.push(result);
152
+ }
153
+ });
154
+ return results;
155
+ }
156
+
157
+ /**
158
+ * Filters member elements using the provided callback.
159
+ */
160
+ filter(callback, thisArg) {
161
+ return new ObjectSlice(this._content).filter(callback, thisArg);
162
+ }
163
+
164
+ /**
165
+ * Rejects member elements that match the provided callback.
166
+ */
167
+ reject(callback, thisArg) {
168
+ const results = [];
169
+ for (const member of this._content) {
170
+ if (!callback.call(thisArg, member.value, member.key, member)) {
171
+ results.push(member);
172
+ }
173
+ }
174
+ return new ObjectSlice(results);
175
+ }
176
+
177
+ /**
178
+ * Executes a provided function once for each member element.
179
+ */
180
+ forEach(callback, thisArg) {
181
+ this._content.forEach(item => callback.call(thisArg, item.value, item.key, item));
182
+ }
183
+
184
+ /**
185
+ * Reduces the object to a single value.
186
+ * Callback receives (memo, value, key, member, obj).
187
+ */
188
+ reduce(callback, initialValue) {
189
+ let startIndex;
190
+ let memo;
191
+ if (initialValue !== undefined) {
192
+ startIndex = 0;
193
+ memo = this.refract(initialValue);
194
+ } else {
195
+ startIndex = 1;
196
+ // For objects, memo starts as the first member's value
197
+ memo = this._content[0]?.value;
198
+ }
199
+ for (let i = startIndex; i < this._content.length; i += 1) {
200
+ const member = this._content[i];
201
+ const result = callback(memo, member.value, member.key, member, this);
202
+ memo = result === undefined ? result : this.refract(result);
203
+ }
204
+ return memo;
205
+ }
206
+
207
+ // Fantasy Land
208
+
209
+ /**
210
+ * Returns an empty object element.
211
+ */
212
+ empty() {
213
+ return new this.constructor([]);
214
+ }
215
+ }
216
+ export default ObjectElement;
@@ -0,0 +1,27 @@
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 _Element = _interopRequireDefault(require("./Element.cjs"));
7
+ /**
8
+ * StringElement represents a string value in ApiDOM.
9
+ * @public
10
+ */
11
+ class StringElement extends _Element.default {
12
+ constructor(content, meta, attributes) {
13
+ super(content, meta, attributes);
14
+ this.element = 'string';
15
+ }
16
+ primitive() {
17
+ return 'string';
18
+ }
19
+
20
+ /**
21
+ * The length of the string.
22
+ */
23
+ get length() {
24
+ return this.content?.length ?? 0;
25
+ }
26
+ }
27
+ var _default = exports.default = StringElement;
@@ -0,0 +1,22 @@
1
+ import Element from "./Element.mjs";
2
+ /**
3
+ * StringElement represents a string value in ApiDOM.
4
+ * @public
5
+ */
6
+ class StringElement extends Element {
7
+ constructor(content, meta, attributes) {
8
+ super(content, meta, attributes);
9
+ this.element = 'string';
10
+ }
11
+ primitive() {
12
+ return 'string';
13
+ }
14
+
15
+ /**
16
+ * The length of the string.
17
+ */
18
+ get length() {
19
+ return this.content?.length ?? 0;
20
+ }
21
+ }
22
+ export default StringElement;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
4
+ exports.__esModule = true;
5
+ exports.refract = refract;
6
+ var _Element = _interopRequireDefault(require("./primitives/Element.cjs"));
7
+ exports.Element = _Element.default;
8
+ var _CollectionElement = _interopRequireDefault(require("./primitives/CollectionElement.cjs"));
9
+ exports.CollectionElement = _CollectionElement.default;
10
+ var _NullElement = _interopRequireDefault(require("./primitives/NullElement.cjs"));
11
+ exports.NullElement = _NullElement.default;
12
+ var _StringElement = _interopRequireDefault(require("./primitives/StringElement.cjs"));
13
+ exports.StringElement = _StringElement.default;
14
+ var _NumberElement = _interopRequireDefault(require("./primitives/NumberElement.cjs"));
15
+ exports.NumberElement = _NumberElement.default;
16
+ var _BooleanElement = _interopRequireDefault(require("./primitives/BooleanElement.cjs"));
17
+ exports.BooleanElement = _BooleanElement.default;
18
+ var _ArrayElement = _interopRequireDefault(require("./primitives/ArrayElement.cjs"));
19
+ exports.ArrayElement = _ArrayElement.default;
20
+ var _MemberElement = _interopRequireDefault(require("./primitives/MemberElement.cjs"));
21
+ exports.MemberElement = _MemberElement.default;
22
+ var _ObjectElement = _interopRequireDefault(require("./primitives/ObjectElement.cjs"));
23
+ exports.ObjectElement = _ObjectElement.default;
24
+ var _LinkElement = _interopRequireDefault(require("./elements/LinkElement.cjs"));
25
+ exports.LinkElement = _LinkElement.default;
26
+ var _RefElement = _interopRequireDefault(require("./elements/RefElement.cjs"));
27
+ exports.RefElement = _RefElement.default;
28
+ var _ObjectSlice = _interopRequireDefault(require("./ObjectSlice.cjs"));
29
+ exports.ObjectSlice = _ObjectSlice.default;
30
+ var _KeyValuePair = _interopRequireDefault(require("./KeyValuePair.cjs"));
31
+ exports.KeyValuePair = _KeyValuePair.default;
32
+ /**
33
+ * Refracts an array item to ApiDOM element.
34
+ * Converts undefined to NullElement (aligned with JSON.stringify behavior).
35
+ */
36
+ function refractArrayItem(value) {
37
+ if (value === undefined) {
38
+ return new _NullElement.default();
39
+ }
40
+ return refract(value);
41
+ }
42
+
43
+ /**
44
+ * Refracts a JSON type to ApiDOM elements.
45
+ * @public
46
+ */
47
+ function refract(value) {
48
+ if (value instanceof _Element.default) {
49
+ return value;
50
+ }
51
+ if (typeof value === 'string') {
52
+ return new _StringElement.default(value);
53
+ }
54
+ if (typeof value === 'number') {
55
+ return new _NumberElement.default(value);
56
+ }
57
+ if (typeof value === 'boolean') {
58
+ return new _BooleanElement.default(value);
59
+ }
60
+ if (value === null) {
61
+ return new _NullElement.default();
62
+ }
63
+ if (Array.isArray(value)) {
64
+ return new _ArrayElement.default(value.map(refractArrayItem));
65
+ }
66
+ if (typeof value === 'object') {
67
+ return new _ObjectElement.default(value);
68
+ }
69
+ throw new Error(`Cannot refract value of type ${typeof value}`);
70
+ }
71
+
72
+ // Set up prototype assignments for circular dependency resolution.
73
+ // These allow Element instances to create ObjectElement, MemberElement, RefElement
74
+ // without importing them directly (which would cause circular imports).
75
+ // Using 'declare' in the class definitions enables type-safe access to these properties.
76
+ _Element.default.prototype.ObjectElement = _ObjectElement.default;
77
+ _Element.default.prototype.ArrayElement = _ArrayElement.default;
78
+ _Element.default.prototype.RefElement = _RefElement.default;
79
+ _Element.default.prototype.MemberElement = _MemberElement.default;
80
+ _Element.default.prototype.refract = refract;
81
+
82
+ /**
83
+ * Contains all of the element classes, and related structures and methods
84
+ * for handling with element instances.
85
+ */
86
+
87
+ // Re-export types from element classes
@@ -0,0 +1,70 @@
1
+ import Element from "./primitives/Element.mjs";
2
+ import CollectionElement from "./primitives/CollectionElement.mjs";
3
+ import NullElement from "./primitives/NullElement.mjs";
4
+ import StringElement from "./primitives/StringElement.mjs";
5
+ import NumberElement from "./primitives/NumberElement.mjs";
6
+ import BooleanElement from "./primitives/BooleanElement.mjs";
7
+ import ArrayElement from "./primitives/ArrayElement.mjs";
8
+ import MemberElement from "./primitives/MemberElement.mjs";
9
+ import ObjectElement from "./primitives/ObjectElement.mjs";
10
+ import LinkElement from "./elements/LinkElement.mjs";
11
+ import RefElement from "./elements/RefElement.mjs";
12
+ import ObjectSlice from "./ObjectSlice.mjs";
13
+ import KeyValuePair from "./KeyValuePair.mjs";
14
+ /**
15
+ * Refracts an array item to ApiDOM element.
16
+ * Converts undefined to NullElement (aligned with JSON.stringify behavior).
17
+ */
18
+ function refractArrayItem(value) {
19
+ if (value === undefined) {
20
+ return new NullElement();
21
+ }
22
+ return refract(value);
23
+ }
24
+
25
+ /**
26
+ * Refracts a JSON type to ApiDOM elements.
27
+ * @public
28
+ */
29
+ function refract(value) {
30
+ if (value instanceof Element) {
31
+ return value;
32
+ }
33
+ if (typeof value === 'string') {
34
+ return new StringElement(value);
35
+ }
36
+ if (typeof value === 'number') {
37
+ return new NumberElement(value);
38
+ }
39
+ if (typeof value === 'boolean') {
40
+ return new BooleanElement(value);
41
+ }
42
+ if (value === null) {
43
+ return new NullElement();
44
+ }
45
+ if (Array.isArray(value)) {
46
+ return new ArrayElement(value.map(refractArrayItem));
47
+ }
48
+ if (typeof value === 'object') {
49
+ return new ObjectElement(value);
50
+ }
51
+ throw new Error(`Cannot refract value of type ${typeof value}`);
52
+ }
53
+
54
+ // Set up prototype assignments for circular dependency resolution.
55
+ // These allow Element instances to create ObjectElement, MemberElement, RefElement
56
+ // without importing them directly (which would cause circular imports).
57
+ // Using 'declare' in the class definitions enables type-safe access to these properties.
58
+ Element.prototype.ObjectElement = ObjectElement;
59
+ Element.prototype.ArrayElement = ArrayElement;
60
+ Element.prototype.RefElement = RefElement;
61
+ Element.prototype.MemberElement = MemberElement;
62
+ Element.prototype.refract = refract;
63
+
64
+ /**
65
+ * Contains all of the element classes, and related structures and methods
66
+ * for handling with element instances.
67
+ */
68
+ export { Element, CollectionElement, NullElement, StringElement, NumberElement, BooleanElement, ArrayElement, MemberElement, ObjectElement, LinkElement, RefElement, refract, ObjectSlice, KeyValuePair };
69
+
70
+ // Re-export types from element classes