swagger-client 3.26.7 → 3.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -622,9 +622,18 @@ function serialize(value, mediaType) {
622
622
  // Assume the user has a JSON string
623
623
  return value;
624
624
  }
625
+ if (Array.isArray(value)) {
626
+ value = value.map(v => {
627
+ try {
628
+ return JSON.parse(v);
629
+ } catch (e) {
630
+ return v;
631
+ }
632
+ });
633
+ }
625
634
  return JSON.stringify(value);
626
635
  }
627
- return value.toString();
636
+ return String(value);
628
637
  }
629
638
 
630
639
  /***/ }),
@@ -2183,11 +2192,12 @@ __webpack_require__.r(__webpack_exports__);
2183
2192
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(46571);
2184
2193
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(68618);
2185
2194
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1667);
2195
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(87024);
2186
2196
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(31387);
2187
2197
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(12349);
2188
2198
  /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(57016);
2189
2199
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(41544);
2190
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(66648);
2200
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(66648);
2191
2201
  /* harmony import */ var _visitors_dereference_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7882);
2192
2202
  /* harmony import */ var _visitors_parameters_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(53628);
2193
2203
  /* harmony import */ var _visitors_properties_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(85001);
@@ -2205,7 +2215,6 @@ const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__.visit[S
2205
2215
  const mergeAllVisitorsAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__.mergeAll[Symbol.for('nodejs.util.promisify.custom')];
2206
2216
  const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__["default"].compose({
2207
2217
  props: {
2208
- useCircularStructures: true,
2209
2218
  allowMetaPatches: false,
2210
2219
  parameterMacro: null,
2211
2220
  modelPropertyMacro: null,
@@ -2213,7 +2222,6 @@ const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference
2213
2222
  ancestors: null
2214
2223
  },
2215
2224
  init({
2216
- useCircularStructures = this.useCircularStructures,
2217
2225
  allowMetaPatches = this.allowMetaPatches,
2218
2226
  parameterMacro = this.parameterMacro,
2219
2227
  modelPropertyMacro = this.modelPropertyMacro,
@@ -2221,7 +2229,6 @@ const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference
2221
2229
  ancestors = []
2222
2230
  } = {}) {
2223
2231
  this.name = 'openapi-3-1-swagger-client';
2224
- this.useCircularStructures = useCircularStructures;
2225
2232
  this.allowMetaPatches = allowMetaPatches;
2226
2233
  this.parameterMacro = parameterMacro;
2227
2234
  this.modelPropertyMacro = modelPropertyMacro;
@@ -2232,17 +2239,32 @@ const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference
2232
2239
  async dereference(file, options) {
2233
2240
  const visitors = [];
2234
2241
  const namespace = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__.createNamespace)(_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_8__["default"]);
2235
- const refSet = options.dereference.refSet ?? (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__["default"])();
2242
+ const immutableRefSet = options.dereference.refSet ?? (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__["default"])();
2243
+ const mutableRefsSet = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__["default"])();
2244
+ let refSet = immutableRefSet;
2236
2245
  let reference;
2237
- if (!refSet.has(file.uri)) {
2246
+ if (!immutableRefSet.has(file.uri)) {
2238
2247
  reference = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_10__["default"])({
2239
2248
  uri: file.uri,
2240
2249
  value: file.parseResult
2241
2250
  });
2242
- refSet.add(reference);
2251
+ immutableRefSet.add(reference);
2243
2252
  } else {
2244
2253
  // pre-computed refSet was provided as configuration option
2245
- reference = refSet.find(ref => ref.uri === file.uri);
2254
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
2255
+ }
2256
+
2257
+ /**
2258
+ * Clone refSet due the dereferencing process being mutable.
2259
+ * We don't want to mutate the original refSet and the references.
2260
+ */
2261
+ if (options.dereference.immutable) {
2262
+ immutableRefSet.refs.map(ref => (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_10__["default"])({
2263
+ ...ref,
2264
+ value: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__.cloneDeep)(ref.value)
2265
+ })).forEach(ref => mutableRefsSet.add(ref));
2266
+ reference = mutableRefsSet.find(ref => ref.uri === file.uri);
2267
+ refSet = mutableRefsSet;
2246
2268
  }
2247
2269
 
2248
2270
  // create main dereference visitor
@@ -2250,7 +2272,6 @@ const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference
2250
2272
  reference,
2251
2273
  namespace,
2252
2274
  options,
2253
- useCircularStructures: this.useCircularStructures,
2254
2275
  allowMetaPatches: this.allowMetaPatches,
2255
2276
  ancestors: this.ancestors
2256
2277
  });
@@ -2284,20 +2305,33 @@ const OpenApi3_1SwaggerClientDereferenceStrategy = _swagger_api_apidom_reference
2284
2305
 
2285
2306
  // establish root visitor by visitor merging
2286
2307
  const rootVisitor = mergeAllVisitorsAsync(visitors, {
2287
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.getNodeType
2308
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__.getNodeType
2288
2309
  });
2289
2310
  const dereferencedElement = await visitAsync(refSet.rootRef.value, rootVisitor, {
2290
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.keyMap,
2291
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.getNodeType
2311
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__.keyMap,
2312
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_12__.getNodeType
2292
2313
  });
2293
2314
 
2294
2315
  /**
2295
- * Release all memory if this refSet was not provided as a configuration option.
2316
+ * If immutable option is set, replay refs from the refSet.
2317
+ */
2318
+ if (options.dereference.immutable) {
2319
+ mutableRefsSet.refs.filter(ref => ref.uri.startsWith('immutable://')).map(ref => (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_10__["default"])({
2320
+ ...ref,
2321
+ uri: ref.uri.replace(/^immutable:\/\//, '')
2322
+ })).forEach(ref => immutableRefSet.add(ref));
2323
+ reference = immutableRefSet.find(ref => ref.uri === file.uri);
2324
+ refSet = immutableRefSet;
2325
+ }
2326
+
2327
+ /**
2328
+ * Release all memory if this refSet was not provided as an configuration option.
2296
2329
  * If provided as configuration option, then provider is responsible for cleanup.
2297
2330
  */
2298
2331
  if (options.dereference.refSet === null) {
2299
- refSet.clean();
2332
+ immutableRefSet.clean();
2300
2333
  }
2334
+ mutableRefsSet.clean();
2301
2335
  return dereferencedElement;
2302
2336
  }
2303
2337
  }
@@ -2397,11 +2431,8 @@ __webpack_require__.r(__webpack_exports__);
2397
2431
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
2398
2432
  /* harmony export */ });
2399
2433
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33501);
2400
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9999);
2401
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(87024);
2402
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(15461);
2403
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(3117);
2404
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(70281);
2434
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(15461);
2435
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(70281);
2405
2436
  /* harmony import */ var _utils_compose_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79170);
2406
2437
  /* harmony import */ var _utils_to_path_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12201);
2407
2438
 
