@speclynx/apidom-parser-adapter-openapi-json-3-1 2.13.0 → 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.
@@ -20327,7 +20327,7 @@ __webpack_require__.r(__webpack_exports__);
20327
20327
  * @public
20328
20328
  */
20329
20329
  const emptyElement = element => {
20330
- const meta = !element.isMetaEmpty ? (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.meta) : undefined;
20330
+ const meta = !element.isMetaEmpty ? element.meta.cloneDeep() : undefined;
20331
20331
  const attributes = !element.isAttributesEmpty ? (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.attributes) : undefined;
20332
20332
 
20333
20333
  // @ts-ignore
@@ -20343,7 +20343,7 @@ const getMergeFunction = (keyElement, options) => {
20343
20343
  };
20344
20344
  const getMetaMergeFunction = options => {
20345
20345
  if (typeof options.customMetaMerge !== 'function') {
20346
- return targetMeta => (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(targetMeta);
20346
+ return targetMeta => targetMeta.cloneDeep();
20347
20347
  }
20348
20348
  return options.customMetaMerge;
20349
20349
  };
@@ -20415,8 +20415,20 @@ const deepmerge = (targetElement, sourceElement, options) => {
20415
20415
  const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
20416
20416
 
20417
20417
  // merging meta & attributes
20418
- mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
20419
- mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
20418
+ if (!targetElement.isMetaEmpty && !sourceElement.isMetaEmpty) {
20419
+ mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
20420
+ } else if (!targetElement.isMetaEmpty) {
20421
+ mergedElement.meta = targetElement.meta.cloneDeep();
20422
+ } else if (!sourceElement.isMetaEmpty) {
20423
+ mergedElement.meta = sourceElement.meta.cloneDeep();
20424
+ }
20425
+ if (!targetElement.isAttributesEmpty && !sourceElement.isAttributesEmpty) {
20426
+ mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
20427
+ } else if (!targetElement.isAttributesEmpty) {
20428
+ mergedElement.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(targetElement.attributes);
20429
+ } else if (!sourceElement.isAttributesEmpty) {
20430
+ mergedElement.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(sourceElement.attributes);
20431
+ }
20420
20432
  return mergedElement;
20421
20433
  };
20422
20434
  deepmerge.all = (list, options) => {
@@ -20755,6 +20767,105 @@ class KeyValuePair {
20755
20767
 
20756
20768
  /***/ },
20757
20769
 
20770
+ /***/ 51844
20771
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
20772
+
20773
+ "use strict";
20774
+ __webpack_require__.r(__webpack_exports__);
20775
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
20776
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
20777
+ /* harmony export */ });
20778
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8138);
20779
+
20780
+ /**
20781
+ * Lightweight meta container for Element metadata.
20782
+ *
20783
+ * Data is stored as own properties on the instance; methods live on the prototype.
20784
+ * `Object.keys()`, `Object.entries()`, etc. only see data properties.
20785
+ *
20786
+ * @public
20787
+ */
20788
+ class Metadata {
20789
+ // Set via prototype assignment in registration.ts to avoid circular dependency
20790
+
20791
+ get(name) {
20792
+ return this[name];
20793
+ }
20794
+ set(name, value) {
20795
+ this[name] = value;
20796
+ }
20797
+ hasKey(name) {
20798
+ return Object.hasOwn(this, name);
20799
+ }
20800
+ keys() {
20801
+ return Object.keys(this);
20802
+ }
20803
+ remove(name) {
20804
+ delete this[name];
20805
+ }
20806
+ get isEmpty() {
20807
+ return Object.keys(this).length === 0;
20808
+ }
20809
+ get isFrozen() {
20810
+ return Object.isFrozen(this);
20811
+ }
20812
+ freeze() {
20813
+ for (const value of Object.values(this)) {
20814
+ if (value instanceof this.Element) {
20815
+ value.freeze();
20816
+ } else if (Array.isArray(value) || value !== null && typeof value === 'object') {
20817
+ Object.freeze(value);
20818
+ }
20819
+ }
20820
+ Object.freeze(this);
20821
+ }
20822
+
20823
+ /**
20824
+ * Creates a shallow clone. Same references, new container.
20825
+ */
20826
+ cloneShallow() {
20827
+ const clone = new Metadata();
20828
+ Object.assign(clone, this);
20829
+ return clone;
20830
+ }
20831
+
20832
+ /**
20833
+ * Merges another Metadata into a new instance.
20834
+ * Arrays are concatenated, all other values are overwritten by source.
20835
+ */
20836
+ merge(source) {
20837
+ const result = this.cloneShallow();
20838
+ for (const [key, value] of Object.entries(source)) {
20839
+ const existing = result.get(key);
20840
+ if (Array.isArray(existing) && Array.isArray(value)) {
20841
+ result.set(key, [...existing, ...value]);
20842
+ } else {
20843
+ result.set(key, value);
20844
+ }
20845
+ }
20846
+ return result;
20847
+ }
20848
+
20849
+ /**
20850
+ * Creates a deep clone. Elements are deep cloned,
20851
+ * all other values are deep cloned via ramda clone.
20852
+ */
20853
+ cloneDeep() {
20854
+ const copy = new Metadata();
20855
+ for (const [key, value] of Object.entries(this)) {
20856
+ if (value instanceof this.Element) {
20857
+ copy.set(key, this.cloneDeepElement(value));
20858
+ } else {
20859
+ copy.set(key, (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(value));
20860
+ }
20861
+ }
20862
+ return copy;
20863
+ }
20864
+ }
20865
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Metadata);
20866
+
20867
+ /***/ },
20868
+
20758
20869
  /***/ 55156
20759
20870
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
20760
20871
 
