swagger-client 3.26.0 → 3.26.1

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;
@@ -2507,7 +2508,7 @@ __webpack_require__.r(__webpack_exports__);
2507
2508
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(60503);
2508
2509
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(15767);
2509
2510
  /* 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);
2511
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(51776);
2511
2512
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(46432);
2512
2513
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(16129);
2513
2514
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(78311);
@@ -4232,7 +4233,8 @@ const resolveOpenAPI31Strategy = async options => {
4232
4233
  refSet,
4233
4234
  dereferenceOpts: {
4234
4235
  errors
4235
- }
4236
+ },
4237
+ immutable: false
4236
4238
  }
4237
4239
  });
4238
4240
  const transcluded = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_20__.transclude)(fragmentElement, dereferenced, openApiElement);
@@ -17666,45 +17668,6 @@ module.exports = {
17666
17668
  };
17667
17669
 
17668
17670
 
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
17671
  /***/ }),
17709
17672
 
17710
17673
  /***/ 88931:
@@ -37743,9 +37706,9 @@ const ReferenceSet = stampit__WEBPACK_IMPORTED_MODULE_0__({
37743
37706
  },
37744
37707
  clean() {
37745
37708
  this.refs.forEach(ref => {
37746
- // eslint-disable-next-line no-param-reassign
37747
- ref.refSet = null;
37709
+ ref.refSet = null; // eslint-disable-line no-param-reassign
37748
37710
  });
37711
+ this.rootRef = null;
37749
37712
  this.refs = [];
37750
37713
  }
37751
37714
  }
@@ -37949,6 +37912,10 @@ const dereference = async (uri, options) => {
37949
37912
  const mergedOptions = (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_11__.merge)(options, {
37950
37913
  resolve: {
37951
37914
  baseURI: sanitizedURI
37915
+ },
37916
+ dereference: {
37917
+ // if refSet was not provided, then we can work in mutable mode
37918
+ immutable: options.dereference.immutable && refSet !== null
37952
37919
  }
37953
37920
  });
37954
37921
  return dereferenceApiDOM(parseResult, mergedOptions);
@@ -37994,23 +37961,24 @@ __webpack_require__.r(__webpack_exports__);
37994
37961
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
37995
37962
  /* harmony export */ OpenApi3_1DereferenceVisitor: () => (/* reexport safe */ _visitor_mjs__WEBPACK_IMPORTED_MODULE_11__["default"]),
37996
37963
  /* 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)
37964
+ /* harmony export */ maybeRefractToSchemaElement: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.maybeRefractToSchemaElement),
37965
+ /* harmony export */ resolveSchema$idField: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveSchema$idField),
37966
+ /* harmony export */ resolveSchema$refField: () => (/* reexport safe */ _util_mjs__WEBPACK_IMPORTED_MODULE_13__.resolveSchema$refField)
37999
37967
  /* harmony export */ });
38000
37968
  /* 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);
37969
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(95201);
38003
37970
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
38004
37971
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1667);
37972
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(87024);
38005
37973
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94145);
38006
37974
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70281);
38007
37975
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(41544);
38008
37976
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(66648);
38009
37977
  /* 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);
37978
+ /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(12349);
37979
+ /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(31387);
38012
37980
  /* 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);
37981
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(51776);
38014
37982
 
38015
37983
 
38016
37984
 
@@ -38038,18 +38006,34 @@ const OpenApi3_1DereferenceStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_Dere
38038
38006
  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
38007
  },
38040
38008
  async dereference(file, options) {
38009
+ var _options$dereference$;
38041
38010
  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);
38011
+ const immutableRefSet = (_options$dereference$ = options.dereference.refSet) !== null && _options$dereference$ !== void 0 ? _options$dereference$ : (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])();
38012
+ const mutableRefsSet = (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])();
38013
+ let refSet = immutableRefSet;
38043
38014
  let reference;
38044
- if (!refSet.has(file.uri)) {
38045
- reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_9__["default"])({
38015
+ if (!immutableRefSet.has(file.uri)) {
38016
+ reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38046
38017
  uri: file.uri,
38047
38018
  value: file.parseResult
38048
38019
  });
38049
- refSet.add(reference);
38020
+ immutableRefSet.add(reference);
38050
38021
  } else {
38051
38022
  // pre-computed refSet was provided as configuration option
38052
- reference = refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_10__["default"])(file.uri, 'uri'));
38023
+ reference = immutableRefSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_9__["default"])(file.uri, 'uri'));
38024
+ }
38025
+
38026
+ /**
38027
+ * Clone refSet due the dereferencing process being mutable.
38028
+ * We don't want to mutate the original refSet and the references.
38029
+ */
38030
+ if (options.dereference.immutable) {
38031
+ immutableRefSet.refs.map(ref => (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38032
+ ...ref,
38033
+ value: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.cloneDeep)(ref.value)
38034
+ })).forEach(ref => mutableRefsSet.add(ref));
38035
+ reference = mutableRefsSet.find(ref => ref.uri === file.uri);
38036
+ refSet = mutableRefsSet;
38053
38037
  }
38054
38038
  const visitor = (0,_visitor_mjs__WEBPACK_IMPORTED_MODULE_11__["default"])({
38055
38039
  reference,
@@ -38061,13 +38045,26 @@ const OpenApi3_1DereferenceStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_Dere
38061
38045
  nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__.getNodeType
38062
38046
  });
38063
38047
 
38048
+ /**
38049
+ * If immutable option is set, replay refs from the refSet.
38050
+ */
38051
+ if (options.dereference.immutable) {
38052
+ mutableRefsSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38053
+ ...ref,
38054
+ uri: ref.uri.replace(/^immutable:\/\//, '')
38055
+ })).forEach(ref => immutableRefSet.add(ref));
38056
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
38057
+ refSet = immutableRefSet;
38058
+ }
38059
+
38064
38060
  /**
38065
38061
  * Release all memory if this refSet was not provided as an configuration option.
38066
38062
  * If provided as configuration option, then provider is responsible for cleanup.
38067
38063
  */
38068
38064
  if (options.dereference.refSet === null) {
38069
- refSet.clean();
38065
+ immutableRefSet.clean();
38070
38066
  }
38067
+ mutableRefsSet.clean();
38071
38068
  return dereferencedElement;
38072
38069
  }
38073
38070
  }