@@ -2431,48 +2462,57 @@ const AllOfVisitor = (0,_utils_compose_js__WEBPACK_IMPORTED_MODULE_0__["default"
2431
2462
 
2432
2463
  // remove allOf keyword if empty
2433
2464
  if (schemaElement.allOf.isEmpty) {
2434
- return new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__.SchemaElement(schemaElement.content.filter(memberElement => (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(memberElement.key) !== 'allOf'), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__.cloneDeep)(schemaElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__.cloneDeep)(schemaElement.attributes));
2465
+ schemaElement.remove('allOf');
2466
+ return undefined;
2435
2467
  }
2436
2468
 
2437
2469
  // collect errors if allOf keyword contains anything else than Schema Object
2438
- const includesSchemaElementOnly = schemaElement.allOf.content.every(_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_6__.isSchemaElement);
2470
+ const includesSchemaElementOnly = schemaElement.allOf.content.every(_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_3__.isSchemaElement);
2439
2471
  if (!includesSchemaElementOnly) {
2440
2472
  const error = new TypeError('Elements in allOf must be objects');
2441
2473
  error.fullPath = [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_2__["default"])([...ancestors, parent, schemaElement]), 'allOf'];
2442
2474
  this.options.dereference.dereferenceOpts?.errors?.push?.(error);
2443
2475
  return undefined;
2444
2476
  }
2445
- const mergedSchemaElement = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_7__["default"].all([...schemaElement.allOf.content, schemaElement]);
2477
+ while (schemaElement.hasKey('allOf')) {
2478
+ const {
2479
+ allOf
2480
+ } = schemaElement;
2481
+ schemaElement.remove('allOf');
2482
+ const allOfMerged = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"].all([...allOf.content, schemaElement]);
2446
2483
 
2447
- /**
2448
- * If there was not an original $$ref value, make sure to remove
2449
- * any $$ref value that may exist from the result of `allOf` merges.
2450
- */
2451
- if (!schemaElement.hasKey('$$ref')) {
2452
- mergedSchemaElement.remove('$$ref');
2453
- }
2484
+ /**
2485
+ * If there was not an original $$ref value, make sure to remove
2486
+ * any $$ref value that may exist from the result of `allOf` merges.
2487
+ */
2488
+ if (!schemaElement.hasKey('$$ref')) {
2489
+ allOfMerged.remove('$$ref');
2490
+ }
2454
2491
 
2455
- /**
2456
- * If there was an example keyword in the original definition,
2457
- * keep it instead of merging with example from other schema.
2458
- */
2459
- if (schemaElement.hasKey('example')) {
2460
- const member = mergedSchemaElement.getMember('example');
2461
- member.value = schemaElement.get('example');
2462
- }
2492
+ /**
2493
+ * If there was an example keyword in the original schema,
2494
+ * keep it instead of merging with example from other schema.
2495
+ */
2496
+ if (schemaElement.hasKey('example')) {
2497
+ const member = allOfMerged.getMember('example');
2498
+ if (member) {
2499
+ member.value = schemaElement.get('example');
2500
+ }
2501
+ }
2463
2502
 
2464
- /**
2465
- * If there was an examples keyword in the original definition,
2466
- * keep it instead of merging with examples from other schema.
2467
- */
2468
- if (schemaElement.hasKey('examples')) {
2469
- const member = mergedSchemaElement.getMember('examples');
2470
- member.value = schemaElement.get('examples');
2503
+ /**
2504
+ * If there was an examples keyword in the original schema,
2505
+ * keep it instead of merging with examples from other schema.
2506
+ */
2507
+ if (schemaElement.hasKey('examples')) {
2508
+ const member = allOfMerged.getMember('examples');
2509
+ if (member) {
2510
+ member.value = schemaElement.get('examples');
2511
+ }
2512
+ }
2513
+ schemaElement.content = allOfMerged.content;
2471
2514
  }
2472
-
2473
- // remove allOf keyword after the merge
2474
- mergedSchemaElement.remove('allOf');
2475
- return mergedSchemaElement;
2515
+ return undefined;
2476
2516
  }
2477
2517
  }
2478
2518
  }
@@ -2491,26 +2531,27 @@ __webpack_require__.r(__webpack_exports__);
2491
2531
  /* harmony export */ });
2492
2532
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46571);
2493
2533
  /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(42209);
2494
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(9999);
2495
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(33501);
2496
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(87024);
2534
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(9999);
2535
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(33501);
2536
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(44824);
2537
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(87024);
2497
2538
  /* harmony import */ var _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(98219);
2498
2539
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(85013);
2499
2540
  /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(3117);
2500
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(66648);
2501
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(70281);
2502
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(85270);
2503
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(18316);
2504
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(83748);
2541
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(70281);
2542
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(66648);
2543
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85270);
2544
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(18316);
2545
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(83748);
2505
2546
  /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(60503);
2506
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(15767);
2507
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(32346);
2508
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(51776);
2509
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(46432);
2510
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(16129);
2511
- /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(78311);
2512
- /* harmony import */ var _utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(12201);
2513
- /* harmony import */ var _utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(17381);
2547
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(15767);
2548
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(32346);
2549
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(51776);
2550
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(46432);
2551
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(16129);
2552
+ /* harmony import */ var _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(78311);
2553
+ /* harmony import */ var _utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(12201);
2554
+ /* harmony import */ var _utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(17381);
2514
2555
  /* harmony import */ var _specmap_lib_refs_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7247);
2515
2556
  /* harmony import */ var _errors_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(21806);
2516
2557
  /* eslint-disable camelcase */
@@ -2533,13 +2574,7 @@ const visitAsync = _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_2__.visit[S
2533
2574
 
2534
2575
  // initialize element identity manager
2535
2576
  const identityManager = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_3__.IdentityManager)();
2536
-
2537
- /**
2538
- * Predicate for detecting if element was created by merging referencing
2539
- * element with particular element identity with a referenced element.
2540
- */
2541
- 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_4__["default"])(identityManager.identify(referencingElement)));
2542
- const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_5__["default"].compose({
2577
+ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__["default"].compose({
2543
2578
  props: {
2544
2579
  useCircularStructures: true,
2545
2580
  allowMetaPatches: false,
@@ -2557,19 +2592,13 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2557
2592
  methods: {
2558
2593
  async ReferenceElement(referencingElement, key, parent, path, ancestors) {
2559
2594
  try {
2560
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2561
-
2562
- // skip already identified cycled Path Item Objects
2563
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.includesClasses)(['cycle'], referencingElement.$ref)) {
2595
+ // skip current referencing element as it's already been access
2596
+ if (this.indirections.includes(referencingElement)) {
2564
2597
  return false;
2565
2598
  }
2566
-
2567
- // detect possible cycle in traversal and avoid it
2568
- if (ancestorsLineage.includesCycle(referencingElement)) {
2569
- return false;
2570
- }
2571
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref));
2572
- const isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.stripHash(this.reference.uri) === retrievalURI;
2599
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2600
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref));
2601
+ const isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === retrievalURI;
2573
2602
  const isExternalReference = !isInternalReference;
2574
2603
 
2575
2604
  // ignore resolving internal Reference Objects
@@ -2580,18 +2609,19 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2580
2609
  if (!this.options.resolve.external && isExternalReference) {
2581
2610
  return false;
2582
2611
  }
2583
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref));
2584
- const $refBaseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref));
2612
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref));
2613
+ const $refBaseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref));
2585
2614
  this.indirections.push(referencingElement);
2586
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)($refBaseURI);
2615
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)($refBaseURI);
2587
2616
 
2588
2617
  // possibly non-semantic fragment
2589
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_9__["default"])(jsonPointer, reference.value.result);
2618
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__["default"])(jsonPointer, reference.value.result);
2619
+ referencedElement.id = identityManager.identify(referencedElement);
2590
2620
 
2591
2621
  // applying semantics to a fragment
2592
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isPrimitiveElement)(referencedElement)) {
2593
- const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.meta.get('referenced-element'));
2594
- const cacheKey = `${referencedElementType}-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(identityManager.identify(referencedElement))}`;
2622
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isPrimitiveElement)(referencedElement)) {
2623
+ const referencedElementType = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.meta.get('referenced-element'));
2624
+ const cacheKey = `${referencedElementType}-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(identityManager.identify(referencedElement))}`;
2595
2625
  if (this.refractCache.has(cacheKey)) {
2596
2626
  referencedElement = this.refractCache.get(cacheKey);
2597
2627
  } else if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__.isReferenceLikeElement)(referencedElement)) {
@@ -2608,109 +2638,127 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2608
2638
  }
2609
2639
 
2610
2640
  // detect direct or indirect reference
2611
- if (this.indirections.includes(referencedElement)) {
2612
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Recursive JSON Pointer detected');
2641
+ if (referencingElement === referencedElement) {
2642
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Recursive Reference Object detected');
2613
2643
  }
2614
2644
 
2615
2645
  // detect maximum depth of dereferencing
2616
2646
  if (this.indirections.length > this.options.dereference.maxDepth) {
2617
2647
  throw new _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
2618
2648
  }
2619
- if (!this.useCircularStructures) {
2620
- const hasCycles = ancestorsLineage.includes(referencedElement);
2621
- if (hasCycles) {
2622
- if (_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isHttpUrl(retrievalURI) || _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isFileSystemPath(retrievalURI)) {
2623
- // make the referencing URL or file system path absolute
2624
- const cycledReferenceElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.ReferenceElement({
2625
- $ref: $refBaseURI
2626
- }, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(referencingElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(referencingElement.attributes));
2627
- cycledReferenceElement.get('$ref').classes.push('cycle');
2628
- return cycledReferenceElement;
2649
+
2650
+ // detect second deep dive into the same fragment and avoid it
2651
+ if (ancestorsLineage.includes(referencedElement)) {
2652
+ reference.refSet.circular = true;
2653
+ if (this.options.dereference.circular === 'error') {
2654
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Circular reference detected');
2655
+ } else if (this.options.dereference.circular === 'replace') {
2656
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.RefElement(referencedElement.id, {
2657
+ type: 'reference',
2658
+ uri: reference.uri,
2659
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref),
2660
+ baseURI: $refBaseURI,
2661
+ referencingElement
2662
+ });
2663
+ const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
2664
+ const replacement = replacer(refElement);
2665
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
2666
+ parent.value = replacement; // eslint-disable-line no-param-reassign
2667
+ } else if (Array.isArray(parent)) {
2668
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
2629
2669
  }
2630
- // skip processing this reference
2631
- return false;
2670
+ return !parent ? replacement : false;
2632
2671
  }
2633
2672
  }
2634
2673
 
2635
- // append referencing schema to ancestors lineage
2636
- directAncestors.add(referencingElement);
2637
-
2638
- // dive deep into the fragment
2639
- const visitor = OpenApi3_1SwaggerClientDereferenceVisitor({
2640
- reference,
2641
- namespace: this.namespace,
2642
- indirections: [...this.indirections],
2643
- options: this.options,
2644
- ancestors: ancestorsLineage,
2645
- allowMetaPatches: this.allowMetaPatches,
2646
- useCircularStructures: this.useCircularStructures,
2647
- basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, referencingElement]), '$ref']
2648
- });
2649
- referencedElement = await visitAsync(referencedElement, visitor, {
2650
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.keyMap,
2651
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.getNodeType
2652
- });
2674
+ /**
2675
+ * Dive deep into the fragment.
2676
+ *
2677
+ * Cases to consider:
2678
+ * 1. We're crossing document boundary
2679
+ * 2. Fragment is from non-root document
2680
+ * 3. Fragment is a Reference Object. We need to follow it to get the eventual value
2681
+ * 4. We are dereferencing the fragment lazily/eagerly depending on circular mode
2682
+ */
2683
+ const isNonRootDocument = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(reference.refSet.rootRef.uri) !== reference.uri;
2684
+ const shouldDetectCircular = ['error', 'replace'].includes(this.options.dereference.circular);
2685
+ if ((isExternalReference || isNonRootDocument || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isReferenceElement)(referencedElement) || shouldDetectCircular) && !ancestorsLineage.includesCycle(referencedElement)) {
2686
+ // append referencing reference to ancestors lineage
2687
+ directAncestors.add(referencingElement);
2688
+ const visitor = OpenApi3_1SwaggerClientDereferenceVisitor({
2689
+ reference,
2690
+ namespace: this.namespace,
2691
+ indirections: [...this.indirections],
2692
+ options: this.options,
2693
+ refractCache: this.refractCache,
2694
+ ancestors: ancestorsLineage,
2695
+ allowMetaPatches: this.allowMetaPatches,
2696
+ useCircularStructures: this.useCircularStructures,
2697
+ basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, referencingElement]), '$ref']
2698
+ });
2699
+ referencedElement = await visitAsync(referencedElement, visitor, {
2700
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
2701
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
2702
+ });
2653
2703
 
