@speclynx/apidom-ns-openapi-2 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.
@@ -2473,7 +2473,8 @@ __webpack_require__.r(__webpack_exports__);
2473
2473
  const refract = (value, {
2474
2474
  element = 'swagger',
2475
2475
  plugins = [],
2476
- specificationObj = _specification_ts__WEBPACK_IMPORTED_MODULE_5__["default"]
2476
+ specificationObj = _specification_ts__WEBPACK_IMPORTED_MODULE_5__["default"],
2477
+ consume = false
2477
2478
  } = {}) => {
2478
2479
  const genericElement = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__.refract)(value);
2479
2480
  const resolvedSpec = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_1__.resolveSpecification)(specificationObj);
@@ -2490,7 +2491,8 @@ const refract = (value, {
2490
2491
  */
2491
2492
  const RootVisitorClass = (0,ramda__WEBPACK_IMPORTED_MODULE_4__["default"])(specPath, resolvedSpec);
2492
2493
  const rootVisitor = new RootVisitorClass({
2493
- specObj: resolvedSpec
2494
+ specObj: resolvedSpec,
2495
+ consume
2494
2496
  });
2495
2497
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_3__.traverse)(genericElement, rootVisitor);
2496
2498
 
@@ -3112,8 +3114,9 @@ const schema = {
3112
3114
  }
3113
3115
  };
3114
3116
  const findElementFactory = (ancestor, keyName) => {
3115
- const elementType = (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_8__.getNodeType)(ancestor); // @ts-ignore
3116
- const keyMapping = schema[elementType] || schema[(0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(ancestor.classes.first)];
3117
+ const elementType = (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_8__.getNodeType)(ancestor);
3118
+ const classType = ancestor.isMetaEmpty ? undefined : ancestor.classes.at(0); // @ts-ignore
3119
+ const keyMapping = schema[elementType] || schema[classType];
3117
3120
  return typeof keyMapping === 'undefined' ? undefined : Object.hasOwn(keyMapping, '[key: *]') ? keyMapping['[key: *]'] : keyMapping[keyName];
3118
3121
  };
3119
3122
 
@@ -3143,7 +3146,7 @@ const plugin = () => () => ({
3143
3146
  if (typeof elementFactory !== 'function') return;
3144
3147
  const replacement = elementFactory.call({
3145
3148
  context
3146
- }, undefined, (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.meta), (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.attributes));
3149
+ }, undefined, element.isMetaEmpty ? undefined : element.meta.cloneDeep(), element.isAttributesEmpty ? undefined : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.attributes));
3147
3150
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_5__["default"].transfer(element, replacement);
3148
3151
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_6__["default"].transfer(element, replacement);
3149
3152
  path.replaceWith(replacement);
@@ -3828,7 +3831,7 @@ __webpack_require__.r(__webpack_exports__);
3828
3831
  */
3829
3832
  class FallbackVisitor extends _Visitor_ts__WEBPACK_IMPORTED_MODULE_1__["default"] {
3830
3833
  enter(path) {
3831
- this.element = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
3834
+ this.element = this.consume ? path.node : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
3832
3835
  path.stop();
3833
3836
  }
3834
3837
  }
@@ -3894,7 +3897,7 @@ __webpack_require__.r(__webpack_exports__);
3894
3897
  */
3895
3898
  class SpecificationVisitor extends _Visitor_ts__WEBPACK_IMPORTED_MODULE_6__["default"] {
3896
3899
  specObj;
3897
- passingOptionsNames = ['specObj'];
3900
+ passingOptionsNames = ['specObj', 'consume'];
3898
3901
  constructor({
3899
3902
  specObj,
3900
3903
  ...rest
@@ -3940,7 +3943,7 @@ class SpecificationVisitor extends _Visitor_ts__WEBPACK_IMPORTED_MODULE_6__["def
3940
3943
  */
3941
3944
  const visitor = this.retrieveVisitorInstance(specPath, options);
3942
3945
  if (visitor instanceof _FallbackVisitor_ts__WEBPACK_IMPORTED_MODULE_7__["default"] && visitor?.constructor === _FallbackVisitor_ts__WEBPACK_IMPORTED_MODULE_7__["default"]) {
3943
- return (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
3946
+ return this.consume ? element : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
3944
3947
  }
3945
3948
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_5__.traverse)(element, visitor);
3946
3949
  return visitor.element;
@@ -3958,7 +3961,7 @@ __webpack_require__.r(__webpack_exports__);
3958
3961
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
3959
3962
  /* harmony export */ });
3960
3963
  /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8400);
3961
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7071);
3964
+ /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2111);
3962
3965
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5810);
3963
3966
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9686);
3964
3967
 
@@ -3973,19 +3976,21 @@ __webpack_require__.r(__webpack_exports__);
3973
3976
  */