@@ -21401,7 +21512,7 @@ const cloneShallowElement = element => {
21401
21512
  const copy = new Ctor();
21402
21513
  copy.element = element.element;
21403
21514
  if (!element.isMetaEmpty) {
21404
- copy.meta = cloneDeep(element.meta);
21515
+ copy.meta = element.meta.cloneDeep();
21405
21516
  }
21406
21517
  if (!element.isAttributesEmpty) {
21407
21518
  copy.attributes = cloneDeep(element.attributes);
@@ -21429,8 +21540,8 @@ const cloneShallowElement = element => {
21429
21540
 
21430
21541
  /**
21431
21542
  * Creates a shallow clone of an ApiDOM Element, KeyValuePair, or ObjectSlice.
21432
- * The element itself is cloned, but content references are shared (except for
21433
- * meta and attributes which are deep cloned to preserve semantic information).
21543
+ * The element itself is cloned, but content references are shared.
21544
+ * Meta and attributes are deep cloned to preserve semantic information.
21434
21545
  * @public
21435
21546
  */
21436
21547
  const cloneShallow = value => {
@@ -22505,7 +22616,7 @@ class CollectionElement extends _Element_mjs__WEBPACK_IMPORTED_MODULE_0__["defau
22505
22616
  * Search the tree recursively and find the element with the matching ID.
22506
22617
  */
22507
22618
  getById(id) {
22508
- return this.find(item => item.id.toValue() === id).first;
22619
+ return this.find(item => item.id === id).first;
22509
22620
  }
22510
22621
 
22511
22622
  /**
@@ -22535,18 +22646,24 @@ class CollectionElement extends _Element_mjs__WEBPACK_IMPORTED_MODULE_0__["defau
22535
22646
  "use strict";
22536
22647
  __webpack_require__.r(__webpack_exports__);
22537
22648
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22649
+ /* harmony export */ Metadata: () => (/* reexport safe */ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]),
22538
22650
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
22539
22651
  /* harmony export */ });
22540
22652
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53654);
22541
- /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(36663);
22542
- /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(38504);
22653
+ /* harmony import */ var _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(51844);
22654
+ /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(36663);
22655
+ /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(38504);
22656
+
22543
22657
 
22544
22658
 
22659
+ // shared singleton for frozen elements with no meta — avoids allocation on every access
22660
+ const FROZEN_EMPTY_METADATA = Object.freeze(new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]());
22545
22661
 
22546
22662
  /**
22547
22663
  * Valid content types for an Element.
22548
22664
  * @public
22549
22665
  */
22666
+
22550
22667
  /**
22551
22668
  * Base Element class that all ApiDOM elements extend.
22552
22669
  *
@@ -22644,7 +22761,7 @@ class Element {
22644
22761
  _attributes;
22645
22762
 
22646
22763
  // ============================================================
22647
- // Prototype-assigned properties (set in elements.ts)
22764
+ // Prototype-assigned properties (set in registration.ts)
22648
22765
  // Using 'declare' allows TypeScript to know about these
22649
22766
  // without generating runtime code.
22650
22767
  // ============================================================
@@ -22705,13 +22822,13 @@ class Element {
22705
22822
  }
22706
22823
 
22707
22824
  // KeyValuePair
22708
- if (value instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
22825
+ if (value instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
22709
22826
  this._content = value;
22710
22827
  return;
22711
22828
  }
22712
22829
 
22713
22830
  // ObjectSlice - extract elements array
22714
- if (value instanceof _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
22831
+ if (value instanceof _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_3__["default"]) {
22715
22832
  this._content = value.elements;
22716
22833
  return;
22717
22834
  }
@@ -22732,24 +22849,22 @@ class Element {
22732
22849
 
22733
22850
  /**
22734
22851
  * Metadata about this element (id, classes, title, description, links).
22735
- * Lazily creates an ObjectElement if not set.
22852
+ * Lazily creates a Metadata instance if not set.
22736
22853
  */
22737
22854
  get meta() {
22738
22855
  if (!this._meta) {
22739
- if (this.isFrozen) {
22740
- const meta = new this.ObjectElement();
22741
- meta.freeze();
22742
- return meta;
22743
- }
22744
- this._meta = new this.ObjectElement();
22856
+ if (this.isFrozen) return FROZEN_EMPTY_METADATA;
22857
+ this._meta = new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]();
22745
22858
  }
22746
22859
  return this._meta;
22747
22860
  }
22748
22861
  set meta(value) {
22749
- if (value instanceof Element) {
22862
+ if (value instanceof _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
22750
22863
  this._meta = value;
22751
- } else {
22752
- this.meta.set(value ?? {});
22864
+ } else if (value && typeof value === 'object') {
22865
+ const meta = new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]();
22866
+ Object.assign(meta, value);
22867
+ this._meta = meta;
22753
22868
  }
22754
22869
  }
22755
22870
 