2654
- // remove referencing schema from ancestors lineage
2655
- directAncestors.delete(referencingElement);
2704
+ // remove referencing reference from ancestors lineage
2705
+ directAncestors.delete(referencingElement);
2706
+ }
2656
2707
  this.indirections.pop();
2657
- const mergeAndAnnotateReferencedElement = refedElement => {
2658
- const copy = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneShallow)(refedElement);
2659
-
2660
- // annotate fragment with info about original Reference element
2661
- copy.setMetaProperty('ref-fields', {
2662
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref),
2663
- description: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.description),
2664
- summary: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.summary)
2665
- });
2666
- // annotate fragment with info about origin
2667
- copy.setMetaProperty('ref-origin', reference.uri);
2668
- // annotate fragment with info about referencing element
2669
- copy.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(identityManager.identify(referencingElement)));
2708
+ const mergedElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneShallow)(referencedElement);
2670
2709
 
2671
- // override description and summary (outer has higher priority then inner)
2672
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isObjectElement)(refedElement)) {
2673
- if (referencingElement.hasKey('description') && 'description' in refedElement) {
2674
- copy.remove('description');
2675
- copy.set('description', referencingElement.get('description'));
2676
- }
2677
- if (referencingElement.hasKey('summary') && 'summary' in refedElement) {
2678
- copy.remove('summary');
2679
- copy.set('summary', referencingElement.get('summary'));
2680
- }
2681
- }
2710
+ // annotate fragment with info about original Reference element
2711
+ mergedElement.setMetaProperty('ref-fields', {
2712
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref),
2713
+ description: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.description),
2714
+ summary: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.summary)
2715
+ });
2716
+ // annotate fragment with info about origin
2717
+ mergedElement.setMetaProperty('ref-origin', reference.uri);
2718
+ // annotate fragment with info about referencing element
2719
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
2682
2720
 
2683
- // apply meta patches
2684
- if (this.allowMetaPatches && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isObjectElement)(copy)) {
2685
- // apply meta patch only when not already applied
2686
- if (!copy.hasKey('$$ref')) {
2687
- const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, $refBaseURI);
2688
- copy.set('$$ref', baseURI);
2689
- }
2721
+ // override description and summary (outer has higher priority then inner)
2722
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isObjectElement)(referencedElement)) {
2723
+ if (referencingElement.hasKey('description') && 'description' in referencedElement) {
2724
+ mergedElement.remove('description');
2725
+ mergedElement.set('description', referencingElement.get('description'));
2690
2726
  }
2691
- return copy;
2692
- };
2727
+ if (referencingElement.hasKey('summary') && 'summary' in referencedElement) {
2728
+ mergedElement.remove('summary');
2729
+ mergedElement.set('summary', referencingElement.get('summary'));
2730
+ }
2731
+ }
2693
2732
 
2694
- // attempting to create cycle
2695
- if (ancestorsLineage.includes(referencingElement) || ancestorsLineage.includes(referencedElement)) {
2696
- const replaceWith = ancestorsLineage.findItem(wasReferencedBy(referencingElement)) ?? mergeAndAnnotateReferencedElement(referencedElement);
2697
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isMemberElement)(parent)) {
2698
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
2699
- } else if (Array.isArray(parent)) {
2700
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
2733
+ // apply meta patches
2734
+ if (this.allowMetaPatches && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isObjectElement)(mergedElement)) {
2735
+ // apply meta patch only when not already applied
2736
+ if (!mergedElement.hasKey('$$ref')) {
2737
+ const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, $refBaseURI);
2738
+ mergedElement.set('$$ref', baseURI);
2701
2739
  }
2702
- return false;
2703
2740
  }
2704
2741
 
2705
- // transclude the element for a fragment
2706
- return mergeAndAnnotateReferencedElement(referencedElement);
2742
+ /**
2743
+ * Transclude referencing element with merged referenced element.
2744
+ */
2745
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
2746
+ parent.value = mergedElement; // eslint-disable-line no-param-reassign
2747
+ } else if (Array.isArray(parent)) {
2748
+ parent[key] = mergedElement; // eslint-disable-line no-param-reassign
2749
+ }
2750
+
2751
+ /**
2752
+ * We're at the root of the tree, so we're just replacing the entire tree.
2753
+ */
2754
+ return !parent ? mergedElement : false;
2707
2755
  } catch (error) {
2708
- const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_17__["default"])(error);
2756
+ const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_19__["default"])(error);
2709
2757
  const wrappedError = wrapError(rootCause, {
2710
2758
  baseDoc: this.reference.uri,
2711
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref),
2712
- pointer: (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref)),
2713
- fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, referencingElement]), '$ref']
2759
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref),
2760
+ pointer: (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref)),
2761
+ fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, referencingElement]), '$ref']
2714
2762
  });
2715
2763
  this.options.dereference.dereferenceOpts?.errors?.push?.(wrappedError);
2716
2764
  return undefined;
@@ -2718,24 +2766,23 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2718
2766
  },
2719
2767
  async PathItemElement(pathItemElement, key, parent, path, ancestors) {
2720
2768
  try {
2721
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2722
-
2723
2769
  // ignore PathItemElement without $ref field
2724
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isStringElement)(pathItemElement.$ref)) {
2770
+ if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(pathItemElement.$ref)) {
2725
2771
  return undefined;
2726
2772
  }
2727
2773
 
2728
- // skip already identified cycled Path Item Objects
2729
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.includesClasses)(['cycle'], pathItemElement.$ref)) {
2774
+ // skip current referencing element as it's already been access
2775
+ if (this.indirections.includes(pathItemElement)) {
2730
2776
  return false;
2731
2777
  }
2732
2778
 
2733
- // detect possible cycle in traversal and avoid it
2734
- if (ancestorsLineage.includesCycle(pathItemElement)) {
2779
+ // skip already identified cycled Path Item Objects
2780
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.includesClasses)(['cycle'], pathItemElement.$ref)) {
2735
2781
  return false;
2736
2782
  }
2737
- const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref));
2738
- const isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.stripHash(this.reference.uri) === retrievalURI;
2783
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2784
+ const retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref));
2785
+ const isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === retrievalURI;
2739
2786
  const isExternalReference = !isInternalReference;
2740
2787
 
2741
2788
  // ignore resolving internal Path Item Elements
@@ -2746,17 +2793,18 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2746
2793
  if (!this.options.resolve.external && isExternalReference) {
2747
2794
  return undefined;
2748
2795
  }
2749
- const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref));
2750
- const $refBaseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref));
2796
+ const reference = await this.toReference((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref));
2797
+ const $refBaseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref));
2751
2798
  this.indirections.push(pathItemElement);
2752
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)($refBaseURI);
2799
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)($refBaseURI);
2753
2800
 