3974
3977
  class Visitor {
3975
3978
  element;
3979
+ consume = false;
3980
+ consumeSafe = false;
3976
3981
  constructor(options = {}) {
3977
3982
  Object.assign(this, options);
3978
3983
  }
3979
3984
  copyMetaAndAttributes(from, to) {
3980
- if (!from.isMetaEmpty || !to.isMetaEmpty) {
3981
- const target = to.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.meta;
3982
- const source = from.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.meta;
3983
- to.meta = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
3985
+ if (!from.isMetaEmpty && !to.isMetaEmpty) {
3986
+ to.meta = to.meta.merge(from.meta);
3987
+ } else if (!from.isMetaEmpty) {
3988
+ to.meta = from.meta.cloneDeep();
3984
3989
  }
3985
- if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
3986
- const target = to.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.attributes;
3987
- const source = from.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.attributes;
3988
- to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
3990
+ if (!from.isAttributesEmpty && !to.isAttributesEmpty) {
3991
+ to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(to.attributes, from.attributes);
3992
+ } else if (!from.isAttributesEmpty) {
3993
+ to.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(from.attributes);
3989
3994
  }
3990
3995
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"].transfer(from, to);
3991
3996
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__["default"].transfer(from, to);
@@ -4111,15 +4116,18 @@ class FixedFieldsVisitor extends _SpecificationVisitor_ts__WEBPACK_IMPORTED_MODU
4111
4116
  const keyValue = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(key);
4112
4117
  if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.isStringElement)(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
4113
4118
  const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
4114
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
4119
+ 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);
4115
4120
  this.copyMetaAndAttributes(memberElement, newMemberElement);
4116
- newMemberElement.classes.push('fixed-field');
4117
4121
  this.element.content.push(newMemberElement);
4122
+ // consume: release processed generic subtree
4123
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
4118
4124
  } else if (this.canSupportSpecificationExtensions && this.specificationExtensionPredicate(memberElement)) {
4119
4125
  const extensionElement = this.toRefractedElement(['document', 'extension'], memberElement);
4120
4126
  this.element.content.push(extensionElement);
4127
+ // consume: release processed generic subtree
4128
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
4121
4129
  } else if (!this.ignoredFields.includes(keyValue)) {
4122
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
4130
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
4123
4131
  }
4124
4132
  });
4125
4133
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -4304,12 +4312,14 @@ class PatternedFieldsVisitor extends _SpecificationVisitor_ts__WEBPACK_IMPORTED_
4304
4312
  } else if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
4305
4313
  const specPath = this.specPath(value);
4306
4314
  const patternedFieldElement = this.toRefractedElement(specPath, value);
4307
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
4315
+ 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);
4308
4316
  this.copyMetaAndAttributes(memberElement, newMemberElement);
4309
4317
  newMemberElement.classes.push('patterned-field');
4310
4318
  this.element.content.push(newMemberElement);
4319
+ // consume: release processed generic subtree
4320
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
4311
4321
  } else if (!this.ignoredFields.includes(keyValue)) {
4312
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
4322
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
4313
4323
  }
4314
4324
  });
4315
4325
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -4845,6 +4855,7 @@ class SwaggerVisitor extends _bases_ts__WEBPACK_IMPORTED_MODULE_2__.BaseFixedFie
4845
4855
  constructor(options) {
4846
4856
  super(options);
4847
4857
  this.element = new _elements_Swagger_ts__WEBPACK_IMPORTED_MODULE_1__["default"]();
4858
+ this.consumeSafe = true;
4848
4859
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'Swagger']);
4849
4860
  this.canSupportSpecificationExtensions = true;
4850
4861
  }
@@ -5333,6 +5344,7 @@ class PathItemVisitor extends _bases_ts__WEBPACK_IMPORTED_MODULE_6__.BaseFixedFi
5333
5344
  constructor(options) {
5334
5345
  super(options);
5335
5346
  this.element = new _elements_PathItem_ts__WEBPACK_IMPORTED_MODULE_4__["default"]();
5347
+ this.consumeSafe = true;
5336
5348
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'PathItem']);
5337
5349
  }