@@ -22782,10 +22897,8 @@ class Element {
22782
22897
 
22783
22898
  /** Unique identifier for this element. */
22784
22899
  get id() {
22785
- if (this.isFrozen) {
22786
- return this.getMetaProperty('id', '');
22787
- }
22788
22900
  if (!this.hasMetaProperty('id')) {
22901
+ if (this.isFrozen) return '';
22789
22902
  this.setMetaProperty('id', '');
22790
22903
  }
22791
22904
  return this.meta.get('id');
@@ -22796,10 +22909,8 @@ class Element {
22796
22909
 
22797
22910
  /** CSS-like class names. */
22798
22911
  get classes() {
22799
- if (this.isFrozen) {
22800
- return this.getMetaProperty('classes', []);
22801
- }
22802
22912
  if (!this.hasMetaProperty('classes')) {
22913
+ if (this.isFrozen) return [];
22803
22914
  this.setMetaProperty('classes', []);
22804
22915
  }
22805
22916
  return this.meta.get('classes');
@@ -22810,11 +22921,13 @@ class Element {
22810
22921
 
22811
22922
  /** Hyperlinks associated with this element. */
22812
22923
  get links() {
22813
- if (this.isFrozen) {
22814
- return this.getMetaProperty('links', []);
22815
- }
22816
22924
  if (!this.hasMetaProperty('links')) {
22817
- this.setMetaProperty('links', []);
22925
+ if (this.isFrozen) {
22926
+ const empty = new this.ArrayElement();
22927
+ empty.freeze();
22928
+ return empty;
22929
+ }
22930
+ this.setMetaProperty('links', new this.ArrayElement());
22818
22931
  }
22819
22932
  return this.meta.get('links');
22820
22933
  }
@@ -22834,7 +22947,7 @@ class Element {
22834
22947
  if (Array.isArray(content)) {
22835
22948
  return content;
22836
22949
  }
22837
- if (content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
22950
+ if (content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
22838
22951
  const children = [];
22839
22952
  if (content.key) children.push(content.key);
22840
22953
  if (content.value) children.push(content.value);
@@ -22864,7 +22977,6 @@ class Element {
22864
22977
 
22865
22978
  // Freeze meta and attributes
22866
22979
  if (this._meta) {
22867
- this._meta.parent = this;
22868
22980
  this._meta.freeze();
22869
22981
  }
22870
22982
  if (this._attributes) {
@@ -22899,7 +23011,7 @@ class Element {
22899
23011
  if (_content instanceof Element) {
22900
23012
  return _content.toValue();
22901
23013
  }
22902
- if (_content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
23014
+ if (_content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
22903
23015
  return _content.toValue();
22904
23016
  }
22905
23017
  if (Array.isArray(_content)) {
@@ -22955,7 +23067,7 @@ class Element {
22955
23067
  * @throws Error if this element has no ID
22956
23068
  */
22957
23069
  toRef(path) {
22958
- const idValue = this.id.toValue();
23070
+ const idValue = this.id;
22959
23071
  if (idValue === '') {
22960
23072
  throw new Error('Cannot create reference to an element without an ID');
22961
23073
  }
@@ -22967,26 +23079,16 @@ class Element {
22967
23079
  }
22968
23080
 
22969
23081
  /**
22970
- * Gets a meta property.
23082
+ * Gets a meta property value.
22971
23083
  *
22972
23084
  * When the property doesn't exist:
22973
- * - With defaultValue: returns a new refracted element instance (not cached)
23085
+ * - With defaultValue: returns the provided default value
22974
23086
  * - Without defaultValue: returns undefined
22975
- *
22976
- * Note: Each call with a default creates a new instance. Use setMetaProperty
22977
- * first if you need reference equality across multiple accesses.
22978
23087
  */
22979
23088
 
22980
23089
  getMetaProperty(name, defaultValue) {
22981
23090
  if (!this.hasMetaProperty(name)) {
22982
- if (defaultValue === undefined) {
22983
- return undefined;
22984
- }
22985
- const element = this.refract(defaultValue);
22986
- if (element && this.isFrozen) {
22987
- element.freeze();
22988
- }
22989
- return element;
23091
+ return defaultValue;
22990
23092
  }
22991
23093
  return this.meta.get(name);
22992
23094
  }
@@ -22999,20 +23101,17 @@ class Element {
22999
23101
  }
23000
23102
 
23001
23103
  /**
23002
- * Has meta property.
23104
+ * Checks whether a meta property exists.
23003
23105
  */
23004
23106
  hasMetaProperty(name) {
23005
- if (!this.isMetaEmpty) {
23006
- return this.meta.hasKey(name);
23007
- }
23008
- return false;
23107
+ return this._meta !== undefined && this._meta.hasKey(name);
23009
23108
  }
23010
23109
 
23011
23110
  /**
23012
23111
  * Checks if meta is empty.
23013
23112
  */
23014
23113
  get isMetaEmpty() {
23015
- return this._meta === undefined || this.meta.isEmpty;
23114
+ return this._meta === undefined || this._meta.isEmpty;
23016
23115
  }
23017
23116
 
23018
23117
  /**
@@ -23038,7 +23137,7 @@ class Element {
23038
23137
  }
23039
23138
 
23040
23139
  /**
23041
- * Has attributes property.
23140
+ * Checks whether an attributes property exists.
23042
23141
  */
23043
23142
  hasAttributesProperty(name) {
23044
23143
  if (!this.isAttributesEmpty) {
@@ -23057,6 +23156,7 @@ class Element {
23057
23156
 
23058
23157
  // Re-export types for convenience
23059
23158
 
23159
+
23060
23160
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Element);
23061
23161
 
23062
23162
  /***/ },
@@ -23495,6 +23595,10 @@ __webpack_require__.r(__webpack_exports__);
23495
23595
  /* harmony import */ var _elements_Style_mjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(49686);
23496
23596
  /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(38504);
23497
23597
  /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(36663);
23598
+ /* harmony import */ var _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(51844);
23599
+ /* harmony import */ var _clone_index_mjs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(12111);
23600
+
23601
+
23498
23602
 
23499
23603
 
23500
23604
 
@@ -23554,14 +23658,16 @@ function refract(value) {
23554
23658
  }
23555
23659
 
23556
23660
  // Set up prototype assignments for circular dependency resolution.
23557
- // These allow Element instances to create ObjectElement, MemberElement, RefElement
23558
- // without importing them directly (which would cause circular imports).
23661
+ // These allow Element and Metadata instances to reference classes they can't import
23662
+ // directly (which would cause circular imports).
23559
23663
  // Using 'declare' in the class definitions enables type-safe access to these properties.
23560
23664
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ObjectElement = _primitives_ObjectElement_mjs__WEBPACK_IMPORTED_MODULE_8__["default"];
23561
23665
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ArrayElement = _primitives_ArrayElement_mjs__WEBPACK_IMPORTED_MODULE_6__["default"];
23562
23666
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.RefElement = _elements_RefElement_mjs__WEBPACK_IMPORTED_MODULE_10__["default"];
23563
23667
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.MemberElement = _primitives_MemberElement_mjs__WEBPACK_IMPORTED_MODULE_7__["default"];
23564
23668
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.refract = refract;
23669
+ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.Element = _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"];
23670
+ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.cloneDeepElement = element => (0,_clone_index_mjs__WEBPACK_IMPORTED_MODULE_19__.cloneDeep)(element);
23565
23671
 
23566
23672
  /**
23567
23673
  * Contains all of the element classes, and related structures and methods
@@ -23626,7 +23732,13 @@ class JSONSerialiser {
23626
23732
  element: element.element
23627
23733
  };
23628
23734
  if (!element.isMetaEmpty) {
23629
- payload.meta = this.serialiseObject(element.meta);
23735
+ const serialisedMeta = this.serialiseMeta(element);
23736
+ if (serialisedMeta) {
23737
+ payload.meta = serialisedMeta.meta;
23738
+ if (serialisedMeta.rawKeys.length > 0) {
23739
+ payload.__meta_raw__ = serialisedMeta.rawKeys;
23740
+ }
23741
+ }
23630
23742
  }
23631
23743
  if (!element.isAttributesEmpty) {
23632
23744
  payload.attributes = this.serialiseObject(element.attributes);
@@ -23673,7 +23785,7 @@ class JSONSerialiser {
23673
23785
  element.element = value.element;
23674
23786
  }
23675
23787
 
23676
- // Extract __mappings__ and __styles__ without mutating input, filter remaining meta
23788
+ // Extract special meta keys without mutating input, filter remaining meta
23677
23789
  let mappingsDoc;
23678
23790
  let stylesDoc;
23679
23791
  let metaToDeserialize = value.meta;
@@ -23687,8 +23799,15 @@ class JSONSerialiser {
23687
23799
  stylesDoc = __styles__;
23688
23800
  metaToDeserialize = Object.keys(rest).length > 0 ? rest : undefined;
23689
23801
  }
23802
+
23803
+ // determine which meta keys were raw primitives before serialization
23804
+ const rawKeys = value.__meta_raw__ ? new Set(value.__meta_raw__) : undefined;
23690
23805
  if (metaToDeserialize) {
23691
- this.deserialiseObject(metaToDeserialize, element.meta);
23806
+ for (const [key, doc] of Object.entries(metaToDeserialize)) {
23807
+ const deserialized = this.deserialise(doc);
23808
+ // unwrap keys that were raw primitives before serialization
23809
+ element.setMetaProperty(key, rawKeys?.has(key) ? deserialized.toValue() : deserialized);
23810
+ }
23692
23811
  }
23693
23812
 
23694
23813
  // Restore source position from __mappings__
@@ -23751,6 +23870,27 @@ class JSONSerialiser {
23751
23870
  }
23752
23871
  return content;
23753
23872
  }
23873
+ serialiseMeta(element) {
23874
+ const meta = {};
23875
+ const rawKeys = [];
23876
+ let hasEntries = false;
23877
+ for (const [key, value] of Object.entries(element.meta)) {
23878
+ if (value instanceof this.namespace.elements.Element) {
23879
+ meta[key] = this.serialise(value);
23880
+ hasEntries = true;
23881
+ } else if (value !== undefined) {
23882
+ // refract primitives to maintain JSON Refract spec compatibility
23883
+ const refracted = element.refract(value);
23884
+ meta[key] = this.serialise(refracted);
23885
+ rawKeys.push(key);
23886
+ hasEntries = true;
23887
+ }
23888
+ }
23889
+ return hasEntries ? {
23890
+ meta,
23891
+ rawKeys
23892
+ } : undefined;
23893
+ }
23754
23894
  serialiseObject(obj) {
23755
23895
  const result = {};
23756
23896
  obj.forEach((value, key) => {
@@ -25872,7 +26012,7 @@ __webpack_require__.r(__webpack_exports__);
25872
26012
  */
25873
26013
  class FallbackVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_1__["default"] {
25874
26014
  enter(path) {
25875
- this.element = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
26015
+ this.element = this.consume ? path.node : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
25876
26016
  path.stop();
25877
26017
  }
25878
26018
  }
@@ -25912,7 +26052,7 @@ __webpack_require__.r(__webpack_exports__);
25912
26052
  */
25913
26053
  class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["default"] {
25914
26054
  specObj;
25915
- passingOptionsNames = ['specObj', 'parent'];
26055
+ passingOptionsNames = ['specObj', 'parent', 'consume'];
25916
26056
  constructor({
25917
26057
  specObj,
25918
26058
  ...rest
@@ -25958,7 +26098,7 @@ class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["de
25958
26098
  */
25959
26099
  const visitor = this.retrieveVisitorInstance(specPath, options);
25960
26100
  if (visitor instanceof _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"] && visitor?.constructor === _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"]) {
25961
- return (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
26101
+ return this.consume ? element : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
25962
26102
  }
25963
26103
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_5__.traverse)(element, visitor, options);
25964
26104
  return visitor.element;
@@ -25977,7 +26117,7 @@ __webpack_require__.r(__webpack_exports__);
25977
26117
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
25978
26118
  /* harmony export */ });
25979
26119
  /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28400);
25980
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97071);
26120
+ /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12111);
25981
26121
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25810);
25982
26122
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49686);
25983
26123
 
@@ -25992,19 +26132,21 @@ __webpack_require__.r(__webpack_exports__);
25992
26132
  */
25993
26133
  class Visitor {
25994
26134
  element;
26135
+ consume = false;
26136
+ consumeSafe = false;
25995
26137
  constructor(options) {
25996
26138
  Object.assign(this, options);
25997
26139
  }
25998
26140
  copyMetaAndAttributes(from, to) {
25999
- if (!from.isMetaEmpty || !to.isMetaEmpty) {
26000
- const target = to.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.meta;
26001
- const source = from.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.meta;
26002
- to.meta = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
26141
+ if (!from.isMetaEmpty && !to.isMetaEmpty) {
26142
+ to.meta = to.meta.merge(from.meta);
26143
+ } else if (!from.isMetaEmpty) {
26144
+ to.meta = from.meta.cloneDeep();
26003
26145
  }
26004
- if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
26005
- const target = to.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.attributes;
26006
- const source = from.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.attributes;
26007
- to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
26146
+ if (!from.isAttributesEmpty && !to.isAttributesEmpty) {
26147
+ to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(to.attributes, from.attributes);
26148
+ } else if (!from.isAttributesEmpty) {
26149
+ to.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(from.attributes);
26008
26150
  }
26009
26151
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"].transfer(from, to);
26010
26152
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__["default"].transfer(from, to);
@@ -26114,12 +26256,13 @@ class FixedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED_MOD
26114
26256
  const keyValue = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(key);
26115
26257
  if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.isStringElement)(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
26116
26258
  const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
26117
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
26259
+ const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"](this.consume ? key : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
26118
26260
  this.copyMetaAndAttributes(memberElement, newMemberElement);
26119
- newMemberElement.classes.push('fixed-field');
26120
26261
  this.element.content.push(newMemberElement);
26262
+ // consume: release processed generic subtree
26263
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
26121
26264
  } else if (!this.ignoredFields.includes(keyValue)) {
26122
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26265
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26123
26266
  }
26124
26267
  });
26125
26268
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -26208,12 +26351,14 @@ class PatternedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED
26208
26351
  if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
26209
26352
  const specPath = this.specPath(value);
26210
26353
  const patternedFieldElement = this.toRefractedElement(specPath, value);
26211
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
26354
+ const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"](this.consume ? key : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
26212
26355
  this.copyMetaAndAttributes(memberElement, newMemberElement);
26213
26356
  newMemberElement.classes.push('patterned-field');
26214
26357
  this.element.content.push(newMemberElement);
26358
+ // consume: release processed generic subtree
26359
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
26215
26360
  } else if (!this.ignoredFields.includes(keyValue)) {
26216
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26361
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26217
26362
  }
26218
26363
  });
26219
26364
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -26771,13 +26916,11 @@ __webpack_require__.r(__webpack_exports__);
26771
26916
  /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(33031);
26772
26917
  /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68894);
26773
26918
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25162);
26774
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(12111);
26775
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(97601);
26776
- /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(44673);
26777
- /* harmony import */ var _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(55320);
26778
- /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(89033);
26779
- /* harmony import */ var _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(94686);
26780
- /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(86059);
26919
+ /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(44673);
26920
+ /* harmony import */ var _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(55320);
26921
+ /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(89033);
26922
+ /* harmony import */ var _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(94686);
26923
+ /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(86059);
26781
26924
 
26782
26925
 
26783
26926
 
@@ -26792,10 +26935,11 @@ __webpack_require__.r(__webpack_exports__);
26792
26935
  /**
26793
26936
  * @public
26794
26937
  */
26795
- class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_9__.JSONSchemaVisitorBase {
26938
+ class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_7__.JSONSchemaVisitorBase {
26796
26939
  constructor(options) {
26797
26940
  super(options);
26798
- this.element = new _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_10__["default"]();
26941
+ this.element = new _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_8__["default"]();
26942
+ this.consumeSafe = true;
26799
26943
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'JSONSchema']);
26800
26944
  }
26801
26945
  get defaultDialectIdentifier() {
@@ -26808,27 +26952,27 @@ class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_9__.JSONSche
26808
26952
 
26809
26953
  // for further processing consider this JSONSchema Element as parent for all sub-schemas
26810
26954
  this.parent = this.element;
26811
- return _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_8__["default"].prototype.ObjectElement.call(this, path);
26955
+ return _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_6__["default"].prototype.ObjectElement.call(this, path);
26812
26956
  }
26813
26957
  handleDialectIdentifier(objectElement) {
26814
26958
  // handle $schema keyword in embedded resources
26815
26959
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_2__["default"])(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
26816
26960
  // no parent available and no $schema is defined, set default $schema
26817
26961
  this.element.meta.set('inheritedDialectIdentifier', this.defaultDialectIdentifier);
26818
- } else if ((0,_predicates_mjs__WEBPACK_IMPORTED_MODULE_11__.isJSONSchemaElement)(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
26962
+ } else if ((0,_predicates_mjs__WEBPACK_IMPORTED_MODULE_9__.isJSONSchemaElement)(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
26819
26963
  // parent is available and no $schema is defined, set parent $schema
26820
- const inheritedDialectIdentifier = (0,ramda__WEBPACK_IMPORTED_MODULE_1__["default"])((0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(this.parent.meta.get('inheritedDialectIdentifier')), (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(this.parent.$schema));
26964
+ const inheritedDialectIdentifier = (0,ramda__WEBPACK_IMPORTED_MODULE_1__["default"])(this.parent.meta.get('inheritedDialectIdentifier'), (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(this.parent.$schema));
26821
26965
  this.element.meta.set('inheritedDialectIdentifier', inheritedDialectIdentifier);
26822
26966
  }
26823
26967
  }
26824
26968
  handleSchemaIdentifier(objectElement, identifierKeyword = 'id') {
26825
26969
  // handle schema identifier in embedded resources
26826
- // fetch parent's ancestorsSchemaIdentifiers
26827
- const ancestorsSchemaIdentifiers = this.parent !== undefined ? (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_5__.cloneDeep)(this.parent.meta.get('ancestorsSchemaIdentifiers') ?? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_6__["default"]()) : new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_6__["default"]();
26970
+ // fetch parent's ancestorsSchemaIdentifiers (stored as plain string[])
26971
+ const ancestorsSchemaIdentifiers = this.parent !== undefined ? [...(this.parent.meta.get('ancestorsSchemaIdentifiers') ?? [])] : [];
26828
26972
  // get current schema identifier
26829
- const schemaIdentifier = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(objectElement.get(identifierKeyword));
26973
+ const schemaIdentifier = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(objectElement.get(identifierKeyword));
26830
26974
 
26831
- // remember schema identifier if it's a non-empty strings
26975
+ // remember schema identifier if it's a non-empty string
26832
26976
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_3__["default"])(schemaIdentifier)) {
26833
26977
  ancestorsSchemaIdentifiers.push(schemaIdentifier);
26834
26978
  }
@@ -31553,7 +31697,7 @@ __webpack_require__.r(__webpack_exports__);
31553
31697
  */
31554
31698
  class FallbackVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_1__["default"] {
31555
31699
  enter(path) {
31556
- this.element = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
31700
+ this.element = this.consume ? path.node : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
31557
31701
  path.stop();
31558
31702
  }
31559
31703
  }
@@ -31619,8 +31763,9 @@ __webpack_require__.r(__webpack_exports__);
31619
31763
  */
31620
31764
  class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["default"] {
31621
31765
  specObj;
31622
- passingOptionsNames = ['specObj', 'openApiGenericElement', 'openApiSemanticElement'];
31766
+ passingOptionsNames = ['specObj', 'openApiGenericElement', 'sourceContext', 'openApiSemanticElement', 'consume'];
31623
31767
  openApiGenericElement;
31768
+ sourceContext;
31624
31769
  openApiSemanticElement;
31625
31770
  constructor({
31626
31771
  specObj,
@@ -31675,7 +31820,7 @@ class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["de
31675
31820
  */
31676
31821
  const visitor = this.retrieveVisitorInstance(specPath, options);
31677
31822
  if (visitor instanceof _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"] && visitor?.constructor === _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"]) {
31678
- return (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
31823
+ return this.consume ? element : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
31679
31824
  }
31680
31825
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_5__.traverse)(element, visitor, {
31681
31826
  nodeTypeGetter: _speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_5__.getNodePrimitiveType
@@ -31696,7 +31841,7 @@ __webpack_require__.r(__webpack_exports__);
31696
31841
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
31697
31842
  /* harmony export */ });
31698
31843
  /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(28400);
31699
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97071);
31844
+ /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(12111);
31700
31845
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25810);
31701
31846
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(49686);
31702
31847
 
@@ -31711,19 +31856,21 @@ __webpack_require__.r(__webpack_exports__);
31711
31856
  */
31712
31857
  class Visitor {
31713
31858
  element;
31859
+ consume = false;
31860
+ consumeSafe = false;
31714
31861
  constructor(options = {}) {
31715
31862
  Object.assign(this, options);
31716
31863
  }
31717
31864
  copyMetaAndAttributes(from, to) {
31718
- if (!from.isMetaEmpty || !to.isMetaEmpty) {
31719
- const target = to.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.meta;
31720
- const source = from.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.meta;
31721
- to.meta = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
31865
+ if (!from.isMetaEmpty && !to.isMetaEmpty) {
31866
+ to.meta = to.meta.merge(from.meta);
31867
+ } else if (!from.isMetaEmpty) {
31868
+ to.meta = from.meta.cloneDeep();
31722
31869
  }
31723
- if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
31724
- const target = to.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.attributes;
31725
- const source = from.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.attributes;
31726
- to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
31870
+ if (!from.isAttributesEmpty && !to.isAttributesEmpty) {
31871
+ to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(to.attributes, from.attributes);
31872
+ } else if (!from.isAttributesEmpty) {
31873
+ to.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(from.attributes);
31727
31874
  }
31728
31875
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"].transfer(from, to);
31729
31876
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__["default"].transfer(from, to);
@@ -31845,15 +31992,20 @@ class FixedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED_MOD
31845
31992
  const keyValue = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(key);
31846
31993
  if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.isStringElement)(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
31847
31994
  const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
31848
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
31995
+ const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"](this.consume ? key : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
31849
31996
  this.copyMetaAndAttributes(memberElement, newMemberElement);
31850
- newMemberElement.classes.push('fixed-field');
31851
31997
  this.element.content.push(newMemberElement);
31998
+ // consume: release processed generic subtree
31999
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
31852
32000
  } else if (this.canSupportSpecificationExtensions && this.specificationExtensionPredicate(memberElement)) {
31853
32001
  const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
31854
32002
  this.element.content.push(extensionElement);
32003
+ // consume: release processed generic subtree
32004
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) {
32005
+ memberElement.value = undefined;
32006
+ }
31855
32007
  } else if (!this.ignoredFields.includes(keyValue)) {
31856
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
32008
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
31857
32009
  }
31858
32010
  });
31859
32011
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -32035,12 +32187,14 @@ class PatternedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED
32035
32187
  } else if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
32036
32188
  const specPath = this.specPath(value);
32037
32189
  const patternedFieldElement = this.toRefractedElement(specPath, value);
32038
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
32190
+ const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"](this.consume ? key : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
32039
32191
  this.copyMetaAndAttributes(memberElement, newMemberElement);
32040
32192
  newMemberElement.classes.push('patterned-field');
32041
32193
  this.element.content.push(newMemberElement);
32194
+ // consume: release processed generic subtree
32195
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
32042
32196
  } else if (!this.ignoredFields.includes(keyValue)) {
32043
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
32197
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
32044
32198
  }
32045
32199
  });
32046
32200
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -32903,6 +33057,7 @@ class ComponentsVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_2__.BaseFixe
32903
33057
  this.element = new _elements_Components_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]();
32904
33058
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'Components']);
32905
33059
  this.canSupportSpecificationExtensions = true;
33060
+ this.consumeSafe = true;
32906
33061
  }
32907
33062
  }
32908
33063
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ComponentsVisitor);
@@ -33341,6 +33496,7 @@ class OpenApi3_0Visitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_1__.BaseFixe
33341
33496
  this.element = new _elements_OpenApi3_0_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]();
