@speclynx/apidom-datamodel 3.2.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/package.json +3 -3
- package/src/KeyValuePair.cjs +0 -31
- package/src/KeyValuePair.mjs +0 -27
- package/src/Metadata.cjs +0 -91
- package/src/Metadata.mjs +0 -87
- package/src/Namespace.cjs +0 -212
- package/src/Namespace.mjs +0 -206
- package/src/ObjectSlice.cjs +0 -199
- package/src/ObjectSlice.mjs +0 -195
- package/src/clone/errors/CloneError.cjs +0 -22
- package/src/clone/errors/CloneError.mjs +0 -19
- package/src/clone/errors/DeepCloneError.cjs +0 -11
- package/src/clone/errors/DeepCloneError.mjs +0 -6
- package/src/clone/errors/ShallowCloneError.cjs +0 -11
- package/src/clone/errors/ShallowCloneError.mjs +0 -6
- package/src/clone/index.cjs +0 -188
- package/src/clone/index.mjs +0 -178
- package/src/elements/Annotation.cjs +0 -35
- package/src/elements/Annotation.mjs +0 -30
- package/src/elements/Comment.cjs +0 -18
- package/src/elements/Comment.mjs +0 -13
- package/src/elements/LinkElement.cjs +0 -50
- package/src/elements/LinkElement.mjs +0 -45
- package/src/elements/ParseResult.cjs +0 -91
- package/src/elements/ParseResult.mjs +0 -86
- package/src/elements/RefElement.cjs +0 -34
- package/src/elements/RefElement.mjs +0 -29
- package/src/elements/SourceMap.cjs +0 -140
- package/src/elements/SourceMap.mjs +0 -134
- package/src/elements/Style.cjs +0 -54
- package/src/elements/Style.mjs +0 -48
- package/src/index.cjs +0 -58
- package/src/index.mjs +0 -11
- package/src/predicates/elements.cjs +0 -46
- package/src/predicates/elements.mjs +0 -35
- package/src/predicates/index.cjs +0 -77
- package/src/predicates/index.mjs +0 -56
- package/src/predicates/primitives.cjs +0 -69
- package/src/predicates/primitives.mjs +0 -56
- package/src/primitives/ArrayElement.cjs +0 -155
- package/src/primitives/ArrayElement.mjs +0 -148
- package/src/primitives/BooleanElement.cjs +0 -20
- package/src/primitives/BooleanElement.mjs +0 -15
- package/src/primitives/CollectionElement.cjs +0 -180
- package/src/primitives/CollectionElement.mjs +0 -173
- package/src/primitives/Element.cjs +0 -510
- package/src/primitives/Element.mjs +0 -505
- package/src/primitives/MemberElement.cjs +0 -58
- package/src/primitives/MemberElement.mjs +0 -53
- package/src/primitives/NullElement.cjs +0 -28
- package/src/primitives/NullElement.mjs +0 -23
- package/src/primitives/NumberElement.cjs +0 -20
- package/src/primitives/NumberElement.mjs +0 -15
- package/src/primitives/ObjectElement.cjs +0 -220
- package/src/primitives/ObjectElement.mjs +0 -214
- package/src/primitives/StringElement.cjs +0 -27
- package/src/primitives/StringElement.mjs +0 -22
- package/src/registration.cjs +0 -101
- package/src/registration.mjs +0 -79
- package/src/serialisers/JSONSerialiser.cjs +0 -230
- package/src/serialisers/JSONSerialiser.mjs +0 -221
- package/src/types.cjs +0 -3
- package/src/types.mjs +0 -1
package/src/ObjectSlice.cjs
DELETED
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.default = void 0;
|
|
5
|
-
/**
|
|
6
|
-
* Callback type for ObjectSlice iteration methods.
|
|
7
|
-
* Receives (value, key, member) - the standard pattern for object-like iteration.
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Callback type for ObjectSlice forEach that also receives the index.
|
|
13
|
-
* @public
|
|
14
|
-
*/
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* ObjectSlice is a collection wrapper for MemberElement arrays.
|
|
18
|
-
* It provides functional methods with (value, key, member) callback signatures,
|
|
19
|
-
* which is the standard pattern for iterating over object-like structures.
|
|
20
|
-
*
|
|
21
|
-
* Unlike ArraySlice, ObjectSlice uses composition rather than inheritance
|
|
22
|
-
* because its callback signatures are fundamentally different.
|
|
23
|
-
*
|
|
24
|
-
* @public
|
|
25
|
-
*/
|
|
26
|
-
class ObjectSlice {
|
|
27
|
-
elements;
|
|
28
|
-
constructor(elements) {
|
|
29
|
-
this.elements = elements ?? [];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Converts all member elements to their JavaScript values.
|
|
34
|
-
* Returns an array of \{ key, value \} objects.
|
|
35
|
-
*/
|
|
36
|
-
toValue() {
|
|
37
|
-
return this.elements.map(member => ({
|
|
38
|
-
key: member.key?.toValue(),
|
|
39
|
-
value: member.value?.toValue()
|
|
40
|
-
}));
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Maps over the member elements, calling callback with (value, key, member).
|
|
45
|
-
* @param callback - Function to execute for each member
|
|
46
|
-
* @param thisArg - Value to use as this when executing callback
|
|
47
|
-
*/
|
|
48
|
-
map(callback, thisArg) {
|
|
49
|
-
return this.elements.map(member => {
|
|
50
|
-
const value = member.value;
|
|
51
|
-
const key = member.key;
|
|
52
|
-
if (value === undefined || key === undefined) {
|
|
53
|
-
throw new Error('MemberElement must have both key and value');
|
|
54
|
-
}
|
|
55
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
/**
|
|
60
|
-
* Filters member elements using the provided callback.
|
|
61
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
62
|
-
* @param thisArg - Value to use as this when executing callback
|
|
63
|
-
*/
|
|
64
|
-
filter(callback, thisArg) {
|
|
65
|
-
const filtered = this.elements.filter(member => {
|
|
66
|
-
const value = member.value;
|
|
67
|
-
const key = member.key;
|
|
68
|
-
if (value === undefined || key === undefined) {
|
|
69
|
-
return false; // Skip malformed members
|
|
70
|
-
}
|
|
71
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
72
|
-
});
|
|
73
|
-
return new ObjectSlice(filtered);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Rejects member elements that match the provided callback.
|
|
78
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
79
|
-
* @param thisArg - Value to use as this when executing callback
|
|
80
|
-
*/
|
|
81
|
-
reject(callback, thisArg) {
|
|
82
|
-
const results = [];
|
|
83
|
-
for (const member of this.elements) {
|
|
84
|
-
const value = member.value;
|
|
85
|
-
const key = member.key;
|
|
86
|
-
if (value === undefined || key === undefined) {
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
if (!callback.call(thisArg, value, key, member)) {
|
|
90
|
-
results.push(member);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
return new ObjectSlice(results);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Executes a provided function once for each member element.
|
|
98
|
-
* @param callback - Function that receives (value, key, member, index)
|
|
99
|
-
* @param thisArg - Value to use as this when executing callback
|
|
100
|
-
*/
|
|
101
|
-
forEach(callback, thisArg) {
|
|
102
|
-
this.elements.forEach((member, index) => {
|
|
103
|
-
const value = member.value;
|
|
104
|
-
const key = member.key;
|
|
105
|
-
if (value === undefined || key === undefined) {
|
|
106
|
-
return; // Skip malformed members
|
|
107
|
-
}
|
|
108
|
-
if (thisArg !== undefined) {
|
|
109
|
-
callback.call(thisArg, value, key, member, index);
|
|
110
|
-
} else {
|
|
111
|
-
callback(value, key, member, index);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Returns the first member element that satisfies the callback.
|
|
118
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
119
|
-
* @param thisArg - Value to use as this when executing callback
|
|
120
|
-
*/
|
|
121
|
-
find(callback, thisArg) {
|
|
122
|
-
return this.elements.find(member => {
|
|
123
|
-
const value = member.value;
|
|
124
|
-
const key = member.key;
|
|
125
|
-
if (value === undefined || key === undefined) {
|
|
126
|
-
return false;
|
|
127
|
-
}
|
|
128
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/**
|
|
133
|
-
* Returns an array of all keys' values.
|
|
134
|
-
*/
|
|
135
|
-
keys() {
|
|
136
|
-
return this.elements.map(member => member.key?.toValue()).filter(key => key !== undefined);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
/**
|
|
140
|
-
* Returns an array of all values' values.
|
|
141
|
-
*/
|
|
142
|
-
values() {
|
|
143
|
-
return this.elements.map(member => member.value?.toValue()).filter(value => value !== undefined);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
/**
|
|
147
|
-
* Returns the number of elements in the slice.
|
|
148
|
-
*/
|
|
149
|
-
get length() {
|
|
150
|
-
return this.elements.length;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Returns whether the slice is empty.
|
|
155
|
-
*/
|
|
156
|
-
get isEmpty() {
|
|
157
|
-
return this.length === 0;
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
/**
|
|
161
|
-
* Returns the first element in the slice or undefined if empty.
|
|
162
|
-
*/
|
|
163
|
-
get first() {
|
|
164
|
-
return this.elements[0];
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Gets the element at the specified index.
|
|
169
|
-
* @param index - The index of the element to get
|
|
170
|
-
*/
|
|
171
|
-
get(index) {
|
|
172
|
-
return this.elements[index];
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
/**
|
|
176
|
-
* Adds the given member element to the end of the slice.
|
|
177
|
-
* @param member - The member element to add
|
|
178
|
-
*/
|
|
179
|
-
push(member) {
|
|
180
|
-
this.elements.push(member);
|
|
181
|
-
return this;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
/**
|
|
185
|
-
* Determines whether the slice includes a member with the given key value.
|
|
186
|
-
* @param keyValue - The key value to search for
|
|
187
|
-
*/
|
|
188
|
-
includesKey(keyValue) {
|
|
189
|
-
return this.elements.some(member => member.key?.equals(keyValue));
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Iterator support - allows for...of loops.
|
|
194
|
-
*/
|
|
195
|
-
[Symbol.iterator]() {
|
|
196
|
-
return this.elements[Symbol.iterator]();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
var _default = exports.default = ObjectSlice;
|
package/src/ObjectSlice.mjs
DELETED
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Callback type for ObjectSlice iteration methods.
|
|
3
|
-
* Receives (value, key, member) - the standard pattern for object-like iteration.
|
|
4
|
-
* @public
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Callback type for ObjectSlice forEach that also receives the index.
|
|
9
|
-
* @public
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* ObjectSlice is a collection wrapper for MemberElement arrays.
|
|
14
|
-
* It provides functional methods with (value, key, member) callback signatures,
|
|
15
|
-
* which is the standard pattern for iterating over object-like structures.
|
|
16
|
-
*
|
|
17
|
-
* Unlike ArraySlice, ObjectSlice uses composition rather than inheritance
|
|
18
|
-
* because its callback signatures are fundamentally different.
|
|
19
|
-
*
|
|
20
|
-
* @public
|
|
21
|
-
*/
|
|
22
|
-
class ObjectSlice {
|
|
23
|
-
elements;
|
|
24
|
-
constructor(elements) {
|
|
25
|
-
this.elements = elements ?? [];
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Converts all member elements to their JavaScript values.
|
|
30
|
-
* Returns an array of \{ key, value \} objects.
|
|
31
|
-
*/
|
|
32
|
-
toValue() {
|
|
33
|
-
return this.elements.map(member => ({
|
|
34
|
-
key: member.key?.toValue(),
|
|
35
|
-
value: member.value?.toValue()
|
|
36
|
-
}));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Maps over the member elements, calling callback with (value, key, member).
|
|
41
|
-
* @param callback - Function to execute for each member
|
|
42
|
-
* @param thisArg - Value to use as this when executing callback
|
|
43
|
-
*/
|
|
44
|
-
map(callback, thisArg) {
|
|
45
|
-
return this.elements.map(member => {
|
|
46
|
-
const value = member.value;
|
|
47
|
-
const key = member.key;
|
|
48
|
-
if (value === undefined || key === undefined) {
|
|
49
|
-
throw new Error('MemberElement must have both key and value');
|
|
50
|
-
}
|
|
51
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Filters member elements using the provided callback.
|
|
57
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
58
|
-
* @param thisArg - Value to use as this when executing callback
|
|
59
|
-
*/
|
|
60
|
-
filter(callback, thisArg) {
|
|
61
|
-
const filtered = this.elements.filter(member => {
|
|
62
|
-
const value = member.value;
|
|
63
|
-
const key = member.key;
|
|
64
|
-
if (value === undefined || key === undefined) {
|
|
65
|
-
return false; // Skip malformed members
|
|
66
|
-
}
|
|
67
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
68
|
-
});
|
|
69
|
-
return new ObjectSlice(filtered);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Rejects member elements that match the provided callback.
|
|
74
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
75
|
-
* @param thisArg - Value to use as this when executing callback
|
|
76
|
-
*/
|
|
77
|
-
reject(callback, thisArg) {
|
|
78
|
-
const results = [];
|
|
79
|
-
for (const member of this.elements) {
|
|
80
|
-
const value = member.value;
|
|
81
|
-
const key = member.key;
|
|
82
|
-
if (value === undefined || key === undefined) {
|
|
83
|
-
continue;
|
|
84
|
-
}
|
|
85
|
-
if (!callback.call(thisArg, value, key, member)) {
|
|
86
|
-
results.push(member);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return new ObjectSlice(results);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Executes a provided function once for each member element.
|
|
94
|
-
* @param callback - Function that receives (value, key, member, index)
|
|
95
|
-
* @param thisArg - Value to use as this when executing callback
|
|
96
|
-
*/
|
|
97
|
-
forEach(callback, thisArg) {
|
|
98
|
-
this.elements.forEach((member, index) => {
|
|
99
|
-
const value = member.value;
|
|
100
|
-
const key = member.key;
|
|
101
|
-
if (value === undefined || key === undefined) {
|
|
102
|
-
return; // Skip malformed members
|
|
103
|
-
}
|
|
104
|
-
if (thisArg !== undefined) {
|
|
105
|
-
callback.call(thisArg, value, key, member, index);
|
|
106
|
-
} else {
|
|
107
|
-
callback(value, key, member, index);
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/**
|
|
113
|
-
* Returns the first member element that satisfies the callback.
|
|
114
|
-
* @param callback - Function that receives (value, key, member) and returns boolean
|
|
115
|
-
* @param thisArg - Value to use as this when executing callback
|
|
116
|
-
*/
|
|
117
|
-
find(callback, thisArg) {
|
|
118
|
-
return this.elements.find(member => {
|
|
119
|
-
const value = member.value;
|
|
120
|
-
const key = member.key;
|
|
121
|
-
if (value === undefined || key === undefined) {
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
return thisArg !== undefined ? callback.call(thisArg, value, key, member) : callback(value, key, member);
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Returns an array of all keys' values.
|
|
130
|
-
*/
|
|
131
|
-
keys() {
|
|
132
|
-
return this.elements.map(member => member.key?.toValue()).filter(key => key !== undefined);
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Returns an array of all values' values.
|
|
137
|
-
*/
|
|
138
|
-
values() {
|
|
139
|
-
return this.elements.map(member => member.value?.toValue()).filter(value => value !== undefined);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
/**
|
|
143
|
-
* Returns the number of elements in the slice.
|
|
144
|
-
*/
|
|
145
|
-
get length() {
|
|
146
|
-
return this.elements.length;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
/**
|
|
150
|
-
* Returns whether the slice is empty.
|
|
151
|
-
*/
|
|
152
|
-
get isEmpty() {
|
|
153
|
-
return this.length === 0;
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Returns the first element in the slice or undefined if empty.
|
|
158
|
-
*/
|
|
159
|
-
get first() {
|
|
160
|
-
return this.elements[0];
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Gets the element at the specified index.
|
|
165
|
-
* @param index - The index of the element to get
|
|
166
|
-
*/
|
|
167
|
-
get(index) {
|
|
168
|
-
return this.elements[index];
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* Adds the given member element to the end of the slice.
|
|
173
|
-
* @param member - The member element to add
|
|
174
|
-
*/
|
|
175
|
-
push(member) {
|
|
176
|
-
this.elements.push(member);
|
|
177
|
-
return this;
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
/**
|
|
181
|
-
* Determines whether the slice includes a member with the given key value.
|
|
182
|
-
* @param keyValue - The key value to search for
|
|
183
|
-
*/
|
|
184
|
-
includesKey(keyValue) {
|
|
185
|
-
return this.elements.some(member => member.key?.equals(keyValue));
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Iterator support - allows for...of loops.
|
|
190
|
-
*/
|
|
191
|
-
[Symbol.iterator]() {
|
|
192
|
-
return this.elements[Symbol.iterator]();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
export default ObjectSlice;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
exports.__esModule = true;
|
|
4
|
-
exports.default = void 0;
|
|
5
|
-
var _apidomError = require("@speclynx/apidom-error");
|
|
6
|
-
/**
|
|
7
|
-
* @public
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @public
|
|
12
|
-
*/
|
|
13
|
-
class CloneError extends _apidomError.ApiDOMStructuredError {
|
|
14
|
-
value;
|
|
15
|
-
constructor(message, structuredOptions) {
|
|
16
|
-
super(message, structuredOptions);
|
|
17
|
-
if (typeof structuredOptions !== 'undefined') {
|
|
18
|
-
this.value = structuredOptions.value;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
var _default = exports.default = CloneError;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ApiDOMStructuredError } from '@speclynx/apidom-error';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @public
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
class CloneError extends ApiDOMStructuredError {
|
|
11
|
-
value;
|
|
12
|
-
constructor(message, structuredOptions) {
|
|
13
|
-
super(message, structuredOptions);
|
|
14
|
-
if (typeof structuredOptions !== 'undefined') {
|
|
15
|
-
this.value = structuredOptions.value;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export default CloneError;
|
|
@@ -1,11 +0,0 @@
|
|
|
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 _CloneError = _interopRequireDefault(require("./CloneError.cjs"));
|
|
7
|
-
/**
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
class DeepCloneError extends _CloneError.default {}
|
|
11
|
-
var _default = exports.default = DeepCloneError;
|
|
@@ -1,11 +0,0 @@
|
|
|
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 _CloneError = _interopRequireDefault(require("./CloneError.cjs"));
|
|
7
|
-
/**
|
|
8
|
-
* @public
|
|
9
|
-
*/
|
|
10
|
-
class ShallowCloneError extends _CloneError.default {}
|
|
11
|
-
var _default = exports.default = ShallowCloneError;
|
package/src/clone/index.cjs
DELETED
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault").default;
|
|
4
|
-
exports.__esModule = true;
|
|
5
|
-
exports.cloneShallow = exports.cloneDeep = exports.ShallowCloneError = exports.DeepCloneError = exports.CloneError = void 0;
|
|
6
|
-
var _ramda = require("ramda");
|
|
7
|
-
var _ObjectSlice = _interopRequireDefault(require("../ObjectSlice.cjs"));
|
|
8
|
-
var _KeyValuePair = _interopRequireDefault(require("../KeyValuePair.cjs"));
|
|
9
|
-
var _index = require("../predicates/index.cjs");
|
|
10
|
-
var _SourceMap = _interopRequireDefault(require("../elements/SourceMap.cjs"));
|
|
11
|
-
var _DeepCloneError = _interopRequireDefault(require("./errors/DeepCloneError.cjs"));
|
|
12
|
-
exports.DeepCloneError = _DeepCloneError.default;
|
|
13
|
-
var _ShallowCloneError = _interopRequireDefault(require("./errors/ShallowCloneError.cjs"));
|
|
14
|
-
exports.ShallowCloneError = _ShallowCloneError.default;
|
|
15
|
-
var _CloneError = _interopRequireDefault(require("./errors/CloneError.cjs"));
|
|
16
|
-
exports.CloneError = _CloneError.default;
|
|
17
|
-
/**
|
|
18
|
-
* @public
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* @public
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
const cloneDeepElement = (element, options) => {
|
|
26
|
-
const {
|
|
27
|
-
visited = new WeakMap()
|
|
28
|
-
} = options;
|
|
29
|
-
const passThroughOptions = {
|
|
30
|
-
...options,
|
|
31
|
-
visited
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// detect cycle and return memoized value
|
|
35
|
-
if (visited.has(element)) {
|
|
36
|
-
return visited.get(element);
|
|
37
|
-
}
|
|
38
|
-
const copy = cloneShallowElement(element);
|
|
39
|
-
visited.set(element, copy);
|
|
40
|
-
const {
|
|
41
|
-
content
|
|
42
|
-
} = element;
|
|
43
|
-
if (Array.isArray(content)) {
|
|
44
|
-
copy.content = content.map(el => cloneDeepElement(el, passThroughOptions));
|
|
45
|
-
} else if ((0, _index.isElement)(content)) {
|
|
46
|
-
copy.content = cloneDeepElement(content, passThroughOptions);
|
|
47
|
-
} else if (content instanceof _KeyValuePair.default) {
|
|
48
|
-
copy.content = cloneDeepKeyValuePair(content, passThroughOptions);
|
|
49
|
-
} else {
|
|
50
|
-
copy.content = content;
|
|
51
|
-
}
|
|
52
|
-
return copy;
|
|
53
|
-
};
|
|
54
|
-
const cloneDeepKeyValuePair = (kvp, options) => {
|
|
55
|
-
const {
|
|
56
|
-
visited = new WeakMap()
|
|
57
|
-
} = options;
|
|
58
|
-
const passThroughOptions = {
|
|
59
|
-
...options,
|
|
60
|
-
visited
|
|
61
|
-
};
|
|
62
|
-
if (visited.has(kvp)) {
|
|
63
|
-
return visited.get(kvp);
|
|
64
|
-
}
|
|
65
|
-
const {
|
|
66
|
-
key,
|
|
67
|
-
value
|
|
68
|
-
} = kvp;
|
|
69
|
-
const keyCopy = key !== undefined ? cloneDeepElement(key, passThroughOptions) : undefined;
|
|
70
|
-
const valueCopy = value !== undefined ? cloneDeepElement(value, passThroughOptions) : undefined;
|
|
71
|
-
const copy = new _KeyValuePair.default(keyCopy, valueCopy);
|
|
72
|
-
visited.set(kvp, copy);
|
|
73
|
-
return copy;
|
|
74
|
-
};
|
|
75
|
-
const cloneDeepObjectSlice = (slice, options) => {
|
|
76
|
-
const {
|
|
77
|
-
visited = new WeakMap()
|
|
78
|
-
} = options;
|
|
79
|
-
const passThroughOptions = {
|
|
80
|
-
...options,
|
|
81
|
-
visited
|
|
82
|
-
};
|
|
83
|
-
if (visited.has(slice)) {
|
|
84
|
-
return visited.get(slice);
|
|
85
|
-
}
|
|
86
|
-
const items = [...slice].map(element => cloneDeepElement(element, passThroughOptions));
|
|
87
|
-
const copy = new _ObjectSlice.default(items);
|
|
88
|
-
visited.set(slice, copy);
|
|
89
|
-
return copy;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Creates a deep clone of an ApiDOM Element, KeyValuePair, or ObjectSlice.
|
|
94
|
-
* Handles cycles by memoizing visited objects.
|
|
95
|
-
* @public
|
|
96
|
-
*/
|
|
97
|
-
const cloneDeep = (value, options = {}) => {
|
|
98
|
-
if (value instanceof _KeyValuePair.default) {
|
|
99
|
-
return cloneDeepKeyValuePair(value, options);
|
|
100
|
-
}
|
|
101
|
-
if (value instanceof _ObjectSlice.default) {
|
|
102
|
-
return cloneDeepObjectSlice(value, options);
|
|
103
|
-
}
|
|
104
|
-
if ((0, _index.isElement)(value)) {
|
|
105
|
-
return cloneDeepElement(value, options);
|
|
106
|
-
}
|
|
107
|
-
throw new _DeepCloneError.default("Value provided to cloneDeep function couldn't be cloned", {
|
|
108
|
-
value
|
|
109
|
-
});
|
|
110
|
-
};
|
|
111
|
-
exports.cloneDeep = cloneDeep;
|
|
112
|
-
cloneDeep.safe = value => {
|
|
113
|
-
try {
|
|
114
|
-
return cloneDeep(value);
|
|
115
|
-
} catch {
|
|
116
|
-
return value;
|
|
117
|
-
}
|
|
118
|
-
};
|
|
119
|
-
const cloneShallowKeyValuePair = keyValuePair => {
|
|
120
|
-
const {
|
|
121
|
-
key,
|
|
122
|
-
value
|
|
123
|
-
} = keyValuePair;
|
|
124
|
-
return new _KeyValuePair.default(key, value);
|
|
125
|
-
};
|
|
126
|
-
const cloneShallowObjectSlice = objectSlice => {
|
|
127
|
-
const items = [...objectSlice];
|
|
128
|
-
return new _ObjectSlice.default(items);
|
|
129
|
-
};
|
|
130
|
-
const cloneShallowElement = element => {
|
|
131
|
-
const Ctor = element.constructor;
|
|
132
|
-
const copy = new Ctor();
|
|
133
|
-
copy.element = element.element;
|
|
134
|
-
if (!element.isMetaEmpty) {
|
|
135
|
-
copy.meta = element.meta.cloneDeep();
|
|
136
|
-
}
|
|
137
|
-
if (!element.isAttributesEmpty) {
|
|
138
|
-
copy.attributes = cloneDeep(element.attributes);
|
|
139
|
-
}
|
|
140
|
-
if ((0, _index.hasElementSourceMap)(element)) {
|
|
141
|
-
_SourceMap.default.transfer(element, copy);
|
|
142
|
-
}
|
|
143
|
-
if ((0, _index.hasElementStyle)(element)) {
|
|
144
|
-
copy.style = (0, _ramda.clone)(element.style);
|
|
145
|
-
}
|
|
146
|
-
const {
|
|
147
|
-
content
|
|
148
|
-
} = element;
|
|
149
|
-
if ((0, _index.isElement)(content)) {
|
|
150
|
-
copy.content = cloneShallowElement(content);
|
|
151
|
-
} else if (Array.isArray(content)) {
|
|
152
|
-
copy.content = [...content];
|
|
153
|
-
} else if (content instanceof _KeyValuePair.default) {
|
|
154
|
-
copy.content = cloneShallowKeyValuePair(content);
|
|
155
|
-
} else {
|
|
156
|
-
copy.content = content;
|
|
157
|
-
}
|
|
158
|
-
return copy;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Creates a shallow clone of an ApiDOM Element, KeyValuePair, or ObjectSlice.
|
|
163
|
-
* The element itself is cloned, but content references are shared.
|
|
164
|
-
* Meta and attributes are deep cloned to preserve semantic information.
|
|
165
|
-
* @public
|
|
166
|
-
*/
|
|
167
|
-
const cloneShallow = value => {
|
|
168
|
-
if (value instanceof _KeyValuePair.default) {
|
|
169
|
-
return cloneShallowKeyValuePair(value);
|
|
170
|
-
}
|
|
171
|
-
if (value instanceof _ObjectSlice.default) {
|
|
172
|
-
return cloneShallowObjectSlice(value);
|
|
173
|
-
}
|
|
174
|
-
if ((0, _index.isElement)(value)) {
|
|
175
|
-
return cloneShallowElement(value);
|
|
176
|
-
}
|
|
177
|
-
throw new _ShallowCloneError.default("Value provided to cloneShallow function couldn't be cloned", {
|
|
178
|
-
value
|
|
179
|
-
});
|
|
180
|
-
};
|
|
181
|
-
exports.cloneShallow = cloneShallow;
|
|
182
|
-
cloneShallow.safe = value => {
|
|
183
|
-
try {
|
|
184
|
-
return cloneShallow(value);
|
|
185
|
-
} catch {
|
|
186
|
-
return value;
|
|
187
|
-
}
|
|
188
|
-
};
|