5338
5350
  ObjectElement(path) {
@@ -5383,6 +5395,7 @@ class PathsVisitor extends _bases_ts__WEBPACK_IMPORTED_MODULE_5__.BasePatternedF
5383
5395
  constructor(options) {
5384
5396
  super(options);
5385
5397
  this.element = new _elements_Paths_ts__WEBPACK_IMPORTED_MODULE_3__["default"]();
5398
+ this.consumeSafe = true;
5386
5399
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_1__["default"])(['document', 'objects', 'PathItem']);
5387
5400
  this.canSupportSpecificationExtensions = true;
5388
5401
  this.fieldPatternPredicate = ramda__WEBPACK_IMPORTED_MODULE_0__["default"];
@@ -21652,7 +21665,7 @@ __webpack_require__.r(__webpack_exports__);
21652
21665
  * @public
21653
21666
  */
21654
21667
  const emptyElement = element => {
21655
- const meta = !element.isMetaEmpty ? (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.meta) : undefined;
21668
+ const meta = !element.isMetaEmpty ? element.meta.cloneDeep() : undefined;
21656
21669
  const attributes = !element.isAttributesEmpty ? (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(element.attributes) : undefined;
21657
21670
 
21658
21671
  // @ts-ignore
@@ -21668,7 +21681,7 @@ const getMergeFunction = (keyElement, options) => {
21668
21681
  };
21669
21682
  const getMetaMergeFunction = options => {
21670
21683
  if (typeof options.customMetaMerge !== 'function') {
21671
- return targetMeta => (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(targetMeta);
21684
+ return targetMeta => targetMeta.cloneDeep();
21672
21685
  }
21673
21686
  return options.customMetaMerge;
21674
21687
  };
@@ -21740,8 +21753,20 @@ const deepmerge = (targetElement, sourceElement, options) => {
21740
21753
  const mergedElement = sourceIsArrayElement && typeof mergedOptions.arrayElementMerge === 'function' ? mergedOptions.arrayElementMerge(targetElement, sourceElement, mergedOptions) : mergedOptions.objectElementMerge(targetElement, sourceElement, mergedOptions);
21741
21754
 
21742
21755
  // merging meta & attributes
21743
- mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
21744
- mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
21756
+ if (!targetElement.isMetaEmpty && !sourceElement.isMetaEmpty) {
21757
+ mergedElement.meta = getMetaMergeFunction(mergedOptions)(targetElement.meta, sourceElement.meta);
21758
+ } else if (!targetElement.isMetaEmpty) {
21759
+ mergedElement.meta = targetElement.meta.cloneDeep();
21760
+ } else if (!sourceElement.isMetaEmpty) {
21761
+ mergedElement.meta = sourceElement.meta.cloneDeep();
21762
+ }
21763
+ if (!targetElement.isAttributesEmpty && !sourceElement.isAttributesEmpty) {
21764
+ mergedElement.attributes = getAttributesMergeFunction(mergedOptions)(targetElement.attributes, sourceElement.attributes);
21765
+ } else if (!targetElement.isAttributesEmpty) {
21766
+ mergedElement.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(targetElement.attributes);
21767
+ } else if (!sourceElement.isAttributesEmpty) {
21768
+ mergedElement.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(sourceElement.attributes);
21769
+ }
21745
21770
  return mergedElement;
21746
21771
  };
21747
21772
  deepmerge.all = (list, options) => {
@@ -22074,6 +22099,104 @@ class KeyValuePair {
22074
22099
 
22075
22100
  /***/ },
22076
22101
 
22102
+ /***/ 1844
22103
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
22104
+
22105
+ __webpack_require__.r(__webpack_exports__);
22106
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22107
+ /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
22108
+ /* harmony export */ });
22109
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8138);
22110
+
22111
+ /**
22112
+ * Lightweight meta container for Element metadata.
22113
+ *
22114
+ * Data is stored as own properties on the instance; methods live on the prototype.
22115
+ * `Object.keys()`, `Object.entries()`, etc. only see data properties.
22116
+ *
22117
+ * @public
22118
+ */
22119
+ class Metadata {
22120
+ // Set via prototype assignment in registration.ts to avoid circular dependency
22121
+
22122
+ get(name) {
22123
+ return this[name];
22124
+ }
22125
+ set(name, value) {
22126
+ this[name] = value;
22127
+ }
22128
+ hasKey(name) {
22129
+ return Object.hasOwn(this, name);
22130
+ }
22131
+ keys() {
22132
+ return Object.keys(this);
22133
+ }
22134
+ remove(name) {
22135
+ delete this[name];
22136
+ }
22137
+ get isEmpty() {
22138
+ return Object.keys(this).length === 0;
22139
+ }
22140
+ get isFrozen() {
22141
+ return Object.isFrozen(this);
22142
+ }
22143
+ freeze() {
22144
+ for (const value of Object.values(this)) {
22145
+ if (value instanceof this.Element) {
22146
+ value.freeze();
22147
+ } else if (Array.isArray(value) || value !== null && typeof value === 'object') {
22148
+ Object.freeze(value);
22149
+ }
22150
+ }
22151
+ Object.freeze(this);
22152
+ }
22153
+
22154
+ /**
22155
+ * Creates a shallow clone. Same references, new container.
22156
+ */
22157
+ cloneShallow() {
22158
+ const clone = new Metadata();
22159
+ Object.assign(clone, this);
22160
+ return clone;
22161
+ }
22162
+
22163
+ /**
22164
+ * Merges another Metadata into a new instance.
22165
+ * Arrays are concatenated, all other values are overwritten by source.
22166
+ */
22167
+ merge(source) {
22168
+ const result = this.cloneShallow();
22169
+ for (const [key, value] of Object.entries(source)) {
22170
+ const existing = result.get(key);
22171
+ if (Array.isArray(existing) && Array.isArray(value)) {
22172
+ result.set(key, [...existing, ...value]);
22173
+ } else {
22174
+ result.set(key, value);
22175
+ }
22176
+ }
22177
+ return result;
22178
+ }
22179
+
22180
+ /**
22181
+ * Creates a deep clone. Elements are deep cloned,
22182
+ * all other values are deep cloned via ramda clone.
22183
+ */
22184
+ cloneDeep() {
22185
+ const copy = new Metadata();
22186
+ for (const [key, value] of Object.entries(this)) {
22187
+ if (value instanceof this.Element) {
22188
+ copy.set(key, this.cloneDeepElement(value));
22189
+ } else {
22190
+ copy.set(key, (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(value));
22191
+ }
22192
+ }
22193
+ return copy;
22194
+ }
22195
+ }
22196
+ /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Metadata);
22197
+
22198
+ /***/ },
22199
+
22077
22200
  /***/ 5156
22078
22201
  (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
22079
22202
 
@@ -22714,7 +22837,7 @@ const cloneShallowElement = element => {
22714
22837
  const copy = new Ctor();
22715
22838
  copy.element = element.element;
22716
22839
  if (!element.isMetaEmpty) {
22717
- copy.meta = cloneDeep(element.meta);
22840
+ copy.meta = element.meta.cloneDeep();
22718
22841
  }
22719
22842
  if (!element.isAttributesEmpty) {
22720
22843
  copy.attributes = cloneDeep(element.attributes);
@@ -22742,8 +22865,8 @@ const cloneShallowElement = element => {
22742
22865
 
22743
22866
  /**
22744
22867
  * Creates a shallow clone of an ApiDOM Element, KeyValuePair, or ObjectSlice.
22745
- * The element itself is cloned, but content references are shared (except for
22746
- * meta and attributes which are deep cloned to preserve semantic information).
22868
+ * The element itself is cloned, but content references are shared.
22869
+ * Meta and attributes are deep cloned to preserve semantic information.
22747
22870
  * @public
22748
22871
  */
22749
22872
  const cloneShallow = value => {
@@ -23805,7 +23928,7 @@ class CollectionElement extends _Element_mjs__WEBPACK_IMPORTED_MODULE_0__["defau
23805
23928
  * Search the tree recursively and find the element with the matching ID.
23806
23929
  */
23807
23930
  getById(id) {
23808
- return this.find(item => item.id.toValue() === id).first;
23931
+ return this.find(item => item.id === id).first;
23809
23932
  }
23810
23933
 
23811
23934
  /**
@@ -23834,18 +23957,24 @@ class CollectionElement extends _Element_mjs__WEBPACK_IMPORTED_MODULE_0__["defau
23834
23957
 
23835
23958
  __webpack_require__.r(__webpack_exports__);
23836
23959
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
23960
+ /* harmony export */ Metadata: () => (/* reexport safe */ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]),
23837
23961
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
23838
23962
  /* harmony export */ });
23839
23963
  /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3654);
23840
- /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6663);
23841
- /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(8504);
23964
+ /* harmony import */ var _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1844);
23965
+ /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6663);
23966
+ /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8504);
23967
+
23842
23968
 