@@ -38167,7 +38164,7 @@ __webpack_require__.r(__webpack_exports__);
38167
38164
  /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83748);
38168
38165
  /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(78311);
38169
38166
  /* 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);
38167
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(51776);
38171
38168
  /* harmony import */ var _errors_JsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(64937);
38172
38169
 
38173
38170
 
@@ -38195,7 +38192,7 @@ const evaluate = (uri, element) => {
38195
38192
 
38196
38193
  // search for the matching schema
38197
38194
  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);
38195
+ const $idBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_3__.resolveSchema$idField)(uriStrippedHash, e);
38199
38196
  return $idBaseURI === uriStrippedHash;
38200
38197
  });
38201
38198
  if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_4__["default"])(result)) {
@@ -38220,6 +38217,72 @@ evaluate.cache = new WeakMap();
38220
38217
 
38221
38218
 
38222
38219
 
38220
+ /***/ }),
38221
+
38222
+ /***/ 51776:
38223
+ /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
38224
+
38225
+ "use strict";
38226
+ __webpack_require__.r(__webpack_exports__);
38227
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
38228
+ /* harmony export */ maybeRefractToSchemaElement: () => (/* binding */ maybeRefractToSchemaElement),
38229
+ /* harmony export */ refractToSchemaElement: () => (/* binding */ refractToSchemaElement),
38230
+ /* harmony export */ resolveSchema$idField: () => (/* binding */ resolveSchema$idField),
38231
+ /* harmony export */ resolveSchema$refField: () => (/* binding */ resolveSchema$refField)
38232
+ /* harmony export */ });
38233
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5920);
38234
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(9999);
38235
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(33501);
38236
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3117);
38237
+ /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(83748);
38238
+
38239
+
38240
+
38241
+
38242
+ const resolveSchema$refField = (retrievalURI, schemaElement) => {
38243
+ if (typeof schemaElement.$ref === 'undefined') {
38244
+ return undefined;
38245
+ }
38246
+ const hash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_0__.getHash((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref));
38247
+ const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
38248
+ const $refBaseURI = (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, uri) => {
38249
+ 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)));
38250
+ }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$ref)]);
38251
+ return `${$refBaseURI}${hash === '#' ? '' : hash}`;
38252
+ };
38253
+ const resolveSchema$idField = (retrievalURI, schemaElement) => {
38254
+ if (typeof schemaElement.$id === 'undefined') {
38255
+ return undefined;
38256
+ }
38257
+ const inherited$id = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.meta.get('inherited$id'));
38258
+ return (0,ramda__WEBPACK_IMPORTED_MODULE_2__["default"])((acc, $id) => {
38259
+ 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)));
38260
+ }, retrievalURI, [...inherited$id, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__["default"])(schemaElement.$id)]);
38261
+ };
38262
+
38263
+ /**
38264
+ * Cached version of SchemaElement.refract.
38265
+ */
38266
+ const refractToSchemaElement = element => {
38267
+ if (refractToSchemaElement.cache.has(element)) {
38268
+ return refractToSchemaElement.cache.get(element);
38269
+ }
38270
+ const refracted = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__.SchemaElement.refract(element);
38271
+ refractToSchemaElement.cache.set(element, refracted);
38272
+ return refracted;
38273
+ };
38274
+ refractToSchemaElement.cache = new WeakMap();
38275
+ const maybeRefractToSchemaElement = element => {
38276
+ /**
38277
+ * Conditional version of refractToSchemaElement, that acts as an identity
38278
+ * function for all non-primitive Element instances.
38279
+ */
38280
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__.isPrimitiveElement)(element)) {
38281
+ return refractToSchemaElement(element);
38282
+ }
38283
+ return element;
38284
+ };
38285
+
38223
38286
  /***/ }),
38224
38287
 
38225
38288
  /***/ 32346:
@@ -38231,33 +38294,34 @@ __webpack_require__.r(__webpack_exports__);
38231
38294
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
38232
38295
  /* harmony export */ });
38233
38296
  /* 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);
38297
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95201);
38298
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(10796);
38299
+ /* harmony import */ var ramda_adjunct__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(18461);
38237
38300
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(46571);
38238
38301
  /* 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);
38302
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(87024);
38240
38303
  /* 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);
38304
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(9999);
38305
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(44824);
38306
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(82570);
38307
+ /* harmony import */ var _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(98219);
38308
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(85270);
38309
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(18316);
38310
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(85013);
38311
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(3117);
38312
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(70281);
38313
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(66648);
38314
+ /* harmony import */ var _selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(46432);
38315
+ /* harmony import */ var _selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(16129);
38316
+ /* harmony import */ var _errors_MaximumDereferenceDepthError_mjs__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(60503);
38317
+ /* harmony import */ var _errors_MaximumResolveDepthError_mjs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(57823);
38318
+ /* harmony import */ var _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(83748);
38319
+ /* harmony import */ var _parse_index_mjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(7998);
38320
+ /* harmony import */ var _Reference_mjs__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(12349);
38321
+ /* harmony import */ var _util_File_mjs__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(15767);
38322
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(51776);
38323
+ /* harmony import */ var _util_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87649);
38324
+ /* harmony import */ var _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(78311);
38261
38325
 
38262
38326
 
38263
38327
 
@@ -38281,12 +38345,6 @@ const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__.visit[S
38281
38345
  // initialize element identity manager
38282
38346
  const identityManager = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_2__.IdentityManager)();
38283
38347
 
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
38348
  // eslint-disable-next-line @typescript-eslint/naming-convention
38291
38349
  const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38292
38350
  props: {
@@ -38302,24 +38360,24 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38302
38360
  reference,
38303
38361
  namespace,
38304
38362
  options,
38305
- ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_4__.AncestorLineage(),
38363
+ ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(),
38306
38364
  refractCache = new Map()
38307
38365
  }) {
38308
38366
  this.indirections = indirections;
38309
38367
  this.namespace = namespace;
38310
38368
  this.reference = reference;
38311
38369
  this.options = options;
38312
- this.ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_4__.AncestorLineage(...ancestors);
38370
+ this.ancestors = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(...ancestors);
38313
38371
  this.refractCache = refractCache;
38314
38372
  },
38315
38373
  methods: {
38316
38374
  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)));
38375
+ 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
38376
  },
38319
38377
  async toReference(uri) {
38320
38378
  // detect maximum depth of resolution
38321
38379
  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}"`);
