@speclynx/apidom-datamodel 2.13.1 → 3.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 +10 -0
- package/README.md +6 -6
- package/dist/apidom-datamodel.browser.js +257 -127
- package/dist/apidom-datamodel.browser.min.js +1 -1
- package/package.json +3 -3
- package/src/Metadata.cjs +91 -0
- package/src/Metadata.mjs +87 -0
- package/src/clone/index.cjs +3 -3
- package/src/clone/index.mjs +3 -3
- package/src/index.cjs +3 -1
- package/src/index.mjs +2 -1
- package/src/primitives/CollectionElement.cjs +1 -1
- package/src/primitives/CollectionElement.mjs +1 -1
- package/src/primitives/Element.cjs +30 -43
- package/src/primitives/Element.mjs +31 -44
- package/src/registration.cjs +6 -2
- package/src/registration.mjs +6 -2
- package/src/serialisers/JSONSerialiser.cjs +37 -3
- package/src/serialisers/JSONSerialiser.mjs +37 -3
- package/types/apidom-datamodel.d.ts +60 -22
|
@@ -49,6 +49,104 @@ class KeyValuePair {
|
|
|
49
49
|
|
|
50
50
|
/***/ },
|
|
51
51
|
|
|
52
|
+
/***/ 206
|
|
53
|
+
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
54
|
+
|
|
55
|
+
__webpack_require__.r(__webpack_exports__);
|
|
56
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
57
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
58
|
+
/* harmony export */ });
|
|
59
|
+
/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(138);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Lightweight meta container for Element metadata.
|
|
63
|
+
*
|
|
64
|
+
* Data is stored as own properties on the instance; methods live on the prototype.
|
|
65
|
+
* `Object.keys()`, `Object.entries()`, etc. only see data properties.
|
|
66
|
+
*
|
|
67
|
+
* @public
|
|
68
|
+
*/
|
|
69
|
+
class Metadata {
|
|
70
|
+
// Set via prototype assignment in registration.ts to avoid circular dependency
|
|
71
|
+
|
|
72
|
+
get(name) {
|
|
73
|
+
return this[name];
|
|
74
|
+
}
|
|
75
|
+
set(name, value) {
|
|
76
|
+
this[name] = value;
|
|
77
|
+
}
|
|
78
|
+
hasKey(name) {
|
|
79
|
+
return Object.hasOwn(this, name);
|
|
80
|
+
}
|
|
81
|
+
keys() {
|
|
82
|
+
return Object.keys(this);
|
|
83
|
+
}
|
|
84
|
+
remove(name) {
|
|
85
|
+
delete this[name];
|
|
86
|
+
}
|
|
87
|
+
get isEmpty() {
|
|
88
|
+
return Object.keys(this).length === 0;
|
|
89
|
+
}
|
|
90
|
+
get isFrozen() {
|
|
91
|
+
return Object.isFrozen(this);
|
|
92
|
+
}
|
|
93
|
+
freeze() {
|
|
94
|
+
for (const value of Object.values(this)) {
|
|
95
|
+
if (value instanceof this.Element) {
|
|
96
|
+
value.freeze();
|
|
97
|
+
} else if (Array.isArray(value) || value !== null && typeof value === 'object') {
|
|
98
|
+
Object.freeze(value);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
Object.freeze(this);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Creates a shallow clone. Same references, new container.
|
|
106
|
+
*/
|
|
107
|
+
cloneShallow() {
|
|
108
|
+
const clone = new Metadata();
|
|
109
|
+
Object.assign(clone, this);
|
|
110
|
+
return clone;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Merges another Metadata into a new instance.
|
|
115
|
+
* Arrays are concatenated, all other values are overwritten by source.
|
|
116
|
+
*/
|
|
117
|
+
merge(source) {
|
|
118
|
+
const result = this.cloneShallow();
|
|
119
|
+
for (const [key, value] of Object.entries(source)) {
|
|
120
|
+
const existing = result.get(key);
|
|
121
|
+
if (Array.isArray(existing) && Array.isArray(value)) {
|
|
122
|
+
result.set(key, [...existing, ...value]);
|
|
123
|
+
} else {
|
|
124
|
+
result.set(key, value);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Creates a deep clone. Elements are deep cloned,
|
|
132
|
+
* all other values are deep cloned via ramda clone.
|
|
133
|
+
*/
|
|
134
|
+
cloneDeep() {
|
|
135
|
+
const copy = new Metadata();
|
|
136
|
+
for (const [key, value] of Object.entries(this)) {
|
|
137
|
+
if (value instanceof this.Element) {
|
|
138
|
+
copy.set(key, this.cloneDeepElement(value));
|
|
139
|
+
} else {
|
|
140
|
+
copy.set(key, (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(value));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return copy;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Metadata);
|
|
147
|
+
|
|
148
|
+
/***/ },
|
|
149
|
+
|
|
52
150
|
/***/ 576
|
|
53
151
|
(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
|
|
54
152
|
|
|
@@ -694,7 +792,7 @@ const cloneShallowElement = element => {
|
|
|
694
792
|
const copy = new Ctor();
|
|
695
793
|
copy.element = element.element;
|
|
696
794
|
if (!element.isMetaEmpty) {
|
|
697
|
-
copy.meta =
|
|
795
|
+
copy.meta = element.meta.cloneDeep();
|
|
698
796
|
}
|
|
699
797
|
if (!element.isAttributesEmpty) {
|
|
700
798
|
copy.attributes = cloneDeep(element.attributes);
|
|
@@ -722,8 +820,8 @@ const cloneShallowElement = element => {
|
|
|
722
820
|
|
|
723
821
|
/**
|
|
724
822
|
* Creates a shallow clone of an ApiDOM Element, KeyValuePair, or ObjectSlice.
|
|
725
|
-
* The element itself is cloned, but content references are shared
|
|
726
|
-
*
|
|
823
|
+
* The element itself is cloned, but content references are shared.
|
|
824
|
+
* Meta and attributes are deep cloned to preserve semantic information.
|
|
727
825
|
* @public
|
|
728
826
|
*/
|
|
729
827
|
const cloneShallow = value => {
|
|
@@ -1801,7 +1899,7 @@ class CollectionElement extends _Element_ts__WEBPACK_IMPORTED_MODULE_0__["defaul
|
|
|
1801
1899
|
* Search the tree recursively and find the element with the matching ID.
|
|
1802
1900
|
*/
|
|
1803
1901
|
getById(id) {
|
|
1804
|
-
return this.find(item => item.id
|
|
1902
|
+
return this.find(item => item.id === id).first;
|
|
1805
1903
|
}
|
|
1806
1904
|
|
|
1807
1905
|
/**
|
|
@@ -1830,15 +1928,21 @@ class CollectionElement extends _Element_ts__WEBPACK_IMPORTED_MODULE_0__["defaul
|
|
|
1830
1928
|
|
|
1831
1929
|
__webpack_require__.r(__webpack_exports__);
|
|
1832
1930
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1931
|
+
/* harmony export */ Metadata: () => (/* reexport safe */ _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__["default"]),
|
|
1833
1932
|
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
1834
1933
|
/* harmony export */ });
|
|
1835
1934
|
/* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(654);
|
|
1836
|
-
/* harmony import */ var
|
|
1837
|
-
/* harmony import */ var
|
|
1935
|
+
/* harmony import */ var _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(206);
|
|
1936
|
+
/* harmony import */ var _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(807);
|
|
1937
|
+
/* harmony import */ var _ObjectSlice_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(660);
|
|
1838
1938
|
|
|
1839
1939
|
|
|
1840
1940
|
|
|
1841
1941
|
|
|
1942
|
+
|
|
1943
|
+
// shared singleton for frozen elements with no meta — avoids allocation on every access
|
|
1944
|
+
const FROZEN_EMPTY_METADATA = Object.freeze(new _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__["default"]());
|
|
1945
|
+
|
|
1842
1946
|
/**
|
|
1843
1947
|
* Valid content types for an Element.
|
|
1844
1948
|
* @public
|
|
@@ -1941,7 +2045,7 @@ class Element {
|
|
|
1941
2045
|
_attributes;
|
|
1942
2046
|
|
|
1943
2047
|
// ============================================================
|
|
1944
|
-
// Prototype-assigned properties (set in
|
|
2048
|
+
// Prototype-assigned properties (set in registration.ts)
|
|
1945
2049
|
// Using 'declare' allows TypeScript to know about these
|
|
1946
2050
|
// without generating runtime code.
|
|
1947
2051
|
// ============================================================
|
|
@@ -2002,13 +2106,13 @@ class Element {
|
|
|
2002
2106
|
}
|
|
2003
2107
|
|
|
2004
2108
|
// KeyValuePair
|
|
2005
|
-
if (value instanceof
|
|
2109
|
+
if (value instanceof _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_2__["default"]) {
|
|
2006
2110
|
this._content = value;
|
|
2007
2111
|
return;
|
|
2008
2112
|
}
|
|
2009
2113
|
|
|
2010
2114
|
// ObjectSlice - extract elements array
|
|
2011
|
-
if (value instanceof
|
|
2115
|
+
if (value instanceof _ObjectSlice_ts__WEBPACK_IMPORTED_MODULE_3__["default"]) {
|
|
2012
2116
|
this._content = value.elements;
|
|
2013
2117
|
return;
|
|
2014
2118
|
}
|
|
@@ -2029,24 +2133,22 @@ class Element {
|
|
|
2029
2133
|
|
|
2030
2134
|
/**
|
|
2031
2135
|
* Metadata about this element (id, classes, title, description, links).
|
|
2032
|
-
* Lazily creates
|
|
2136
|
+
* Lazily creates a Metadata instance if not set.
|
|
2033
2137
|
*/
|
|
2034
2138
|
get meta() {
|
|
2035
2139
|
if (!this._meta) {
|
|
2036
|
-
if (this.isFrozen)
|
|
2037
|
-
|
|
2038
|
-
meta.freeze();
|
|
2039
|
-
return meta;
|
|
2040
|
-
}
|
|
2041
|
-
this._meta = new this.ObjectElement();
|
|
2140
|
+
if (this.isFrozen) return FROZEN_EMPTY_METADATA;
|
|
2141
|
+
this._meta = new _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__["default"]();
|
|
2042
2142
|
}
|
|
2043
2143
|
return this._meta;
|
|
2044
2144
|
}
|
|
2045
2145
|
set meta(value) {
|
|
2046
|
-
if (value instanceof
|
|
2146
|
+
if (value instanceof _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__["default"]) {
|
|
2047
2147
|
this._meta = value;
|
|
2048
|
-
} else {
|
|
2049
|
-
|
|
2148
|
+
} else if (value && typeof value === 'object') {
|
|
2149
|
+
const meta = new _Metadata_ts__WEBPACK_IMPORTED_MODULE_1__["default"]();
|
|
2150
|
+
Object.assign(meta, value);
|
|
2151
|
+
this._meta = meta;
|
|
2050
2152
|
}
|
|
2051
2153
|
}
|
|
2052
2154
|
|
|
@@ -2079,10 +2181,8 @@ class Element {
|
|
|
2079
2181
|
|
|
2080
2182
|
/** Unique identifier for this element. */
|
|
2081
2183
|
get id() {
|
|
2082
|
-
if (this.isFrozen) {
|
|
2083
|
-
return this.getMetaProperty('id', '');
|
|
2084
|
-
}
|
|
2085
2184
|
if (!this.hasMetaProperty('id')) {
|
|
2185
|
+
if (this.isFrozen) return '';
|
|
2086
2186
|
this.setMetaProperty('id', '');
|
|
2087
2187
|
}
|
|
2088
2188
|
return this.meta.get('id');
|
|
@@ -2093,10 +2193,8 @@ class Element {
|
|
|
2093
2193
|
|
|
2094
2194
|
/** CSS-like class names. */
|
|
2095
2195
|
get classes() {
|
|
2096
|
-
if (this.isFrozen) {
|
|
2097
|
-
return this.getMetaProperty('classes', []);
|
|
2098
|
-
}
|
|
2099
2196
|
if (!this.hasMetaProperty('classes')) {
|
|
2197
|
+
if (this.isFrozen) return [];
|
|
2100
2198
|
this.setMetaProperty('classes', []);
|
|
2101
2199
|
}
|
|
2102
2200
|
return this.meta.get('classes');
|
|
@@ -2107,11 +2205,13 @@ class Element {
|
|
|
2107
2205
|
|
|
2108
2206
|
/** Hyperlinks associated with this element. */
|
|
2109
2207
|
get links() {
|
|
2110
|
-
if (this.isFrozen) {
|
|
2111
|
-
return this.getMetaProperty('links', []);
|
|
2112
|
-
}
|
|
2113
2208
|
if (!this.hasMetaProperty('links')) {
|
|
2114
|
-
this.
|
|
2209
|
+
if (this.isFrozen) {
|
|
2210
|
+
const empty = new this.ArrayElement();
|
|
2211
|
+
empty.freeze();
|
|
2212
|
+
return empty;
|
|
2213
|
+
}
|
|
2214
|
+
this.setMetaProperty('links', new this.ArrayElement());
|
|
2115
2215
|
}
|
|
2116
2216
|
return this.meta.get('links');
|
|
2117
2217
|
}
|
|
@@ -2131,7 +2231,7 @@ class Element {
|
|
|
2131
2231
|
if (Array.isArray(content)) {
|
|
2132
2232
|
return content;
|
|
2133
2233
|
}
|
|
2134
|
-
if (content instanceof
|
|
2234
|
+
if (content instanceof _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_2__["default"]) {
|
|
2135
2235
|
const children = [];
|
|
2136
2236
|
if (content.key) children.push(content.key);
|
|
2137
2237
|
if (content.value) children.push(content.value);
|
|
@@ -2161,7 +2261,6 @@ class Element {
|
|
|
2161
2261
|
|
|
2162
2262
|
// Freeze meta and attributes
|
|
2163
2263
|
if (this._meta) {
|
|
2164
|
-
this._meta.parent = this;
|
|
2165
2264
|
this._meta.freeze();
|
|
2166
2265
|
}
|
|
2167
2266
|
if (this._attributes) {
|
|
@@ -2196,7 +2295,7 @@ class Element {
|
|
|
2196
2295
|
if (_content instanceof Element) {
|
|
2197
2296
|
return _content.toValue();
|
|
2198
2297
|
}
|
|
2199
|
-
if (_content instanceof
|
|
2298
|
+
if (_content instanceof _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_2__["default"]) {
|
|
2200
2299
|
return _content.toValue();
|
|
2201
2300
|
}
|
|
2202
2301
|
if (Array.isArray(_content)) {
|
|
@@ -2252,7 +2351,7 @@ class Element {
|
|
|
2252
2351
|
* @throws Error if this element has no ID
|
|
2253
2352
|
*/
|
|
2254
2353
|
toRef(path) {
|
|
2255
|
-
const idValue = this.id
|
|
2354
|
+
const idValue = this.id;
|
|
2256
2355
|
if (idValue === '') {
|
|
2257
2356
|
throw new Error('Cannot create reference to an element without an ID');
|
|
2258
2357
|
}
|
|
@@ -2264,26 +2363,16 @@ class Element {
|
|
|
2264
2363
|
}
|
|
2265
2364
|
|
|
2266
2365
|
/**
|
|
2267
|
-
* Gets a meta property.
|
|
2366
|
+
* Gets a meta property value.
|
|
2268
2367
|
*
|
|
2269
2368
|
* When the property doesn't exist:
|
|
2270
|
-
* - With defaultValue: returns
|
|
2369
|
+
* - With defaultValue: returns the provided default value
|
|
2271
2370
|
* - Without defaultValue: returns undefined
|
|
2272
|
-
*
|
|
2273
|
-
* Note: Each call with a default creates a new instance. Use setMetaProperty
|
|
2274
|
-
* first if you need reference equality across multiple accesses.
|
|
2275
2371
|
*/
|
|
2276
2372
|
|
|
2277
2373
|
getMetaProperty(name, defaultValue) {
|
|
2278
2374
|
if (!this.hasMetaProperty(name)) {
|
|
2279
|
-
|
|
2280
|
-
return undefined;
|
|
2281
|
-
}
|
|
2282
|
-
const element = this.refract(defaultValue);
|
|
2283
|
-
if (element && this.isFrozen) {
|
|
2284
|
-
element.freeze();
|
|
2285
|
-
}
|
|
2286
|
-
return element;
|
|
2375
|
+
return defaultValue;
|
|
2287
2376
|
}
|
|
2288
2377
|
return this.meta.get(name);
|
|
2289
2378
|
}
|
|
@@ -2296,20 +2385,17 @@ class Element {
|
|
|
2296
2385
|
}
|
|
2297
2386
|
|
|
2298
2387
|
/**
|
|
2299
|
-
*
|
|
2388
|
+
* Checks whether a meta property exists.
|
|
2300
2389
|
*/
|
|
2301
2390
|
hasMetaProperty(name) {
|
|
2302
|
-
|
|
2303
|
-
return this.meta.hasKey(name);
|
|
2304
|
-
}
|
|
2305
|
-
return false;
|
|
2391
|
+
return this._meta !== undefined && this._meta.hasKey(name);
|
|
2306
2392
|
}
|
|
2307
2393
|
|
|
2308
2394
|
/**
|
|
2309
2395
|
* Checks if meta is empty.
|
|
2310
2396
|
*/
|
|
2311
2397
|
get isMetaEmpty() {
|
|
2312
|
-
return this._meta === undefined || this.
|
|
2398
|
+
return this._meta === undefined || this._meta.isEmpty;
|
|
2313
2399
|
}
|
|
2314
2400
|
|
|
2315
2401
|
/**
|
|
@@ -2335,7 +2421,7 @@ class Element {
|
|
|
2335
2421
|
}
|
|
2336
2422
|
|
|
2337
2423
|
/**
|
|
2338
|
-
*
|
|
2424
|
+
* Checks whether an attributes property exists.
|
|
2339
2425
|
*/
|
|
2340
2426
|
hasAttributesProperty(name) {
|
|
2341
2427
|
if (!this.isAttributesEmpty) {
|
|
@@ -2354,6 +2440,7 @@ class Element {
|
|
|
2354
2440
|
|
|
2355
2441
|
// Re-export types for convenience
|
|
2356
2442
|
|
|
2443
|
+
|
|
2357
2444
|
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Element);
|
|
2358
2445
|
|
|
2359
2446
|
/***/ },
|
|
@@ -2792,6 +2879,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
2792
2879
|
/* harmony import */ var _elements_Style_ts__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(128);
|
|
2793
2880
|
/* harmony import */ var _ObjectSlice_ts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(660);
|
|
2794
2881
|
/* harmony import */ var _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(807);
|
|
2882
|
+
/* harmony import */ var _Metadata_ts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(206);
|
|
2883
|
+
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(314);
|
|
2884
|
+
|
|
2885
|
+
|
|
2795
2886
|
|
|
2796
2887
|
|
|
2797
2888
|
|
|
@@ -2852,14 +2943,16 @@ function refract(value) {
|
|
|
2852
2943
|
}
|
|
2853
2944
|
|
|
2854
2945
|
// Set up prototype assignments for circular dependency resolution.
|
|
2855
|
-
// These allow Element instances to
|
|
2856
|
-
//
|
|
2946
|
+
// These allow Element and Metadata instances to reference classes they can't import
|
|
2947
|
+
// directly (which would cause circular imports).
|
|
2857
2948
|
// Using 'declare' in the class definitions enables type-safe access to these properties.
|
|
2858
2949
|
_primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ObjectElement = _primitives_ObjectElement_ts__WEBPACK_IMPORTED_MODULE_8__["default"];
|
|
2859
2950
|
_primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ArrayElement = _primitives_ArrayElement_ts__WEBPACK_IMPORTED_MODULE_6__["default"];
|
|
2860
2951
|
_primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.RefElement = _elements_RefElement_ts__WEBPACK_IMPORTED_MODULE_10__["default"];
|
|
2861
2952
|
_primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.MemberElement = _primitives_MemberElement_ts__WEBPACK_IMPORTED_MODULE_7__["default"];
|
|
2862
2953
|
_primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.refract = refract;
|
|
2954
|
+
_Metadata_ts__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.Element = _primitives_Element_ts__WEBPACK_IMPORTED_MODULE_0__["default"];
|
|
2955
|
+
_Metadata_ts__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.cloneDeepElement = element => (0,_clone_index_ts__WEBPACK_IMPORTED_MODULE_19__.cloneDeep)(element);
|
|
2863
2956
|
|
|
2864
2957
|
/**
|
|
2865
2958
|
* Contains all of the element classes, and related structures and methods
|
|
@@ -2928,7 +3021,13 @@ class JSONSerialiser {
|
|
|
2928
3021
|
element: element.element
|
|
2929
3022
|
};
|
|
2930
3023
|
if (!element.isMetaEmpty) {
|
|
2931
|
-
|
|
3024
|
+
const serialisedMeta = this.serialiseMeta(element);
|
|
3025
|
+
if (serialisedMeta) {
|
|
3026
|
+
payload.meta = serialisedMeta.meta;
|
|
3027
|
+
if (serialisedMeta.rawKeys.length > 0) {
|
|
3028
|
+
payload.__meta_raw__ = serialisedMeta.rawKeys;
|
|
3029
|
+
}
|
|
3030
|
+
}
|
|
2932
3031
|
}
|
|
2933
3032
|
if (!element.isAttributesEmpty) {
|
|
2934
3033
|
payload.attributes = this.serialiseObject(element.attributes);
|
|
@@ -2975,7 +3074,7 @@ class JSONSerialiser {
|
|
|
2975
3074
|
element.element = value.element;
|
|
2976
3075
|
}
|
|
2977
3076
|
|
|
2978
|
-
// Extract
|
|
3077
|
+
// Extract special meta keys without mutating input, filter remaining meta
|
|
2979
3078
|
let mappingsDoc;
|
|
2980
3079
|
let stylesDoc;
|
|
2981
3080
|
let metaToDeserialize = value.meta;
|
|
@@ -2989,8 +3088,15 @@ class JSONSerialiser {
|
|
|
2989
3088
|
stylesDoc = __styles__;
|
|
2990
3089
|
metaToDeserialize = Object.keys(rest).length > 0 ? rest : undefined;
|
|
2991
3090
|
}
|
|
3091
|
+
|
|
3092
|
+
// determine which meta keys were raw primitives before serialization
|
|
3093
|
+
const rawKeys = value.__meta_raw__ ? new Set(value.__meta_raw__) : undefined;
|
|
2992
3094
|
if (metaToDeserialize) {
|
|
2993
|
-
|
|
3095
|
+
for (const [key, doc] of Object.entries(metaToDeserialize)) {
|
|
3096
|
+
const deserialized = this.deserialise(doc);
|
|
3097
|
+
// unwrap keys that were raw primitives before serialization
|
|
3098
|
+
element.setMetaProperty(key, rawKeys?.has(key) ? deserialized.toValue() : deserialized);
|
|
3099
|
+
}
|
|
2994
3100
|
}
|
|
2995
3101
|
|
|
2996
3102
|
// Restore source position from __mappings__
|
|
@@ -3053,6 +3159,27 @@ class JSONSerialiser {
|
|
|
3053
3159
|
}
|
|
3054
3160
|
return content;
|
|
3055
3161
|
}
|
|
3162
|
+
serialiseMeta(element) {
|
|
3163
|
+
const meta = {};
|
|
3164
|
+
const rawKeys = [];
|
|
3165
|
+
let hasEntries = false;
|
|
3166
|
+
for (const [key, value] of Object.entries(element.meta)) {
|
|
3167
|
+
if (value instanceof this.namespace.elements.Element) {
|
|
3168
|
+
meta[key] = this.serialise(value);
|
|
3169
|
+
hasEntries = true;
|
|
3170
|
+
} else if (value !== undefined) {
|
|
3171
|
+
// refract primitives to maintain JSON Refract spec compatibility
|
|
3172
|
+
const refracted = element.refract(value);
|
|
3173
|
+
meta[key] = this.serialise(refracted);
|
|
3174
|
+
rawKeys.push(key);
|
|
3175
|
+
hasEntries = true;
|
|
3176
|
+
}
|
|
3177
|
+
}
|
|
3178
|
+
return hasEntries ? {
|
|
3179
|
+
meta,
|
|
3180
|
+
rawKeys
|
|
3181
|
+
} : undefined;
|
|
3182
|
+
}
|
|
3056
3183
|
serialiseObject(obj) {
|
|
3057
3184
|
const result = {};
|
|
3058
3185
|
obj.forEach((value, key) => {
|
|
@@ -3916,80 +4043,83 @@ class ApiDOMStructuredError extends _ApiDOMError_mjs__WEBPACK_IMPORTED_MODULE_0_
|
|
|
3916
4043
|
var __webpack_exports__ = {};
|
|
3917
4044
|
__webpack_require__.r(__webpack_exports__);
|
|
3918
4045
|
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
3919
|
-
/* harmony export */ AnnotationElement: () => (/* reexport safe */
|
|
3920
|
-
/* harmony export */ ArrayElement: () => (/* reexport safe */
|
|
3921
|
-
/* harmony export */ BooleanElement: () => (/* reexport safe */
|
|
3922
|
-
/* harmony export */ CloneError: () => (/* reexport safe */
|
|
3923
|
-
/* harmony export */ CollectionElement: () => (/* reexport safe */
|
|
3924
|
-
/* harmony export */ CommentElement: () => (/* reexport safe */
|
|
3925
|
-
/* harmony export */ DeepCloneError: () => (/* reexport safe */
|
|
3926
|
-
/* harmony export */ Element: () => (/* reexport safe */
|
|
3927
|
-
/* harmony export */ JSONSerialiser: () => (/* reexport safe */
|
|
4046
|
+
/* harmony export */ AnnotationElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_19__["default"]),
|
|
4047
|
+
/* harmony export */ ArrayElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_14__["default"]),
|
|
4048
|
+
/* harmony export */ BooleanElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_13__["default"]),
|
|
4049
|
+
/* harmony export */ CloneError: () => (/* reexport safe */ _clone_index_ts__WEBPACK_IMPORTED_MODULE_4__["default"]),
|
|
4050
|
+
/* harmony export */ CollectionElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_9__["default"]),
|
|
4051
|
+
/* harmony export */ CommentElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_20__["default"]),
|
|
4052
|
+
/* harmony export */ DeepCloneError: () => (/* reexport safe */ _clone_index_ts__WEBPACK_IMPORTED_MODULE_5__["default"]),
|
|
4053
|
+
/* harmony export */ Element: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_8__["default"]),
|
|
4054
|
+
/* harmony export */ JSONSerialiser: () => (/* reexport safe */ _serialisers_JSONSerialiser_ts__WEBPACK_IMPORTED_MODULE_25__["default"]),
|
|
3928
4055
|
/* harmony export */ KeyValuePair: () => (/* reexport safe */ _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_1__["default"]),
|
|
3929
|
-
/* harmony export */ LinkElement: () => (/* reexport safe */
|
|
3930
|
-
/* harmony export */ MemberElement: () => (/* reexport safe */
|
|
4056
|
+
/* harmony export */ LinkElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_17__["default"]),
|
|
4057
|
+
/* harmony export */ MemberElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_15__["default"]),
|
|
4058
|
+
/* harmony export */ Metadata: () => (/* reexport safe */ _Metadata_ts__WEBPACK_IMPORTED_MODULE_2__["default"]),
|
|
3931
4059
|
/* harmony export */ Namespace: () => (/* reexport safe */ _Namespace_ts__WEBPACK_IMPORTED_MODULE_0__["default"]),
|
|
3932
|
-
/* harmony export */ NullElement: () => (/* reexport safe */
|
|
3933
|
-
/* harmony export */ NumberElement: () => (/* reexport safe */
|
|
3934
|
-
/* harmony export */ ObjectElement: () => (/* reexport safe */
|
|
3935
|
-
/* harmony export */ ObjectSlice: () => (/* reexport safe */
|
|
3936
|
-
/* harmony export */ ParseResultElement: () => (/* reexport safe */
|
|
3937
|
-
/* harmony export */ RefElement: () => (/* reexport safe */
|
|
3938
|
-
/* harmony export */ ShallowCloneError: () => (/* reexport safe */
|
|
3939
|
-
/* harmony export */ SourceMapElement: () => (/* reexport safe */
|
|
3940
|
-
/* harmony export */ StringElement: () => (/* reexport safe */
|
|
3941
|
-
/* harmony export */ StyleElement: () => (/* reexport safe */
|
|
3942
|
-
/* harmony export */ cloneDeep: () => (/* reexport safe */
|
|
3943
|
-
/* harmony export */ cloneShallow: () => (/* reexport safe */
|
|
3944
|
-
/* harmony export */ hasElementSourceMap: () => (/* reexport safe */
|
|
3945
|
-
/* harmony export */ hasElementStyle: () => (/* reexport safe */
|
|
3946
|
-
/* harmony export */ includesClasses: () => (/* reexport safe */
|
|
3947
|
-
/* harmony export */ includesSymbols: () => (/* reexport safe */
|
|
3948
|
-
/* harmony export */ isAnnotationElement: () => (/* reexport safe */
|
|
3949
|
-
/* harmony export */ isArrayElement: () => (/* reexport safe */
|
|
3950
|
-
/* harmony export */ isBooleanElement: () => (/* reexport safe */
|
|
3951
|
-
/* harmony export */ isCommentElement: () => (/* reexport safe */
|
|
3952
|
-
/* harmony export */ isElement: () => (/* reexport safe */
|
|
3953
|
-
/* harmony export */ isLinkElement: () => (/* reexport safe */
|
|
3954
|
-
/* harmony export */ isMemberElement: () => (/* reexport safe */
|
|
3955
|
-
/* harmony export */ isNullElement: () => (/* reexport safe */
|
|
3956
|
-
/* harmony export */ isNumberElement: () => (/* reexport safe */
|
|
3957
|
-
/* harmony export */ isObjectElement: () => (/* reexport safe */
|
|
3958
|
-
/* harmony export */ isParseResultElement: () => (/* reexport safe */
|
|
3959
|
-
/* harmony export */ isPrimitiveElement: () => (/* reexport safe */
|
|
3960
|
-
/* harmony export */ isRefElement: () => (/* reexport safe */
|
|
3961
|
-
/* harmony export */ isSourceMapElement: () => (/* reexport safe */
|
|
3962
|
-
/* harmony export */ isStringElement: () => (/* reexport safe */
|
|
3963
|
-
/* harmony export */ refract: () => (/* reexport safe */
|
|
4060
|
+
/* harmony export */ NullElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_10__["default"]),
|
|
4061
|
+
/* harmony export */ NumberElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_12__["default"]),
|
|
4062
|
+
/* harmony export */ ObjectElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_16__["default"]),
|
|
4063
|
+
/* harmony export */ ObjectSlice: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_24__["default"]),
|
|
4064
|
+
/* harmony export */ ParseResultElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_21__["default"]),
|
|
4065
|
+
/* harmony export */ RefElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_18__["default"]),
|
|
4066
|
+
/* harmony export */ ShallowCloneError: () => (/* reexport safe */ _clone_index_ts__WEBPACK_IMPORTED_MODULE_6__["default"]),
|
|
4067
|
+
/* harmony export */ SourceMapElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_22__["default"]),
|
|
4068
|
+
/* harmony export */ StringElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_11__["default"]),
|
|
4069
|
+
/* harmony export */ StyleElement: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_23__["default"]),
|
|
4070
|
+
/* harmony export */ cloneDeep: () => (/* reexport safe */ _clone_index_ts__WEBPACK_IMPORTED_MODULE_3__.cloneDeep),
|
|
4071
|
+
/* harmony export */ cloneShallow: () => (/* reexport safe */ _clone_index_ts__WEBPACK_IMPORTED_MODULE_3__.cloneShallow),
|
|
4072
|
+
/* harmony export */ hasElementSourceMap: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__.hasElementSourceMap),
|
|
4073
|
+
/* harmony export */ hasElementStyle: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__.hasElementStyle),
|
|
4074
|
+
/* harmony export */ includesClasses: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__.includesClasses),
|
|
4075
|
+
/* harmony export */ includesSymbols: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__.includesSymbols),
|
|
4076
|
+
/* harmony export */ isAnnotationElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isAnnotationElement),
|
|
4077
|
+
/* harmony export */ isArrayElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isArrayElement),
|
|
4078
|
+
/* harmony export */ isBooleanElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isBooleanElement),
|
|
4079
|
+
/* harmony export */ isCommentElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isCommentElement),
|
|
4080
|
+
/* harmony export */ isElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isElement),
|
|
4081
|
+
/* harmony export */ isLinkElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isLinkElement),
|
|
4082
|
+
/* harmony export */ isMemberElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isMemberElement),
|
|
4083
|
+
/* harmony export */ isNullElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isNullElement),
|
|
4084
|
+
/* harmony export */ isNumberElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isNumberElement),
|
|
4085
|
+
/* harmony export */ isObjectElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isObjectElement),
|
|
4086
|
+
/* harmony export */ isParseResultElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isParseResultElement),
|
|
4087
|
+
/* harmony export */ isPrimitiveElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isPrimitiveElement),
|
|
4088
|
+
/* harmony export */ isRefElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isRefElement),
|
|
4089
|
+
/* harmony export */ isSourceMapElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__.isSourceMapElement),
|
|
4090
|
+
/* harmony export */ isStringElement: () => (/* reexport safe */ _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__.isStringElement),
|
|
4091
|
+
/* harmony export */ refract: () => (/* reexport safe */ _registration_ts__WEBPACK_IMPORTED_MODULE_7__.refract)
|
|
3964
4092
|
/* harmony export */ });
|
|
3965
4093
|
/* harmony import */ var _Namespace_ts__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(576);
|
|
3966
4094
|
/* harmony import */ var _KeyValuePair_ts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(807);
|
|
3967
|
-
/* harmony import */ var
|
|
3968
|
-
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(
|
|
3969
|
-
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(
|
|
3970
|
-
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(
|
|
3971
|
-
/* harmony import */ var
|
|
3972
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(
|
|
3973
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(
|
|
3974
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(
|
|
3975
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(
|
|
3976
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(
|
|
3977
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(
|
|
3978
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(
|
|
3979
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(
|
|
3980
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(
|
|
3981
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(
|
|
3982
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(
|
|
3983
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(
|
|
3984
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(
|
|
3985
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(
|
|
3986
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(
|
|
3987
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(
|
|
3988
|
-
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(
|
|
3989
|
-
/* harmony import */ var
|
|
3990
|
-
/* harmony import */ var
|
|
3991
|
-
/* harmony import */ var _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(
|
|
3992
|
-
/* harmony import */ var _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(
|
|
4095
|
+
/* harmony import */ var _Metadata_ts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
|
|
4096
|
+
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(314);
|
|
4097
|
+
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(200);
|
|
4098
|
+
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(794);
|
|
4099
|
+
/* harmony import */ var _clone_index_ts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(60);
|
|
4100
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18);
|
|
4101
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(370);
|
|
4102
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(766);
|
|
4103
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(377);
|
|
4104
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(805);
|
|
4105
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(933);
|
|
4106
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(492);
|
|
4107
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(603);
|
|
4108
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(136);
|
|
4109
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(975);
|
|
4110
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(885);
|
|
4111
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(474);
|
|
4112
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(24);
|
|
4113
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(176);
|
|
4114
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(755);
|
|
4115
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(588);
|
|
4116
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(128);
|
|
4117
|
+
/* harmony import */ var _registration_ts__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(660);
|
|
4118
|
+
/* harmony import */ var _serialisers_JSONSerialiser_ts__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(27);
|
|
4119
|
+
/* harmony import */ var _predicates_index_ts__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(950);
|
|
4120
|
+
/* harmony import */ var _predicates_index_ts__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(762);
|
|
4121
|
+
/* harmony import */ var _predicates_index_ts__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(969);
|
|
4122
|
+
|
|
3993
4123
|
|
|
3994
4124
|
|
|
3995
4125
|
|