23843
23969
 
23970
+ // shared singleton for frozen elements with no meta — avoids allocation on every access
23971
+ const FROZEN_EMPTY_METADATA = Object.freeze(new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]());
23844
23972
 
23845
23973
  /**
23846
23974
  * Valid content types for an Element.
23847
23975
  * @public
23848
23976
  */
23977
+
23849
23978
  /**
23850
23979
  * Base Element class that all ApiDOM elements extend.
23851
23980
  *
@@ -23943,7 +24072,7 @@ class Element {
23943
24072
  _attributes;
23944
24073
 
23945
24074
  // ============================================================
23946
- // Prototype-assigned properties (set in elements.ts)
24075
+ // Prototype-assigned properties (set in registration.ts)
23947
24076
  // Using 'declare' allows TypeScript to know about these
23948
24077
  // without generating runtime code.
23949
24078
  // ============================================================
@@ -24004,13 +24133,13 @@ class Element {
24004
24133
  }
24005
24134
 
24006
24135
  // KeyValuePair
24007
- if (value instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
24136
+ if (value instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
24008
24137
  this._content = value;
24009
24138
  return;
24010
24139
  }
24011
24140
 
24012
24141
  // ObjectSlice - extract elements array
24013
- if (value instanceof _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
24142
+ if (value instanceof _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_3__["default"]) {
24014
24143
  this._content = value.elements;
24015
24144
  return;
24016
24145
  }
@@ -24031,24 +24160,22 @@ class Element {
24031
24160
 
24032
24161
  /**
24033
24162
  * Metadata about this element (id, classes, title, description, links).
24034
- * Lazily creates an ObjectElement if not set.
24163
+ * Lazily creates a Metadata instance if not set.
24035
24164
  */
24036
24165
  get meta() {
24037
24166
  if (!this._meta) {
24038
- if (this.isFrozen) {
24039
- const meta = new this.ObjectElement();
24040
- meta.freeze();
24041
- return meta;
24042
- }
24043
- this._meta = new this.ObjectElement();
24167
+ if (this.isFrozen) return FROZEN_EMPTY_METADATA;
24168
+ this._meta = new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]();
24044
24169
  }
24045
24170
  return this._meta;
24046
24171
  }
24047
24172
  set meta(value) {
24048
- if (value instanceof Element) {
24173
+ if (value instanceof _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
24049
24174
  this._meta = value;
24050
- } else {
24051
- this.meta.set(value ?? {});
24175
+ } else if (value && typeof value === 'object') {
24176
+ const meta = new _Metadata_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]();
24177
+ Object.assign(meta, value);
24178
+ this._meta = meta;
24052
24179
  }
24053
24180
  }
24054
24181
 