38380
+ 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
38381
  }
38324
38382
  const baseURI = this.toBaseURI(uri);
38325
38383
  const {
@@ -38328,9 +38386,9 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38328
38386
 
38329
38387
  // we've already processed this Reference in past
38330
38388
  if (refSet.has(baseURI)) {
38331
- return refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_7__["default"])(baseURI, 'uri'));
38389
+ return refSet.find((0,ramda__WEBPACK_IMPORTED_MODULE_6__["default"])(baseURI, 'uri'));
38332
38390
  }
38333
- const parseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])(_util_url_mjs__WEBPACK_IMPORTED_MODULE_5__.unsanitize(baseURI), {
38391
+ const parseResult = await (0,_parse_index_mjs__WEBPACK_IMPORTED_MODULE_7__["default"])(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(baseURI), {
38334
38392
  ...this.options,
38335
38393
  parse: {
38336
38394
  ...this.options.parse,
@@ -38338,14 +38396,23 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38338
38396
  }
38339
38397
  });
38340
38398
 
38341
- // register new Reference with ReferenceSet
38342
- const reference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_9__["default"])({
38399
+ // register new mutable reference with a refSet
38400
+ const mutableReference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38343
38401
  uri: baseURI,
38344
- value: parseResult,
38402
+ value: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(parseResult),
38345
38403
  depth: this.reference.depth + 1
38346
38404
  });
38347
- refSet.add(reference);
38348
- return reference;
38405
+ refSet.add(mutableReference);
38406
+ if (this.options.dereference.immutable) {
38407
+ // register new immutable reference with a refSet
38408
+ const immutableReference = (0,_Reference_mjs__WEBPACK_IMPORTED_MODULE_8__["default"])({
38409
+ uri: `immutable://${baseURI}`,
38410
+ value: parseResult,
38411
+ depth: this.reference.depth + 1
38412
+ });
38413
+ refSet.add(immutableReference);
38414
+ }
38415
+ return mutableReference;
38349
38416
  },
38350
38417
  toAncestorLineage(ancestors) {
38351
38418
  /**
@@ -38353,18 +38420,17 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38353
38420
  * Ancestors are flatten to unwrap all Element instances.
38354
38421
  */
38355
38422
  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);
38423
+ const ancestorsLineage = new _util_mjs__WEBPACK_IMPORTED_MODULE_3__.AncestorLineage(...this.ancestors, directAncestors);
38357
38424
  return [ancestorsLineage, directAncestors];
38358
38425
  },
38359
38426
  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)) {
38427
+ // skip current referencing element as it's already been access
38428
+ if (this.indirections.includes(referencingElement)) {
38364
38429
  return false;
38365
38430
  }
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;
38431
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38432
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38433
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38368
38434
  const isExternalReference = !isInternalReference;
38369
38435
 
38370
38436
  // ignore resolving internal Reference Objects
@@ -38377,23 +38443,24 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38377
38443
  // skip traversing this reference element and all it's child elements
38378
38444
  return false;
38379
38445
  }
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));
38446
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38447
+ const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38382
38448
  this.indirections.push(referencingElement);
38383
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38449
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38384
38450
 
38385
38451
  // possibly non-semantic fragment
38386
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(jsonPointer, reference.value.result);
38452
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38453
+ referencedElement.id = identityManager.identify(referencedElement);
38387
38454
 
38388
38455
  // applying semantics to a fragment
38389
38456
  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))}`;
38457
+ const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.meta.get('referenced-element'));
38458
+ const cacheKey = `${referencedElementType}-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(referencedElement))}`;
38392
38459
  if (this.refractCache.has(cacheKey)) {
38393
38460
  referencedElement = this.refractCache.get(cacheKey);
38394
- } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_13__.isReferenceLikeElement)(referencedElement)) {
38461
+ } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.isReferenceLikeElement)(referencedElement)) {
38395
38462
  // handling indirect references
38396
- referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.ReferenceElement.refract(referencedElement);
38463
+ referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.ReferenceElement.refract(referencedElement);
38397
38464
  referencedElement.setMetaProperty('referenced-element', referencedElementType);
38398
38465
  this.refractCache.set(cacheKey, referencedElement);
38399
38466
  } else {
@@ -38405,98 +38472,125 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38405
38472
  }
38406
38473
 
38407
38474
  // 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');
38475
+ if (referencingElement === referencedElement) {
38476
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Reference Object detected');
38410
38477
  }
38411
38478
 
38412
38479
  // detect maximum depth of dereferencing
38413
38480
  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}"`);
38481
+ 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}"`);
38482
+ }
38483
+
38484
+ // detect second deep dive into the same fragment and avoid it
38485
+ if (ancestorsLineage.includes(referencedElement)) {
38486
+ reference.refSet.circular = true;
38487
+ if (this.options.dereference.circular === 'error') {
38488
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
38489
+ } else if (this.options.dereference.circular === 'replace') {
38490
+ var _this$options$derefer, _this$options$derefer2;
38491
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
38492
+ type: 'reference',
38493
+ uri: reference.uri,
38494
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38495
+ });
38496
+ 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;
38497
+ const replacement = replacer(refElement);
38498
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38499
+ parent.value = replacement; // eslint-disable-line no-param-reassign
38500
+ } else if (Array.isArray(parent)) {
38501
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
38502
+ }
38503
+ return !parent ? replacement : false;
38504
+ }
38415
38505
  }
38416
38506
 
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
- });
38507
+ /**
38508
+ * Dive deep into the fragment.
38509
+ *
38510
+ * Cases to consider:
38511
+ * 1. We're crossing document boundary
38512
+ * 2. Fragment is a Reference Object. We need to follow it to get the eventual value
38513
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
38514
+ */
38515
+ 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)) {
38516
+ // append referencing reference to ancestors lineage
38517
+ directAncestors.add(referencingElement);
38518
+ const visitor = OpenApi3_1DereferenceVisitor({
38519
+ reference,
38520
+ namespace: this.namespace,
38521
+ indirections: [...this.indirections],
38522
+ options: this.options,
38523
+ refractCache: this.refractCache,
38524
+ ancestors: ancestorsLineage
38525
+ });
38526
+ referencedElement = await visitAsync(referencedElement, visitor, {
38527
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
38528
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
38529
+ });
38433
38530
 
38434
- // remove referencing reference from ancestors lineage
38435
- directAncestors.delete(referencingElement);
38531
+ // remove referencing reference from ancestors lineage
38532
+ directAncestors.delete(referencingElement);
38533
+ }
38436
38534
  this.indirections.pop();