2754
2801
  // possibly non-semantic referenced element
2755
- let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_9__["default"])(jsonPointer, reference.value.result);
2802
+ let referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__["default"])(jsonPointer, reference.value.result);
2803
+ referencedElement.id = identityManager.identify(referencedElement);
2756
2804
 
2757
2805
  // applying semantics to a referenced element
2758
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isPrimitiveElement)(referencedElement)) {
2759
- const cacheKey = `pathItem-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(identityManager.identify(referencedElement))}`;
2806
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isPrimitiveElement)(referencedElement)) {
2807
+ const cacheKey = `path-item-${(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(identityManager.identify(referencedElement))}`;
2760
2808
  if (this.refractCache.has(cacheKey)) {
2761
2809
  referencedElement = this.refractCache.get(cacheKey);
2762
2810
  } else {
@@ -2766,102 +2814,127 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2766
2814
  }
2767
2815
 
2768
2816
  // detect direct or indirect reference
2769
- if (this.indirections.includes(referencedElement)) {
2770
- throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Recursive JSON Pointer detected');
2817
+ if (pathItemElement === referencedElement) {
2818
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Recursive Path Item Object reference detected');
2771
2819
  }
2772
2820
 
2773
2821
  // detect maximum depth of dereferencing
2774
2822
  if (this.indirections.length > this.options.dereference.maxDepth) {
2775
2823
  throw new _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
2776
2824
  }
2777
- if (!this.useCircularStructures) {
2778
- const hasCycles = ancestorsLineage.includes(referencedElement);
2779
- if (hasCycles) {
2780
- if (_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isHttpUrl(retrievalURI) || _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isFileSystemPath(retrievalURI)) {
2781
- // make the referencing URL or file system path absolute
2782
- const cycledPathItemElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.PathItemElement({
2783
- $ref: $refBaseURI
2784
- }, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(pathItemElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(pathItemElement.attributes));
2785
- cycledPathItemElement.get('$ref').classes.push('cycle');
2786
- return cycledPathItemElement;
2825
+
2826
+ // detect second deep dive into the same fragment and avoid it
2827
+ if (ancestorsLineage.includes(referencedElement)) {
2828
+ reference.refSet.circular = true;
2829
+ if (this.options.dereference.circular === 'error') {
2830
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Circular reference detected');
2831
+ } else if (this.options.dereference.circular === 'replace') {
2832
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.RefElement(referencedElement.id, {
2833
+ type: 'path-item',
2834
+ uri: reference.uri,
2835
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref),
2836
+ baseURI: $refBaseURI,
2837
+ referencingElement: pathItemElement
2838
+ });
2839
+ const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
2840
+ const replacement = replacer(refElement);
2841
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
2842
+ parent.value = replacement; // eslint-disable-line no-param-reassign
2843
+ } else if (Array.isArray(parent)) {
2844
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
2787
2845
  }
2788
- // skip processing this path item and all it's child elements
2789
- return false;
2846
+ return !parent ? replacement : false;
2790
2847
  }
2791
2848
  }
2792
2849
 
2793
- // append referencing schema to ancestors lineage
2794
- directAncestors.add(pathItemElement);
2795
-
2796
- // dive deep into the referenced element
2797
- const visitor = OpenApi3_1SwaggerClientDereferenceVisitor({
2798
- reference,
2799
- namespace: this.namespace,
2800
- indirections: [...this.indirections],
2801
- options: this.options,
2802
- ancestors: ancestorsLineage,
2803
- allowMetaPatches: this.allowMetaPatches,
2804
- useCircularStructures: this.useCircularStructures,
2805
- basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, pathItemElement]), '$ref']
2806
- });
2807
- referencedElement = await visitAsync(referencedElement, visitor, {
2808
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.keyMap,
2809
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.getNodeType
2810
- });
2850
+ /**
2851
+ * Dive deep into the fragment.
2852
+ *
2853
+ * Cases to consider:
2854
+ * 1. We're crossing document boundary
2855
+ * 2. Fragment is from non-root document
2856
+ * 3. Fragment is a Path Item Object with $ref field. We need to follow it to get the eventual value
2857
+ * 4. We are dereferencing the fragment lazily/eagerly depending on circular mode
2858
+ */
2859
+ const isNonRootDocument = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(reference.refSet.rootRef.uri) !== reference.uri;
2860
+ const shouldDetectCircular = ['error', 'replace'].includes(this.options.dereference.circular);
2861
+ if ((isExternalReference || isNonRootDocument || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isPathItemElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(referencedElement.$ref) || shouldDetectCircular) && !ancestorsLineage.includesCycle(referencedElement)) {
2862
+ // append referencing schema to ancestors lineage
2863
+ directAncestors.add(pathItemElement);
2864
+
2865
+ // dive deep into the referenced element
2866
+ const visitor = OpenApi3_1SwaggerClientDereferenceVisitor({
2867
+ reference,
2868
+ namespace: this.namespace,
2869
+ indirections: [...this.indirections],
2870
+ options: this.options,
2871
+ ancestors: ancestorsLineage,
2872
+ allowMetaPatches: this.allowMetaPatches,
2873
+ useCircularStructures: this.useCircularStructures,
2874
+ basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, pathItemElement]), '$ref']
2875
+ });
2876
+ referencedElement = await visitAsync(referencedElement, visitor, {
2877
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
2878
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
2879
+ });
2811
2880
 
2812
- // remove referencing schema from ancestors lineage
2813
- directAncestors.delete(pathItemElement);
2881
+ // remove referencing schema from ancestors lineage
2882
+ directAncestors.delete(pathItemElement);
2883
+ }
2814
2884
  this.indirections.pop();
2815
- const mergeAndAnnotateReferencedElement = refedElement => {
2816
- // merge fields from referenced Path Item with referencing one
2817
- const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.PathItemElement([...refedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(refedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(refedElement.attributes));
2885
+
2886
+ /**
2887
+ * Creating a new version of Path Item by merging fields from referenced Path Item with referencing one.
2888
+ */
2889
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isPathItemElement)(referencedElement)) {
2890
+ const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.PathItemElement([...referencedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement.attributes));
2818
2891
  // existing keywords from referencing PathItemElement overrides ones from referenced element
2819
2892
  pathItemElement.forEach((value, keyElement, item) => {
2820
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(keyElement));
2893
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(keyElement));
2821
2894
  mergedElement.content.push(item);
2822
2895
  });
2823
2896
  mergedElement.remove('$ref');
2824
2897
 
2825
2898
  // annotate referenced element with info about original referencing element
2826
2899
  mergedElement.setMetaProperty('ref-fields', {
2827
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref)
2900
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref)
2828
2901
  });
2829
2902
  // annotate referenced element with info about origin
2830
2903
  mergedElement.setMetaProperty('ref-origin', reference.uri);
2831
2904
  // annotate fragment with info about referencing element
2832
- mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(identityManager.identify(pathItemElement)));
2905
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(pathItemElement)));
2833
2906
 
2834
2907
  // apply meta patches
2835
2908
  if (this.allowMetaPatches) {
2836
2909
  // apply meta patch only when not already applied
2837
2910
  if (typeof mergedElement.get('$$ref') === 'undefined') {
2838
- const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, $refBaseURI);
2911
+ const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, $refBaseURI);
2839
2912
  mergedElement.set('$$ref', baseURI);
2840
2913
  }
2841
2914
  }
2842
- return mergedElement;
2843
- };
2915
+ referencedElement = mergedElement;
2916
+ }
2844
2917
 
2845
- // attempting to create cycle
2846
- if (ancestorsLineage.includes(pathItemElement) || ancestorsLineage.includes(referencedElement)) {
2847
- const replaceWith = ancestorsLineage.findItem(wasReferencedBy(pathItemElement)) ?? mergeAndAnnotateReferencedElement(referencedElement);
2848
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isMemberElement)(parent)) {
2849
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
2850
- } else if (Array.isArray(parent)) {
2851
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
2852
- }
2853
- return false;
2918
+ /**
2919
+ * Transclude referencing element with merged referenced element.
2920
+ */
2921
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
2922
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
2923
+ } else if (Array.isArray(parent)) {
2924
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
2854
2925
  }
2855
2926
 
2856
- // transclude referencing element with merged referenced element
2857
- return mergeAndAnnotateReferencedElement(referencedElement);
2927
+ /**
2928
+ * We're at the root of the tree, so we're just replacing the entire tree.
2929
+ */
2930
+ return !parent ? referencedElement : undefined;
2858
2931
  } catch (error) {
2859
- const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_17__["default"])(error);
2932
+ const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_19__["default"])(error);
2860
2933
  const wrappedError = wrapError(rootCause, {
2861
2934
  baseDoc: this.reference.uri,
2862
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref),
2863
- pointer: (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(pathItemElement.$ref)),
2864
- fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, pathItemElement]), '$ref']
2935
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref),
2936
+ pointer: (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(pathItemElement.$ref)),
2937
+ fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, pathItemElement]), '$ref']
2865
2938
  });
