swagger-client 3.26.0 → 3.26.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -655,21 +655,22 @@ function path({
655
655
  explode,
656
656
  content
657
657
  } = parameter;
658
+ if (value === undefined) return;
658
659
  if (content) {
659
660
  const effectiveMediaType = Object.keys(content)[0];
660
661
  req.url = req.url.split(`{${name}}`).join((0,_style_serializer_js__WEBPACK_IMPORTED_MODULE_0__.encodeDisallowedCharacters)((0,_content_serializer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(value, effectiveMediaType), {
661
662
  escape: true
662
663
  }));
663
- return;
664
+ } else {
665
+ const styledValue = (0,_style_serializer_js__WEBPACK_IMPORTED_MODULE_0__["default"])({
666
+ key: parameter.name,
667
+ value,
668
+ style: style || 'simple',
669
+ explode: explode || false,
670
+ escape: true
671
+ });
672
+ req.url = req.url.replace(new RegExp(`{${name}}`, 'g'), styledValue);
664
673
  }
665
- const styledValue = (0,_style_serializer_js__WEBPACK_IMPORTED_MODULE_0__["default"])({
666
- key: parameter.name,
667
- value,
668
- style: style || 'simple',
669
- explode: explode || false,
670
- escape: true
671
- });
672
- req.url = req.url.split(`{${name}}`).join(styledValue);
673
674
  }
674
675
  function query({
675
676
  req,
@@ -677,12 +678,12 @@ function query({
677
678
  parameter
678
679
  }) {
679
680
  req.query = req.query || {};
680
- if (parameter.content) {
681
+ if (value !== undefined && parameter.content) {
681
682
  const effectiveMediaType = Object.keys(parameter.content)[0];
682
683
  const serializedValue = (0,_content_serializer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(value, effectiveMediaType);
683
684
  if (serializedValue) {
684
685
  req.query[parameter.name] = serializedValue;
685
- } else if (parameter.allowEmptyValue && value !== undefined) {
686
+ } else if (parameter.allowEmptyValue) {
686
687
  const paramName = parameter.name;
687
688
  req.query[paramName] = req.query[paramName] || {};
688
689
  req.query[paramName].allowEmptyValue = true;
@@ -725,7 +726,7 @@ function header({
725
726
  if (PARAMETER_HEADER_BLACKLIST.indexOf(parameter.name.toLowerCase()) > -1) {
726
727
  return;
727
728
  }
728
- if (parameter.content) {
729
+ if (value !== undefined && parameter.content) {
729
730
  const effectiveMediaType = Object.keys(parameter.content)[0];
730
731
  req.headers[parameter.name] = (0,_content_serializer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(value, effectiveMediaType);
731
732
  return;
@@ -747,7 +748,7 @@ function cookie({
747
748
  }) {
748
749
  req.headers = req.headers || {};
749
750
  const type = typeof value;
750
- if (parameter.content) {
751
+ if (value !== undefined && parameter.content) {
751
752
  const effectiveMediaType = Object.keys(parameter.content)[0];
752
753
  req.headers.Cookie = `${parameter.name}=${(0,_content_serializer_js__WEBPACK_IMPORTED_MODULE_1__["default"])(value, effectiveMediaType)}`;
753
754
  return;
@@ -1096,6 +1097,12 @@ function formDataBuilder({
1096
1097
  value,
1097
1098
  parameter
1098
1099
  }) {
1100
+ if (value === false && parameter.type === 'boolean') {
1101
+ value = 'false';
1102
+ }
1103
+ if (value === 0 && ['number', 'integer'].indexOf(parameter.type) > -1) {
1104
+ value = '0';
1105
+ }
1099
1106
  if (value || parameter.allowEmptyValue) {
1100
1107
  req.form = req.form || {};
1101
1108
  req.form[parameter.name] = {
@@ -2507,7 +2514,7 @@ __webpack_require__.r(__webpack_exports__);
2507
2514
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(60503);
2508
2515
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(15767);
2509
2516
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(32346);
2510
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(11612);
2517
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(51776);
2511
2518
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(46432);
2512
2519
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(16129);
2513
2520
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(78311);
@@ -4232,7 +4239,8 @@ const resolveOpenAPI31Strategy = async options => {
4232
4239
  refSet,
4233
4240
  dereferenceOpts: {
4234
4241
  errors
4235
- }
4242
+ },
4243
+ immutable: false
4236
4244
  }
4237
4245
  });
4238
4246
  const transcluded = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_20__.transclude)(fragmentElement, dereferenced, openApiElement);
@@ -17666,45 +17674,6 @@ module.exports = {
17666
17674
  };
17667
17675
 
17668
17676
 
17669
- /***/ }),
17670
-
17671
- /***/ 7408:
17672
- /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
17673
-
17674
- "use strict";
17675
- __webpack_require__.r(__webpack_exports__);
17676
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
17677
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
17678
- /* harmony export */ });
17679
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(25845);
17680
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29461);
17681
-
17682
-
17683
- /**
17684
- * Composable shortcut for `Promise.all`.
17685
- *
17686
- * The `allP` method returns a single Promise that resolves when all of the promises
17687
- * in the iterable argument have resolved or when the iterable argument contains no promises.
17688
- * It rejects with the reason of the first promise that rejects.
17689
- *
17690
- * @func allP
17691
- * @memberOf RA
17692
- * @since {@link https://char0n.github.io/ramda-adjunct/2.3.0|v2.3.0}
17693
- * @category Function
17694
- * @sig [Promise a] -> Promise [a]
17695
- * @param {Iterable.<*>} iterable An iterable object such as an Array or String
17696
- * @return {Promise} An already resolved Promise if the iterable passed is empty. An asynchronously resolved Promise if the iterable passed contains no promises. Note, Google Chrome 58 returns an already resolved promise in this case. A pending Promise in all other cases. This returned promise is then resolved/rejected asynchronously (as soon as the stack is empty) when all the promises in the given iterable have resolved, or if any of the promises reject. See the example about "Asynchronicity or synchronicity of allP" below.
17697
- * @see {@link RA.resolveP|resolveP}, {@link RA.rejectP|rejectP}
17698
- * @example
17699
- *
17700
- * RA.allP([1, 2]); //=> Promise([1, 2])
17701
- * RA.allP([1, Promise.resolve(2)]); //=> Promise([1, 2])
17702
- * RA.allP([Promise.resolve(1), Promise.resolve(2)]); //=> Promise([1, 2])
17703
- * RA.allP([1, Promise.reject(2)]); //=> Promise(2)
17704
- */
17705
- var allP = (0,ramda__WEBPACK_IMPORTED_MODULE_0__["default"])(1, (0,ramda__WEBPACK_IMPORTED_MODULE_1__["default"])(Promise.all, Promise));
17706
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (allP);
17707
-
17708
17677
  /***/ }),
17709
17678
 
17710
17679
  /***/ 88931:
@@ -37743,9 +37712,9 @@ const ReferenceSet = stampit__WEBPACK_IMPORTED_MODULE_0__({
37743
37712
  },
37744
37713
  clean() {
37745
37714
  this.refs.forEach(ref => {
37746
- // eslint-disable-next-line no-param-reassign
37747
- ref.refSet = null;
37715
+ ref.refSet = null; // eslint-disable-line no-param-reassign
37748
37716
  });
37717
+ this.rootRef = null;
37749
37718
  this.refs = [];
37750
37719
  }
37751
37720
  }
@@ -37949,6 +37918,10 @@ const dereference = async (uri, options) => {
37949
37918
  const mergedOptions = (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_11__.merge)(options, {
37950
37919
  resolve: {
37951
37920
  baseURI: sanitizedURI
37921
+ },
37922
+ dereference: {
37923
+ // if refSet was not provided, then we can work in mutable mode
37924
+ immutable: options.dereference.immutable && refSet !== null
37952
37925
  }
37953
37926
  });
37954
37927
  return dereferenceApiDOM(parseResult, mergedOptions);
@@ -37994,23 +37967,24 @@ __webpack_require__.r(__webpack_exports__);
37994
37967
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
37995
37968
  /* harmony export */ OpenApi3_1DereferenceVisitor: () => (/* reexport safe */ _visitor_mjs__WEBPACK_IMPORTED_MODULE_11__["default"]),
37996
37969
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__),
37997
- /* harmony export */ maybeRefractToSchemaElement: () => (/* reexport safe */ _resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_13__.maybeRefractToSchemaElement),
37998
- /* harmony export */ resolveSchema$refField: () => (/* reexport safe */ _resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveSchema$refField)
37970
+ /* harmony export */ maybeRefractToSchemaElement: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.maybeRefractToSchemaElement),
37971
+ /* harmony export */ resolveSchema$idField: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveSchema$idField),
37972
+ /* harmony export */ resolveSchema$refField: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveSchema$refField)
37999
37973
  /* harmony export */ });
38000
37974
  /* harmony import */ var stampit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12646);
38001
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(37012);
38002
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(95201);
37975
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(95201);
38003
37976
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
38004
37977
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1667);
37978
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(87024);
38005
37979
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94145);
38006
37980
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70281);
38007
37981
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41544);
38008
37982
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(66648);
38009
37983
  /* harmony import */ var _DereferenceStrategy_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29708);
38010
- /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(12349);
38011
- /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(31387);
37984
+ /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(12349);
37985
+ /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(31387);
38012
37986
  /* harmony import */ var _visitor_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(32346);
38013
- /* harmony import */ var _resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(11612);
37987
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(51776);
38014
37988
 
38015
37989
 
38016
37990
 
@@ -38038,18 +38012,34 @@ const OpenApi3_1DereferenceStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_Dere
38038
38012
  return (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__.isOpenApi3_1Element)((_file$parseResult = file.parseResult) === null || _file$parseResult === void 0 ? void 0 : _file$parseResult.result);
38039
38013
  },
38040
38014
  async dereference(file, options) {
38015
+ var _options$dereference$;
38041
38016
  const namespace = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__.createNamespace)(_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__["default"]);
38042
- const refSet = (0,ramda__WEBPACK_IMPORTED_MODULE_7__["default"])((0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])(), options.dereference.refSet);
38017
+ const immutableRefSet = (_options$dereference$ = options.dereference.refSet) !== null && _options$dereference$ !== void 0 ? _options$dereference$ : (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])();
38018
+ const mutableRefsSet = (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])();
38019
+ let refSet = immutableRefSet;
38043
38020
  let reference;
38044
- if (!refSet.has(file.uri)) {
38045
- reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_9__["default"])({
38021
+ if (!immutableRefSet.has(file.uri)) {
38022
+ reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38046
38023
  uri: file.uri,
38047
38024
  value: file.parseResult
38048
38025
  });
38049
- refSet.add(reference);
38026
+ immutableRefSet.add(reference);
38050
38027
  } else {
38051
38028
  // pre-computed refSet was provided as configuration option
38052
- reference = refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_10__["default"])(file.uri, 'uri'));
38029
+ reference = immutableRefSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_9__["default"])(file.uri, 'uri'));
38030
+ }
38031
+
38032
+ /**
38033
+ * Clone refSet due the dereferencing process being mutable.
38034
+ * We don't want to mutate the original refSet and the references.
38035
+ */
38036
+ if (options.dereference.immutable) {
38037
+ immutableRefSet.refs.map(ref => (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38038
+ ...ref,
38039
+ value: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.cloneDeep)(ref.value)
38040
+ })).forEach(ref => mutableRefsSet.add(ref));
38041
+ reference = mutableRefsSet.find(ref => ref.uri === file.uri);
38042
+ refSet = mutableRefsSet;
38053
38043
  }