33342
33497
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'OpenApi']);
33343
33498
  this.canSupportSpecificationExtensions = true;
33499
+ this.consumeSafe = true;
33344
33500
  }
33345
33501
  ObjectElement(path) {
33346
33502
  _bases_mjs__WEBPACK_IMPORTED_MODULE_1__.BaseFixedFieldsVisitor.prototype.ObjectElement.call(this, path);
@@ -34231,11 +34387,10 @@ __webpack_require__.r(__webpack_exports__);
34231
34387
  /* harmony export */ });
34232
34388
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29498);
34233
34389
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25162);
34234
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12111);
34235
- /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(44673);
34236
- /* harmony import */ var _elements_PathItem_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(98557);
34237
- /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(32131);
34238
- /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(74367);
34390
+ /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44673);
34391
+ /* harmony import */ var _elements_PathItem_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(98557);
34392
+ /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32131);
34393
+ /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(74367);
34239
34394
 
34240
34395
 
34241
34396
 
@@ -34248,22 +34403,21 @@ __webpack_require__.r(__webpack_exports__);
34248
34403
  /**
34249
34404
  * @public
34250
34405
  */
34251
- class PathItemVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_6__.BaseFixedFieldsVisitor {
34406
+ class PathItemVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_5__.BaseFixedFieldsVisitor {
34252
34407
  constructor(options) {
34253
34408
  super(options);
34254
- this.element = new _elements_PathItem_mjs__WEBPACK_IMPORTED_MODULE_4__["default"]();
34409
+ this.element = new _elements_PathItem_mjs__WEBPACK_IMPORTED_MODULE_3__["default"]();
34255
34410
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'PathItem']);
34411
+ this.consumeSafe = true;
34256
34412
  }