2866
2939
  this.options.dereference.dereferenceOpts?.errors?.push?.(wrappedError);
2867
2940
  return undefined;
@@ -2869,38 +2942,32 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2869
2942
  },
2870
2943
  async SchemaElement(referencingElement, key, parent, path, ancestors) {
2871
2944
  try {
2872
- const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2873
-
2874
2945
  // skip current referencing schema as $ref keyword was not defined
2875
- if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isStringElement)(referencingElement.$ref)) {
2946
+ if (!(0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(referencingElement.$ref)) {
2876
2947
  // skip traversing this schema but traverse all it's child schemas
2877
2948
  return undefined;
2878
2949
  }
2879
2950
 
2880
- // skip already identified cycled Path Item Objects
2881
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.includesClasses)(['cycle'], referencingElement.$ref)) {
2882
- return false;
2883
- }
2884
-
2885
- // detect possible cycle in traversal and avoid it
2886
- if (ancestorsLineage.includesCycle(referencingElement)) {
2951
+ // skip current referencing element as it's already been access
2952
+ if (this.indirections.includes(referencingElement)) {
2887
2953
  return false;
2888
2954
  }
2955
+ const [ancestorsLineage, directAncestors] = this.toAncestorLineage([...ancestors, parent]);
2889
2956
 
2890
2957
  // compute baseURI using rules around $id and $ref keywords
2891
- let reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.unsanitize(this.reference.uri));
2958
+ let reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.unsanitize(this.reference.uri));
2892
2959
  let {
2893
2960
  uri: retrievalURI
2894
2961
  } = reference;
2895
- const $refBaseURI = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.resolveSchema$refField)(retrievalURI, referencingElement);
2896
- const $refBaseURIStrippedHash = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.stripHash($refBaseURI);
2897
- const file = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_19__["default"])({
2962
+ const $refBaseURI = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.resolveSchema$refField)(retrievalURI, referencingElement);
2963
+ const $refBaseURIStrippedHash = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash($refBaseURI);
2964
+ const file = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_21__["default"])({
2898
2965
  uri: $refBaseURIStrippedHash
2899
2966
  });
2900
2967
  const isUnknownURI = !this.options.resolve.resolvers.some(r => r.canRead(file));
2901
2968
  const isURL = !isUnknownURI;
2902
- const isInternalReference = uri => _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.stripHash(this.reference.uri) === uri;
2903
- const isExternalReference = uri => !isInternalReference(uri);
2969
+ let isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === $refBaseURI;
2970
+ let isExternalReference = !isInternalReference;
2904
2971
  this.indirections.push(referencingElement);
2905
2972
 
2906
2973
  // determining reference, proper evaluation and selection mechanism
@@ -2908,66 +2975,95 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2908
2975
  try {
2909
2976
  if (isUnknownURI || isURL) {
2910
2977
  // we're dealing with canonical URI or URL with possible fragment
2978
+ retrievalURI = this.toBaseURI($refBaseURI);
2911
2979
  const selector = $refBaseURI;
2912
- referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_20__.evaluate)(selector, (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.maybeRefractToSchemaElement)(reference.value.result));
2980
+ const referenceAsSchema = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(reference.value.result);
2981
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_22__.evaluate)(selector, referenceAsSchema);
2982
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(referencedElement);
2983
+ referencedElement.id = identityManager.identify(referencedElement);
2984
+
2985
+ // ignore resolving internal Schema Objects
2986
+ if (!this.options.resolve.internal && isInternalReference) {
2987
+ // skip traversing this schema element but traverse all it's child elements
2988
+ return undefined;
2989
+ }
2990
+ // ignore resolving external Schema Objects
2991
+ if (!this.options.resolve.external && isExternalReference) {
2992
+ // skip traversing this schema element but traverse all it's child elements
2993
+ return undefined;
2994
+ }
2913
2995
  } else {
2914
2996
  // we're assuming here that we're dealing with JSON Pointer here
2915
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])($refBaseURI));
2997
+ retrievalURI = this.toBaseURI($refBaseURI);
2998
+ isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === retrievalURI;
2999
+ isExternalReference = !isInternalReference;
2916
3000
 
2917
3001
  // ignore resolving internal Schema Objects
2918
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
3002
+ if (!this.options.resolve.internal && isInternalReference) {
2919
3003
  // skip traversing this schema element but traverse all it's child elements
2920
3004
  return undefined;
2921
3005
  }
2922
3006
  // ignore resolving external Schema Objects
2923
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
3007
+ if (!this.options.resolve.external && isExternalReference) {
2924
3008
  // skip traversing this schema element but traverse all it's child elements
2925
3009
  return undefined;
2926
3010
  }
2927
- reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.unsanitize($refBaseURI));
2928
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)($refBaseURI);
2929
- referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.maybeRefractToSchemaElement)((0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_9__["default"])(selector, reference.value.result));
3011
+ reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.unsanitize($refBaseURI));
3012
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)($refBaseURI);
3013
+ const referenceAsSchema = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(reference.value.result);
3014
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__["default"])(selector, referenceAsSchema);
3015
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(referencedElement);
3016
+ referencedElement.id = identityManager.identify(referencedElement);
2930
3017
  }
2931
3018
  } catch (error) {
2932
3019
  /**
2933
3020
  * No SchemaElement($id=URL) was not found, so we're going to try to resolve
2934
3021
  * the URL and assume the returned response is a JSON Schema.
2935
3022
  */
2936
- if (isURL && error instanceof _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_21__["default"]) {
2937
- if ((0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__.isAnchor)((0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__.uriToAnchor)($refBaseURI))) {
3023
+ if (isURL && error instanceof _swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_uri__WEBPACK_IMPORTED_MODULE_23__["default"]) {
3024
+ if ((0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_24__.isAnchor)((0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_24__.uriToAnchor)($refBaseURI))) {
2938
3025
  // we're dealing with JSON Schema $anchor here
2939
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])($refBaseURI));
3026
+ isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === retrievalURI;
3027
+ isExternalReference = !isInternalReference;
2940
3028
 
2941
3029
  // ignore resolving internal Schema Objects
2942
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
3030
+ if (!this.options.resolve.internal && isInternalReference) {
2943
3031
  // skip traversing this schema element but traverse all it's child elements
2944
3032
  return undefined;
2945
3033
  }
2946
3034
  // ignore resolving external Schema Objects
2947
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
3035
+ if (!this.options.resolve.external && isExternalReference) {
2948
3036
  // skip traversing this schema element but traverse all it's child elements
2949
3037
  return undefined;
2950
3038
  }
2951
- reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.unsanitize($refBaseURI));
2952
- const selector = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__.uriToAnchor)($refBaseURI);
2953
- referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_22__.evaluate)(selector, (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.maybeRefractToSchemaElement)(reference.value.result));
3039
+ reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.unsanitize($refBaseURI));
3040
+ const selector = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_24__.uriToAnchor)($refBaseURI);
3041
+ const referenceAsSchema = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(reference.value.result);
3042
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1_selectors_$anchor__WEBPACK_IMPORTED_MODULE_24__.evaluate)(selector, referenceAsSchema);
3043
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(referencedElement);
3044
+ referencedElement.id = identityManager.identify(referencedElement);
2954
3045
  } else {
2955
3046
  // we're assuming here that we're dealing with JSON Pointer here
2956
- retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])($refBaseURI));
3047
+ retrievalURI = this.toBaseURI((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])($refBaseURI));
3048
+ isInternalReference = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(this.reference.uri) === retrievalURI;
3049
+ isExternalReference = !isInternalReference;
2957
3050
 
2958
3051
  // ignore resolving internal Schema Objects
2959
- if (!this.options.resolve.internal && isInternalReference(retrievalURI)) {
3052
+ if (!this.options.resolve.internal && isInternalReference) {
2960
3053
  // skip traversing this schema element but traverse all it's child elements
2961
3054
  return undefined;
2962
3055
  }
2963
3056
  // ignore resolving external Schema Objects
2964
- if (!this.options.resolve.external && isExternalReference(retrievalURI)) {
3057
+ if (!this.options.resolve.external && isExternalReference) {
2965
3058
  // skip traversing this schema element but traverse all it's child elements
2966
3059
  return undefined;
2967
3060
  }
2968
- reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.unsanitize($refBaseURI));
2969
- const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__.uriToPointer)($refBaseURI);
2970
- referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__.maybeRefractToSchemaElement)((0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_9__["default"])(selector, reference.value.result));
3061
+ reference = await this.toReference(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.unsanitize($refBaseURI));
3062
+ const selector = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_7__.uriToPointer)($refBaseURI);
3063
+ const referenceAsSchema = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(reference.value.result);
3064
+ referencedElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_8__["default"])(selector, referenceAsSchema);
3065
+ referencedElement = (0,_swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__.maybeRefractToSchemaElement)(referencedElement);
3066
+ referencedElement.id = identityManager.identify(referencedElement);
2971
3067
  }