38054
38044
  const visitor = (0,_visitor_mjs__WEBPACK_IMPORTED_MODULE_11__["default"])({
38055
38045
  reference,
@@ -38061,13 +38051,26 @@ const OpenApi3_1DereferenceStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_Dere
38061
38051
  nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__.getNodeType
38062
38052
  });
38063
38053
 
38054
+ /**
38055
+ * If immutable option is set, replay refs from the refSet.
38056
+ */
38057
+ if (options.dereference.immutable) {
38058
+ mutableRefsSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38059
+ ...ref,
38060
+ uri: ref.uri.replace(/^immutable:\/\//, '')
38061
+ })).forEach(ref => immutableRefSet.add(ref));
38062
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
38063
+ refSet = immutableRefSet;
38064
+ }
38065
+
38064
38066
  /**
38065
38067
  * Release all memory if this refSet was not provided as an configuration option.
38066
38068
  * If provided as configuration option, then provider is responsible for cleanup.
38067
38069
  */
38068
38070
  if (options.dereference.refSet === null) {
38069
- refSet.clean();
38071
+ immutableRefSet.clean();
38070
38072
  }
38073
+ mutableRefsSet.clean();
38071
38074
  return dereferencedElement;
38072
38075
  }
38073
38076
  }
@@ -38167,7 +38170,7 @@ __webpack_require__.r(__webpack_exports__);
38167
38170
  /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83748);
38168
38171
  /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(78311);
38169
38172
  /* harmony import */ var _$anchor_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(46432);
38170
- /* harmony import */ var _resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11612);
38173
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51776);
38171
38174
  /* harmony import */ var _errors_JsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(64937);
38172
38175
 
38173
38176
 
@@ -38195,7 +38198,7 @@ const evaluate = (uri, element) => {
38195
38198
 
38196
38199
  // search for the matching schema
38197
38200
  const result = cache.get(element).find(e => {
38198
- const $idBaseURI = (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_3__.resolveSchema$idField)(uriStrippedHash, e);
38201
+ const $idBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_3__.resolveSchema$idField)(uriStrippedHash, e);
38199
38202
  return $idBaseURI === uriStrippedHash;
38200
38203
  });
38201
38204
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_4__["default"])(result)) {
@@ -38220,6 +38223,72 @@ evaluate.cache = new WeakMap();
38220
38223
 
38221
38224
 
38222
38225
 
38226
+ /***/ }),
38227
+
38228
+ /***/ 51776:
38229
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
38230
+
38231
+ "use strict";
38232
+ __webpack_require__.r(__webpack_exports__);
38233
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38234
+ /* harmony export */ maybeRefractToSchemaElement: () => (/* binding */ maybeRefractToSchemaElement),
38235
+ /* harmony export */ refractToSchemaElement: () => (/* binding */ refractToSchemaElement),
38236
+ /* harmony export */ resolveSchema$idField: () => (/* binding */ resolveSchema$idField),
38237
+ /* harmony export */ resolveSchema$refField: () => (/* binding */ resolveSchema$refField)
38238
+ /* harmony export */ });
38239
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5920);
38240
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9999);
38241
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(33501);
38242
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3117);
38243
+ /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83748);
38244
+
38245
+
38246
+
38247
+
38248
+ const resolveSchema$refField = (retrievalURI, schemaElement) => {
38249
+ if (typeof schemaElement.$ref === 'undefined') {
38250
+ return undefined;
38251
+ }
38252
+ const hash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.getHash((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref));
38253
+ const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
38254
+ const $refBaseURI = (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, uri) => {
38255
+ return _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.resolve(acc, _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.stripHash(uri)));
38256
+ }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref)]);
38257
+ return `${$refBaseURI}${hash === '#' ? '' : hash}`;
38258
+ };
38259
+ const resolveSchema$idField = (retrievalURI, schemaElement) => {
38260
+ if (typeof schemaElement.$id === 'undefined') {
38261
+ return undefined;
38262
+ }
38263
+ const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
38264
+ return (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, $id) => {
38265
+ return _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.resolve(acc, _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.stripHash($id)));
38266
+ }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$id)]);
38267
+ };
38268
+
38269
+ /**
38270
+ * Cached version of SchemaElement.refract.
38271
+ */
38272
+ const refractToSchemaElement = element => {
38273
+ if (refractToSchemaElement.cache.has(element)) {
38274
+ return refractToSchemaElement.cache.get(element);
38275
+ }
38276
+ const refracted = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__.SchemaElement.refract(element);
38277
+ refractToSchemaElement.cache.set(element, refracted);
38278
+ return refracted;
38279
+ };
38280
+ refractToSchemaElement.cache = new WeakMap();
38281
+ const maybeRefractToSchemaElement = element => {
38282
+ /**
38283
+ * Conditional version of refractToSchemaElement, that acts as an identity
38284
+ * function for all non-primitive Element instances.
38285
+ */
38286
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__.isPrimitiveElement)(element)) {
38287
+ return refractToSchemaElement(element);
38288
+ }
38289
+ return element;
38290
+ };
38291
+
38223
38292
  /***/ }),
38224
38293
 
38225
38294
  /***/ 32346:
@@ -38231,33 +38300,34 @@ __webpack_require__.r(__webpack_exports__);
38231
38300
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
38232
38301
  /* harmony export */ });
38233
38302
  /* harmony import */ var stampit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12646);
38234
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(95201);
38235
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(10796);
38236
- /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(18461);
38303
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95201);
38304
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(10796);
38305
+ /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(18461);
38237
38306
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
38238
38307
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(42209);
38239
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(9999);
38308
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(87024);
38240
38309
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(33501);
38241
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(87024);
38242
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(82570);
38243
- /* harmony import */ var _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(98219);
38244
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(85270);
38245
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(18316);
38246
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(85013);
38247
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(3117);
38248
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(66648);
38249
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(70281);
38250
- /* harmony import */ var _selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(46432);
38251
- /* harmony import */ var _selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(16129);
38252
- /* harmony import */ var _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(60503);
38253
- /* harmony import */ var _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(57823);
38254
- /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83748);
38255
- /* harmony import */ var _parse_index_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(7998);
38256
- /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(12349);
38257
- /* harmony import */ var _util_File_mjs__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(15767);
38258
- /* harmony import */ var _resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(11612);
38259
- /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87649);
38260
- /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(78311);
38310
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(9999);
38311
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(44824);
38312
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(82570);
38313
+ /* harmony import */ var _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(98219);
38314
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(85270);
38315
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(18316);
38316
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(85013);
38317
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(3117);
38318
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(70281);
38319
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(66648);
38320
+ /* harmony import */ var _selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(46432);
38321
+ /* harmony import */ var _selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(16129);
38322
+ /* harmony import */ var _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(60503);
38323
+ /* harmony import */ var _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(57823);
38324
+ /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83748);
38325
+ /* harmony import */ var _parse_index_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7998);
38326
+ /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(12349);
38327
+ /* harmony import */ var _util_File_mjs__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(15767);
38328
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(51776);
38329
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87649);
38330
+ /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(78311);
38261
38331
 
38262
38332
 
38263
38333
 
@@ -38281,12 +38351,6 @@ const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__.visit[S
38281
38351
  // initialize element identity manager
38282
38352
  const identityManager = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_2__.IdentityManager)();
38283
38353
 
38284
- /**
38285
- * Predicate for detecting if element was created by merging referencing
38286
- * element with particular element identity with a referenced element.
38287
- */
38288
- const wasReferencedBy = referencingElement => element => element.meta.hasKey('ref-referencing-element-id') && element.meta.get('ref-referencing-element-id').equals((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(identityManager.identify(referencingElement)));
38289
-
38290
38354
  // eslint-disable-next-line @typescript-eslint/naming-convention
38291
38355
  const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38292
38356
  props: {
@@ -38302,24 +38366,24 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38302
38366
  reference,
38303
38367
  namespace,
38304
38368
  options,
38305
- ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_4__.AncestorLineage(),
38369
+ ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(),
38306
38370
  refractCache = new Map()
38307
38371
  }) {
38308
38372
  this.indirections = indirections;
38309
38373
  this.namespace = namespace;
38310
38374
  this.reference = reference;
38311
38375
  this.options = options;
38312
- this.ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_4__.AncestorLineage(...ancestors);
38376
+ this.ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(...ancestors);
38313
38377
  this.refractCache = refractCache;
38314
38378
  },
38315
38379
  methods: {
38316
38380
  toBaseURI(uri) {
38317
- return _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.resolve(this.reference.uri, _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(uri)));
38381
+ return _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.resolve(this.reference.uri, _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(uri)));
38318
38382
  },
38319
38383
  async toReference(uri) {
38320
38384
  // detect maximum depth of resolution
38321
38385
  if (this.reference.depth >= this.options.resolve.maxDepth) {
38322
- throw new _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_6__["default"](`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file "${this.reference.uri}"`);
38386
+ throw new _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_5__["default"](`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file "${this.reference.uri}"`);
38323
38387
  }
38324
38388
  const baseURI = this.toBaseURI(uri);
38325
38389
  const {
@@ -38328,9 +38392,9 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38328
38392
 
38329
38393
  // we've already processed this Reference in past
38330
38394
  if (refSet.has(baseURI)) {
38331
- return refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_7__["default"])(baseURI, 'uri'));
38395
+ return refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_6__["default"])(baseURI, 'uri'));
38332
38396
  }
38333
- const parseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize(baseURI), {
38397
+ const parseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(baseURI), {
38334
38398
  ...this.options,
38335
38399
  parse: {
38336
38400
  ...this.options.parse,
@@ -38338,14 +38402,23 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38338
38402
  }
38339
38403
  });
38340
38404
 
38341
- // register new Reference with ReferenceSet
38342
- const reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_9__["default"])({
38405
+ // register new mutable reference with a refSet
38406
+ const mutableReference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38343
38407
  uri: baseURI,
38344
- value: parseResult,
38408
+ value: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(parseResult),
38345
38409
  depth: this.reference.depth + 1
38346
38410
  });
38347
- refSet.add(reference);
38348
- return reference;
38411
+ refSet.add(mutableReference);
38412
+ if (this.options.dereference.immutable) {
38413
+ // register new immutable reference with a refSet
38414
+ const immutableReference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38415
+ uri: `immutable://${baseURI}`,
38416
+ value: parseResult,
38417
+ depth: this.reference.depth + 1
38418
+ });
38419
+ refSet.add(immutableReference);
38420
+ }
38421
+ return mutableReference;
38349
38422
  },
38350
38423
  toAncestorLineage(ancestors) {
38351
38424
  /**
@@ -38353,18 +38426,17 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38353
38426
  * Ancestors are flatten to unwrap all Element instances.
38354
38427
  */
38355
38428
  const directAncestors = new Set(ancestors.filter(_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isElement));
38356
- const ancestorsLineage = new _util_mjs__WEBPACK_IMPORTED_MODULE_4__.AncestorLineage(...this.ancestors, directAncestors);
38429
+ const ancestorsLineage = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(...this.ancestors, directAncestors);
38357
38430
  return [ancestorsLineage, directAncestors];
38358
38431
  },