38437
- const mergeAndAnnotateReferencedElement = refedElement => {
38438
- const copy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(refedElement);
38439
38535
 
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)));
38536
+ /**
38537
+ * Creating a new version of referenced element to avoid modifying the original one.
38538
+ */
38539
+ const mergedElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(referencedElement);
38540
+ // assign unique id to merged element
38541
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38542
+ // annotate fragment with info about original Reference element
38543
+ mergedElement.setMetaProperty('ref-fields', {
38544
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref),
38545
+ // @ts-ignore
38546
+ description: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.description),
38547
+ // @ts-ignore
38548
+ summary: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.summary)
38549
+ });
38550
+ // annotate fragment with info about origin
38551
+ mergedElement.setMetaProperty('ref-origin', reference.uri);
38552
+ // annotate fragment with info about referencing element
38553
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
38452
38554
 
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
- }
38555
+ // override description and summary (outer has higher priority then inner)
38556
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isObjectElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isObjectElement)(mergedElement)) {
38557
+ if (referencingElement.hasKey('description') && 'description' in referencedElement) {
38558
+ mergedElement.remove('description');
38559
+ mergedElement.set('description', referencingElement.get('description'));
38467
38560
  }
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
38561
+ if (referencingElement.hasKey('summary') && 'summary' in referencedElement) {
38562
+ mergedElement.remove('summary');
38563
+ mergedElement.set('summary', referencingElement.get('summary'));
38479
38564
  }
38480
- return false;
38481
38565
  }
38482
38566
 
38483
- // transclude the element for a fragment
38484
- return mergeAndAnnotateReferencedElement(referencedElement);
38567
+ /**
38568
+ * Transclude referencing element with merged referenced element.
38569
+ */
38570
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38571
+ parent.value = mergedElement; // eslint-disable-line no-param-reassign
38572
+ } else if (Array.isArray(parent)) {
38573
+ parent[key] = mergedElement; // eslint-disable-line no-param-reassign
38574
+ }
38575
+
38576
+ /**
38577
+ * We're at the root of the tree, so we're just replacing the entire tree.
38578
+ */
38579
+ return !parent ? mergedElement : false;
38485
38580
  },
38486
38581
  async PathItemElement(referencingElement, key, parent, path, ancestors) {
38487
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38488
-
38489
38582
  // ignore PathItemElement without $ref field
38490
38583
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(referencingElement.$ref)) {
38491
38584
  return undefined;
38492
38585
  }
38493
38586
 
38494
- // detect possible cycle in traversal and avoid it
38495
- if (ancestorsLineage.includesCycle(referencingElement)) {
38587
+ // skip current referencing element as it's already been access
38588
+ if (this.indirections.includes(referencingElement)) {
38496
38589
  return false;
38497
38590
  }
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;
38591
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38592
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38593
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38500
38594
  const isExternalReference = !isInternalReference;
38501
38595
 
38502
38596
  // ignore resolving external Path Item Objects
@@ -38509,92 +38603,130 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38509
38603
  // skip traversing this Path Item element but traverse all it's child elements
38510
38604
  return undefined;
38511
38605
  }
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));
38606
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38607
+ const $refBaseURI = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref));
38514
38608
  this.indirections.push(referencingElement);
38515
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_11__.uriToPointer)($refBaseURI);
38609
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38516
38610
 
38517
38611
  // possibly non-semantic referenced element
38518
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(jsonPointer, reference.value.result);
38612
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38613
+ referencedElement.id = identityManager.identify(referencedElement);
38519
38614
 
38520
- // applying semantics to a referenced element
38615
+ /**
38616
+ * Applying semantics to a referenced element if semantics are missing.
38617
+ */
38521
38618
  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))}`;
38619
+ const cacheKey = `path-item-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(referencedElement))}`;
38523
38620
  if (this.refractCache.has(cacheKey)) {
38524
38621
  referencedElement = this.refractCache.get(cacheKey);
38525
38622
  } else {
38526
- referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.PathItemElement.refract(referencedElement);
38623
+ referencedElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.PathItemElement.refract(referencedElement);
38527
38624
  this.refractCache.set(cacheKey, referencedElement);
38528
38625
  }
38529
38626
  }
38530
38627
 
38531
38628
  // 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');
38629
+ if (referencingElement === referencedElement) {
38630
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Path Item Object reference detected');
38534
38631
  }
38535
38632
 
38536
38633
  // detect maximum depth of dereferencing
38537
38634
  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}"`);
38635
+ 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}"`);
38636
+ }
38637
+
38638
+ // detect second deep dive into the same fragment and avoid it
38639
+ if (ancestorsLineage.includes(referencedElement)) {
38640
+ reference.refSet.circular = true;
38641
+ if (this.options.dereference.circular === 'error') {
38642
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
38643
+ } else if (this.options.dereference.circular === 'replace') {
38644
+ var _this$options$derefer3, _this$options$derefer4;
38645
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
38646
+ type: 'path-item',
38647
+ uri: reference.uri,
38648
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38649
+ });
38650
+ 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;
38651
+ const replacement = replacer(refElement);
38652
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38653
+ parent.value = replacement; // eslint-disable-line no-param-reassign
38654
+ } else if (Array.isArray(parent)) {
38655
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
38656
+ }
38657
+ return !parent ? replacement : false;
38658
+ }
38539
38659
  }
38540
38660
 
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
- });
38661
+ /**
38662
+ * Dive deep into the fragment.
38663
+ *
38664
+ * Cases to consider:
38665
+ * 1. We're crossing document boundary
38666
+ * 2. Fragment is a Path Item Object with $ref field. We need to follow it to get the eventual value
38667
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
38668
+ */
38669
+ 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)) {
38670
+ // append referencing reference to ancestors lineage
38671
+ directAncestors.add(referencingElement);
38672
+ const visitor = OpenApi3_1DereferenceVisitor({
38673
+ reference,
38674
+ namespace: this.namespace,
38675
+ indirections: [...this.indirections],
38676
+ options: this.options,
38677
+ refractCache: this.refractCache,
38678
+ ancestors: ancestorsLineage
38679
+ });
38680
+ referencedElement = await visitAsync(referencedElement, visitor, {
38681
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
38682
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
38683
+ });
38557
38684
 
38558
- // remove referencing path item from ancestors lineage
38559
- directAncestors.delete(referencingElement);
38685
+ // remove referencing reference from ancestors lineage
38686
+ directAncestors.delete(referencingElement);
38687
+ }
38560
38688
  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));