2972
3068
  } else {
2973
3069
  throw error;
@@ -2975,7 +3071,7 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2975
3071
  }
2976
3072
 
2977
3073
  // detect direct or indirect reference
2978
- if (this.indirections.includes(referencedElement)) {
3074
+ if (referencingElement === referencedElement) {
2979
3075
  throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Recursive Schema Object reference detected');
2980
3076
  }
2981
3077
 
@@ -2984,106 +3080,134 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
2984
3080
  throw new _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_13__["default"](`Maximum dereference depth of "${this.options.dereference.maxDepth}" has been exceeded in file "${this.reference.uri}"`);
2985
3081
  }
2986
3082
 
2987
- // useCircularStructures option processing
2988
- if (!this.useCircularStructures) {
2989
- const hasCycles = ancestorsLineage.includes(referencedElement);
2990
- if (hasCycles) {
2991
- if (_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isHttpUrl(retrievalURI) || _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.isFileSystemPath(retrievalURI)) {
2992
- // make the referencing URL or file system path absolute
2993
- const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, $refBaseURI);
2994
- const cycledSchemaElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.SchemaElement({
2995
- $ref: baseURI
2996
- }, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(referencingElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(referencingElement.attributes));
2997
- cycledSchemaElement.get('$ref').classes.push('cycle');
2998
- return cycledSchemaElement;
3083
+ // detect second deep dive into the same fragment and avoid it
3084
+ if (ancestorsLineage.includes(referencedElement)) {
3085
+ reference.refSet.circular = true;
3086
+ if (this.options.dereference.circular === 'error') {
3087
+ throw new _swagger_api_apidom_error__WEBPACK_IMPORTED_MODULE_12__["default"]('Circular reference detected');
3088
+ } else if (this.options.dereference.circular === 'replace') {
3089
+ const refElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.RefElement(referencedElement.id, {
3090
+ type: 'json-schema',
3091
+ uri: reference.uri,
3092
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref),
3093
+ baseURI: _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, $refBaseURI),
3094
+ referencingElement
3095
+ });
3096
+ const replacer = this.options.dereference.strategyOpts['openapi-3-1']?.circularReplacer ?? this.options.dereference.circularReplacer;
3097
+ const replacement = replacer(refElement);
3098
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
3099
+ parent.value = replacement; // eslint-disable-line no-param-reassign
3100
+ } else if (Array.isArray(parent)) {
3101
+ parent[key] = replacement; // eslint-disable-line no-param-reassign
2999
3102
  }
3000
- // skip processing this schema and all it's child schemas
3001
- return false;
3103
+ return !parent ? replacement : false;
3002
3104
  }
3003
3105
  }
3004
3106
 
3005
- // append referencing schema to ancestors lineage
3006
- directAncestors.add(referencingElement);
3007
-
3008
- // dive deep into the fragment
3009
- const mergeVisitor = OpenApi3_1SwaggerClientDereferenceVisitor({
3010
- reference,
3011
- namespace: this.namespace,
3012
- indirections: [...this.indirections],
3013
- options: this.options,
3014
- useCircularStructures: this.useCircularStructures,
3015
- allowMetaPatches: this.allowMetaPatches,
3016
- ancestors: ancestorsLineage,
3017
- basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, referencingElement]), '$ref']
3018
- });
3019
- referencedElement = await visitAsync(referencedElement, mergeVisitor, {
3020
- keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.keyMap,
3021
- nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_16__.getNodeType
3022
- });
3107
+ /**
3108
+ * Dive deep into the fragment.
3109
+ *
3110
+ * Cases to consider:
3111
+ * 1. We're crossing document boundary
3112
+ * 2. Fragment is from non-root document
3113
+ * 3. Fragment is a Schema Object with $ref field. We need to follow it to get the eventual value
3114
+ * 4. We are dereferencing the fragment lazily/eagerly depending on circular mode
3115
+ */
3116
+ const isNonRootDocument = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.stripHash(reference.refSet.rootRef.uri) !== reference.uri;
3117
+ const shouldDetectCircular = ['error', 'replace'].includes(this.options.dereference.circular);
3118
+ if ((isExternalReference || isNonRootDocument || (0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isSchemaElement)(referencedElement) && (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isStringElement)(referencedElement.$ref) || shouldDetectCircular) && !ancestorsLineage.includesCycle(referencedElement)) {
3119
+ // append referencing schema to ancestors lineage
3120
+ directAncestors.add(referencingElement);
3121
+
3122
+ // dive deep into the fragment
3123
+ const mergeVisitor = OpenApi3_1SwaggerClientDereferenceVisitor({
3124
+ reference,
3125
+ namespace: this.namespace,
3126
+ indirections: [...this.indirections],
3127
+ options: this.options,
3128
+ useCircularStructures: this.useCircularStructures,
3129
+ allowMetaPatches: this.allowMetaPatches,
3130
+ ancestors: ancestorsLineage,
3131
+ basePath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, referencingElement]), '$ref']
3132
+ });
3133
+ referencedElement = await visitAsync(referencedElement, mergeVisitor, {
3134
+ keyMap: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.keyMap,
3135
+ nodeTypeGetter: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__.getNodeType
3136
+ });
3023
3137
 
3024
- // remove referencing schema from ancestors lineage
3025
- directAncestors.delete(referencingElement);
3138
+ // remove referencing schema from ancestors lineage
3139
+ directAncestors.delete(referencingElement);
3140
+ }
3026
3141
  this.indirections.pop();
3027
- if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_23__.isBooleanJsonSchemaElement)(referencedElement)) {
3028
- const booleanJsonSchemaElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(referencedElement);
3142
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isBooleanJsonSchemaElement)(referencedElement)) {
3143
+ const booleanJsonSchemaElement = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement);
3029
3144
  // annotate referenced element with info about original referencing element
3030
3145
  booleanJsonSchemaElement.setMetaProperty('ref-fields', {
3031
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref)
3146
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref)
3032
3147
  });
3033
3148
  // annotate referenced element with info about origin
3034
3149
  booleanJsonSchemaElement.setMetaProperty('ref-origin', reference.uri);
3035
3150
  // annotate fragment with info about referencing element
3036
- booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(identityManager.identify(referencingElement)));
3037
- return booleanJsonSchemaElement;
3151
+ booleanJsonSchemaElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
3152
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
3153
+ parent.value = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
3154
+ } else if (Array.isArray(parent)) {
3155
+ parent[key] = booleanJsonSchemaElement; // eslint-disable-line no-param-reassign
3156
+ }
3157
+ return !parent ? booleanJsonSchemaElement : false;
3038
3158
  }
3039
- const mergeAndAnnotateReferencedElement = refedElement => {
3159
+
3160
+ /**
3161
+ * Creating a new version of Schema Object by merging fields from referenced Schema Object with referencing one.
3162
+ */
3163
+ if ((0,_swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_15__.isSchemaElement)(referencedElement)) {
3040
3164
  // Schema Object - merge keywords from referenced schema with referencing schema
3041
- const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.SchemaElement([...refedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(refedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(refedElement.attributes));
3165
+ const mergedElement = new _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_11__.SchemaElement([...referencedElement.content], (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(referencedElement.attributes));
3042
3166
  // existing keywords from referencing schema overrides ones from referenced schema
3043
3167
  referencingElement.forEach((value, keyElement, item) => {
3044
- mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(keyElement));
3168
+ mergedElement.remove((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(keyElement));
3045
3169
  mergedElement.content.push(item);
3046
3170
  });
3047
3171
  mergedElement.remove('$ref');
3048
3172
  // annotate referenced element with info about original referencing element
3049
3173
  mergedElement.setMetaProperty('ref-fields', {
3050
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref)
3174
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref)
3051
3175
  });
3052
3176
  // annotate fragment with info about origin
3053
3177
  mergedElement.setMetaProperty('ref-origin', reference.uri);
3054
3178
  // annotate fragment with info about referencing element
3055
- mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_14__.cloneDeep)(identityManager.identify(referencingElement)));
3179
+ mergedElement.setMetaProperty('ref-referencing-element-id', (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_18__.cloneDeep)(identityManager.identify(referencingElement)));
3056
3180
 
3057
3181
  // allowMetaPatches option processing
3058
3182
  if (this.allowMetaPatches) {
3059
3183
  // apply meta patch only when not already applied
3060
3184
  if (typeof mergedElement.get('$$ref') === 'undefined') {
3061
- const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_7__.resolve(retrievalURI, $refBaseURI);
3185
+ const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_6__.resolve(retrievalURI, $refBaseURI);
3062
3186
  mergedElement.set('$$ref', baseURI);
3063
3187
  }
3064
3188
  }
3065
- return mergedElement;
3066
- };
3189
+ referencedElement = mergedElement;
3190
+ }
3067
3191
 