38359
38432
  async ReferenceElement(referencingElement, key, parent, path, ancestors) {
38360
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38361
-
38362
- // detect possible cycle in traversal and avoid it
38363
- if (ancestorsLineage.includesCycle(referencingElement)) {
38433
+ // skip current referencing element as it's already been access
38434
+ if (this.indirections.includes(referencingElement)) {
38364
38435
  return false;
38365
38436
  }
38366
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38367
- const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(this.reference.uri) === retrievalURI;
38437
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38438
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38439
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38368
38440
  const isExternalReference = !isInternalReference;
38369
38441
 
38370
38442
  // ignore resolving internal Reference Objects
@@ -38377,23 +38449,24 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38377
38449
  // skip traversing this reference element and all it's child elements
38378
38450
  return false;
38379
38451
  }
38380
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38381
- const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38452
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38453
+ const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38382
38454
  this.indirections.push(referencingElement);
38383
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38455
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38384
38456
 
38385
38457
  // possibly non-semantic fragment
38386
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(jsonPointer, reference.value.result);
38458
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38459
+ referencedElement.id = identityManager.identify(referencedElement);
38387
38460
 
38388
38461
  // applying semantics to a fragment
38389
38462
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isPrimitiveElement)(referencedElement)) {
38390
- const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.meta.get('referenced-element'));
38391
- const cacheKey = `${referencedElementType}-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(identityManager.identify(referencedElement))}`;
38463
+ const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.meta.get('referenced-element'));
38464
+ const cacheKey = `${referencedElementType}-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(referencedElement))}`;
38392
38465
  if (this.refractCache.has(cacheKey)) {
38393
38466
  referencedElement = this.refractCache.get(cacheKey);
38394
- } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_13__.isReferenceLikeElement)(referencedElement)) {
38467
+ } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.isReferenceLikeElement)(referencedElement)) {
38395
38468
  // handling indirect references
38396
- referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.ReferenceElement.refract(referencedElement);
38469
+ referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.ReferenceElement.refract(referencedElement);
38397
38470
  referencedElement.setMetaProperty('referenced-element', referencedElementType);
38398
38471
  this.refractCache.set(cacheKey, referencedElement);
38399
38472
  } else {
@@ -38405,98 +38478,125 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38405
38478
  }
38406
38479
 
38407
38480
  // detect direct or indirect reference
38408
- if (this.indirections.includes(referencedElement)) {
38409
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"]('Recursive Reference Object detected');
38481
+ if (referencingElement === referencedElement) {
38482
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Reference Object detected');
38410
38483
  }
38411
38484
 
38412
38485
  // detect maximum depth of dereferencing
38413
38486
  if (this.indirections.length > this.options.dereference.maxDepth) {
38414
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_16__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
38487
+ throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_17__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
38488
+ }
38489
+
38490
+ // detect second deep dive into the same fragment and avoid it
38491
+ if (ancestorsLineage.includes(referencedElement)) {
38492
+ reference.refSet.circular = true;
38493
+ if (this.options.dereference.circular === 'error') {
38494
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
38495
+ } else if (this.options.dereference.circular === 'replace') {
38496
+ var _this$options$derefer, _this$options$derefer2;
38497
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
38498
+ type: 'reference',
38499
+ uri: reference.uri,
38500
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38501
+ });
38502
+ const replacer = (_this$options$derefer = (_this$options$derefer2 = this.options.dereference.strategyOpts['openapi-3-1']) === null || _this$options$derefer2 === void 0 ? void 0 : _this$options$derefer2.circularReplacer) !== null && _this$options$derefer !== void 0 ? _this$options$derefer : this.options.dereference.circularReplacer;
38503
+ const replacement = replacer(refElement);
38504
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38505
+ parent.value = replacement; // eslint-disable-line no-param-reassign
38506
+ } else if (Array.isArray(parent)) {
38507
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
38508
+ }
38509
+ return !parent ? replacement : false;
38510
+ }
38415
38511
  }
38416
38512
 
38417
- // append referencing reference to ancestors lineage
38418
- directAncestors.add(referencingElement);
38419
-
38420
- // dive deep into the fragment
38421
- const visitor = OpenApi3_1DereferenceVisitor({
38422
- reference,
38423
- namespace: this.namespace,
38424
- indirections: [...this.indirections],
38425
- options: this.options,
38426
- ancestors: ancestorsLineage,
38427
- refractCache: this.refractCache
38428
- });
38429
- referencedElement = await visitAsync(referencedElement, visitor, {
38430
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
38431
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
38432
- });
38513
+ /**
38514
+ * Dive deep into the fragment.
38515
+ *
38516
+ * Cases to consider:
38517
+ * 1. We're crossing document boundary
38518
+ * 2. Fragment is a Reference Object. We need to follow it to get the eventual value
38519
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
38520
+ */
38521
+ if ((isExternalReference || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isReferenceElement)(referencedElement) || ['error', 'replace'].includes(this.options.dereference.circular)) && !ancestorsLineage.includesCycle(referencedElement)) {
38522
+ // append referencing reference to ancestors lineage
38523
+ directAncestors.add(referencingElement);
38524
+ const visitor = OpenApi3_1DereferenceVisitor({
38525
+ reference,
38526
+ namespace: this.namespace,
38527
+ indirections: [...this.indirections],
38528
+ options: this.options,
38529
+ refractCache: this.refractCache,
38530
+ ancestors: ancestorsLineage
38531
+ });
38532
+ referencedElement = await visitAsync(referencedElement, visitor, {
38533
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
38534
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
38535
+ });
38433
38536
 
38434
- // remove referencing reference from ancestors lineage
38435
- directAncestors.delete(referencingElement);
38537
+ // remove referencing reference from ancestors lineage
38538
+ directAncestors.delete(referencingElement);
38539
+ }
38436
38540
  this.indirections.pop();
38437
- const mergeAndAnnotateReferencedElement = refedElement => {
38438
- const copy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(refedElement);
38439
38541
 
38440
- // annotate fragment with info about original Reference element
38441
- copy.setMetaProperty('ref-fields', {
38442
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref),
38443
- // @ts-ignore
38444
- description: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.description),
38445
- // @ts-ignore
38446
- summary: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.summary)
38447
- });
38448
- // annotate fragment with info about origin
38449
- copy.setMetaProperty('ref-origin', reference.uri);
38450
- // annotate fragment with info about referencing element
38451
- copy.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
38542
+ /**
38543
+ * Creating a new version of referenced element to avoid modifying the original one.
38544
+ */
38545
+ const mergedElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(referencedElement);
38546
+ // assign unique id to merged element
38547
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38548
+ // annotate fragment with info about original Reference element
38549
+ mergedElement.setMetaProperty('ref-fields', {
38550
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref),
38551
+ // @ts-ignore
38552
+ description: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.description),
38553
+ // @ts-ignore
38554
+ summary: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.summary)
38555
+ });
38556
+ // annotate fragment with info about origin
38557
+ mergedElement.setMetaProperty('ref-origin', reference.uri);
38558
+ // annotate fragment with info about referencing element
38559
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
38452
38560
 
38453
- // override description and summary (outer has higher priority then inner)
38454
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isObjectElement)(refedElement)) {
38455
- if (referencingElement.hasKey('description') && 'description' in refedElement) {
38456
- // @ts-ignore
38457
- copy.remove('description');
38458
- // @ts-ignore
38459
- copy.set('description', referencingElement.get('description'));
38460
- }
38461
- if (referencingElement.hasKey('summary') && 'summary' in refedElement) {
38462
- // @ts-ignore
38463
- copy.remove('summary');
38464
- // @ts-ignore
38465
- copy.set('summary', referencingElement.get('summary'));
38466
- }
38561
+ // override description and summary (outer has higher priority then inner)
38562
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isObjectElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isObjectElement)(mergedElement)) {
38563
+ if (referencingElement.hasKey('description') && 'description' in referencedElement) {
38564
+ mergedElement.remove('description');
38565
+ mergedElement.set('description', referencingElement.get('description'));
38467
38566
  }
38468
- return copy;
38469
- };
38470
-
38471
- // attempting to create cycle
38472
- if (ancestorsLineage.includes(referencingElement) || ancestorsLineage.includes(referencedElement)) {
38473
- var _ancestorsLineage$fin;
38474
- const replaceWith = (_ancestorsLineage$fin = ancestorsLineage.findItem(wasReferencedBy(referencingElement))) !== null && _ancestorsLineage$fin !== void 0 ? _ancestorsLineage$fin : mergeAndAnnotateReferencedElement(referencedElement);
38475
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38476
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
38477
- } else if (Array.isArray(parent)) {
38478
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
38567
+ if (referencingElement.hasKey('summary') && 'summary' in referencedElement) {
38568
+ mergedElement.remove('summary');
38569
+ mergedElement.set('summary', referencingElement.get('summary'));
38479
38570
  }
38480
- return false;
38481
38571
  }
38482
38572
 
38483
- // transclude the element for a fragment
38484
- return mergeAndAnnotateReferencedElement(referencedElement);
38573
+ /**
38574
+ * Transclude referencing element with merged referenced element.
38575
+ */
38576
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38577
+ parent.value = mergedElement; // eslint-disable-line no-param-reassign
38578
+ } else if (Array.isArray(parent)) {
38579
+ parent[key] = mergedElement; // eslint-disable-line no-param-reassign
38580
+ }
38581
+
38582
+ /**
38583
+ * We're at the root of the tree, so we're just replacing the entire tree.
38584
+ */
38585
+ return !parent ? mergedElement : false;
38485
38586
  },
38486
38587
  async PathItemElement(referencingElement, key, parent, path, ancestors) {
38487
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38488
-
38489
38588
  // ignore PathItemElement without $ref field
38490
38589
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(referencingElement.$ref)) {
38491
38590
  return undefined;
38492
38591
  }
38493
38592
 
38494
- // detect possible cycle in traversal and avoid it
38495
- if (ancestorsLineage.includesCycle(referencingElement)) {
38593
+ // skip current referencing element as it's already been access
38594
+ if (this.indirections.includes(referencingElement)) {
38496
38595
  return false;
38497
38596
  }
38498
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38499
- const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(this.reference.uri) === retrievalURI;
38597
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38598
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38599
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38500
38600
  const isExternalReference = !isInternalReference;
38501
38601
 
38502
38602
  // ignore resolving external Path Item Objects
@@ -38509,92 +38609,130 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38509
38609
  // skip traversing this Path Item element but traverse all it's child elements
38510
38610
  return undefined;
38511
38611
  }
38512
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38513
- const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref));
38612
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38613
+ const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38514
38614
  this.indirections.push(referencingElement);
38515
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38615
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38516
38616
 
38517
38617
  // possibly non-semantic referenced element
38518
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(jsonPointer, reference.value.result);
38618
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38619
+ referencedElement.id = identityManager.identify(referencedElement);
38519
38620
 
38520
- // applying semantics to a referenced element
38621
+ /**
38622
+ * Applying semantics to a referenced element if semantics are missing.
38623
+ */
38521
38624
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isPrimitiveElement)(referencedElement)) {
38522
- const cacheKey = `pathItem-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(identityManager.identify(referencedElement))}`;
38625
+ const cacheKey = `path-item-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(referencedElement))}`;
38523
38626
  if (this.refractCache.has(cacheKey)) {
38524
38627
  referencedElement = this.refractCache.get(cacheKey);
38525
38628
  } else {
38526
- referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.PathItemElement.refract(referencedElement);
38629
+ referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.PathItemElement.refract(referencedElement);
38527
38630
  this.refractCache.set(cacheKey, referencedElement);
38528
38631
  }
38529
38632
  }
38530
38633
 
38531
38634
  // detect direct or indirect reference