38689
+
38690
+ /**
38691
+ * Creating a new version of Path Item by merging fields from referenced Path Item with referencing one.
38692
+ */
38693
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isPathItemElement)(referencedElement)) {
38694
+ 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));
38695
+ // assign unique id to merged element
38696
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38564
38697
  // existing keywords from referencing PathItemElement overrides ones from referenced element
38565
38698
  referencingElement.forEach((value, keyElement, item) => {
38566
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(keyElement));
38699
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(keyElement));
38567
38700
  mergedElement.content.push(item);
38568
38701
  });
38569
38702
  mergedElement.remove('$ref');
38570
38703
 
38571
38704
  // annotate referenced element with info about original referencing element
38572
38705
  mergedElement.setMetaProperty('ref-fields', {
38573
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
38706
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38574
38707
  });
38575
38708
  // annotate referenced element with info about origin
38576
38709
  mergedElement.setMetaProperty('ref-origin', reference.uri);
38577
38710
  // 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
- };
38711
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
38712
+ referencedElement = mergedElement;
38713
+ }
38581
38714
 
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;
38715
+ /**
38716
+ * Transclude referencing element with merged referenced element.
38717
+ */
38718
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38719
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
38720
+ } else if (Array.isArray(parent)) {
38721
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
38592
38722
  }
38593
38723
 
38594
- // transclude referencing element with merged referenced element
38595
- return mergeAndAnnotateReferencedElement(referencedElement);
38724
+ /**
38725
+ * We're at the root of the tree, so we're just replacing the entire tree.
38726
+ */
38727
+ return !parent ? referencedElement : undefined;
38596
38728
  },
38597
- async LinkElement(linkElement) {
38729
+ async LinkElement(linkElement, key, parent) {
38598
38730
  // ignore LinkElement without operationRef or operationId field
38599
38731
  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
38732
  return undefined;
@@ -38602,15 +38734,15 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38602
38734
 
38603
38735
  // operationRef and operationId fields are mutually exclusive
38604
38736
  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.');
38737
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('LinkElement operationRef and operationId fields are mutually exclusive.');
38606
38738
  }
38607
38739
  let operationElement;
38608
38740
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationRef)) {
38609
38741
  var _linkElementCopy$oper;
38610
38742
  // 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;
38743
+ 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));
38744
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationRef));
38745
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38614
38746
  const isExternalReference = !isInternalReference;
38615
38747
 
38616
38748
  // ignore resolving internal Operation Object reference
@@ -38623,60 +38755,79 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38623
38755
  // skip traversing this Link element but traverse all it's child elements
38624
38756
  return undefined;
38625
38757
  }
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);
38758
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationRef));
38759
+ operationElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, reference.value.result);
38628
38760
  // applying semantics to a referenced element
38629
38761
  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))}`;
38762
+ const cacheKey = `operation-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(identityManager.identify(operationElement))}`;
38631
38763
  if (this.refractCache.has(cacheKey)) {
38632
38764
  operationElement = this.refractCache.get(cacheKey);
38633
38765
  } else {
38634
- operationElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_14__.OperationElement.refract(operationElement);
38766
+ operationElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.OperationElement.refract(operationElement);
38635
38767
  this.refractCache.set(cacheKey, operationElement);
38636
38768
  }
38637
38769
  }
38638
38770
  // create shallow clone to be able to annotate with metadata
38639
- operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(operationElement);
38771
+ operationElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(operationElement);
38640
38772
  // annotate operation element with info about origin
38641
38773
  operationElement.setMetaProperty('ref-origin', reference.uri);
38642
- const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(linkElement);
38774
+ const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(linkElement);
38643
38775
  (_linkElementCopy$oper = linkElementCopy.operationRef) === null || _linkElementCopy$oper === void 0 || _linkElementCopy$oper.meta.set('operation', operationElement);
38644
- return linkElementCopy;
38776
+
38777
+ /**
38778
+ * Transclude Link Object containing Operation Object in its meta.
38779
+ */
38780
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38781
+ parent.value = linkElementCopy; // eslint-disable-line no-param-reassign
38782
+ } else if (Array.isArray(parent)) {
38783
+ parent[key] = linkElementCopy; // eslint-disable-line no-param-reassign
38784
+ }
38785
+
38786
+ /**
38787
+ * We're at the root of the tree, so we're just replacing the entire tree.
38788
+ */
38789
+ return !parent ? linkElementCopy : undefined;
38645
38790
  }
38646
38791
  if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(linkElement.operationId)) {
38647
38792
  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);
38793
+ const operationId = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(linkElement.operationId);
38794
+ const reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(this.reference.uri));
38795
+ 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
38796
  // 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.`);
38797
+ if ((0,ramda_adjunct__WEBPACK_IMPORTED_MODULE_22__["default"])(operationElement)) {
38798
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"](`OperationElement(operationId=${operationId}) not found.`);
38654
38799
  }
38655
- const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(linkElement);
38800
+ const linkElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(linkElement);
38656
38801
  (_linkElementCopy$oper2 = linkElementCopy.operationId) === null || _linkElementCopy$oper2 === void 0 || _linkElementCopy$oper2.meta.set('operation', operationElement);
38657
- return linkElementCopy;
38802
+
38803
+ /**
38804
+ * Transclude Link Object containing Operation Object in its meta.
38805
+ */
38806
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38807
+ parent.value = linkElementCopy; // eslint-disable-line no-param-reassign
38808
+ } else if (Array.isArray(parent)) {
38809
+ parent[key] = linkElementCopy; // eslint-disable-line no-param-reassign
38810
+ }
38811
+
38812
+ /**
38813
+ * We're at the root of the tree, so we're just replacing the entire tree.
38814
+ */
38815
+ return !parent ? linkElementCopy : undefined;
38658
38816
  }
38659
38817
  return undefined;
38660
38818
  },