3068
- // attempting to create cycle
3069
- if (ancestorsLineage.includes(referencingElement) || ancestorsLineage.includes(referencedElement)) {
3070
- const replaceWith = ancestorsLineage.findItem(wasReferencedBy(referencingElement)) ?? mergeAndAnnotateReferencedElement(referencedElement);
3071
- if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_6__.isMemberElement)(parent)) {
3072
- parent.value = replaceWith; // eslint-disable-line no-param-reassign
3073
- } else if (Array.isArray(parent)) {
3074
- parent[key] = replaceWith; // eslint-disable-line no-param-reassign
3075
- }
3076
- return false;
3192
+ /**
3193
+ * Transclude referencing element with merged referenced element.
3194
+ */
3195
+ if ((0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__.isMemberElement)(parent)) {
3196
+ parent.value = referencedElement; // eslint-disable-line no-param-reassign
3197
+ } else if (Array.isArray(parent)) {
3198
+ parent[key] = referencedElement; // eslint-disable-line no-param-reassign
3077
3199
  }
3078
3200
 
3079
- // transclude referencing element with merged referenced element
3080
- return mergeAndAnnotateReferencedElement(referencedElement);
3201
+ /**
3202
+ * We're at the root of the tree, so we're just replacing the entire tree.
3203
+ */
3204
+ return !parent ? referencedElement : undefined;
3081
3205
  } catch (error) {
3082
- const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_17__["default"])(error);
3206
+ const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_19__["default"])(error);
3083
3207
  const wrappedError = new _errors_index_js__WEBPACK_IMPORTED_MODULE_1__.SchemaRefError(`Could not resolve reference: ${rootCause.message}`, {
3084
3208
  baseDoc: this.reference.uri,
3085
- $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(referencingElement.$ref),
3086
- fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, referencingElement]), '$ref']
3209
+ $ref: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(referencingElement.$ref),
3210
+ fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, referencingElement]), '$ref']
3087
3211
  }, rootCause);
3088
3212
  this.options.dereference.dereferenceOpts?.errors?.push?.(wrappedError);
3089
3213
  return undefined;
@@ -3099,13 +3223,13 @@ const OpenApi3_1SwaggerClientDereferenceVisitor = _swagger_api_apidom_reference_
3099
3223
  },
3100
3224
  async ExampleElement(exampleElement, key, parent, path, ancestors) {
3101
3225
  try {
3102
- return await _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_5__["default"].compose.methods.ExampleElement.call(this, exampleElement, key, parent, path, ancestors);
3226
+ return await _swagger_api_apidom_reference_dereference_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_4__["default"].compose.methods.ExampleElement.call(this, exampleElement, key, parent, path, ancestors);
3103
3227
  } catch (error) {
3104
- const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_17__["default"])(error);
3228
+ const rootCause = (0,_utils_get_root_cause_js__WEBPACK_IMPORTED_MODULE_19__["default"])(error);
3105
3229
  const wrappedError = wrapError(rootCause, {
3106
3230
  baseDoc: this.reference.uri,
3107
- externalValue: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_4__["default"])(exampleElement.externalValue),
3108
- fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_15__["default"])([...ancestors, parent, exampleElement]), 'externalValue']
3231
+ externalValue: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_5__["default"])(exampleElement.externalValue),
3232
+ fullPath: this.basePath ?? [...(0,_utils_to_path_js__WEBPACK_IMPORTED_MODULE_16__["default"])([...ancestors, parent, exampleElement]), 'externalValue']
3109
3233
  });
3110
3234
  this.options.dereference.dereferenceOpts?.errors?.push?.(wrappedError);
3111
3235
  return undefined;
@@ -4081,23 +4205,26 @@ pojoAdapter.cache = new WeakMap();
4081
4205
  "use strict";
4082
4206
  __webpack_require__.r(__webpack_exports__);
4083
4207
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
4208
+ /* harmony export */ circularReplacer: () => (/* binding */ circularReplacer),
4084
4209
  /* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
4085
4210
  /* harmony export */ });
4086
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(44824);
4087
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(65342);
4088
- /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(9999);
4089
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(60672);
4090
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(18316);
4091
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(60489);
4092
- /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(64884);
4093
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(3117);
4094
- /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(94145);
4095
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(83748);
4096
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(12349);
4097
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(31387);
4098
- /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(71614);
4099
- /* harmony import */ var _swagger_api_apidom_reference_parse_parsers_binary__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(16960);
4100
- /* harmony import */ var _swagger_api_apidom_reference_resolve_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(47724);
4211
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(9999);
4212
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(44824);
4213
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(87024);
4214
+ /* harmony import */ var _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(65342);
4215
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(60672);
4216
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(18316);
4217
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(60489);
4218
+ /* harmony import */ var _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(64884);
4219
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(3117);
4220
+ /* harmony import */ var _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(94145);
4221
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(83748);
4222
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(12349);
4223
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(31387);
4224
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(71614);
4225
+ /* harmony import */ var _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(48097);
4226
+ /* harmony import */ var _swagger_api_apidom_reference_parse_parsers_binary__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(16960);
4227
+ /* harmony import */ var _swagger_api_apidom_reference_resolve_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(47724);
4101
4228
  /* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3832);
4102
4229
  /* harmony import */ var _utils_options_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(40428);
4103
4230
  /* harmony import */ var _normalize_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(80947);
@@ -4123,6 +4250,18 @@ __webpack_require__.r(__webpack_exports__);
4123
4250
 
4124
4251
 
4125
4252
 
4253
+ const circularReplacer = refElement => {
4254
+ const $refBaseURI = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__["default"])(refElement.meta.get('baseURI'));
4255
+ const referencingElement = refElement.meta.get('referencingElement');
4256
+
4257
+ /**
4258
+ * Removing semantics from the absolutified referencing element by
4259
+ * using generic ObjectElement to represent the reference.
4260
+ */
4261
+ return new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.ObjectElement({
4262
+ $ref: $refBaseURI
4263
+ }, (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__.cloneDeep)(referencingElement.meta), (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__.cloneDeep)(referencingElement.attributes));
4264
+ };
4126
4265
  const resolveOpenAPI31Strategy = async options => {
4127
4266
  const {
4128
4267
  spec,
@@ -4144,32 +4283,32 @@ const resolveOpenAPI31Strategy = async options => {
4144
4283
  } = resolveOpenAPI31Strategy;
4145
4284
 
4146
4285
  // determining BaseURI
4147
- const cwd = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__.isHttpUrl(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__.cwd()) ? _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__.cwd() : _constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_URL;
4286
+ const cwd = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_12__.isHttpUrl(_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_12__.cwd()) ? _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_12__.cwd() : _constants_js__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_BASE_URL;
4148
4287
  const retrievalURI = _utils_options_js__WEBPACK_IMPORTED_MODULE_1__.retrievalURI(options);
4149
- const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_9__.resolve(cwd, retrievalURI);
4288
+ const baseURI = _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_12__.resolve(cwd, retrievalURI);
4150
4289
 
4151
4290
  // prepare spec for dereferencing
4152
4291
  let openApiElement;
4153
4292
  if (cache.has(spec)) {
4154
4293
  openApiElement = cache.get(spec);
4155
4294
  } else {
4156
- openApiElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_10__.OpenApi3_1Element.refract(spec);
4295
+ openApiElement = _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_13__.OpenApi3_1Element.refract(spec);
4157
4296
  openApiElement.classes.push('result');
4158
4297
  cache.set(spec, openApiElement);
4159
4298
  }
4160
- const openApiParseResultElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_11__.ParseResultElement([openApiElement]);
4299
+ const openApiParseResultElement = new _swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_10__.ParseResultElement([openApiElement]);
4161
4300
 
4162
4301
  // prepare fragment for dereferencing
4163
- const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_12__["default"])(pathDiscriminator);
4302
+ const jsonPointer = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_14__["default"])(pathDiscriminator);
4164
4303
  const jsonPointerURI = jsonPointer === '' ? '' : `#${jsonPointer}`;
4165
- const fragmentElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_13__["default"])(jsonPointer, openApiElement);
4304
+ const fragmentElement = (0,_swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_15__["default"])(jsonPointer, openApiElement);
4166
4305
 
4167
4306
  // prepare reference set for dereferencing