38532
- if (this.indirections.includes(referencedElement)) {
38533
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"]('Recursive Path Item Object reference detected');
38635
+ if (referencingElement === referencedElement) {
38636
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Path Item Object reference detected');
38534
38637
  }
38535
38638
 
38536
38639
  // detect maximum depth of dereferencing
38537
38640
  if (this.indirections.length > this.options.dereference.maxDepth) {
38538
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_16__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
38641
+ throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_17__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
38642
+ }
38643
+
38644
+ // detect second deep dive into the same fragment and avoid it
38645
+ if (ancestorsLineage.includes(referencedElement)) {
38646
+ reference.refSet.circular = true;
38647
+ if (this.options.dereference.circular === 'error') {
38648
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
38649
+ } else if (this.options.dereference.circular === 'replace') {
38650
+ var _this$options$derefer3, _this$options$derefer4;
38651
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
38652
+ type: 'path-item',
38653
+ uri: reference.uri,
38654
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38655
+ });
38656
+ const replacer = (_this$options$derefer3 = (_this$options$derefer4 = this.options.dereference.strategyOpts['openapi-3-1']) === null || _this$options$derefer4 === void 0 ? void 0 : _this$options$derefer4.circularReplacer) !== null && _this$options$derefer3 !== void 0 ? _this$options$derefer3 : this.options.dereference.circularReplacer;
38657
+ const replacement = replacer(refElement);
38658
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38659
+ parent.value = replacement; // eslint-disable-line no-param-reassign
38660
+ } else if (Array.isArray(parent)) {
38661
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
38662
+ }
38663
+ return !parent ? replacement : false;
38664
+ }
38539
38665
  }
38540
38666
 
38541
- // append referencing path item to ancestors lineage
38542
- directAncestors.add(referencingElement);
38543
-
38544
- // dive deep into the referenced element
38545
- const visitor = OpenApi3_1DereferenceVisitor({
38546
- reference,
38547
- namespace: this.namespace,
38548
- indirections: [...this.indirections],
38549
- options: this.options,
38550
- ancestors: ancestorsLineage,
38551
- refractCache: this.refractCache
38552
- });
38553
- referencedElement = await visitAsync(referencedElement, visitor, {
38554
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
38555
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
38556
- });
38667
+ /**
38668
+ * Dive deep into the fragment.
38669
+ *
38670
+ * Cases to consider:
38671
+ * 1. We're crossing document boundary
38672
+ * 2. Fragment is a Path Item Object with $ref field. We need to follow it to get the eventual value
38673
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
38674
+ */
38675
+ if ((isExternalReference || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isPathItemElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(referencedElement.$ref) || ['error', 'replace'].includes(this.options.dereference.circular)) && !ancestorsLineage.includesCycle(referencedElement)) {
38676
+ // append referencing reference to ancestors lineage
38677
+ directAncestors.add(referencingElement);
38678
+ const visitor = OpenApi3_1DereferenceVisitor({
38679
+ reference,
38680
+ namespace: this.namespace,
38681
+ indirections: [...this.indirections],
38682
+ options: this.options,
38683
+ refractCache: this.refractCache,
38684
+ ancestors: ancestorsLineage
38685
+ });
38686
+ referencedElement = await visitAsync(referencedElement, visitor, {
38687
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
38688
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
38689
+ });
38557
38690
 
38558
- // remove referencing path item from ancestors lineage
38559
- directAncestors.delete(referencingElement);
38691
+ // remove referencing reference from ancestors lineage
38692
+ directAncestors.delete(referencingElement);
38693
+ }
38560
38694
  this.indirections.pop();
38561
- const mergeAndAnnotateReferencedElement = refedElement => {
38562
- // merge fields from referenced Path Item with referencing one
38563
- const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.PathItemElement([...refedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(refedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(refedElement.attributes));
38695
+
38696
+ /**
38697
+ * Creating a new version of Path Item by merging fields from referenced Path Item with referencing one.
38698
+ */
38699
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isPathItemElement)(referencedElement)) {
38700
+ const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.PathItemElement([...referencedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement.attributes));
38701
+ // assign unique id to merged element
38702
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38564
38703
  // existing keywords from referencing PathItemElement overrides ones from referenced element
38565
38704
  referencingElement.forEach((value, keyElement, item) => {
38566
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(keyElement));
38705
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(keyElement));
38567
38706
  mergedElement.content.push(item);
38568
38707
  });
38569
38708
  mergedElement.remove('$ref');
38570
38709
 
38571
38710
  // annotate referenced element with info about original referencing element
38572
38711
  mergedElement.setMetaProperty('ref-fields', {
38573
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
38712
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38574
38713
  });
38575
38714
  // annotate referenced element with info about origin
38576
38715
  mergedElement.setMetaProperty('ref-origin', reference.uri);
38577
38716
  // annotate fragment with info about referencing element
38578
- mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
38579
- return mergedElement;
38580
- };
38717
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
38718
+ referencedElement = mergedElement;
38719
+ }
38581
38720
 
38582
- // attempting to create cycle
38583
- if (ancestorsLineage.includes(referencingElement) || ancestorsLineage.includes(referencedElement)) {
38584
- var _ancestorsLineage$fin2;
38585
- const replaceWith = (_ancestorsLineage$fin2 = ancestorsLineage.findItem(wasReferencedBy(referencingElement))) !== null && _ancestorsLineage$fin2 !== void 0 ? _ancestorsLineage$fin2 : mergeAndAnnotateReferencedElement(referencedElement);
38586
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38587
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
38588
- } else if (Array.isArray(parent)) {
38589
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
38590
- }
38591
- return false;
38721
+ /**
38722
+ * Transclude referencing element with merged referenced element.
38723
+ */
38724
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38725
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
38726
+ } else if (Array.isArray(parent)) {
38727
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
38592
38728
  }
38593
38729
 
38594
- // transclude referencing element with merged referenced element
38595
- return mergeAndAnnotateReferencedElement(referencedElement);
38730
+ /**
38731
+ * We're at the root of the tree, so we're just replacing the entire tree.
38732
+ */
38733
+ return !parent ? referencedElement : undefined;
38596
38734
  },
38597
- async LinkElement(linkElement) {
38735
+ async LinkElement(linkElement, key, parent) {
38598
38736
  // ignore LinkElement without operationRef or operationId field
38599
38737
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationRef) && !(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationId)) {
38600
38738
  return undefined;
@@ -38602,15 +38740,15 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38602
38740
 
38603
38741
  // operationRef and operationId fields are mutually exclusive
38604
38742
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationRef) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationId)) {
38605
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"]('LinkElement operationRef and operationId fields are mutually exclusive.');
38743
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('LinkElement operationRef and operationId fields are mutually exclusive.');
38606
38744
  }
38607
38745
  let operationElement;
38608
38746
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationRef)) {
38609
38747
  var _linkElementCopy$oper;
38610
38748
  // possibly non-semantic referenced element
38611
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(linkElement.operationRef));
38612
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(linkElement.operationRef));
38613
- const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(this.reference.uri) === retrievalURI;
38749
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationRef));
38750
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationRef));
38751
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38614
38752
  const isExternalReference = !isInternalReference;
38615
38753
 
38616
38754
  // ignore resolving internal Operation Object reference
@@ -38623,60 +38761,79 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38623
38761
  // skip traversing this Link element but traverse all it's child elements
38624
38762
  return undefined;
38625
38763
  }
38626
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(linkElement.operationRef));
38627
- operationElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(jsonPointer, reference.value.result);
38764
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationRef));
38765
+ operationElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38628
38766
  // applying semantics to a referenced element
38629
38767
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isPrimitiveElement)(operationElement)) {
38630
- const cacheKey = `operation-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(identityManager.identify(operationElement))}`;
38768
+ const cacheKey = `operation-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(operationElement))}`;
38631
38769
  if (this.refractCache.has(cacheKey)) {
38632
38770
  operationElement = this.refractCache.get(cacheKey);
38633
38771
  } else {
38634
- operationElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.OperationElement.refract(operationElement);
38772
+ operationElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.OperationElement.refract(operationElement);
38635
38773
  this.refractCache.set(cacheKey, operationElement);
38636
38774
  }
38637
38775
  }
38638
38776
  // create shallow clone to be able to annotate with metadata
38639
- operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(operationElement);
38777
+ operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(operationElement);
38640
38778
  // annotate operation element with info about origin
38641
38779
  operationElement.setMetaProperty('ref-origin', reference.uri);
38642
- const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(linkElement);
38780
+ const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(linkElement);
38643
38781
  (_linkElementCopy$oper = linkElementCopy.operationRef) === null || _linkElementCopy$oper === void 0 || _linkElementCopy$oper.meta.set('operation', operationElement);
38644
- return linkElementCopy;
38782
+
38783
+ /**
38784
+ * Transclude Link Object containing Operation Object in its meta.
38785
+ */
38786
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38787
+ parent.value = linkElementCopy; // eslint-disable-line no-param-reassign
38788
+ } else if (Array.isArray(parent)) {
38789
+ parent[key] = linkElementCopy; // eslint-disable-line no-param-reassign
38790
+ }
38791
+
38792
+ /**
38793
+ * We're at the root of the tree, so we're just replacing the entire tree.
38794
+ */
38795
+ return !parent ? linkElementCopy : undefined;
38645
38796
  }
38646
38797
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationId)) {
38647
38798
  var _linkElementCopy$oper2;
38648
- const operationId = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(linkElement.operationId);
38649
- const reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize(this.reference.uri));
38650
- operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_19__["default"])(e => (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.isOperationElement)(e) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isElement)(e.operationId) && e.operationId.equals(operationId), reference.value.result);
38799
+ const operationId = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationId);
38800
+ const reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(this.reference.uri));
38801
+ operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_21__["default"])(e => (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isOperationElement)(e) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isElement)(e.operationId) && e.operationId.equals(operationId), reference.value.result);
38651
38802
  // OperationElement not found by its operationId
38652
- if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_21__["default"])(operationElement)) {
38653
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"](`OperationElement(operationId=${operationId}) not found.`);
38803
+ if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_22__["default"])(operationElement)) {
38804
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"](`OperationElement(operationId=${operationId}) not found.`);
38654
38805
  }
38655
- const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(linkElement);
38806
+ const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(linkElement);
38656
38807
  (_linkElementCopy$oper2 = linkElementCopy.operationId) === null || _linkElementCopy$oper2 === void 0 || _linkElementCopy$oper2.meta.set('operation', operationElement);
38657
- return linkElementCopy;
38808
+
38809
+ /**
38810
+ * Transclude Link Object containing Operation Object in its meta.
38811
+ */
38812
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38813
+ parent.value = linkElementCopy; // eslint-disable-line no-param-reassign
38814
+ } else if (Array.isArray(parent)) {
38815
+ parent[key] = linkElementCopy; // eslint-disable-line no-param-reassign
38816
+ }
38817
+
38818
+ /**
38819
+ * We're at the root of the tree, so we're just replacing the entire tree.
38820
+ */
38821
+ return !parent ? linkElementCopy : undefined;
38658
38822
  }
38659
38823
  return undefined;
38660
38824
  },