38661
- async ExampleElement(exampleElement, key, parent, path, ancestors) {
38662
- const [ancestorsLineage] = this.toAncestorLineage([...ancestors, parent]);
38663
-
38819
+ async ExampleElement(exampleElement, key, parent) {
38664
38820
  // ignore ExampleElement without externalValue field
38665
38821
  if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isStringElement)(exampleElement.externalValue)) {
38666
38822
  return undefined;
38667
38823
  }
38668
38824
 
38669
- // detect possible cycle in traversal and avoid it
38670
- if (ancestorsLineage.includesCycle(exampleElement)) {
38671
- return false;
38672
- }
38673
-
38674
38825
  // value and externalValue fields are mutually exclusive
38675
38826
  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.');
38827
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('ExampleElement value and externalValue fields are mutually exclusive.');
38677
38828
  }
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;
38829
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(exampleElement.externalValue));
38830
+ const isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38680
38831
  const isExternalReference = !isInternalReference;
38681
38832
 
38682
38833
  // ignore resolving internal Example Objects
@@ -38689,44 +38840,55 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38689
38840
  // skip traversing this Example element but traverse all it's child elements
38690
38841
  return undefined;
38691
38842
  }
38692
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(exampleElement.externalValue));
38843
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(exampleElement.externalValue));
38693
38844
 
38694
38845
  // shallow clone of the referenced element
38695
- const valueElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(reference.value.result);
38846
+ const valueElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(reference.value.result);
38696
38847
  // annotate operation element with info about origin
38697
38848
  valueElement.setMetaProperty('ref-origin', reference.uri);
38698
- const exampleElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(exampleElement);
38849
+ const exampleElementCopy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneShallow)(exampleElement);
38699
38850
  exampleElementCopy.value = valueElement;
38700
- return exampleElementCopy;
38851
+
38852
+ /**
38853
+ * Transclude Example Object containing external value.
38854
+ */
38855
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
38856
+ parent.value = exampleElementCopy; // eslint-disable-line no-param-reassign
38857
+ } else if (Array.isArray(parent)) {
38858
+ parent[key] = exampleElementCopy; // eslint-disable-line no-param-reassign
38859
+ }
38860
+
38861
+ /**
38862
+ * We're at the root of the tree, so we're just replacing the entire tree.
38863
+ */
38864
+ return !parent ? exampleElementCopy : undefined;
38701
38865
  },
38702
38866
  async SchemaElement(referencingElement, key, parent, path, ancestors) {
38703
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38704
-
38705
38867
  // skip current referencing schema as $ref keyword was not defined
38706
38868
  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
38869
  return undefined;
38709
38870
  }
38710
38871
 
38711
- // detect possible cycle in traversal and avoid it
38712
- if (ancestorsLineage.includesCycle(referencingElement)) {
38872
+ // skip current referencing element as it's already been access
38873
+ if (this.indirections.includes(referencingElement)) {
38713
38874
  return false;
38714
38875
  }
38876
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
38715
38877
 
38716
38878
  // 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));
38879
+ let reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize(this.reference.uri));
38718
38880
  let {
38719
38881
  uri: retrievalURI
38720
38882
  } = 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"])({
38883
+ const $refBaseURI = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.resolveSchema$refField)(retrievalURI, referencingElement);
38884
+ const $refBaseURIStrippedHash = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash($refBaseURI);
38885
+ const file = (0,_util_File_mjs__WEBPACK_IMPORTED_MODULE_24__["default"])({
38724
38886
  uri: $refBaseURIStrippedHash
38725
38887
  });
38726
- const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_24__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
38888
+ const isUnknownURI = (0,ramda__WEBPACK_IMPORTED_MODULE_25__["default"])(r => r.canRead(file), this.options.resolve.resolvers);
38727
38889
  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);
38890
+ let isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === $refBaseURI;
38891
+ let isExternalReference = !isInternalReference;
38730
38892
  this.indirections.push(referencingElement);
38731
38893
 
38732
38894
  // determining reference, proper evaluation and selection mechanism
@@ -38734,74 +38896,95 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38734
38896
  try {
38735
38897
  if (isUnknownURI || isURL) {
38736
38898
  // we're dealing with canonical URI or URL with possible fragment
38899
+ retrievalURI = this.toBaseURI($refBaseURI);
38737
38900
  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));
38901
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38902
+ referencedElement = (0,_selectors_uri_mjs__WEBPACK_IMPORTED_MODULE_26__.evaluate)(selector, referenceAsSchema);
38903
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38904
+ referencedElement.id = identityManager.identify(referencedElement);
38905
+
38906
+ // ignore resolving internal Schema Objects
38907
+ if (!this.options.resolve.internal && isInternalReference) {
38908
+ // skip traversing this schema element but traverse all it's child elements
38909
+ return undefined;
38910
+ }
38911
+ // ignore resolving external Schema Objects
38912
+ if (!this.options.resolve.external && isExternalReference) {
38913
+ // skip traversing this schema element but traverse all it's child elements
38914
+ return undefined;
38915
+ }
38741
38916
  } else {
38742
38917
  // 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));
38918
+ retrievalURI = this.toBaseURI($refBaseURI);
38919
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38920
+ isExternalReference = !isInternalReference;
38744
38921
 
38745
38922
  // ignore resolving internal Schema Objects
38746
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38923
+ if (!this.options.resolve.internal && isInternalReference) {
38747
38924
  // skip traversing this schema element but traverse all it's child elements
38748
38925
  return undefined;
38749
38926
  }
38750
38927
  // ignore resolving external Schema Objects
38751
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38928
+ if (!this.options.resolve.external && isExternalReference) {
38752
38929
  // skip traversing this schema element but traverse all it's child elements
38753
38930
  return undefined;
38754
38931
  }
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));
38932
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38933
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38934
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38935
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(selector, referenceAsSchema);
38936
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38937
+ referencedElement.id = identityManager.identify(referencedElement);
38760
38938
  }
38761
38939
  } catch (error) {
38762
38940
  /**
38763
38941
  * No SchemaElement($id=URL) was not found, so we're going to try to resolve
38764
38942
  * the URL and assume the returned response is a JSON Schema.
38765
38943
  */
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))) {
38944
+ if (isURL && error instanceof _errors_EvaluationJsonSchemaUriError_mjs__WEBPACK_IMPORTED_MODULE_27__["default"]) {
38945
+ if ((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.isAnchor)((0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.uriToAnchor)($refBaseURI))) {
38768
38946
  // we're dealing with JSON Schema $anchor here
38769
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])($refBaseURI));
38947
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38948
+ isExternalReference = !isInternalReference;
38770
38949
 