4168
- const openApiElementReference = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_14__["default"])({
4307
+ const openApiElementReference = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_16__["default"])({
4169
4308
  uri: baseURI,
4170
4309
  value: openApiParseResultElement
4171
4310
  });
4172
- const refSet = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_15__["default"])({
4311
+ const refSet = (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_17__["default"])({
4173
4312
  refs: [openApiElementReference]
4174
4313
  });
4175
4314
  if (jsonPointer !== '') refSet.rootRef = null; // reset root reference as we want fragment to become the root reference
@@ -4177,7 +4316,7 @@ const resolveOpenAPI31Strategy = async options => {
4177
4316
  // prepare ancestors; needed for cases where fragment is not OpenAPI element
4178
4317
  const ancestors = [new Set([fragmentElement])];
4179
4318
  const errors = [];
4180
- const dereferenced = await (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_16__.dereferenceApiDOM)(fragmentElement, {
4319
+ const dereferenced = await (0,_swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_18__.dereferenceApiDOM)(fragmentElement, {
4181
4320
  resolve: {
4182
4321
  /**
4183
4322
  * swagger-client only supports resolving HTTP(S) URLs or spec objects.
@@ -4196,10 +4335,10 @@ const resolveOpenAPI31Strategy = async options => {
4196
4335
  responseInterceptor
4197
4336
  }
4198
4337
  },
4199
- strategies: [(0,_swagger_api_apidom_reference_resolve_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_17__["default"])()]
4338
+ strategies: [(0,_swagger_api_apidom_reference_resolve_strategies_openapi_3_1__WEBPACK_IMPORTED_MODULE_19__["default"])()]
4200
4339
  },
4201
4340
  parse: {
4202
- mediaType: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_18__["default"].latest(),
4341
+ mediaType: _swagger_api_apidom_ns_openapi_3_1__WEBPACK_IMPORTED_MODULE_20__["default"].latest(),
4203
4342
  parsers: [(0,_apidom_reference_parse_parsers_openapi_json_3_1_index_js__WEBPACK_IMPORTED_MODULE_6__["default"])({
4204
4343
  allowEmpty: false,
4205
4344
  sourceMap: false
@@ -4212,7 +4351,7 @@ const resolveOpenAPI31Strategy = async options => {
4212
4351
  }), (0,_apidom_reference_parse_parsers_yaml_1_2_index_js__WEBPACK_IMPORTED_MODULE_5__["default"])({
4213
4352
  allowEmpty: false,
4214
4353
  sourceMap: false
4215
- }), (0,_swagger_api_apidom_reference_parse_parsers_binary__WEBPACK_IMPORTED_MODULE_19__["default"])({
4354
+ }), (0,_swagger_api_apidom_reference_parse_parsers_binary__WEBPACK_IMPORTED_MODULE_21__["default"])({
4216
4355
  allowEmpty: false,
4217
4356
  sourceMap: false
4218
4357
  })]
@@ -4231,17 +4370,19 @@ const resolveOpenAPI31Strategy = async options => {
4231
4370
  dereferenceOpts: {
4232
4371
  errors
4233
4372
  },
4234
- immutable: false
4373
+ immutable: false,
4374
+ circular: useCircularStructures ? 'ignore' : 'replace',
4375
+ circularReplacer: useCircularStructures ? _swagger_api_apidom_reference_configuration_empty__WEBPACK_IMPORTED_MODULE_22__["default"].dereference.circularReplacer : circularReplacer
4235
4376
  }
4236
4377
  });
4237
- const transcluded = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_20__.transclude)(fragmentElement, dereferenced, openApiElement);
4378
+ const transcluded = (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_23__.transclude)(fragmentElement, dereferenced, openApiElement);
4238
4379
  const normalized = skipNormalization ? transcluded : (0,_normalize_js__WEBPACK_IMPORTED_MODULE_2__["default"])(transcluded);
4239
4380
  return {
4240
- spec: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_21__["default"])(normalized),
4381
+ spec: (0,_swagger_api_apidom_core__WEBPACK_IMPORTED_MODULE_9__["default"])(normalized),
4241
4382
  errors
4242
4383
  };
4243
4384
  } catch (error) {
4244
- if (error instanceof _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_22__["default"] || error instanceof _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_23__["default"]) {
4385
+ if (error instanceof _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_24__["default"] || error instanceof _swagger_api_apidom_json_pointer__WEBPACK_IMPORTED_MODULE_25__["default"]) {
4245
4386
  return {
4246
4387
  spec: null,
4247
4388
  errors: []
@@ -16772,7 +16913,7 @@ var defaults = {
16772
16913
  charset: 'utf-8',
16773
16914
  charsetSentinel: false,
16774
16915
  comma: false,
16775
- decodeDotInKeys: true,
16916
+ decodeDotInKeys: false,
16776
16917
  decoder: utils.decode,
16777
16918
  delimiter: '&',
16778
16919
  depth: 5,
@@ -17535,6 +17676,10 @@ var decode = function (str, decoder, charset) {
17535
17676
  }
17536
17677
  };
17537
17678
 
17679
+ var limit = 1024;
17680
+
17681
+ /* eslint operator-linebreak: [2, "before"] */
17682
+
17538
17683
  var encode = function encode(str, defaultEncoder, charset, kind, format) {
17539
17684
  // This code was originally written by Brian White (mscdex) for the io.js core querystring library.
17540
17685
  // It has been adapted here for stricter adherence to RFC 3986
@@ -17556,45 +17701,54 @@ var encode = function encode(str, defaultEncoder, charset, kind, format) {
17556
17701
  }
17557
17702
 
17558
17703
  var out = '';
17559
- for (var i = 0; i < string.length; ++i) {
17560
- var c = string.charCodeAt(i);
17561
-
17562
- if (
17563
- c === 0x2D // -
17564
- || c === 0x2E // .
17565
- || c === 0x5F // _
17566
- || c === 0x7E // ~
17567
- || (c >= 0x30 && c <= 0x39) // 0-9
17568
- || (c >= 0x41 && c <= 0x5A) // a-z
17569
- || (c >= 0x61 && c <= 0x7A) // A-Z
17570
- || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )
17571
- ) {
17572
- out += string.charAt(i);
17573
- continue;
17574
- }
17704
+ for (var j = 0; j < string.length; j += limit) {
17705
+ var segment = string.length >= limit ? string.slice(j, j + limit) : string;
17706
+ var arr = [];
17707
+
17708
+ for (var i = 0; i < segment.length; ++i) {
17709
+ var c = segment.charCodeAt(i);
17710
+ if (
17711
+ c === 0x2D // -
17712
+ || c === 0x2E // .
17713
+ || c === 0x5F // _
17714
+ || c === 0x7E // ~
17715
+ || (c >= 0x30 && c <= 0x39) // 0-9
17716
+ || (c >= 0x41 && c <= 0x5A) // a-z
17717
+ || (c >= 0x61 && c <= 0x7A) // A-Z
17718
+ || (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( )
17719
+ ) {
17720
+ arr[arr.length] = segment.charAt(i);
17721
+ continue;
17722
+ }
17575
17723
 
17576
- if (c < 0x80) {
17577
- out = out + hexTable[c];
17578
- continue;
17579
- }
17724
+ if (c < 0x80) {
17725
+ arr[arr.length] = hexTable[c];
17726
+ continue;
17727
+ }
17580
17728
 
17581
- if (c < 0x800) {
17582
- out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]);
17583
- continue;
17584
- }
17729
+ if (c < 0x800) {
17730
+ arr[arr.length] = hexTable[0xC0 | (c >> 6)]
17731
+ + hexTable[0x80 | (c & 0x3F)];
17732
+ continue;
17733
+ }
17585
17734
 
17586
- if (c < 0xD800 || c >= 0xE000) {
17587
- out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]);
17588
- continue;
17735
+ if (c < 0xD800 || c >= 0xE000) {
17736
+ arr[arr.length] = hexTable[0xE0 | (c >> 12)]
17737
+ + hexTable[0x80 | ((c >> 6) & 0x3F)]
17738
+ + hexTable[0x80 | (c & 0x3F)];
17739
+ continue;
17740
+ }
17741
+
17742
+ i += 1;
17743
+ c = 0x10000 + (((c & 0x3FF) << 10) | (segment.charCodeAt(i) & 0x3FF));
17744
+
17745
+ arr[arr.length] = hexTable[0xF0 | (c >> 18)]
17746
+ + hexTable[0x80 | ((c >> 12) & 0x3F)]
17747
+ + hexTable[0x80 | ((c >> 6) & 0x3F)]
17748
+ + hexTable[0x80 | (c & 0x3F)];
17589
17749
  }
17590
17750
 
17591
- i += 1;
17592
- c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF));
17593
- /* eslint operator-linebreak: [2, "before"] */
17594
- out += hexTable[0xF0 | (c >> 18)]
17595
- + hexTable[0x80 | ((c >> 12) & 0x3F)]
17596
- + hexTable[0x80 | ((c >> 6) & 0x3F)]
17597
- + hexTable[0x80 | (c & 0x3F)];
17751
+ out += arr.join('');
17598
17752
  }
17599
17753
 
17600
17754
  return out;