38661
- async ExampleElement(exampleElement, key, parent, path, ancestors) {
38662
- const [ancestorsLineage] = this.toAncestorLineage([...ancestors, parent]);
38663
-
38825
+ async ExampleElement(exampleElement, key, parent) {
38664
38826
  // ignore ExampleElement without externalValue field
38665
38827
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(exampleElement.externalValue)) {
38666
38828
  return undefined;
38667
38829
  }
38668
38830
 
38669
- // detect possible cycle in traversal and avoid it
38670
- if (ancestorsLineage.includesCycle(exampleElement)) {
38671
- return false;
38672
- }
38673
-
38674
38831
  // value and externalValue fields are mutually exclusive
38675
38832
  if (exampleElement.hasKey('value') && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(exampleElement.externalValue)) {
38676
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"]('ExampleElement value and externalValue fields are mutually exclusive.');
38833
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('ExampleElement value and externalValue fields are mutually exclusive.');
38677
38834
  }
38678
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(exampleElement.externalValue));
38679
- const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(this.reference.uri) === retrievalURI;
38835
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(exampleElement.externalValue));
38836
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38680
38837
  const isExternalReference = !isInternalReference;
38681
38838
 
38682
38839
  // ignore resolving internal Example Objects
@@ -38689,44 +38846,55 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38689
38846
  // skip traversing this Example element but traverse all it's child elements
38690
38847
  return undefined;
38691
38848
  }
38692
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(exampleElement.externalValue));
38849
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(exampleElement.externalValue));
38693
38850
 
38694
38851
  // shallow clone of the referenced element
38695
- const valueElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(reference.value.result);
38852
+ const valueElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(reference.value.result);
38696
38853
  // annotate operation element with info about origin
38697
38854
  valueElement.setMetaProperty('ref-origin', reference.uri);
38698
- const exampleElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(exampleElement);
38855
+ const exampleElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(exampleElement);
38699
38856
  exampleElementCopy.value = valueElement;
38700
- return exampleElementCopy;
38857
+
38858
+ /**
38859
+ * Transclude Example Object containing external value.
38860
+ */
38861
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38862
+ parent.value = exampleElementCopy; // eslint-disable-line no-param-reassign
38863
+ } else if (Array.isArray(parent)) {
38864
+ parent[key] = exampleElementCopy; // eslint-disable-line no-param-reassign
38865
+ }
38866
+
38867
+ /**
38868
+ * We're at the root of the tree, so we're just replacing the entire tree.
38869
+ */
38870
+ return !parent ? exampleElementCopy : undefined;
38701
38871
  },
38702
38872
  async SchemaElement(referencingElement, key, parent, path, ancestors) {
38703
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38704
-
38705
38873
  // skip current referencing schema as $ref keyword was not defined
38706
38874
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(referencingElement.$ref)) {
38707
- // skip traversing this schema but traverse all it's child schemas
38708
38875
  return undefined;
38709
38876
  }
38710
38877
 
38711
- // detect possible cycle in traversal and avoid it
38712
- if (ancestorsLineage.includesCycle(referencingElement)) {
38878
+ // skip current referencing element as it's already been access
38879
+ if (this.indirections.includes(referencingElement)) {
38713
38880
  return false;
38714
38881
  }
38882
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38715
38883
 
38716
38884
  // compute baseURI using rules around $id and $ref keywords
38717
- let reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize(this.reference.uri));
38885
+ let reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(this.reference.uri));
38718
38886
  let {
38719
38887
  uri: retrievalURI
38720
38888
  } = reference;
38721
- const $refBaseURI = (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__.resolveSchema$refField)(retrievalURI, referencingElement);
38722
- const $refBaseURIStrippedHash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash($refBaseURI);
38723
- const file = (0,_util_File_mjs__WEBPACK_IMPORTED_MODULE_23__["default"])({
38889
+ const $refBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.resolveSchema$refField)(retrievalURI, referencingElement);
38890
+ const $refBaseURIStrippedHash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash($refBaseURI);
38891
+ const file = (0,_util_File_mjs__WEBPACK_IMPORTED_MODULE_24__["default"])({
38724
38892
  uri: $refBaseURIStrippedHash
38725
38893
  });
38726
- const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_24__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
38894
+ const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_25__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
38727
38895
  const isURL = !isUnknownURI;
38728
- const isInternalReference = uri => _util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.stripHash(this.reference.uri) === uri;
38729
- const isExternalReference = uri => !isInternalReference(uri);
38896
+ let isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === $refBaseURI;
38897
+ let isExternalReference = !isInternalReference;
38730
38898
  this.indirections.push(referencingElement);
38731
38899
 
38732
38900
  // determining reference, proper evaluation and selection mechanism
@@ -38734,74 +38902,95 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38734
38902
  try {
38735
38903
  if (isUnknownURI || isURL) {
38736
38904
  // we're dealing with canonical URI or URL with possible fragment
38905
+ retrievalURI = this.toBaseURI($refBaseURI);
38737
38906
  const selector = $refBaseURI;
38738
- referencedElement = (0,_selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_25__.evaluate)(selector,
38739
- // @ts-ignore
38740
- (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__.maybeRefractToSchemaElement)(reference.value.result));
38907
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38908
+ referencedElement = (0,_selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_26__.evaluate)(selector, referenceAsSchema);
38909
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38910
+ referencedElement.id = identityManager.identify(referencedElement);
38911
+
38912
+ // ignore resolving internal Schema Objects
38913
+ if (!this.options.resolve.internal && isInternalReference) {
38914
+ // skip traversing this schema element but traverse all it's child elements
38915
+ return undefined;
38916
+ }
38917
+ // ignore resolving external Schema Objects
38918
+ if (!this.options.resolve.external && isExternalReference) {
38919
+ // skip traversing this schema element but traverse all it's child elements
38920
+ return undefined;
38921
+ }
38741
38922
  } else {
38742
38923
  // we're assuming here that we're dealing with JSON Pointer here
38743
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])($refBaseURI));
38924
+ retrievalURI = this.toBaseURI($refBaseURI);
38925
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38926
+ isExternalReference = !isInternalReference;
38744
38927
 
38745
38928
  // ignore resolving internal Schema Objects
38746
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38929
+ if (!this.options.resolve.internal && isInternalReference) {
38747
38930
  // skip traversing this schema element but traverse all it's child elements
38748
38931
  return undefined;
38749
38932
  }
38750
38933
  // ignore resolving external Schema Objects
38751
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38934
+ if (!this.options.resolve.external && isExternalReference) {
38752
38935
  // skip traversing this schema element but traverse all it's child elements
38753
38936
  return undefined;
38754
38937
  }
38755
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize($refBaseURI));
38756
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38757
- referencedElement = (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__.maybeRefractToSchemaElement)(
38758
- // @ts-ignore
38759
- (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(selector, reference.value.result));
38938
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38939
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38940
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38941
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(selector, referenceAsSchema);
38942
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38943
+ referencedElement.id = identityManager.identify(referencedElement);
38760
38944
  }
38761
38945
  } catch (error) {
38762
38946
  /**
38763
38947
  * No SchemaElement($id=URL) was not found, so we're going to try to resolve
38764
38948
  * the URL and assume the returned response is a JSON Schema.
38765
38949
  */
38766
- if (isURL && error instanceof _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_26__["default"]) {
38767
- if ((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_27__.isAnchor)((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_27__.uriToAnchor)($refBaseURI))) {
38950
+ if (isURL && error instanceof _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_27__["default"]) {
38951
+ if ((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.isAnchor)((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.uriToAnchor)($refBaseURI))) {
38768
38952
  // we're dealing with JSON Schema $anchor here
38769
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])($refBaseURI));
38953
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38954
+ isExternalReference = !isInternalReference;
38770
38955
 
38771
38956
  // ignore resolving internal Schema Objects
38772
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38957
+ if (!this.options.resolve.internal && isInternalReference) {
38773
38958
  // skip traversing this schema element but traverse all it's child elements
38774
38959
  return undefined;
38775
38960
  }
38776
38961
  // ignore resolving external Schema Objects
38777
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38962
+ if (!this.options.resolve.external && isExternalReference) {
38778
38963
  // skip traversing this schema element but traverse all it's child elements
38779
38964
  return undefined;
38780
38965
  }
38781
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize($refBaseURI));
38782
- const selector = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_27__.uriToAnchor)($refBaseURI);
38783
- referencedElement = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_27__.evaluate)(selector,
38784
- // @ts-ignore
38785
- (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__.maybeRefractToSchemaElement)(reference.value.result));
38966
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38967
+ const selector = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.uriToAnchor)($refBaseURI);
38968
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38969
+ referencedElement = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.evaluate)(selector, referenceAsSchema);
38970
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38971
+ referencedElement.id = identityManager.identify(referencedElement);
38786
38972
  } else {
38787
38973
  // we're assuming here that we're dealing with JSON Pointer here
38788
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])($refBaseURI));
38974
+ retrievalURI = this.toBaseURI($refBaseURI);
38975
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38976
+ isExternalReference = !isInternalReference;
38789
38977
 
38790
38978
  // ignore resolving internal Schema Objects
38791
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38979
+ if (!this.options.resolve.internal && isInternalReference) {
38792
38980
  // skip traversing this schema element but traverse all it's child elements
38793
38981
  return undefined;
38794
38982
  }
38795
38983
  // ignore resolving external Schema Objects
38796
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38984
+ if (!this.options.resolve.external && isExternalReference) {
38797
38985
  // skip traversing this schema element but traverse all it's child elements
38798
38986
  return undefined;
38799
38987
  }
38800
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize($refBaseURI));
38801
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38802
- referencedElement = (0,_resolve_strategies_openapi_3_1_util_mjs__WEBPACK_IMPORTED_MODULE_22__.maybeRefractToSchemaElement)(
38803
- // @ts-ignore
38804
- (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(selector, reference.value.result));
38988
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38989
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38990
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38991
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(selector, referenceAsSchema);
38992
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38993
+ referencedElement.id = identityManager.identify(referencedElement);
38805
38994
  }
38806
38995
  } else {
38807
38996
  throw error;
@@ -38809,80 +38998,124 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38809
38998
  }
38810
38999
 
38811
39000
  // detect direct or indirect reference
38812
- if (this.indirections.includes(referencedElement)) {
38813
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_15__["default"]('Recursive Schema Object reference detected');
39001
+ if (referencingElement === referencedElement) {
39002
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Schema Object reference detected');
38814
39003
  }
38815
39004
 
38816
39005
  // detect maximum depth of dereferencing
38817
39006
  if (this.indirections.length > this.options.dereference.maxDepth) {
38818
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_16__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
39007
+ throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_17__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
39008
+ }
39009
+
39010
+ // detect second deep dive into the same fragment and avoid it
39011
+ if (ancestorsLineage.includes(referencedElement)) {
39012
+ reference.refSet.circular = true;
39013
+ if (this.options.dereference.circular === 'error') {
39014
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
39015
+ } else if (this.options.dereference.circular === 'replace') {
39016
+ var _this$options$derefer5, _this$options$derefer6;
39017
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
39018
+ type: 'json-schema',
39019
+ uri: reference.uri,
39020
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
39021
+ });
39022
+ const replacer = (_this$options$derefer5 = (_this$options$derefer6 = this.options.dereference.strategyOpts['openapi-3-1']) === null || _this$options$derefer6 === void 0 ? void 0 : _this$options$derefer6.circularReplacer) !== null && _this$options$derefer5 !== void 0 ? _this$options$derefer5 : this.options.dereference.circularReplacer;
39023
+ const replacement = replacer(refElement);
39024
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39025
+ parent.value = replacement; // eslint-disable-line no-param-reassign
39026
+ } else if (Array.isArray(parent)) {
39027
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
39028
+ }
39029
+ return !parent ? replacement : false;
39030
+ }
38819
39031
  }