38771
38950
  // ignore resolving internal Schema Objects
38772
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38951
+ if (!this.options.resolve.internal && isInternalReference) {
38773
38952
  // skip traversing this schema element but traverse all it's child elements
38774
38953
  return undefined;
38775
38954
  }
38776
38955
  // ignore resolving external Schema Objects
38777
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38956
+ if (!this.options.resolve.external && isExternalReference) {
38778
38957
  // skip traversing this schema element but traverse all it's child elements
38779
38958
  return undefined;
38780
38959
  }
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));
38960
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38961
+ const selector = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.uriToAnchor)($refBaseURI);
38962
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38963
+ referencedElement = (0,_selectors_$anchor_mjs__WEBPACK_IMPORTED_MODULE_28__.evaluate)(selector, referenceAsSchema);
38964
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38965
+ referencedElement.id = identityManager.identify(referencedElement);
38786
38966
  } else {
38787
38967
  // 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));
38968
+ retrievalURI = this.toBaseURI($refBaseURI);
38969
+ isInternalReference = _util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.stripHash(this.reference.uri) === retrievalURI;
38970
+ isExternalReference = !isInternalReference;
38789
38971
 
38790
38972
  // ignore resolving internal Schema Objects
38791
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
38973
+ if (!this.options.resolve.internal && isInternalReference) {
38792
38974
  // skip traversing this schema element but traverse all it's child elements
38793
38975
  return undefined;
38794
38976
  }
38795
38977
  // ignore resolving external Schema Objects
38796
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
38978
+ if (!this.options.resolve.external && isExternalReference) {
38797
38979
  // skip traversing this schema element but traverse all it's child elements
38798
38980
  return undefined;
38799
38981
  }
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));
38982
+ reference = await this.toReference(_util_url_mjs__WEBPACK_IMPORTED_MODULE_4__.unsanitize($refBaseURI));
38983
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__.uriToPointer)($refBaseURI);
38984
+ const referenceAsSchema = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(reference.value.result);
38985
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(selector, referenceAsSchema);
38986
+ referencedElement = (0,_util_mjs__WEBPACK_IMPORTED_MODULE_23__.maybeRefractToSchemaElement)(referencedElement);
38987
+ referencedElement.id = identityManager.identify(referencedElement);
38805
38988
  }
38806
38989
  } else {
38807
38990
  throw error;
@@ -38809,80 +38992,124 @@ const OpenApi3_1DereferenceVisitor = stampit__WEBPACK_IMPORTED_MODULE_0__({
38809
38992
  }
38810
38993
 
38811
38994
  // 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');
38995
+ if (referencingElement === referencedElement) {
38996
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Recursive Schema Object reference detected');
38814
38997
  }
38815
38998
 
38816
38999
  // detect maximum depth of dereferencing
38817
39000
  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}"`);
39001
+ 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}"`);
39002
+ }
39003
+
39004
+ // detect second deep dive into the same fragment and avoid it
39005
+ if (ancestorsLineage.includes(referencedElement)) {
39006
+ reference.refSet.circular = true;
39007
+ if (this.options.dereference.circular === 'error') {
39008
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_16__["default"]('Circular reference detected');
39009
+ } else if (this.options.dereference.circular === 'replace') {
39010
+ var _this$options$derefer5, _this$options$derefer6;
39011
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.RefElement(referencedElement.id, {
39012
+ type: 'json-schema',
39013
+ uri: reference.uri,
39014
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
39015
+ });
39016
+ 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;
39017
+ const replacement = replacer(refElement);
39018
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39019
+ parent.value = replacement; // eslint-disable-line no-param-reassign
39020
+ } else if (Array.isArray(parent)) {
39021
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
39022
+ }
39023
+ return !parent ? replacement : false;
39024
+ }
38819
39025
  }
38820
39026
 
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
- });
39027
+ /**
39028
+ * Dive deep into the fragment.
39029
+ *
39030
+ * Cases to consider:
39031
+ * 1. We're crossing document boundary
39032
+ * 2. Fragment is a Schema Object with $ref field. We need to follow it to get the eventual value
39033
+ * 3. We are dereferencing the fragment lazily/eagerly depending on circular mode
39034
+ */
39035
+ 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)) {
39036
+ // append referencing reference to ancestors lineage
39037
+ directAncestors.add(referencingElement);
39038
+ const visitor = OpenApi3_1DereferenceVisitor({
39039
+ reference,
39040
+ namespace: this.namespace,
39041
+ indirections: [...this.indirections],
39042
+ options: this.options,
39043
+ refractCache: this.refractCache,
39044
+ ancestors: ancestorsLineage
39045
+ });
39046
+ referencedElement = await visitAsync(referencedElement, visitor, {
39047
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.keyMap,
39048
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.getNodeType
39049
+ });
38836
39050
 
38837
- // remove referencing schema from ancestors lineage
38838
- directAncestors.delete(referencingElement);
39051
+ // remove referencing reference from ancestors lineage
39052
+ directAncestors.delete(referencingElement);
39053
+ }
38839
39054
  this.indirections.pop();
38840
39055
 
38841
39056
  // 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);
39057
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isBooleanJsonSchemaElement)(referencedElement)) {
39058
+ const booleanJsonSchemaElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(referencedElement);
39059
+ // assign unique id to merged element
39060
+ booleanJsonSchemaElement.setMetaProperty('id', identityManager.generateId());
38844
39061
  // annotate referenced element with info about original referencing element
38845
39062
  booleanJsonSchemaElement.setMetaProperty('ref-fields', {
38846
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
39063
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38847
39064
  });
38848
39065
  // annotate referenced element with info about origin
38849
39066
  booleanJsonSchemaElement.setMetaProperty('ref-origin', reference.uri);
38850
39067
  // 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;
39068
+ booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
39069
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39070
+ parent.value = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
39071
+ } else if (Array.isArray(parent)) {
39072
+ parent[key] = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
39073
+ }
39074
+ return !parent ? booleanJsonSchemaElement : false;
38853
39075
  }
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));
39076
+
39077
+ /**
39078
+ * Creating a new version of Schema Object by merging fields from referenced Schema Object with referencing one.
39079
+ */
39080
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__.isSchemaElement)(referencedElement)) {
39081
+ 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));
39082
+ // assign unique id to merged element
39083
+ mergedElement.setMetaProperty('id', identityManager.generateId());
38857
39084
  // existing keywords from referencing schema overrides ones from referenced schema