34257
34413
  ObjectElement(path) {
34258
- _bases_mjs__WEBPACK_IMPORTED_MODULE_6__.BaseFixedFieldsVisitor.prototype.ObjectElement.call(this, path);
34414
+ _bases_mjs__WEBPACK_IMPORTED_MODULE_5__.BaseFixedFieldsVisitor.prototype.ObjectElement.call(this, path);
34259
34415
 
34260
34416
  // decorate Operation elements with HTTP method
34261
- this.element.filter(_predicates_mjs__WEBPACK_IMPORTED_MODULE_5__.isOperationElement)
34417
+ this.element.filter(_predicates_mjs__WEBPACK_IMPORTED_MODULE_4__.isOperationElement)
34262
34418
  // @ts-ignore
34263
34419
  .forEach((operationElement, httpMethodElementCI) => {
34264
- const httpMethodElementCS = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__.cloneDeep)(httpMethodElementCI);
34265
- httpMethodElementCS.content = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(httpMethodElementCS).toUpperCase();
34266
- operationElement.meta.set('http-method', httpMethodElementCS);
34420
+ operationElement.meta.set('http-method', (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(httpMethodElementCI).toUpperCase());
34267
34421
  });
34268
34422
 
34269
34423
  // mark this PathItemElement with reference metadata
@@ -34286,7 +34440,7 @@ __webpack_require__.r(__webpack_exports__);
34286
34440
  /* harmony export */ });