38820
39032
 
38821
- // append referencing schema to ancestors lineage
38822
- directAncestors.add(referencingElement);
38823
-
38824
- // dive deep into the fragment
38825
- const visitor = OpenApi3_1DereferenceVisitor({
38826
- reference,
38827
- namespace: this.namespace,
38828
- indirections: [...this.indirections],
38829
- options: this.options,
38830
- ancestors: ancestorsLineage
38831
- });
38832
- referencedElement = await visitAsync(referencedElement, visitor, {
38833
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
38834
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
38835
- });
39033
+ /**
39034
+ * Dive deep into the fragment.
39035
+ *
39036
+ * Cases to consider:
39037
+ * 1. We're crossing document boundary
39038
+ * 2. Fragment is a Schema Object with $ref field. We need to follow it to get the eventual value
39039
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
39040
+ */
39041
+ if ((isExternalReference || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isSchemaElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(referencedElement.$ref) || ['error', 'replace'].includes(this.options.dereference.circular)) && !ancestorsLineage.includesCycle(referencedElement)) {
39042
+ // append referencing reference to ancestors lineage
39043
+ directAncestors.add(referencingElement);
39044
+ const visitor = OpenApi3_1DereferenceVisitor({
39045
+ reference,
39046
+ namespace: this.namespace,
39047
+ indirections: [...this.indirections],
39048
+ options: this.options,
39049
+ refractCache: this.refractCache,
39050
+ ancestors: ancestorsLineage
39051
+ });
39052
+ referencedElement = await visitAsync(referencedElement, visitor, {
39053
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
39054
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
39055
+ });
38836
39056
 
38837
- // remove referencing schema from ancestors lineage
38838
- directAncestors.delete(referencingElement);
39057
+ // remove referencing reference from ancestors lineage
39058
+ directAncestors.delete(referencingElement);
39059
+ }
38839
39060
  this.indirections.pop();
38840
39061
 
38841
39062
  // Boolean JSON Schemas
38842
- if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.isBooleanJsonSchemaElement)(referencedElement)) {
38843
- const booleanJsonSchemaElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement);
39063
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isBooleanJsonSchemaElement)(referencedElement)) {
39064
+ const booleanJsonSchemaElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement);
39065
+ // assign unique id to merged element
39066
+ booleanJsonSchemaElement.setMetaProperty('id', identityManager.generateId());
38844
39067
  // annotate referenced element with info about original referencing element
38845
39068
  booleanJsonSchemaElement.setMetaProperty('ref-fields', {
38846
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
39069
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38847
39070
  });
38848
39071
  // annotate referenced element with info about origin
38849
39072
  booleanJsonSchemaElement.setMetaProperty('ref-origin', reference.uri);
38850
39073
  // annotate fragment with info about referencing element
38851
- booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
38852
- return booleanJsonSchemaElement;
39074
+ booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
39075
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39076
+ parent.value = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
39077
+ } else if (Array.isArray(parent)) {
39078
+ parent[key] = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
39079
+ }
39080
+ return !parent ? booleanJsonSchemaElement : false;
38853
39081
  }
38854
- const mergeAndAnnotateReferencedElement = refedElement => {
38855
- // Schema Object - merge keywords from referenced schema with referencing schema
38856
- const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.SchemaElement([...refedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(refedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(refedElement.attributes));
39082
+
39083
+ /**
39084
+ * Creating a new version of Schema Object by merging fields from referenced Schema Object with referencing one.
39085
+ */
39086
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isSchemaElement)(referencedElement)) {
39087
+ const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.SchemaElement([...referencedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement.attributes));
39088
+ // assign unique id to merged element
39089
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38857
39090
  // existing keywords from referencing schema overrides ones from referenced schema
38858
39091
  referencingElement.forEach((value, keyElement, item) => {
38859
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(keyElement));
39092
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(keyElement));
38860
39093
  mergedElement.content.push(item);
38861
39094
  });
38862
39095
  mergedElement.remove('$ref');
38863
39096
  // annotate referenced element with info about original referencing element
38864
39097
  mergedElement.setMetaProperty('ref-fields', {
38865
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
39098
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38866
39099
  });
38867
39100
  // annotate fragment with info about origin
38868
39101
  mergedElement.setMetaProperty('ref-origin', reference.uri);
38869
39102
  // annotate fragment with info about referencing element
38870
- mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
38871
- return mergedElement;
38872
- };
38873
-
38874
- // attempting to create cycle
38875
- if (ancestorsLineage.includes(referencingElement) || ancestorsLineage.includes(referencedElement)) {
38876
- var _ancestorsLineage$fin3;
38877
- const replaceWith = (_ancestorsLineage$fin3 = ancestorsLineage.findItem(wasReferencedBy(referencingElement))) !== null && _ancestorsLineage$fin3 !== void 0 ? _ancestorsLineage$fin3 : mergeAndAnnotateReferencedElement(referencedElement);
38878
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38879
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
38880
- } else if (Array.isArray(parent)) {
38881
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
38882
- }
38883
- return false;
39103
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
39104
+ referencedElement = mergedElement;
38884
39105
  }
38885
- return mergeAndAnnotateReferencedElement(referencedElement);
39106
+ /**
39107
+ * Transclude referencing element with merged referenced element.
39108
+ */
39109
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39110
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
39111
+ } else if (Array.isArray(parent)) {
39112
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
39113
+ }
39114
+
39115
+ /**
39116
+ * We're at the root of the tree, so we're just replacing the entire tree.
39117
+ */
39118
+ return !parent ? referencedElement : undefined;
38886
39119
  }
38887
39120
  }
38888
39121
  });
@@ -39406,6 +39639,8 @@ __webpack_require__.r(__webpack_exports__);
39406
39639
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
39407
39640
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
39408
39641
  /* harmony export */ });
39642
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43628);
39643
+
39409
39644
  const defaultOptions = {
39410
39645
  parse: {
39411
39646
  /**
@@ -39508,7 +39743,29 @@ const defaultOptions = {
39508
39743
  * The dereferencing should throw MaximumDereferenceDepthError if dereferencing depth
39509
39744
  * is exceeded by this option.
39510
39745
  */
39511
- maxDepth: +Infinity
39746
+ maxDepth: +Infinity,
39747
+ /**
39748
+ * Determines how circular references are handled.
39749
+ *
39750
+ * "ignore" - circular reference are allowed
39751
+ * "replace" - circular references are not allowed and are translated to RefElement
39752
+ * "error" - circular references are not allowed and will throw an error
39753
+ */
39754
+ circular: 'ignore',
39755
+ /**
39756
+ * This function is used to replace circular references when `circular` option is set to "replace".
39757
+ * By default, it's an identity function. It means that circular references are replaced with RefElement.
39758
+ */
39759
+ circularReplacer: ramda__WEBPACK_IMPORTED_MODULE_0__["default"],
39760
+ /**
39761
+ * Determines whether the dereferencing process will be immutable.
39762
+ * By default, the dereferencing process is immutable, which means that the original
39763
+ * ApiDOM passed to the dereference process is NOT modified.
39764
+ *
39765
+ * true - the dereferencing process will be immutable (deep cloning of ApiDOM is involved)
39766
+ * false - the dereferencing process will be mutable
39767
+ */
39768
+ immutable: true
39512
39769
  },
39513
39770
  bundle: {
39514
39771
  /**
@@ -39973,59 +40230,42 @@ __webpack_require__.r(__webpack_exports__);
39973
40230
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
39974
40231
  /* harmony export */ });
39975
40232
  /* harmony import */ var stampit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12646);
39976
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
39977
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1667);
39978
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94145);
39979
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70281);
39980
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41544);
39981
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(66648);
39982
- /* harmony import */ var _ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(97836);
39983
- /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31387);
39984
- /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(12349);
39985
- /* harmony import */ var _visitor_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(20622);
39986
-
40233
+ /* harmony import */ var _ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97836);
40234
+ /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31387);
40235
+ /* harmony import */ var _options_util_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(40927);
40236
+ /* harmony import */ var _errors_UnmatchedDereferenceStrategyError_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83126);
39987
40237
 
39988
40238
 
39989
40239
 
39990
40240
 
39991
-
39992
- // @ts-ignore
39993
- const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__.visit[Symbol.for('nodejs.util.promisify.custom')];
39994
-
39995
- // eslint-disable-next-line @typescript-eslint/naming-convention
39996
- const OpenApi3_1ResolveStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_2__["default"], {
40241
+ // eslint-disable-next-line @typescript-eslint/naming-convention
40242
+ const OpenApi3_1ResolveStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], {
39997
40243
  init() {
39998
40244
  this.name = 'openapi-3-1';
39999
40245
  },
40000
40246
  methods: {
40001
- canResolve(file) {
40002
- var _file$parseResult;
40003
- // assert by media type
40004
- if (file.mediaType !== 'text/plain') {
40005
- return _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__["default"].includes(file.mediaType);
40247
+ canResolve(file, options) {
40248
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'openapi-3-1');
40249
+ if (dereferenceStrategy === undefined) {
40250
+ return false;
40006
40251
  }
40007
-
40008
- // assert by inspecting ApiDOM
40009
- return (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__.isOpenApi3_1Element)((_file$parseResult = file.parseResult) === null || _file$parseResult === void 0 ? void 0 : _file$parseResult.result);
40252
+ return dereferenceStrategy.canDereference(file, options);
40010
40253
  },
40011
40254
  async resolve(file, options) {
40012
- const namespace = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__.createNamespace)(_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__["default"]);
40013
- const reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])({
40014
- uri: file.uri,
40015
- value: file.parseResult
40016
- });
40017
- const visitor = (0,_visitor_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
40018
- reference,
40019
- namespace,
40020
- options
40021
- });
40022
- const refSet = (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_9__["default"])();
40023
- refSet.add(reference);
40024
- await visitAsync(refSet.rootRef.value, visitor, {
40025
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__.keyMap,
40026
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__.getNodeType
40255
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'openapi-3-1');
40256
+ if (dereferenceStrategy === undefined) {
40257
+ throw new _errors_UnmatchedDereferenceStrategyError_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]('"openapi-3-1" dereference strategy is not available.');
40258
+ }
40259
+ const refSet = (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_3__["default"])();
40260
+ const mergedOptions = (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_4__.merge)(options, {
40261
+ resolve: {
40262
+ internal: false
40263
+ },
40264
+ dereference: {
40265
+ refSet
40266
+ }
40027
40267
  });
40028
- await visitor.crawl();
40268
+ await dereferenceStrategy.dereference(file, mergedOptions);
40029
40269
  return refSet;
40030
40270
  }
40031
40271
  }
@@ -40034,553 +40274,6 @@ const OpenApi3_1ResolveStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_ResolveS
40034
40274
 
40035
40275
  /***/ }),
40036
40276
 