@@ -24081,10 +24208,8 @@ class Element {
24081
24208
 
24082
24209
  /** Unique identifier for this element. */
24083
24210
  get id() {
24084
- if (this.isFrozen) {
24085
- return this.getMetaProperty('id', '');
24086
- }
24087
24211
  if (!this.hasMetaProperty('id')) {
24212
+ if (this.isFrozen) return '';
24088
24213
  this.setMetaProperty('id', '');
24089
24214
  }
24090
24215
  return this.meta.get('id');
@@ -24095,10 +24220,8 @@ class Element {
24095
24220
 
24096
24221
  /** CSS-like class names. */
24097
24222
  get classes() {
24098
- if (this.isFrozen) {
24099
- return this.getMetaProperty('classes', []);
24100
- }
24101
24223
  if (!this.hasMetaProperty('classes')) {
24224
+ if (this.isFrozen) return [];
24102
24225
  this.setMetaProperty('classes', []);
24103
24226
  }
24104
24227
  return this.meta.get('classes');
@@ -24109,11 +24232,13 @@ class Element {
24109
24232
 
24110
24233
  /** Hyperlinks associated with this element. */
24111
24234
  get links() {
24112
- if (this.isFrozen) {
24113
- return this.getMetaProperty('links', []);
24114
- }
24115
24235
  if (!this.hasMetaProperty('links')) {
24116
- this.setMetaProperty('links', []);
24236
+ if (this.isFrozen) {
24237
+ const empty = new this.ArrayElement();
24238
+ empty.freeze();
24239
+ return empty;
24240
+ }
24241
+ this.setMetaProperty('links', new this.ArrayElement());
24117
24242
  }
24118
24243
  return this.meta.get('links');
24119
24244
  }
@@ -24133,7 +24258,7 @@ class Element {
24133
24258
  if (Array.isArray(content)) {
24134
24259
  return content;
24135
24260
  }
24136
- if (content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
24261
+ if (content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
24137
24262
  const children = [];
24138
24263
  if (content.key) children.push(content.key);
24139
24264
  if (content.value) children.push(content.value);
@@ -24163,7 +24288,6 @@ class Element {
24163
24288
 
24164
24289
  // Freeze meta and attributes
24165
24290
  if (this._meta) {
24166
- this._meta.parent = this;
24167
24291
  this._meta.freeze();
24168
24292
  }
24169
24293
  if (this._attributes) {
@@ -24198,7 +24322,7 @@ class Element {
24198
24322
  if (_content instanceof Element) {
24199
24323
  return _content.toValue();
24200
24324
  }
24201
- if (_content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_1__["default"]) {
24325
+ if (_content instanceof _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]) {
24202
24326
  return _content.toValue();
24203
24327
  }
24204
24328
  if (Array.isArray(_content)) {
@@ -24254,7 +24378,7 @@ class Element {
24254
24378
  * @throws Error if this element has no ID
24255
24379
  */
24256
24380
  toRef(path) {
24257
- const idValue = this.id.toValue();
24381
+ const idValue = this.id;
24258
24382
  if (idValue === '') {
24259
24383
  throw new Error('Cannot create reference to an element without an ID');
24260
24384
  }
@@ -24266,26 +24390,16 @@ class Element {
24266
24390
  }
24267
24391
 
24268
24392
  /**
24269
- * Gets a meta property.
24393
+ * Gets a meta property value.
24270
24394
  *
24271
24395
  * When the property doesn't exist:
24272
- * - With defaultValue: returns a new refracted element instance (not cached)
24396
+ * - With defaultValue: returns the provided default value
24273
24397
  * - Without defaultValue: returns undefined
24274
- *
24275
- * Note: Each call with a default creates a new instance. Use setMetaProperty
24276
- * first if you need reference equality across multiple accesses.
24277
24398
  */
24278
24399
 
24279
24400
  getMetaProperty(name, defaultValue) {
24280
24401
  if (!this.hasMetaProperty(name)) {
24281
- if (defaultValue === undefined) {
24282
- return undefined;
24283
- }
24284
- const element = this.refract(defaultValue);
24285
- if (element && this.isFrozen) {
24286
- element.freeze();
24287
- }
24288
- return element;
24402
+ return defaultValue;
24289
24403
  }
24290
24404
  return this.meta.get(name);
24291
24405
  }
@@ -24298,20 +24412,17 @@ class Element {
24298
24412
  }
24299
24413
 
24300
24414
  /**
24301
- * Has meta property.
24415
+ * Checks whether a meta property exists.
24302
24416
  */
24303
24417
  hasMetaProperty(name) {
24304
- if (!this.isMetaEmpty) {
24305
- return this.meta.hasKey(name);
24306
- }
24307
- return false;
24418
+ return this._meta !== undefined && this._meta.hasKey(name);
24308
24419
  }
24309
24420
 
24310
24421
  /**
24311
24422
  * Checks if meta is empty.
24312
24423
  */
24313
24424
  get isMetaEmpty() {
24314
- return this._meta === undefined || this.meta.isEmpty;
24425
+ return this._meta === undefined || this._meta.isEmpty;
24315
24426
  }
24316
24427
 
24317
24428
  /**
@@ -24337,7 +24448,7 @@ class Element {
24337
24448
  }
24338
24449
 
24339
24450
  /**
24340
- * Has attributes property.
24451
+ * Checks whether an attributes property exists.
24341
24452
  */
24342
24453
  hasAttributesProperty(name) {
24343
24454
  if (!this.isAttributesEmpty) {
@@ -24356,6 +24467,7 @@ class Element {
24356
24467
 
24357
24468
  // Re-export types for convenience
24358
24469
 
24470
+
24359
24471
  /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Element);
24360
24472
 
24361
24473
  /***/ },
@@ -24788,6 +24900,10 @@ __webpack_require__.r(__webpack_exports__);
24788
24900
  /* harmony import */ var _elements_Style_mjs__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(9686);
24789
24901
  /* harmony import */ var _ObjectSlice_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(8504);
24790
24902
  /* harmony import */ var _KeyValuePair_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(6663);
24903
+ /* harmony import */ var _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(1844);
24904
+ /* harmony import */ var _clone_index_mjs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(2111);
24905
+
24906
+
24791
24907
 
24792
24908
 
24793
24909
 
@@ -24847,14 +24963,16 @@ function refract(value) {
24847
24963
  }
24848
24964
 
24849
24965
  // Set up prototype assignments for circular dependency resolution.
24850
- // These allow Element instances to create ObjectElement, MemberElement, RefElement
24851
- // without importing them directly (which would cause circular imports).
24966
+ // These allow Element and Metadata instances to reference classes they can't import
24967
+ // directly (which would cause circular imports).
24852
24968
  // Using 'declare' in the class definitions enables type-safe access to these properties.
24853
24969
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ObjectElement = _primitives_ObjectElement_mjs__WEBPACK_IMPORTED_MODULE_8__["default"];
24854
24970
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.ArrayElement = _primitives_ArrayElement_mjs__WEBPACK_IMPORTED_MODULE_6__["default"];
24855
24971
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.RefElement = _elements_RefElement_mjs__WEBPACK_IMPORTED_MODULE_10__["default"];
24856
24972
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.MemberElement = _primitives_MemberElement_mjs__WEBPACK_IMPORTED_MODULE_7__["default"];
24857
24973
  _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"].prototype.refract = refract;
24974
+ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.Element = _primitives_Element_mjs__WEBPACK_IMPORTED_MODULE_0__["default"];
24975
+ _Metadata_mjs__WEBPACK_IMPORTED_MODULE_18__["default"].prototype.cloneDeepElement = element => (0,_clone_index_mjs__WEBPACK_IMPORTED_MODULE_19__.cloneDeep)(element);
24858
24976
 
24859
24977
  /**
24860
24978
  * Contains all of the element classes, and related structures and methods
@@ -24918,7 +25036,13 @@ class JSONSerialiser {
24918
25036
  element: element.element
24919
25037
  };
24920
25038
  if (!element.isMetaEmpty) {
24921
- payload.meta = this.serialiseObject(element.meta);
25039
+ const serialisedMeta = this.serialiseMeta(element);
25040
+ if (serialisedMeta) {
25041
+ payload.meta = serialisedMeta.meta;
25042
+ if (serialisedMeta.rawKeys.length > 0) {
25043
+ payload.__meta_raw__ = serialisedMeta.rawKeys;
25044
+ }
25045
+ }
24922
25046
  }
24923
25047
  if (!element.isAttributesEmpty) {
24924
25048
  payload.attributes = this.serialiseObject(element.attributes);
@@ -24965,7 +25089,7 @@ class JSONSerialiser {
24965
25089
  element.element = value.element;
24966
25090
  }
24967
25091
 
24968
- // Extract __mappings__ and __styles__ without mutating input, filter remaining meta
25092
+ // Extract special meta keys without mutating input, filter remaining meta
24969
25093
  let mappingsDoc;
24970
25094
  let stylesDoc;
24971
25095
  let metaToDeserialize = value.meta;
@@ -24979,8 +25103,15 @@ class JSONSerialiser {
24979
25103
  stylesDoc = __styles__;
24980
25104
  metaToDeserialize = Object.keys(rest).length > 0 ? rest : undefined;
24981
25105
  }
25106
+
25107
+ // determine which meta keys were raw primitives before serialization
25108
+ const rawKeys = value.__meta_raw__ ? new Set(value.__meta_raw__) : undefined;
24982
25109
  if (metaToDeserialize) {
24983
- this.deserialiseObject(metaToDeserialize, element.meta);
25110
+ for (const [key, doc] of Object.entries(metaToDeserialize)) {
25111
+ const deserialized = this.deserialise(doc);
25112
+ // unwrap keys that were raw primitives before serialization
25113
+ element.setMetaProperty(key, rawKeys?.has(key) ? deserialized.toValue() : deserialized);
25114
+ }
24984
25115
  }
24985
25116
 
24986
25117
  // Restore source position from __mappings__
@@ -25043,6 +25174,27 @@ class JSONSerialiser {
25043
25174
  }
25044
25175
  return content;
25045
25176
  }
25177
+ serialiseMeta(element) {
25178
+ const meta = {};
25179
+ const rawKeys = [];
25180
+ let hasEntries = false;
25181
+ for (const [key, value] of Object.entries(element.meta)) {
25182
+ if (value instanceof this.namespace.elements.Element) {
25183
+ meta[key] = this.serialise(value);
25184
+ hasEntries = true;
25185
+ } else if (value !== undefined) {
25186
+ // refract primitives to maintain JSON Refract spec compatibility
25187
+ const refracted = element.refract(value);
25188
+ meta[key] = this.serialise(refracted);
25189
+ rawKeys.push(key);
25190
+ hasEntries = true;
25191
+ }
25192
+ }
25193
+ return hasEntries ? {
25194
+ meta,
25195
+ rawKeys
25196
+ } : undefined;
25197
+ }
25046
25198
  serialiseObject(obj) {
25047
25199
  const result = {};
25048
25200
  obj.forEach((value, key) => {
@@ -25997,7 +26149,7 @@ __webpack_require__.r(__webpack_exports__);
25997
26149
  */
25998
26150
  class FallbackVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_1__["default"] {
25999
26151
  enter(path) {
26000
- this.element = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
26152
+ this.element = this.consume ? path.node : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.cloneDeep)(path.node);
26001
26153
  path.stop();
26002
26154
  }
26003
26155
  }
@@ -26036,7 +26188,7 @@ __webpack_require__.r(__webpack_exports__);
26036
26188
  */
26037
26189
  class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["default"] {
26038
26190
  specObj;
26039
- passingOptionsNames = ['specObj', 'parent'];
26191
+ passingOptionsNames = ['specObj', 'parent', 'consume'];
26040
26192
  constructor({
26041
26193
  specObj,
26042
26194
  ...rest
@@ -26082,7 +26234,7 @@ class SpecificationVisitor extends _Visitor_mjs__WEBPACK_IMPORTED_MODULE_6__["de
26082
26234
  */
26083
26235
  const visitor = this.retrieveVisitorInstance(specPath, options);
26084
26236
  if (visitor instanceof _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"] && visitor?.constructor === _FallbackVisitor_mjs__WEBPACK_IMPORTED_MODULE_7__["default"]) {
26085
- return (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
26237
+ return this.consume ? element : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.cloneDeep)(element);
26086
26238
  }
26087
26239
  (0,_speclynx_apidom_traverse__WEBPACK_IMPORTED_MODULE_5__.traverse)(element, visitor, options);
26088
26240
  return visitor.element;
@@ -26100,7 +26252,7 @@ __webpack_require__.r(__webpack_exports__);
26100
26252
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
26101
26253
  /* harmony export */ });
26102
26254
  /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(8400);
26103
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7071);
26255
+ /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2111);
26104
26256
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5810);
26105
26257
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9686);
26106
26258
 
@@ -26115,19 +26267,21 @@ __webpack_require__.r(__webpack_exports__);
26115
26267
  */
26116
26268
  class Visitor {
26117
26269
  element;
26270
+ consume = false;
26271
+ consumeSafe = false;
26118
26272
  constructor(options) {
26119
26273
  Object.assign(this, options);
26120
26274
  }
26121
26275
  copyMetaAndAttributes(from, to) {
26122
- if (!from.isMetaEmpty || !to.isMetaEmpty) {
26123
- const target = to.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.meta;
26124
- const source = from.isMetaEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.meta;
26125
- to.meta = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
26276
+ if (!from.isMetaEmpty && !to.isMetaEmpty) {
26277
+ to.meta = to.meta.merge(from.meta);
26278
+ } else if (!from.isMetaEmpty) {
26279
+ to.meta = from.meta.cloneDeep();
26126
26280
  }
26127
- if (!from.isAttributesEmpty || !to.isAttributesEmpty) {
26128
- const target = to.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : to.attributes;
26129
- const source = from.isAttributesEmpty ? new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__["default"]() : from.attributes;
26130
- to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(target, source);
26281
+ if (!from.isAttributesEmpty && !to.isAttributesEmpty) {
26282
+ to.attributes = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_0__["default"])(to.attributes, from.attributes);
26283
+ } else if (!from.isAttributesEmpty) {
26284
+ to.attributes = (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(from.attributes);
26131
26285
  }
26132
26286
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"].transfer(from, to);
26133
26287
  _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_3__["default"].transfer(from, to);
@@ -26235,12 +26389,13 @@ class FixedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED_MOD
26235
26389
  const keyValue = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(key);
26236
26390
  if ((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_0__.isStringElement)(key) && fields.includes(keyValue) && !this.ignoredFields.includes(keyValue)) {
26237
26391
  const fixedFieldElement = this.toRefractedElement([...specPath, 'fixedFields', keyValue], value);
26238
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), fixedFieldElement);
26392
+ 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);
26239
26393
  this.copyMetaAndAttributes(memberElement, newMemberElement);
26240
- newMemberElement.classes.push('fixed-field');
26241
26394
  this.element.content.push(newMemberElement);
26395
+ // consume: release processed generic subtree
26396
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
26242
26397
  } else if (!this.ignoredFields.includes(keyValue)) {
26243
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26398
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26244
26399
  }
26245
26400
  });
26246
26401
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -26327,12 +26482,14 @@ class PatternedFieldsVisitor extends _SpecificationVisitor_mjs__WEBPACK_IMPORTED
26327
26482
  if (!this.ignoredFields.includes(keyValue) && this.fieldPatternPredicate(keyValue)) {
26328
26483
  const specPath = this.specPath(value);
26329
26484
  const patternedFieldElement = this.toRefractedElement(specPath, value);
26330
- const newMemberElement = new _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_2__["default"]((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(key), patternedFieldElement);
26485
+ 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);
26331
26486
  this.copyMetaAndAttributes(memberElement, newMemberElement);
26332
26487
  newMemberElement.classes.push('patterned-field');
26333
26488
  this.element.content.push(newMemberElement);
26489
+ // consume: release processed generic subtree
26490
+ if (this.consume && this.consumeSafe && !memberElement.isFrozen) memberElement.value = undefined;
26334
26491
  } else if (!this.ignoredFields.includes(keyValue)) {
26335
- this.element.content.push((0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26492
+ this.element.content.push(this.consume ? memberElement : (0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_1__.cloneDeep)(memberElement));
26336
26493
  }
26337
26494
  });
26338
26495
  this.copyMetaAndAttributes(objectElement, this.element);
@@ -26874,13 +27031,11 @@ __webpack_require__.r(__webpack_exports__);
26874
27031
  /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(3031);
26875
27032
  /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6513);
26876
27033
  /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(5162);
26877
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(2111);
26878
- /* harmony import */ var _speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(7601);
26879
- /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(4673);
26880
- /* harmony import */ var _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(5320);
26881
- /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9033);
26882
- /* harmony import */ var _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(4686);
26883
- /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(6059);
27034
+ /* harmony import */ var _speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4673);
27035
+ /* harmony import */ var _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(5320);
27036
+ /* harmony import */ var _bases_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9033);
27037
+ /* harmony import */ var _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(4686);
27038
+ /* harmony import */ var _predicates_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(6059);
26884
27039
 
26885
27040
 
26886
27041
 
@@ -26895,10 +27050,11 @@ __webpack_require__.r(__webpack_exports__);
26895
27050
  /**
26896
27051
  * @public
26897
27052
  */
26898
- class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_9__.JSONSchemaVisitorBase {
27053
+ class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_7__.JSONSchemaVisitorBase {
26899
27054
  constructor(options) {
26900
27055
  super(options);
26901
- this.element = new _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_10__["default"]();
27056
+ this.element = new _elements_JSONSchema_mjs__WEBPACK_IMPORTED_MODULE_8__["default"]();
27057
+ this.consumeSafe = true;
26902
27058
  this.specPath = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(['document', 'objects', 'JSONSchema']);
26903
27059
  }
26904
27060
  get defaultDialectIdentifier() {
@@ -26911,27 +27067,27 @@ class JSONSchemaVisitor extends _bases_mjs__WEBPACK_IMPORTED_MODULE_9__.JSONSche
26911
27067
 
26912
27068
  // for further processing consider this JSONSchema Element as parent for all sub-schemas
26913
27069
  this.parent = this.element;
26914
- return _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_8__["default"].prototype.ObjectElement.call(this, path);
27070
+ return _generics_FixedFieldsVisitor_mjs__WEBPACK_IMPORTED_MODULE_6__["default"].prototype.ObjectElement.call(this, path);
26915
27071
  }
26916
27072
  handleDialectIdentifier(objectElement) {
26917
27073
  // handle $schema keyword in embedded resources
26918
27074
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_2__["default"])(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
26919
27075
  // no parent available and no $schema is defined, set default $schema
26920
27076
  this.element.meta.set('inheritedDialectIdentifier', this.defaultDialectIdentifier);
26921
- } else if ((0,_predicates_mjs__WEBPACK_IMPORTED_MODULE_11__.isJSONSchemaElement)(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
27077
+ } else if ((0,_predicates_mjs__WEBPACK_IMPORTED_MODULE_9__.isJSONSchemaElement)(this.parent) && !(0,_speclynx_apidom_datamodel__WEBPACK_IMPORTED_MODULE_4__.isStringElement)(objectElement.get('$schema'))) {
26922
27078
  // parent is available and no $schema is defined, set parent $schema
26923
- 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));
27079
+ 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));
26924
27080
  this.element.meta.set('inheritedDialectIdentifier', inheritedDialectIdentifier);
26925
27081
  }
26926
27082
  }
26927
27083
  handleSchemaIdentifier(objectElement, identifierKeyword = 'id') {
26928
27084
  // handle schema identifier in embedded resources
26929
- // fetch parent's ancestorsSchemaIdentifiers
26930
- 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"]();
27085
+ // fetch parent's ancestorsSchemaIdentifiers (stored as plain string[])
27086
+ const ancestorsSchemaIdentifiers = this.parent !== undefined ? [...(this.parent.meta.get('ancestorsSchemaIdentifiers') ?? [])] : [];
26931
27087
  // get current schema identifier
26932
- const schemaIdentifier = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(objectElement.get(identifierKeyword));
27088
+ const schemaIdentifier = (0,_speclynx_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(objectElement.get(identifierKeyword));
26933
27089
 
26934
- // remember schema identifier if it's a non-empty strings
27090
+ // remember schema identifier if it's a non-empty string
26935
27091
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_3__["default"])(schemaIdentifier)) {
26936
27092
  ancestorsSchemaIdentifiers.push(schemaIdentifier);
26937
27093
  }