34287
34441
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(53679);
34288
34442
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29498);
34289
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12111);
34443
+ /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44673);
34290
34444
  /* harmony import */ var _elements_Paths_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8535);
34291
34445
  /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32131);
34292
34446
  /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(74367);
@@ -34307,6 +34461,7 @@ class PathsVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_5__.BasePatterned
34307
34461
  this.element = new _elements_Paths_mjs__WEBPACK_IMPORTED_MODULE_3__["default"]();
34308
34462
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_1__["default"])(['document', 'objects', 'PathItem']);
34309
34463
  this.canSupportSpecificationExtensions = true;
34464
+ this.consumeSafe = true;
34310
34465
  this.fieldPatternPredicate = ramda__WEBPACK_IMPORTED_MODULE_0__["default"];
34311
34466
  }
34312
34467
  ObjectElement(path) {
@@ -34318,7 +34473,7 @@ class PathsVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_5__.BasePatterned
34318
34473
  .forEach((pathItemElement, key) => {
34319
34474
  key.classes.push('openapi-path-template');
34320
34475
  key.classes.push('path-template');
34321
- pathItemElement.meta.set('path', (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__.cloneDeep)(key));
34476
+ pathItemElement.meta.set('path', (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(key));
34322
34477
  });
34323
34478
  }
34324
34479
  }