40037
- /***/ 11612:
40038
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
40039
-
40040
- "use strict";
40041
- __webpack_require__.r(__webpack_exports__);
40042
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
40043
- /* harmony export */ maybeRefractToSchemaElement: () => (/* binding */ maybeRefractToSchemaElement),
40044
- /* harmony export */ refractToSchemaElement: () => (/* binding */ refractToSchemaElement),
40045
- /* harmony export */ resolveSchema$idField: () => (/* binding */ resolveSchema$idField),
40046
- /* harmony export */ resolveSchema$refField: () => (/* binding */ resolveSchema$refField)
40047
- /* harmony export */ });
40048
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5920);
40049
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9999);
40050
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(33501);
40051
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3117);
40052
- /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83748);
40053
-
40054
-
40055
-
40056
-
40057
- const resolveSchema$refField = (retrievalURI, schemaElement) => {
40058
- if (typeof schemaElement.$ref === 'undefined') {
40059
- return undefined;
40060
- }
40061
- const hash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.getHash((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref));
40062
- const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
40063
- const $refBaseURI = (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, uri) => {
40064
- return _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.resolve(acc, _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.stripHash(uri)));
40065
- }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref)]);
40066
- return `${$refBaseURI}${hash === '#' ? '' : hash}`;
40067
- };
40068
- const resolveSchema$idField = (retrievalURI, schemaElement) => {
40069
- if (typeof schemaElement.$id === 'undefined') {
40070
- return undefined;
40071
- }
40072
- const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
40073
- return (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, $id) => {
40074
- return _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.resolve(acc, _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.stripHash($id)));
40075
- }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$id)]);
40076
- };
40077
-
40078
- /**
40079
- * Cached version of SchemaElement.refract.
40080
- */
40081
- const refractToSchemaElement = element => {
40082
- if (refractToSchemaElement.cache.has(element)) {
40083
- return refractToSchemaElement.cache.get(element);
40084
- }
40085
- const refracted = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__.SchemaElement.refract(element);
40086
- refractToSchemaElement.cache.set(element, refracted);
40087
- return refracted;
40088
- };
40089
- refractToSchemaElement.cache = new WeakMap();
40090
- const maybeRefractToSchemaElement = element => {
40091
- /**
40092
- * Conditional version of refractToSchemaElement, that acts as an identity
40093
- * function for all non-primitive Element instances.
40094
- */
40095
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__.isPrimitiveElement)(element)) {
40096
- return refractToSchemaElement(element);
40097
- }
40098
- return element;
40099
- };
40100
-
40101
- /***/ }),
40102
-
40103
- /***/ 20622:
40104
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
40105
-
40106
- "use strict";
40107
- __webpack_require__.r(__webpack_exports__);
40108
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
40109
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
40110
- /* harmony export */ });
40111
- /* harmony import */ var stampit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(12646);
40112
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(95201);
40113
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(73236);
40114
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(10796);
40115
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(11182);
40116
- /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(22060);
40117
- /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(7408);
40118
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
40119
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(9999);
40120
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(33501);
40121
- /* harmony import */ var _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(98219);
40122
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(85270);
40123
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(18316);
40124
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(85013);
40125
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(3117);
40126
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(66648);
40127
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(70281);
40128
- /* harmony import */ var _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(60503);
40129
- /* harmony import */ var _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(57823);
40130
- /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(78311);
40131
- /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83748);
40132
- /* harmony import */ var _parse_index_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(7998);
40133
- /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12349);
40134
- /* harmony import */ var _util_File_mjs__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(15767);
40135
- /* harmony import */ var _dereference_strategies_openapi_3_1_selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(16129);
40136
- /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(11612);
40137
- /* harmony import */ var _dereference_strategies_openapi_3_1_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(46432);
40138
-
40139
-
40140
-
40141
-
40142
-
40143
-
40144
-
40145
-
40146
-
40147
-
40148
-
40149
-
40150
-
40151
-
40152
-
40153
-
40154
- // @ts-ignore
40155
- const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__.visit[Symbol.for('nodejs.util.promisify.custom')];
40156
-
40157
- // eslint-disable-next-line @typescript-eslint/naming-convention
40158
- const OpenApi3_1ResolveVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
40159
- props: {
40160
- indirections: [],
40161
- namespace: null,
40162
- reference: null,
40163
- crawledElements: null,
40164
- crawlingMap: null,
40165
- visited: null,
40166
- options: null
40167
- },
40168
- init({
40169
- reference,
40170
- namespace,
40171
- indirections = [],
40172
- visited = new WeakSet(),
40173
- options
40174
- }) {
40175
- this.indirections = indirections;
40176
- this.namespace = namespace;
40177
- this.reference = reference;
40178
- this.crawledElements = [];
40179
- this.crawlingMap = {};
40180
- this.visited = visited;
40181
- this.options = options;
40182
- },
40183
- methods: {
40184
- toBaseURI(uri) {
40185
- return _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.resolve(this.reference.uri, _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.sanitize(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(uri)));
40186
- },
40187
- async toReference(uri) {
40188
- // detect maximum depth of resolution
40189
- if (this.reference.depth >= this.options.resolve.maxDepth) {
40190
- throw new _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_3__["default"](`Maximum resolution depth of ${this.options.resolve.maxDepth} has been exceeded by file "${this.reference.uri}"`);
40191
- }
40192
- const baseURI = this.toBaseURI(uri);
40193
- const {
40194
- refSet
40195
- } = this.reference;
40196
-
40197
- // we've already processed this Reference in past
40198
- if (refSet.has(baseURI)) {
40199
- return refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_4__["default"])(baseURI, 'uri'));
40200
- }
40201
- const parseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_5__["default"])(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize(baseURI), {
40202
- ...this.options,
40203
- parse: {
40204
- ...this.options.parse,
40205
- mediaType: 'text/plain'
40206
- }
40207
- });
40208
-
40209
- // register new Reference with ReferenceSet
40210
- const reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_6__["default"])({
40211
- uri: baseURI,
40212
- value: parseResult,
40213
- depth: this.reference.depth + 1
40214
- });
40215
- refSet.add(reference);
40216
- return reference;
40217
- },
40218
- ReferenceElement(referenceElement) {
40219
- const uri = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(referenceElement.$ref);
40220
- const retrievalURI = this.toBaseURI(uri);
40221
-
40222
- // ignore resolving external Reference Objects
40223
- if (!this.options.resolve.external && _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== retrievalURI) {
40224
- // skip traversing this reference element and all it's child elements
40225
- return false;
40226
- }
40227
- if (!(0,ramda__WEBPACK_IMPORTED_MODULE_8__["default"])(retrievalURI, this.crawlingMap)) {
40228
- this.crawlingMap[retrievalURI] = this.toReference(uri);
40229
- }
40230
- this.crawledElements.push(referenceElement);
40231
- return undefined;
40232
- },
40233
- PathItemElement(pathItemElement) {
40234
- // ignore PathItemElement without $ref field
40235
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(pathItemElement.$ref)) {
40236
- return undefined;
40237
- }
40238
- const uri = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(pathItemElement.$ref);
40239
- const retrievalURI = this.toBaseURI(uri);
40240
-
40241
- // ignore resolving external Path Item Objects
40242
- if (!this.options.resolve.external && _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== retrievalURI) {
40243
- // skip traversing this Path Item element but traverse all it's child elements
40244
- return undefined;
40245
- }
40246
- if (!(0,ramda__WEBPACK_IMPORTED_MODULE_8__["default"])(retrievalURI, this.crawlingMap)) {
40247
- this.crawlingMap[retrievalURI] = this.toReference(uri);
40248
- }
40249
- this.crawledElements.push(pathItemElement);
40250
- return undefined;
40251
- },
40252
- LinkElement(linkElement) {
40253
- // ignore LinkElement without operationRef or operationId field
40254
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(linkElement.operationRef) && !(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(linkElement.operationId)) {
40255
- return undefined;
40256
- }
40257
- const uri = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(linkElement.operationRef);
40258
- const retrievalURI = this.toBaseURI(uri);
40259
-
40260
- // ignore resolving external Path Item Elements
40261
- const isExternal = _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== retrievalURI;
40262
- if (!this.options.resolve.external && isExternal) {
40263
- return undefined;
40264
- }
40265
-
40266
- // operationRef and operationId are mutually exclusive
40267
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(linkElement.operationRef) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(linkElement.operationId)) {
40268
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__["default"]('LinkElement operationRef and operationId are mutually exclusive.');
40269
- }
40270
- if (isExternal) {
40271
- if (!(0,ramda__WEBPACK_IMPORTED_MODULE_8__["default"])(retrievalURI, this.crawlingMap)) {
40272
- this.crawlingMap[retrievalURI] = this.toReference(uri);
40273
- }
40274
- }
40275
- return undefined;
40276
- },
40277
- ExampleElement(exampleElement) {
40278
- // ignore ExampleElement without externalValue field
40279
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(exampleElement.externalValue)) {
40280
- return undefined;
40281
- }
40282
-
40283
- // value and externalValue fields are mutually exclusive
40284
- if (exampleElement.hasKey('value') && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(exampleElement.externalValue)) {
40285
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__["default"]('ExampleElement value and externalValue fields are mutually exclusive.');
40286
- }
40287
- const uri = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(exampleElement.externalValue);
40288
- const retrievalURI = this.toBaseURI(uri);
40289
-
40290
- // ignore resolving external Example Objects
40291
- if (!this.options.resolve.external && _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== retrievalURI) {
40292
- // skip traversing this Example element but traverse all it's child elements
40293
- return undefined;
40294
- }
40295
- if (!(0,ramda__WEBPACK_IMPORTED_MODULE_8__["default"])(retrievalURI, this.crawlingMap)) {
40296
- this.crawlingMap[retrievalURI] = this.toReference(uri);
40297
- }
40298
- return undefined;
40299
- },
40300
- async SchemaElement(schemaElement) {
40301
- /**
40302
- * Skip traversal for already visited schemas and all their child schemas.
40303
- * visit function detects cycles in path automatically.
40304
- */
40305
- if (this.visited.has(schemaElement)) {
40306
- return false;
40307
- }
40308
- // skip current referencing schema as $ref keyword was not defined
40309
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(schemaElement.$ref)) {
40310
- // mark current referencing schema as visited
40311
- this.visited.add(schemaElement);
40312
- // skip traversing this schema but traverse all it's child schemas
40313
- return undefined;
40314
- }
40315
-
40316
- // compute baseURI using rules around $id and $ref keywords
40317
- const reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize(this.reference.uri));
40318
- let {
40319
- uri: retrievalURI
40320
- } = reference;
40321
- const $refBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.resolveSchema$refField)(retrievalURI, schemaElement);
40322
- const $refBaseURIStrippedHash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash($refBaseURI);
40323
- const file = (0,_util_File_mjs__WEBPACK_IMPORTED_MODULE_12__["default"])({
40324
- uri: $refBaseURIStrippedHash
40325
- });
40326
- const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_13__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
40327
- const isURL = !isUnknownURI;
40328
- const isExternalURL = uri => _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== uri;
40329
- if (!(0,ramda__WEBPACK_IMPORTED_MODULE_8__["default"])($refBaseURIStrippedHash, this.crawlingMap)) {
40330
- try {
40331
- if (isUnknownURI || isURL) {
40332
- this.crawlingMap[$refBaseURIStrippedHash] = reference;
40333
- } else {
40334
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])($refBaseURI));
40335
-
40336
- // ignore resolving external Schema Objects
40337
- if (!this.options.resolve.external && isExternalURL(retrievalURI)) {
40338
- // skip traversing this schema element but traverse all it's child elements
40339
- this.visited.add(schemaElement);
40340
- return undefined;
40341
- }
40342
- this.crawlingMap[$refBaseURIStrippedHash] = this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40343
- }
40344
- } catch (error) {
40345
- if (isURL && error instanceof _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_14__["default"]) {
40346
- retrievalURI = this.toBaseURI(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40347
-
40348
- // ignore resolving external Schema Objects
40349
- if (!this.options.resolve.external && isExternalURL(retrievalURI)) {
40350
- // skip traversing this schema element but traverse all it's child elements
40351
- this.visited.add(schemaElement);
40352
- return undefined;
40353
- }
40354
- this.crawlingMap[$refBaseURIStrippedHash] = this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40355
- } else {
40356
- throw error;
40357
- }
40358
- }
40359
- }
40360
- this.crawledElements.push(schemaElement);
40361
- return undefined;
40362
- },
40363
- async crawlReferenceElement(referenceElement) {
40364
- // @ts-ignore
40365
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(referenceElement.$ref));
40366
- this.indirections.push(referenceElement);
40367
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(referenceElement.$ref));
40368
-
40369
- // possibly non-semantic fragment
40370
- let fragment = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_16__["default"])(jsonPointer, reference.value.result);
40371
-
40372
- // applying semantics to a fragment
40373
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isPrimitiveElement)(fragment)) {
40374
- const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(referenceElement.meta.get('referenced-element'));
40375
- if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.isReferenceLikeElement)(fragment)) {
40376
- // handling indirect references
40377
- fragment = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.ReferenceElement.refract(fragment);
40378
- fragment.setMetaProperty('referenced-element', referencedElementType);
40379
- } else {
40380
- // handling direct references
40381
- const ElementClass = this.namespace.getElementClass(referencedElementType);
40382
- fragment = ElementClass.refract(fragment);
40383
- }
40384
- }
40385
-
40386
- // detect direct or circular reference
40387
- if (this.indirections.includes(fragment)) {
40388
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__["default"]('Recursive Reference Object detected');
40389
- }
40390
-
40391
- // detect maximum depth of dereferencing
40392
- if (this.indirections.length > this.options.dereference.maxDepth) {
40393
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_19__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
40394
- }
40395
-
40396
- // dive deep into the fragment
40397
- const visitor = OpenApi3_1ResolveVisitor({
40398
- reference,
40399
- namespace: this.namespace,
40400
- indirections: [...this.indirections],
40401
- options: this.options
40402
- });
40403
- await visitAsync(fragment, visitor, {
40404
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
40405
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
40406
- });
40407
- await visitor.crawl();
40408
- this.indirections.pop();
40409
- },
40410
- async crawlPathItemElement(pathItemElement) {
40411
- // @ts-ignore
40412
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(pathItemElement.$ref));
40413
- this.indirections.push(pathItemElement);
40414
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])(pathItemElement.$ref));
40415
-
40416
- // possibly non-semantic fragment
40417
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_16__["default"])(jsonPointer, reference.value.result);
40418
-
40419
- // applying semantics to a fragment
40420
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isPrimitiveElement)(referencedElement)) {
40421
- referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.PathItemElement.refract(referencedElement);
40422
- }
40423
-
40424
- // detect direct or indirect reference
40425
- if (this.indirections.includes(referencedElement)) {
40426
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__["default"]('Recursive Path Item Object reference detected');
40427
- }
40428
-
40429
- // detect maximum depth of dereferencing
40430
- if (this.indirections.length > this.options.dereference.maxDepth) {
40431
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_19__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
40432
- }
40433
-
40434
- // dive deep into the fragment
40435
- const visitor = OpenApi3_1ResolveVisitor({
40436
- reference,
40437
- namespace: this.namespace,
40438
- indirections: [...this.indirections],
40439
- options: this.options
40440
- });
40441
- await visitAsync(referencedElement, visitor, {
40442
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
40443
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
40444
- });
40445
- await visitor.crawl();
40446
- this.indirections.pop();
40447
- },
40448
- async crawlSchemaElement(referencingElement) {
40449
- // compute baseURI using rules around $id and $ref keywords
40450
- let reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize(this.reference.uri));
40451
- let {
40452
- uri: retrievalURI
40453
- } = reference;
40454
- const $refBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.resolveSchema$refField)(retrievalURI, referencingElement);
40455
- const $refBaseURIStrippedHash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash($refBaseURI);
40456
- const file = (0,_util_File_mjs__WEBPACK_IMPORTED_MODULE_12__["default"])({
40457
- uri: $refBaseURIStrippedHash
40458
- });
40459
- const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_13__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
40460
- const isURL = !isUnknownURI;
40461
- const isExternalURL = uri => _util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.stripHash(this.reference.uri) !== uri;
40462
- this.indirections.push(referencingElement);
40463
-
40464
- // determining reference, proper evaluation and selection mechanism
40465
- let referencedElement;
40466
- try {
40467
- if (isUnknownURI || isURL) {
40468
- // we're dealing with canonical URI or URL with possible fragment
40469
- const selector = $refBaseURI;
40470
- referencedElement = (0,_dereference_strategies_openapi_3_1_selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_21__.evaluate)(selector,
40471
- // @ts-ignore
40472
- (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.maybeRefractToSchemaElement)(reference.value.result));
40473
- } else {
40474
- // we're assuming here that we're dealing with JSON Pointer here
40475
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])($refBaseURI));
40476
-
40477
- // ignore resolving external Schema Objects
40478
- if (!this.options.resolve.external && isExternalURL(retrievalURI)) {
40479
- // skip traversing this schema element but traverse all it's child elements
40480
- return undefined;
40481
- }
40482
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40483
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__.uriToPointer)($refBaseURI);
40484
- referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.maybeRefractToSchemaElement)(
40485
- // @ts-ignore
40486
- (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_16__["default"])(selector, reference.value.result));
40487
- }
40488
- } catch (error) {
40489
- /**
40490
- * No SchemaElement($id=URL) was not found, so we're going to try to resolve
40491
- * the URL and assume the returned response is a JSON Schema.
40492
- */
40493
- if (isURL && error instanceof _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_14__["default"]) {
40494
- if ((0,_dereference_strategies_openapi_3_1_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_22__.isAnchor)((0,_dereference_strategies_openapi_3_1_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_22__.uriToAnchor)($refBaseURI))) {
40495
- // we're dealing with JSON Schema $anchor here
40496
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])($refBaseURI));
40497
-
40498
- // ignore resolving external Schema Objects
40499
- if (!this.options.resolve.external && isExternalURL(retrievalURI)) {
40500
- // skip traversing this schema element but traverse all it's child elements
40501
- return undefined;
40502
- }
40503
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40504
- const selector = (0,_dereference_strategies_openapi_3_1_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_22__.uriToAnchor)($refBaseURI);
40505
- referencedElement = (0,_dereference_strategies_openapi_3_1_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_22__.evaluate)(selector,
40506
- // @ts-ignore
40507
- (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.maybeRefractToSchemaElement)(reference.value.result));
40508
- } else {
40509
- // we're assuming here that we're dealing with JSON Pointer here
40510
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"])($refBaseURI));
40511
-
40512
- // ignore resolving external Schema Objects
40513
- if (!this.options.resolve.external && isExternalURL(retrievalURI)) {
40514
- // skip traversing this schema element but traverse all it's child elements
40515
- return undefined;
40516
- }
40517
- reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_2__.unsanitize($refBaseURI));
40518
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__.uriToPointer)($refBaseURI);
40519
- referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_11__.maybeRefractToSchemaElement)(
40520
- // @ts-ignore
40521
- (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_16__["default"])(selector, reference.value.result));
40522
- }
40523
- } else {
40524
- throw error;
40525
- }
40526
- }
40527
-
40528
- // mark current referencing schema as visited
40529
- this.visited.add(referencingElement);
40530
-
40531
- // detect direct or indirect reference
40532
- if (this.indirections.includes(referencedElement)) {
40533
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_10__["default"]('Recursive Schema Object reference detected');
40534
- }
40535
-
40536
- // detect maximum depth of dereferencing
40537
- if (this.indirections.length > this.options.dereference.maxDepth) {
40538
- throw new _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_19__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
40539
- }
40540
-
40541
- // dive deep into the fragment
40542
- const visitor = OpenApi3_1ResolveVisitor({
40543
- reference,
40544
- namespace: this.namespace,
40545
- indirections: [...this.indirections],
40546
- options: this.options,
40547
- visited: this.visited
40548
- });
40549
- await visitAsync(referencedElement, visitor, {
40550
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
40551
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
40552
- });
40553
- await visitor.crawl();
40554
- this.indirections.pop();
40555
- return undefined;
40556
- },
40557
- async crawl() {
40558
- /**
40559
- * Synchronize all parallel resolutions in this place.
40560
- * After synchronization happened we can be sure that refSet
40561
- * contains resolved Reference objects.
40562
- */
40563
- await (0,ramda__WEBPACK_IMPORTED_MODULE_23__["default"])(ramda__WEBPACK_IMPORTED_MODULE_24__["default"], ramda_adjunct__WEBPACK_IMPORTED_MODULE_25__["default"])(this.crawlingMap);
40564
- this.crawlingMap = null;
40565
-
40566
- /* eslint-disable no-await-in-loop */
40567
- for (const element of this.crawledElements) {
40568
- if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_26__.isReferenceElement)(element)) {
40569
- await this.crawlReferenceElement(element);
40570
- } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_26__.isSchemaElement)(element)) {
40571
- await this.crawlSchemaElement(element);
40572
- } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_26__.isPathItemElement)(element)) {
40573
- await this.crawlPathItemElement(element);
40574
- }
40575
- }
40576
- /* eslint-enable */
40577
- }
40578
- }
40579
- });
40580
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (OpenApi3_1ResolveVisitor);
40581
-
40582
- /***/ }),
40583
-
40584
40277
  /***/ 75253:
40585
40278
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
40586
40279
 
@@ -52593,56 +52286,6 @@ var uniqWith =
52593
52286
 
52594
52287
  /***/ }),
52595
52288
 
52596
- /***/ 22060:
52597
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
52598
-
52599
- "use strict";
52600
- __webpack_require__.r(__webpack_exports__);
52601
- /* harmony export */ __webpack_require__.d(__webpack_exports__, {
52602
- /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
52603
- /* harmony export */ });
52604
- /* harmony import */ var _internal_curry1_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3579);
52605
- /* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82506);
52606
-
52607
-
52608
- /**
52609
- * Returns a list of all the enumerable own properties of the supplied object.
52610
- * Note that the order of the output array is not guaranteed across different
52611
- * JS platforms.
52612
- *
52613
- * @func
52614
- * @memberOf R
52615
- * @since v0.1.0
52616
- * @category Object
52617
- * @sig {k: v} -> [v]
52618
- * @param {Object} obj The object to extract values from
52619
- * @return {Array} An array of the values of the object's own properties.
52620
- * @see R.valuesIn, R.keys, R.toPairs
52621
- * @example
52622
- *
52623
- * R.values({a: 1, b: 2, c: 3}); //=> [1, 2, 3]
52624
- */
52625
-
52626
- var values =
52627
- /*#__PURE__*/
52628
- (0,_internal_curry1_js__WEBPACK_IMPORTED_MODULE_0__["default"])(function values(obj) {
52629
- var props = (0,_keys_js__WEBPACK_IMPORTED_MODULE_1__["default"])(obj);
52630
- var len = props.length;
52631
- var vals = [];
52632
- var idx = 0;
52633
-
52634
- while (idx < len) {
52635
- vals[idx] = obj[props[idx]];
52636
- idx += 1;
52637
- }
52638
-
52639
- return vals;
52640
- });
52641
-
52642
- /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (values);
52643
-
52644
- /***/ }),
52645
-
52646
52289
  /***/ 32366:
52647
52290
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
52648
52291