38858
39085
  referencingElement.forEach((value, keyElement, item) => {
38859
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(keyElement));
39086
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(keyElement));
38860
39087
  mergedElement.content.push(item);
38861
39088
  });
38862
39089
  mergedElement.remove('$ref');
38863
39090
  // annotate referenced element with info about original referencing element
38864
39091
  mergedElement.setMetaProperty('ref-fields', {
38865
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__["default"])(referencingElement.$ref)
39092
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__["default"])(referencingElement.$ref)
38866
39093
  });
38867
39094
  // annotate fragment with info about origin
38868
39095
  mergedElement.setMetaProperty('ref-origin', reference.uri);
38869
39096
  // 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;
39097
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.cloneDeep)(identityManager.identify(referencingElement)));
39098
+ referencedElement = mergedElement;
38884
39099
  }
38885
- return mergeAndAnnotateReferencedElement(referencedElement);
39100
+ /**
39101
+ * Transclude referencing element with merged referenced element.
39102
+ */
39103
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.isMemberElement)(parent)) {
39104
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
39105
+ } else if (Array.isArray(parent)) {
39106
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
39107
+ }
39108
+
39109
+ /**
39110
+ * We're at the root of the tree, so we're just replacing the entire tree.
39111
+ */
39112
+ return !parent ? referencedElement : undefined;
38886
39113
  }
38887
39114
  }
38888
39115
  });
@@ -39406,6 +39633,8 @@ __webpack_require__.r(__webpack_exports__);
39406
39633
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
39407
39634
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
39408
39635
  /* harmony export */ });
39636
+ /* harmony import */ var ramda__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(43628);
39637
+
39409
39638
  const defaultOptions = {
39410
39639
  parse: {
39411
39640
  /**
@@ -39508,7 +39737,29 @@ const defaultOptions = {
39508
39737
  * The dereferencing should throw MaximumDereferenceDepthError if dereferencing depth
39509
39738
  * is exceeded by this option.
39510
39739
  */
39511
- maxDepth: +Infinity
39740
+ maxDepth: +Infinity,
39741
+ /**
39742
+ * Determines how circular references are handled.
39743
+ *
39744
+ * "ignore" - circular reference are allowed
39745
+ * "replace" - circular references are not allowed and are translated to RefElement
39746
+ * "error" - circular references are not allowed and will throw an error
39747
+ */
39748
+ circular: 'ignore',
39749
+ /**
39750
+ * This function is used to replace circular references when `circular` option is set to "replace".
39751
+ * By default, it's an identity function. It means that circular references are replaced with RefElement.
39752
+ */
39753
+ circularReplacer: ramda__WEBPACK_IMPORTED_MODULE_0__["default"],
39754
+ /**
39755
+ * Determines whether the dereferencing process will be immutable.
39756
+ * By default, the dereferencing process is immutable, which means that the original
39757
+ * ApiDOM passed to the dereference process is NOT modified.
39758
+ *
39759
+ * true - the dereferencing process will be immutable (deep cloning of ApiDOM is involved)
39760
+ * false - the dereferencing process will be mutable
39761
+ */
39762
+ immutable: true
39512
39763
  },
39513
39764
  bundle: {
39514
39765
  /**
@@ -39973,59 +40224,42 @@ __webpack_require__.r(__webpack_exports__);
39973
40224
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
39974
40225
  /* harmony export */ });
39975
40226
  /* 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
-
40227
+ /* harmony import */ var _ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(97836);
40228
+ /* harmony import */ var _ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31387);
40229
+ /* harmony import */ var _options_util_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(40927);
40230
+ /* harmony import */ var _errors_UnmatchedDereferenceStrategyError_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(83126);
39987
40231
 
39988
40232
 
39989
40233
 
39990
40234
 
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"], {
40235
+ // eslint-disable-next-line @typescript-eslint/naming-convention
40236
+ const OpenApi3_1ResolveStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_ResolveStrategy_mjs__WEBPACK_IMPORTED_MODULE_1__["default"], {
39997
40237
  init() {
39998
40238
  this.name = 'openapi-3-1';
39999
40239
  },
40000
40240
  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);
40241
+ canResolve(file, options) {
40242
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'openapi-3-1');
40243
+ if (dereferenceStrategy === undefined) {
40244
+ return false;
40006
40245
  }
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);
40246
+ return dereferenceStrategy.canDereference(file, options);
40010
40247
  },
40011
40248
  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
40249
+ const dereferenceStrategy = options.dereference.strategies.find(strategy => strategy.name === 'openapi-3-1');
40250
+ if (dereferenceStrategy === undefined) {
40251
+ throw new _errors_UnmatchedDereferenceStrategyError_mjs__WEBPACK_IMPORTED_MODULE_2__["default"]('"openapi-3-1" dereference strategy is not available.');
40252
+ }
40253
+ const refSet = (0,_ReferenceSet_mjs__WEBPACK_IMPORTED_MODULE_3__["default"])();
40254
+ const mergedOptions = (0,_options_util_mjs__WEBPACK_IMPORTED_MODULE_4__.merge)(options, {
40255
+ resolve: {
40256
+ internal: false
40257
+ },
40258
+ dereference: {
40259
+ refSet
40260
+ }
40027
40261
  });
40028
- await visitor.crawl();
40262
+ await dereferenceStrategy.dereference(file, mergedOptions);
40029
40263
  return refSet;
40030
40264
  }
40031
40265
  }
@@ -40034,553 +40268,6 @@ const OpenApi3_1ResolveStrategy = stampit__WEBPACK_IMPORTED_MODULE_0__(_ResolveS
40034
40268
 
40035
40269
  /***/ }),
40036
40270
 
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
40271
  /***/ 75253:
40585
40272
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
40586
40273
 
@@ -52593,56 +52280,6 @@ var uniqWith =
52593
52280
 
52594
52281
  /***/ }),
52595
52282
 
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
52283
  /***/ 32366:
52647
52284
  /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
52648
52285