@@ -36618,7 +36773,8 @@ __webpack_require__.r(__webpack_exports__);
36618
36773
  const refract = (value, {
36619
36774
  element = 'openApi3_1',
36620
36775
  plugins = [],
36621
- specificationObj = _specification_mjs__WEBPACK_IMPORTED_MODULE_5__["default"]
36776
+ specificationObj = _specification_mjs__WEBPACK_IMPORTED_MODULE_5__["default"],
36777
+ consume = false
36622
36778
  } = {}) => {
36623
36779
  const genericElement = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__.refract)(value);
36624
36780
  const resolvedSpec = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_1__.resolveSpecification)(specificationObj);
@@ -36635,7 +36791,8 @@ const refract = (value, {
36635
36791
  */
36636
36792
  const RootVisitorClass = (0,ramda__WEBPACK_IMPORTED_MODULE_4__["default"])(specPath, resolvedSpec);
36637
36793
  const rootVisitor = new RootVisitorClass({
36638
- specObj: resolvedSpec
36794
+ specObj: resolvedSpec,
36795
+ consume
36639
36796
  });
36640
36797
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_3__.traverse)(genericElement, rootVisitor, {
36641
36798
  nodeTypeGetter: _speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_3__.getNodePrimitiveType
@@ -38157,9 +38314,13 @@ __webpack_require__.r(__webpack_exports__);
38157
38314
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
38158
38315
  /* harmony export */ });
38159
38316
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29498);
38160
- /* harmony import */ var _speclynx_apidom_ns_openapi_3_0__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58368);
38161
- /* harmony import */ var _elements_OpenApi3_1_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(81793);
38162
- /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(43027);
38317
+ /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(25162);
38318
+ /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44673);
38319
+ /* harmony import */ var _speclynx_apidom_ns_openapi_3_0__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(58368);
38320
+ /* harmony import */ var _elements_OpenApi3_1_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(81793);
38321
+ /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43027);
38322
+
38323
+
38163
38324
 
38164
38325
 
38165
38326
 
@@ -38171,18 +38332,25 @@ __webpack_require__.r(__webpack_exports__);
38171
38332
  * @public
38172
38333
  */
38173
38334
 
38174
- class OpenApi3_1Visitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_3__.BaseFixedFieldsVisitor {
38335
+ class OpenApi3_1Visitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_5__.BaseFixedFieldsVisitor {
38175
38336
  constructor(options) {
38176
38337
  super(options);
38177
- this.element = new _elements_OpenApi3_1_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]();
38338
+ this.element = new _elements_OpenApi3_1_mjs__WEBPACK_IMPORTED_MODULE_4__["default"]();
38178
38339
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'OpenApi']);
38179
38340
  this.canSupportSpecificationExtensions = true;
38341
+ this.consumeSafe = true;
38180
38342
  this.openApiSemanticElement = this.element;
38181
38343
  }
38182
38344
  ObjectElement(path) {
38183
38345
  const objectElement = path.node;
38184
38346
  this.openApiGenericElement = objectElement;
38185
- _speclynx_apidom_ns_openapi_3_0__WEBPACK_IMPORTED_MODULE_1__["default"].prototype.ObjectElement.call(this, path);
38347
+ // precompute values from generic root before consume may release fields
38348
+ if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.isStringElement)(objectElement.get('jsonSchemaDialect'))) {
38349
+ this.sourceContext = {
38350
+ jsonSchemaDialect: (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(objectElement.get('jsonSchemaDialect'))
38351
+ };
38352
+ }
38353
+ _speclynx_apidom_ns_openapi_3_0__WEBPACK_IMPORTED_MODULE_3__["default"].prototype.ObjectElement.call(this, path);
38186
38354
  }
38187
38355
  }
38188
38356
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OpenApi3_1Visitor);
@@ -38870,8 +39038,8 @@ class SchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_8__.BaseSchemaVi
38870
39038
  (0,_predicates_mjs__WEBPACK_IMPORTED_MODULE_5__.isJsonSchemaDialectElement)(this.openApiSemanticElement.jsonSchemaDialect)) {
38871
39039
  // @ts-ignore
38872
39040
  jsonSchemaDialect = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(this.openApiSemanticElement.jsonSchemaDialect);
38873
- } else if (this.openApiGenericElement !== undefined && (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.isStringElement)(this.openApiGenericElement.get('jsonSchemaDialect'))) {
38874
- jsonSchemaDialect = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(this.openApiGenericElement.get('jsonSchemaDialect'));
39041
+ } else if (this.sourceContext?.jsonSchemaDialect !== undefined) {
39042
+ jsonSchemaDialect = this.sourceContext.jsonSchemaDialect;
38875
39043
  } else {
38876
39044
  jsonSchemaDialect = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_2__["default"])(this.jsonSchemaDefaultDialect);
38877
39045
  }
@@ -39218,8 +39386,9 @@ const parse = async source => {
39218
39386
  if (source.trim().length === 0) {
39219
39387
  return parseResult;
39220
39388
  }
39221
- const pojo = JSON.parse(source);
39389
+ let pojo = JSON.parse(source);
39222
39390
  const element = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.refract)(pojo);
39391
+ pojo = null; // allow GC to reclaim POJO
39223
39392
  element.classes.push('result');
39224
39393
  parseResult.push(element);
39225
39394
  return parseResult;
@@ -41193,7 +41362,10 @@ const parse = async (source, options = {}) => {
41193
41362
  result
41194
41363
  } = parseResultElement;
41195
41364
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_2__["default"])(result)) {
41196
- const openApiElement = (0,_speclynx_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__.refractOpenApi3_1)(result, refractorOpts);
41365
+ const openApiElement = (0,_speclynx_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__.refractOpenApi3_1)(result, {
41366
+ consume: true,
41367
+ ...refractorOpts
41368
+ });
41197
41369
  openApiElement.classes.push('result');
41198
41370
  parseResultElement.replaceResult(openApiElement);
41199
41371
  }