{"version":3,"sources":["jsdelivr-header.js","webpack://Redoc/webpack/universalModuleDefinition","webpack://Redoc/node_modules/perfect-scrollbar/css/perfect-scrollbar.css","webpack://Redoc/node_modules/css-loader/dist/runtime/api.js","webpack://Redoc/node_modules/css-loader/dist/runtime/cssWithMappingToString.js","webpack://Redoc/src/empty.js","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"lunr\"","webpack://Redoc/src/services/SearchWorker.worker.ts","webpack://Redoc/node_modules/oas-kit-common/index.js","webpack://Redoc/node_modules/oas-resolver/index.js","webpack://Redoc/node_modules/oas-schema-walker/index.js","webpack://Redoc/node_modules/path-browserify/index.js","webpack://Redoc/node_modules/reftools/lib/clone.js","webpack://Redoc/node_modules/reftools/lib/dereference.js","webpack://Redoc/node_modules/reftools/lib/isref.js","webpack://Redoc/node_modules/reftools/lib/jptr.js","webpack://Redoc/node_modules/reftools/lib/recurse.js","webpack://Redoc/node_modules/perfect-scrollbar/css/perfect-scrollbar.css?aae9","webpack://Redoc/node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://Redoc/node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://Redoc/node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://Redoc/node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://Redoc/node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://Redoc/node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://Redoc/node_modules/swagger2openapi/index.js","webpack://Redoc/node_modules/swagger2openapi/lib/statusCodes.js","webpack://Redoc/src/services/SearchWorker.worker.ts?8aca","webpack://Redoc/node_modules/workerize-loader/dist/rpc-wrapper.js","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"call-me-maybe\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"fast-safe-stringify\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"stickyfill\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"yaml\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external var \"undefined\"","webpack://Redoc/webpack/bootstrap","/npm/redoc@2.5.2/bundles/webpack:/Redoc/webpack/runtime/compat get default export","/npm/redoc@2.5.2/bundles/webpack:/Redoc/webpack/runtime/define property getters","webpack://Redoc/webpack/runtime/global","/npm/redoc@2.5.2/bundles/webpack:/Redoc/webpack/runtime/hasOwnProperty shorthand","/npm/redoc@2.5.2/bundles/webpack:/Redoc/webpack/runtime/make namespace object","webpack://Redoc/webpack/runtime/nonce","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"react\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"polished\"","webpack://Redoc/src/theme.ts","webpack://Redoc/src/utils/dom.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"slugify\"","webpack://Redoc/src/utils/helpers.ts","webpack://Redoc/src/services/Labels.ts","webpack://Redoc/src/services/types.ts","webpack://Redoc/src/services/RedocNormalizedOptions.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"styled-components\"","webpack://Redoc/src/styled-components.ts","webpack://Redoc/src/components/ErrorBoundary.tsx","webpack://Redoc/src/components/Loading/Spinner.svg.tsx","webpack://Redoc/src/components/Loading/Loading.tsx","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prop-types\"","webpack://Redoc/src/components/OptionsProvider.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"mobx\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"@redocly/openapi-core/lib/bundle\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"@redocly/openapi-core/lib/config/config\"","webpack://Redoc/src/utils/loadAndBundleSpec.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"decko\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"eventemitter3\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"json-pointer\"","webpack://Redoc/src/utils/JsonPointer.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"url-template\"","webpack://Redoc/src/utils/openapi.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-bash.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-c.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-clike.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-coffeescript.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-cpp.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-csharp.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-go.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-http.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-java.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-lua.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-markup-templating.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-markup.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-objectivec.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-perl.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-php.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-python.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-q.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-ruby.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-scala.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-sql.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-swift.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-yaml.js\"","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"prismjs/components/prism-csv.js\"","webpack://Redoc/src/utils/highlight.ts","webpack://Redoc/src/utils/decorators.ts","webpack://Redoc/src/utils/debug.ts","webpack://Redoc/src/utils/memoize.ts","webpack://Redoc/src/utils/sort.ts","webpack://Redoc/src/services/HistoryService.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"mark.js\"","webpack://Redoc/src/services/MarkerService.ts","webpack://Redoc/node_modules/marked/lib/marked.esm.js","webpack://Redoc/src/services/MarkdownRenderer.ts","webpack://Redoc/src/services/models/ApiInfo.ts","webpack://Redoc/src/services/models/SecurityRequirement.ts","webpack://Redoc/src/services/models/Callback.ts","webpack://Redoc/src/services/OpenAPIParser.ts","webpack://Redoc/src/services/models/Schema.ts","webpack://Redoc/src/services/models/Example.ts","webpack://Redoc/src/services/models/Field.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"openapi-sampler\"","webpack://Redoc/src/services/models/MediaType.ts","webpack://Redoc/src/services/models/MediaContent.ts","webpack://Redoc/src/services/models/RequestBody.ts","webpack://Redoc/src/services/models/Response.ts","webpack://Redoc/src/services/models/Operation.ts","webpack://Redoc/src/services/models/Webhook.ts","webpack://Redoc/src/services/models/SecuritySchemes.ts","webpack://Redoc/src/services/SpecStore.ts","webpack://Redoc/src/services/models/Group.model.ts","webpack://Redoc/src/services/MenuBuilder.ts","webpack://Redoc/src/services/MenuStore.ts","webpack://Redoc/src/services/ScrollService.ts","webpack://Redoc/src/services/SearchStore.ts","webpack://Redoc/src/common-elements/panels.ts","webpack://Redoc/src/common-elements/headers.ts","webpack://Redoc/src/components/StoreBuilder.ts","webpack://Redoc/src/common-elements/linkify.tsx","webpack://Redoc/src/common-elements/shelfs.tsx","webpack://Redoc/src/common-elements/mixins.ts","webpack://Redoc/src/common-elements/fields-layout.ts","webpack://Redoc/src/common-elements/schema.ts","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"react-tabs\"","webpack://Redoc/src/common-elements/tabs.ts","webpack://Redoc/src/common-elements/PrismDiv.tsx","webpack://Redoc/src/common-elements/samples.tsx","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"perfect-scrollbar\"","webpack://Redoc/src/common-elements/perfect-scrollbar.tsx","webpack://Redoc/src/common-elements/Dropdown/Dropdown.tsx","webpack://Redoc/src/common-elements/Dropdown/styled.ts","webpack://Redoc/src/components/DropdownOrLabel/DropdownOrLabel.tsx","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"dompurify\"","webpack://Redoc/src/components/Markdown/styled.elements.tsx","webpack://Redoc/src/components/Markdown/SanitizedMdBlock.tsx","webpack://Redoc/src/components/Markdown/Markdown.tsx","webpack://Redoc/src/common-elements/Tooltip.tsx","webpack://Redoc/src/services/ClipboardService.ts","webpack://Redoc/src/common-elements/CopyButtonWrapper.tsx","webpack://Redoc/src/utils/jsonToHtml.ts","webpack://Redoc/src/components/JsonViewer/style.ts","webpack://Redoc/src/components/JsonViewer/JsonViewer.tsx","webpack://Redoc/src/components/SourceCode/SourceCode.tsx","webpack://Redoc/src/components/PayloadSamples/ExampleValue.tsx","webpack://Redoc/src/components/PayloadSamples/Example.tsx","webpack://Redoc/src/components/PayloadSamples/exernalExampleHook.ts","webpack://Redoc/src/components/PayloadSamples/styled.elements.ts","webpack://Redoc/src/components/PayloadSamples/MediaTypeSamples.tsx","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"mobx-react\"","webpack://Redoc/src/common-elements/fields.ts","webpack://Redoc/src/components/ExternalDocumentation/ExternalDocumentation.tsx","webpack://Redoc/src/components/Fields/EnumValues.tsx","webpack://Redoc/src/components/Fields/Extensions.tsx","webpack://Redoc/src/components/Fields/Examples.tsx","webpack://Redoc/src/components/Fields/FieldConstraints.tsx","webpack://Redoc/src/components/Fields/FieldDetail.tsx","webpack://Redoc/src/components/Fields/Pattern.tsx","webpack://Redoc/src/components/Fields/ArrayItemDetails.tsx","webpack://Redoc/src/components/Fields/FieldDetails.tsx","webpack://Redoc/src/components/Fields/Field.tsx","webpack://Redoc/src/components/Schema/DiscriminatorDropdown.tsx","webpack://Redoc/src/components/Schema/ObjectSchema.tsx","webpack://Redoc/src/components/Schema/ArraySchema.tsx","webpack://Redoc/src/components/Schema/OneOfSchema.tsx","webpack://Redoc/src/components/Schema/RecursiveSchema.tsx","webpack://Redoc/src/components/Schema/Schema.tsx","webpack://Redoc/src/components/SchemaDefinition/SchemaDefinition.tsx","webpack://Redoc/src/components/SecurityRequirement/styled.elements.ts","webpack://Redoc/src/components/SeeMore/SeeMore.tsx","webpack://Redoc/src/components/SecurityRequirement/OAuthFlow.tsx","webpack://Redoc/src/components/SecurityRequirement/SecurityDetails.tsx","webpack://Redoc/src/components/SecuritySchemes/SecuritySchemes.tsx","webpack://Redoc/src/services/AppStore.ts","webpack://Redoc/src/components/ApiInfo/styled.elements.ts","webpack://Redoc/src/components/ApiInfo/ApiInfo.tsx","webpack://Redoc/src/components/ApiLogo/styled.elements.tsx","webpack://Redoc/src/components/ApiLogo/ApiLogo.tsx","webpack://Redoc/src/components/Markdown/AdvancedMarkdown.tsx","/npm/redoc@2.5.2/bundles/webpack:/Redoc/external commonjs \"classnames\"","webpack://Redoc/src/components/SideMenu/styled.elements.ts","webpack://Redoc/src/components/Callbacks/CallbackTitle.tsx","webpack://Redoc/src/components/Callbacks/styled.elements.ts","webpack://Redoc/src/components/SelectOnClick/SelectOnClick.tsx","webpack://Redoc/src/components/Endpoint/styled.elements.ts","webpack://Redoc/src/components/Endpoint/Endpoint.tsx","webpack://Redoc/src/components/Parameters/ParametersGroup.tsx","webpack://Redoc/src/components/MediaTypeSwitch/MediaTypesSwitch.tsx","webpack://Redoc/src/components/Parameters/Parameters.tsx","webpack://Redoc/src/components/Responses/ResponseTitle.tsx","webpack://Redoc/src/components/Responses/styled.elements.ts","webpack://Redoc/src/components/Responses/ResponseHeaders.tsx","webpack://Redoc/src/components/Responses/ResponseDetails.tsx","webpack://Redoc/src/components/Responses/Response.tsx","webpack://Redoc/src/components/Responses/ResponsesList.tsx","webpack://Redoc/src/components/SecurityRequirement/SecurityHeader.tsx","webpack://Redoc/src/components/SecurityRequirement/RequiredScopesRow.tsx","webpack://Redoc/src/components/SecurityRequirement/SecurityRequirement.tsx","webpack://Redoc/src/components/Callbacks/CallbackDetails.tsx","webpack://Redoc/src/components/Callbacks/CallbackOperation.tsx","webpack://Redoc/src/components/Callbacks/CallbacksList.tsx","webpack://Redoc/src/components/GenericChildrenSwitcher/GenericChildrenSwitcher.tsx","webpack://Redoc/src/components/PayloadSamples/PayloadSamples.tsx","webpack://Redoc/src/components/CallbackSamples/CallbackReqSamples.tsx","webpack://Redoc/src/components/CallbackSamples/CallbackSamples.tsx","webpack://Redoc/src/components/RequestSamples/RequestSamples.tsx","webpack://Redoc/src/components/ResponseSamples/ResponseSamples.tsx","webpack://Redoc/src/components/Operation/Operation.tsx","webpack://Redoc/src/components/ContentItems/ContentItems.tsx","webpack://Redoc/src/components/SideMenu/MenuItem.tsx","webpack://Redoc/src/components/SideMenu/MenuItems.tsx","webpack://Redoc/src/components/SideMenu/Logo.tsx","webpack://Redoc/src/components/SideMenu/SideMenu.tsx","webpack://Redoc/src/components/StickySidebar/ChevronSvg.tsx","webpack://Redoc/src/components/StickySidebar/StickyResponsiveSidebar.tsx","webpack://Redoc/src/components/Redoc/styled.elements.tsx","webpack://Redoc/src/components/SearchBox/styled.elements.tsx","webpack://Redoc/src/components/SearchBox/SearchBox.tsx","webpack://Redoc/src/components/Redoc/Redoc.tsx","webpack://Redoc/src/components/RedocStandalone.tsx"],"names":[],"mappings":"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","file":"/npm/redoc@2.5.2/bundles/redoc.browser.lib.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/redoc@2.5.2/bundles/redoc.browser.lib.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Redoc\"] = factory();\n\telse\n\t\troot[\"Redoc\"] = factory();\n})(this, function() {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ps{overflow:hidden!important;overflow-anchor:none;-ms-overflow-style:none;touch-action:auto;-ms-touch-action:auto}.ps__rail-x{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;height:15px;bottom:0;position:absolute}.ps__rail-y{display:none;opacity:0;transition:background-color .2s linear,opacity .2s linear;-webkit-transition:background-color .2s linear,opacity .2s linear;width:15px;right:0;position:absolute}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{display:block;background-color:transparent}.ps:hover>.ps__rail-x,.ps:hover>.ps__rail-y,.ps--focus>.ps__rail-x,.ps--focus>.ps__rail-y,.ps--scrolling-x>.ps__rail-x,.ps--scrolling-y>.ps__rail-y{opacity:.6}.ps .ps__rail-x:hover,.ps .ps__rail-y:hover,.ps .ps__rail-x:focus,.ps .ps__rail-y:focus,.ps .ps__rail-x.ps--clicking,.ps .ps__rail-y.ps--clicking{background-color:#eee;opacity:.9}.ps__thumb-x{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,height .2s ease-in-out;-webkit-transition:background-color .2s linear,height .2s ease-in-out;height:6px;bottom:2px;position:absolute}.ps__thumb-y{background-color:#aaa;border-radius:6px;transition:background-color .2s linear,width .2s ease-in-out;-webkit-transition:background-color .2s linear,width .2s ease-in-out;width:6px;right:2px;position:absolute}.ps__rail-x:hover>.ps__thumb-x,.ps__rail-x:focus>.ps__thumb-x,.ps__rail-x.ps--clicking .ps__thumb-x{background-color:#999;height:11px}.ps__rail-y:hover>.ps__thumb-y,.ps__rail-y:focus>.ps__thumb-y,.ps__rail-y.ps--clicking .ps__thumb-y{background-color:#999;width:11px}@supports (-ms-overflow-style: none){.ps{overflow:auto!important}}@media screen and (-ms-high-contrast: active),(-ms-high-contrast: none){.ps{overflow:auto!important}}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./node_modules/perfect-scrollbar/css/perfect-scrollbar.css\"],\"names\":[],\"mappings\":\"AAGA,IACE,yBAAU,CACV,oBAAiB,CACjB,uBAAoB,CACpB,iBAAc,CACd,qBACF,CAKA,YACE,YAAS,CACT,SAAS,CACT,yDAAqD,CACrD,iEAA6D,CAC7D,WAAQ,CAER,QAAQ,CAER,iBACF,CAEA,YACE,YAAS,CACT,SAAS,CACT,yDAAqD,CACrD,iEAA6D,CAC7D,UAAO,CAEP,OAAO,CAEP,iBACF,CAEA,oDAEE,aAAS,CACT,4BACF,CAEA,oJAME,UACF,CAEA,kJAME,qBAAkB,CAClB,UACF,CAKA,aACE,qBAAkB,CAnEpB,iBAoEiB,CACf,6DAAoD,CACpD,qEAA4D,CAC5D,UAAQ,CAER,UAAQ,CAER,iBACF,CAEA,aACE,qBAAkB,CA/EpB,iBAgFiB,CACf,4DAAmD,CACnD,oEAA2D,CAC3D,SAAO,CAEP,SAAO,CAEP,iBACF,CAEA,oGAGE,qBAAkB,CAClB,WACF,CAEA,oGAGE,qBAAkB,CAClB,UACF,CAGA,qCACE,IACE,uBACF,CACF,CAEA,wEACE,IACE,uBACF,CACF\",\"sourcesContent\":[\"/*\\n * Container style\\n */\\n.ps {\\n  overflow: hidden !important;\\n  overflow-anchor: none;\\n  -ms-overflow-style: none;\\n  touch-action: auto;\\n  -ms-touch-action: auto;\\n}\\n\\n/*\\n * Scrollbar rail styles\\n */\\n.ps__rail-x {\\n  display: none;\\n  opacity: 0;\\n  transition: background-color .2s linear, opacity .2s linear;\\n  -webkit-transition: background-color .2s linear, opacity .2s linear;\\n  height: 15px;\\n  /* there must be 'bottom' or 'top' for ps__rail-x */\\n  bottom: 0px;\\n  /* please don't change 'position' */\\n  position: absolute;\\n}\\n\\n.ps__rail-y {\\n  display: none;\\n  opacity: 0;\\n  transition: background-color .2s linear, opacity .2s linear;\\n  -webkit-transition: background-color .2s linear, opacity .2s linear;\\n  width: 15px;\\n  /* there must be 'right' or 'left' for ps__rail-y */\\n  right: 0;\\n  /* please don't change 'position' */\\n  position: absolute;\\n}\\n\\n.ps--active-x > .ps__rail-x,\\n.ps--active-y > .ps__rail-y {\\n  display: block;\\n  background-color: transparent;\\n}\\n\\n.ps:hover > .ps__rail-x,\\n.ps:hover > .ps__rail-y,\\n.ps--focus > .ps__rail-x,\\n.ps--focus > .ps__rail-y,\\n.ps--scrolling-x > .ps__rail-x,\\n.ps--scrolling-y > .ps__rail-y {\\n  opacity: 0.6;\\n}\\n\\n.ps .ps__rail-x:hover,\\n.ps .ps__rail-y:hover,\\n.ps .ps__rail-x:focus,\\n.ps .ps__rail-y:focus,\\n.ps .ps__rail-x.ps--clicking,\\n.ps .ps__rail-y.ps--clicking {\\n  background-color: #eee;\\n  opacity: 0.9;\\n}\\n\\n/*\\n * Scrollbar thumb styles\\n */\\n.ps__thumb-x {\\n  background-color: #aaa;\\n  border-radius: 6px;\\n  transition: background-color .2s linear, height .2s ease-in-out;\\n  -webkit-transition: background-color .2s linear, height .2s ease-in-out;\\n  height: 6px;\\n  /* there must be 'bottom' for ps__thumb-x */\\n  bottom: 2px;\\n  /* please don't change 'position' */\\n  position: absolute;\\n}\\n\\n.ps__thumb-y {\\n  background-color: #aaa;\\n  border-radius: 6px;\\n  transition: background-color .2s linear, width .2s ease-in-out;\\n  -webkit-transition: background-color .2s linear, width .2s ease-in-out;\\n  width: 6px;\\n  /* there must be 'right' for ps__thumb-y */\\n  right: 2px;\\n  /* please don't change 'position' */\\n  position: absolute;\\n}\\n\\n.ps__rail-x:hover > .ps__thumb-x,\\n.ps__rail-x:focus > .ps__thumb-x,\\n.ps__rail-x.ps--clicking .ps__thumb-x {\\n  background-color: #999;\\n  height: 11px;\\n}\\n\\n.ps__rail-y:hover > .ps__thumb-y,\\n.ps__rail-y:focus > .ps__thumb-y,\\n.ps__rail-y.ps--clicking .ps__thumb-y {\\n  background-color: #999;\\n  width: 11px;\\n}\\n\\n/* MS supports */\\n@supports (-ms-overflow-style: none) {\\n  .ps {\\n    overflow: auto !important;\\n  }\\n}\\n\\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\\n  .ps {\\n    overflow: auto !important;\\n  }\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n  MIT License http://www.opensource.org/licenses/mit-license.php\n  Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (cssWithMappingToString) {\n  var list = []; // return the list of modules as css string\n\n  list.toString = function toString() {\n    return this.map(function (item) {\n      var content = cssWithMappingToString(item);\n\n      if (item[2]) {\n        return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n      }\n\n      return content;\n    }).join(\"\");\n  }; // import a list of modules into the list\n  // eslint-disable-next-line func-names\n\n\n  list.i = function (modules, mediaQuery, dedupe) {\n    if (typeof modules === \"string\") {\n      // eslint-disable-next-line no-param-reassign\n      modules = [[null, modules, \"\"]];\n    }\n\n    var alreadyImportedModules = {};\n\n    if (dedupe) {\n      for (var i = 0; i < this.length; i++) {\n        // eslint-disable-next-line prefer-destructuring\n        var id = this[i][0];\n\n        if (id != null) {\n          alreadyImportedModules[id] = true;\n        }\n      }\n    }\n\n    for (var _i = 0; _i < modules.length; _i++) {\n      var item = [].concat(modules[_i]);\n\n      if (dedupe && alreadyImportedModules[item[0]]) {\n        // eslint-disable-next-line no-continue\n        continue;\n      }\n\n      if (mediaQuery) {\n        if (!item[2]) {\n          item[2] = mediaQuery;\n        } else {\n          item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n        }\n      }\n\n      list.push(item);\n    }\n  };\n\n  return list;\n};","\"use strict\";\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\nfunction _iterableToArrayLimit(arr, i) { var _i = arr && (typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"]); if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nmodule.exports = function cssWithMappingToString(item) {\n  var _item = _slicedToArray(item, 4),\n      content = _item[1],\n      cssMapping = _item[3];\n\n  if (typeof btoa === \"function\") {\n    // eslint-disable-next-line no-undef\n    var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n    var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n    var sourceMapping = \"/*# \".concat(data, \" */\");\n    var sourceURLs = cssMapping.sources.map(function (source) {\n      return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n    });\n    return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n  }\n\n  return [content].join(\"\\n\");\n};","module.exports = {};\n",null,"import * as lunr from 'lunr';\nimport type { SearchResult } from './types';\n\n/* just for better typings */\nexport default class Worker {\n  add: typeof add = add;\n  done = done;\n  search: typeof search = search;\n  toJS = toJS;\n  load = load;\n  dispose = dispose;\n  fromExternalJS = fromExternalJS;\n}\n\nlet store: any[] = [];\n\nlunr.tokenizer.separator = /\\s+/;\n\nlet builder: lunr.Builder;\n\nlet resolveIndex: (v: lunr.Index) => void;\n\nlet index: Promise<lunr.Index>;\n\nfunction initEmpty() {\n  builder = new lunr.Builder();\n  builder.field('title');\n  builder.field('description');\n  builder.ref('ref');\n\n  builder.pipeline.add(lunr.trimmer, lunr.stopWordFilter, lunr.stemmer);\n\n  index = new Promise(resolve => {\n    resolveIndex = resolve;\n  });\n}\n\ninitEmpty();\n\nconst expandTerm = term => {\n  const token = lunr.trimmer(new lunr.Token(term, {}));\n  return '*' + lunr.stemmer(token) + '*';\n};\n\nexport function add<T>(title: string, description: string, meta?: T) {\n  const ref = store.push(meta) - 1;\n  const item = { title: title.toLowerCase(), description: description.toLowerCase(), ref };\n  builder.add(item);\n}\n\nexport async function done() {\n  resolveIndex(builder.build());\n}\n\nexport async function toJS() {\n  return {\n    store,\n    index: (await index).toJSON(),\n  };\n}\n\nexport async function fromExternalJS(path: string, exportName: string) {\n  try {\n    importScripts(path);\n    if (!self[exportName]) {\n      throw new Error('Broken index file format');\n    }\n\n    load(self[exportName]);\n  } catch (e) {\n    console.error('Failed to load search index: ' + e.message);\n  }\n}\n\nexport async function load(state: any) {\n  store = state.store;\n  resolveIndex(lunr.Index.load(state.index));\n}\n\nexport async function dispose() {\n  store = [];\n  initEmpty();\n}\n\nexport async function search<Meta = string>(\n  q: string,\n  limit = 0,\n): Promise<Array<SearchResult<Meta>>> {\n  if (q.trim().length === 0) {\n    return [];\n  }\n\n  let searchResults = (await index).query(t => {\n    q.trim()\n      .toLowerCase()\n      .split(/\\s+/)\n      .forEach(term => {\n        if (term.length === 1) return;\n        const exp = expandTerm(term);\n        t.term(exp, {});\n      });\n  });\n\n  if (limit > 0) {\n    searchResults = searchResults.slice(0, limit);\n  }\n\n  return searchResults.map(res => ({ meta: store[res.ref], score: res.score }));\n}\n","'use strict';\n\nconst sjs = require('fast-safe-stringify');\n\nconst colour = process.env.NODE_DISABLE_COLORS ?\n    { red: '', yellow: '', green: '', normal: '' } :\n    { red: '\\x1b[31m', yellow: '\\x1b[33;1m', green: '\\x1b[32m', normal: '\\x1b[0m' };\n\nfunction uniqueOnly(value, index, self) {\n    return self.indexOf(value) === index;\n}\n\nfunction hasDuplicates(array) {\n    return (new Set(array)).size !== array.length;\n}\n\nfunction allSame(array) {\n    return (new Set(array)).size <= 1;\n}\n\nfunction deepEquals(obj1, obj2) {\n    function _equals(obj1, obj2) {\n        return sjs.stringify(obj1) === sjs.stringify(Object.assign({}, obj1, obj2));\n    }\n    return _equals(obj1, obj2) && _equals(obj2, obj1);\n}\n\nfunction compressArray(arr) {\n    let result = [];\n    for (let candidate of arr) {\n        let dupe = result.find(function(e,i,a){\n            return deepEquals(e,candidate);\n        });\n        if (!dupe) result.push(candidate);\n    }\n    return result;\n}\n\nfunction distinctArray(arr) {\n    return (arr.length === compressArray(arr).length);\n}\n\nfunction firstDupe(arr) {\n    return arr.find(function(e,i,a){\n        return arr.indexOf(e)<i;\n    });\n}\n\n/**\n * simple hash implementation based on https://stackoverflow.com/a/7616484/1749888\n * @param {string} s - string to hash\n * @returns {number} numerical hash code\n */\nfunction hash(s) {\n    let hash = 0;\n    let chr;\n    if (s.length === 0) return hash;\n    for (let i = 0; i < s.length; i++) {\n      chr   = s.charCodeAt(i);\n      hash  = ((hash << 5) - hash) + chr;\n      hash |= 0; // Convert to 32bit integer\n    }\n    return hash;\n}\n\nString.prototype.toCamelCase = function camelize() {\n    return this.toLowerCase().replace(/[-_ \\/\\.](.)/g, function (match, group1) {\n        return group1.toUpperCase();\n    });\n}\n\nconst parameterTypeProperties = [\n    'format',\n    'minimum',\n    'maximum',\n    'exclusiveMinimum',\n    'exclusiveMaximum',\n    'minLength',\n    'maxLength',\n    'multipleOf',\n    'minItems',\n    'maxItems',\n    'uniqueItems',\n    'minProperties',\n    'maxProperties',\n    'additionalProperties',\n    'pattern',\n    'enum',\n    'default'\n];\n\nconst arrayProperties = [\n    'items',\n    'minItems',\n    'maxItems',\n    'uniqueItems'\n];\n\nconst httpMethods = [\n    'get',\n    'post',\n    'put',\n    'delete',\n    'patch',\n    'head',\n    'options',\n    'trace'\n];\n\nfunction sanitise(s) {\n    s = s.replace('[]','Array');\n    let components = s.split('/');\n    components[0] = components[0].replace(/[^A-Za-z0-9_\\-\\.]+|\\s+/gm, '_');\n    return components.join('/');\n}\n\nfunction sanitiseAll(s) {\n    return sanitise(s.split('/').join('_'));\n}\n\nmodule.exports = {\n\n    colour: colour,\n    uniqueOnly: uniqueOnly,\n    hasDuplicates: hasDuplicates,\n    allSame: allSame,\n    distinctArray: distinctArray,\n    firstDupe: firstDupe,\n    hash: hash,\n    parameterTypeProperties: parameterTypeProperties,\n    arrayProperties: arrayProperties,\n    httpMethods: httpMethods,\n    sanitise: sanitise,\n    sanitiseAll: sanitiseAll\n\n};\n\n","'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst url = require('url');\n\nconst fetch = require('node-fetch-h2');\nconst yaml = require('yaml');\n\nconst jptr = require('reftools/lib/jptr.js').jptr;\nconst recurse = require('reftools/lib/recurse.js').recurse;\nconst clone = require('reftools/lib/clone.js').clone;\nconst deRef = require('reftools/lib/dereference.js').dereference;\nconst isRef = require('reftools/lib/isref.js').isRef;\nconst common = require('oas-kit-common');\n\nfunction unique(arr) {\n    return [... new Set(arr)];\n}\n\nfunction readFileAsync(filename, encoding, options, pointer, def) {\n    return new Promise(function (resolve, reject) {\n        fs.readFile(filename, encoding, function (err, data) {\n            if (err) {\n                if (options.ignoreIOErrors && def) {\n                    if (options.verbose) console.warn('FAILED',pointer);\n                    options.externalRefs[pointer].failed = true;\n                    resolve(def);\n                }\n                else {\n                    reject(err);\n                }\n            }\n            else {\n                resolve(data);\n            }\n        });\n    });\n}\n\nfunction resolveAllFragment(obj, context, src, parentPath, base, options) {\n\n    let attachPoint = options.externalRefs[src+parentPath].paths[0];\n\n    let baseUrl = url.parse(base);\n    let seen = {}; // seen is indexed by the $ref value and contains path replacements\n    let changes = 1;\n    while (changes) {\n        changes = 0;\n        recurse(obj, {identityDetection:true}, function (obj, key, state) {\n            if (isRef(obj, key)) {\n                if (obj[key].startsWith('#')) {\n                    if (!seen[obj[key]] && !obj.$fixed) {\n                        let target = clone(jptr(context, obj[key]));\n                        if (options.verbose>1) console.warn((target === false ? common.colour.red : common.colour.green)+'Fragment resolution', obj[key], common.colour.normal);\n                        /*\n                            ResolutionCase:A is where there is a local reference in an externally\n                            referenced document, and we have not seen it before. The reference\n                            is replaced by a copy of the data pointed to, which may be outside this fragment\n                            but within the context of the external document\n                        */\n                        if (target === false) {\n                            state.parent[state.pkey] = {}; /* case:A(2) where the resolution fails */\n                            if (options.fatal) {\n                                let ex = new Error('Fragment $ref resolution failed '+obj[key]);\n                                if (options.promise) options.promise.reject(ex)\n                                else throw ex;\n                            }\n                        }\n                        else {\n                            changes++;\n                            state.parent[state.pkey] = target;\n                            seen[obj[key]] = state.path.replace('/%24ref','');\n                        }\n                    }\n                    else {\n                        if (!obj.$fixed) {\n                            let newRef = (attachPoint+'/'+seen[obj[key]]).split('/#/').join('/');\n                            state.parent[state.pkey] = { $ref: newRef, 'x-miro': obj[key], $fixed: true };\n                            if (options.verbose>1) console.warn('Replacing with',newRef);\n                            changes++;\n                        }\n                        /*\n                            ResolutionCase:B is where there is a local reference in an externally\n                            referenced document, and we have seen this reference before and resolved it.\n                            We create a new object containing the (immutable) $ref string\n                        */\n                    }\n                }\n                else if (baseUrl.protocol) {\n                    let newRef = url.resolve(base,obj[key]).toString();\n                    if (options.verbose>1) console.warn(common.colour.yellow+'Rewriting external url ref',obj[key],'as',newRef,common.colour.normal);\n                    obj['x-miro'] = obj[key];\n                    if (options.externalRefs[obj[key]]) {\n                        if (!options.externalRefs[newRef]) {\n                            options.externalRefs[newRef] = options.externalRefs[obj[key]];\n                        }\n                        options.externalRefs[newRef].failed = options.externalRefs[obj[key]].failed;\n                    }\n                    obj[key] = newRef;\n                }\n                else if (!obj['x-miro']) {\n                    let newRef = url.resolve(base,obj[key]).toString();\n                    let failed = false;\n                    if (options.externalRefs[obj[key]]) {\n                        failed = options.externalRefs[obj[key]].failed;\n                    }\n                    if (!failed) {\n                        if (options.verbose>1) console.warn(common.colour.yellow+'Rewriting external ref',obj[key],'as',newRef,common.colour.normal);\n                        obj['x-miro'] = obj[key]; // we use x-miro as a flag so we don't do this > once\n                        obj[key] = newRef;\n                    }\n                }\n            }\n        });\n    }\n\n    recurse(obj,{},function(obj,key,state){\n        if (isRef(obj, key)) {\n            if (typeof obj.$fixed !== 'undefined') delete obj.$fixed;\n        }\n    });\n\n    if (options.verbose>1) console.warn('Finished fragment resolution');\n    return obj;\n}\n\nfunction filterData(data, options) {\n    if (!options.filters || !options.filters.length) return data;\n    for (let filter of options.filters) {\n        data = filter(data, options);\n    }\n    return data;\n}\n\nfunction testProtocol(input, backup) {\n    if (input && input.length > 2) return input;\n    if (backup && backup.length > 2) return backup;\n    return 'file:';\n}\n\nfunction resolveExternal(root, pointer, options, callback) {\n    var u = url.parse(options.source);\n    var base = options.source.split('\\\\').join('/').split('/');\n    let doc = base.pop(); // drop the actual filename\n    if (!doc) base.pop(); // in case it ended with a /\n    let fragment = '';\n    let fnComponents = pointer.split('#');\n    if (fnComponents.length > 1) {\n        fragment = '#' + fnComponents[1];\n        pointer = fnComponents[0];\n    }\n    base = base.join('/');\n\n    let u2 = url.parse(pointer);\n    let effectiveProtocol = testProtocol(u2.protocol, u.protocol);\n\n    let target;\n    if (effectiveProtocol === 'file:') {\n        target = path.resolve(base ? base + '/' : '', pointer);\n    }\n    else {\n        target = url.resolve(base ? base + '/' : '', pointer);\n    }\n\n    if (options.cache[target]) {\n        if (options.verbose) console.warn('CACHED', target, fragment);\n        /*\n            resolutionSource:A this is where we have cached the externally-referenced document from a\n            file, http or custom handler\n        */\n        let context = clone(options.cache[target]);\n        let data = options.externalRef = context;\n        if (fragment) {\n            data = jptr(data, fragment);\n            if (data === false) {\n                data = {}; // case:A(2) where the resolution fails\n                if (options.fatal) {\n                    let ex = new Error('Cached $ref resolution failed '+target+fragment);\n                    if (options.promise) options.promise.reject(ex)\n                    else throw ex;\n                }\n            }\n        }\n        data = resolveAllFragment(data, context, pointer, fragment, target, options);\n        data = filterData(data, options);\n        callback(clone(data), target, options);\n        return Promise.resolve(data);\n    }\n\n    if (options.verbose) console.warn('GET', target, fragment);\n\n    if (options.handlers && options.handlers[effectiveProtocol]) {\n        return options.handlers[effectiveProtocol](base, pointer, fragment, options)\n            .then(function (data) {\n                options.externalRef = data;\n                data = filterData(data, options);\n                options.cache[target] = data;\n                callback(data, target, options);\n                return data;\n            })\n            .catch(function(ex){\n                if (options.verbose) console.warn(ex);\n                throw ex;\n            });\n    }\n    else if (effectiveProtocol && effectiveProtocol.startsWith('http')) {\n        const fetchOptions = Object.assign({}, options.fetchOptions, { agent: options.agent });\n        return options.fetch(target, fetchOptions)\n            .then(function (res) {\n                if (res.status !== 200) {\n                  if (options.ignoreIOErrors) {\n                    if (options.verbose) console.warn('FAILED',pointer);\n                    options.externalRefs[pointer].failed = true;\n                    return '{\"$ref\":\"'+pointer+'\"}';\n                  }\n                  else {\n                    throw new Error(`Received status code ${res.status}: ${target}`);\n                  }\n                }\n                return res.text();\n            })\n            .then(function (data) {\n                try {\n                    let context = yaml.parse(data, { schema:'core', prettyErrors: true });\n                    data = options.externalRef = context;\n                    options.cache[target] = clone(data);\n                    /* resolutionSource:B, from the network, data is fresh, but we clone it into the cache */\n                    if (fragment) {\n                        data = jptr(data, fragment);\n                        if (data === false) {\n                            data = {}; /* case:B(2) where the resolution fails */\n                            if (options.fatal) {\n                                let ex = new Error('Remote $ref resolution failed '+target+fragment);\n                                if (options.promise) options.promise.reject(ex)\n                                else throw ex;\n                            }\n                        }\n                    }\n                    data = resolveAllFragment(data, context, pointer, fragment, target, options);\n                    data = filterData(data, options);\n                }\n                catch (ex) {\n                    if (options.verbose) console.warn(ex);\n                    if (options.promise && options.fatal) options.promise.reject(ex)\n                    else throw ex;\n                }\n                callback(data, target, options);\n                return data;\n            })\n            .catch(function (err) {\n                if (options.verbose) console.warn(err);\n                options.cache[target] = {};\n                if (options.promise && options.fatal) options.promise.reject(err)\n                else throw err;\n            });\n    }\n    else {\n        const def = '{\"$ref\":\"'+pointer+'\"}';\n        return readFileAsync(target, options.encoding || 'utf8', options, pointer, def)\n            .then(function (data) {\n                try {\n                    let context = yaml.parse(data, { schema:'core', prettyErrors: true });\n                    data = options.externalRef = context;\n                    /*\n                        resolutionSource:C from a file, data is fresh but we clone it into the cache\n                    */\n                    options.cache[target] = clone(data);\n                    if (fragment) {\n                        data = jptr(data, fragment);\n                        if (data === false) {\n                            data = {}; /* case:C(2) where the resolution fails */\n                            if (options.fatal) {\n                                let ex = new Error('File $ref resolution failed '+target+fragment);\n                                if (options.promise) options.promise.reject(ex)\n                                else throw ex;\n                            }\n                        }\n                    }\n                    data = resolveAllFragment(data, context, pointer, fragment, target, options);\n                    data = filterData(data, options);\n                }\n                catch (ex) {\n                    if (options.verbose) console.warn(ex);\n                    if (options.promise && options.fatal) options.promise.reject(ex)\n                    else throw ex;\n                }\n                callback(data, target, options);\n                return data;\n            })\n            .catch(function(err){\n                if (options.verbose) console.warn(err);\n                if (options.promise && options.fatal) options.promise.reject(err)\n                else throw err;\n            });\n    }\n}\n\nfunction scanExternalRefs(options) {\n    return new Promise(function (res, rej) {\n\n        function inner(obj,key,state){\n            if (obj[key] && isRef(obj[key],'$ref')) {\n                let $ref = obj[key].$ref;\n                if (!$ref.startsWith('#')) { // is external\n\n                    let $extra = '';\n\n                    if (!refs[$ref]) {\n                        let potential = Object.keys(refs).find(function(e,i,a){\n                            return $ref.startsWith(e+'/');\n                        });\n                        if (potential) {\n                            if (options.verbose) console.warn('Found potential subschema at',potential);\n                            $extra = '/'+($ref.split('#')[1]||'').replace(potential.split('#')[1]||'');\n                            $extra = $extra.split('/undefined').join(''); // FIXME\n                            $ref = potential;\n                        }\n                    }\n\n                    if (!refs[$ref]) {\n                        refs[$ref] = { resolved: false, paths: [], extras:{}, description: obj[key].description };\n                    }\n                    if (refs[$ref].resolved) {\n                        // we've already seen it\n                        if (refs[$ref].failed) {\n                          // do none\n                        }\n                        else if (options.rewriteRefs) {\n                            let newRef = refs[$ref].resolvedAt;\n                            if (options.verbose>1) console.warn('Rewriting ref', $ref, newRef);\n                            obj[key]['x-miro'] = $ref;\n                            obj[key].$ref = newRef+$extra; // resolutionCase:C (new string)\n                        }\n                        else {\n                            obj[key] = clone(refs[$ref].data); // resolutionCase:D (cloned:yes)\n                        }\n                    }\n                    else {\n                        refs[$ref].paths.push(state.path);\n                        refs[$ref].extras[state.path] = $extra;\n                    }\n                }\n            }\n        }\n\n        let refs = options.externalRefs;\n\n        if ((options.resolver.depth>0) && (options.source === options.resolver.base)) {\n            // we only need to do any of this when called directly on pass #1\n            return res(refs);\n        }\n\n        recurse(options.openapi.definitions, {identityDetection: true, path: '#/definitions'}, inner);\n        recurse(options.openapi.components, {identityDetection: true, path: '#/components'}, inner);\n        recurse(options.openapi, {identityDetection: true}, inner);\n\n        res(refs);\n    });\n}\n\nfunction findExternalRefs(options) {\n    return new Promise(function (res, rej) {\n\n        scanExternalRefs(options)\n        .then(function (refs) {\n            for (let ref in refs) {\n\n                if (!refs[ref].resolved) {\n                    let depth = options.resolver.depth;\n                    if (depth>0) depth++;\n                    options.resolver.actions[depth].push(function () {\n                        return resolveExternal(options.openapi, ref, options, function (data, source, options) {\n                            if (!refs[ref].resolved) {\n                                let external = {};\n                                external.context = refs[ref];\n                                external.$ref = ref;\n                                external.original = clone(data);\n                                external.updated = data;\n                                external.source = source;\n                                options.externals.push(external);\n                                refs[ref].resolved = true;\n                            }\n\n                            let localOptions = Object.assign({}, options, { source: '',\n                                resolver: {actions: options.resolver.actions,\n                                depth: options.resolver.actions.length-1, base: options.resolver.base } });\n                            if (options.patch && refs[ref].description && !data.description &&\n                                (typeof data === 'object')) {\n                                data.description = refs[ref].description;\n                            }\n                            refs[ref].data = data;\n\n                            // sorting $refs by length causes bugs (due to overlapping regions?)\n                            let pointers = unique(refs[ref].paths);\n                            pointers = pointers.sort(function(a,b){\n                                const aComp = (a.startsWith('#/components/') || a.startsWith('#/definitions/'));\n                                const bComp = (b.startsWith('#/components/') || b.startsWith('#/definitions/'));\n                                if (aComp && !bComp) return -1;\n                                if (bComp && !aComp) return +1;\n                                return 0;\n                            });\n\n                            for (let ptr of pointers) {\n                                // shared x-ms-examples $refs confuse the fixupRefs heuristic in index.js\n                                if (refs[ref].resolvedAt && (ptr !== refs[ref].resolvedAt) && (ptr.indexOf('x-ms-examples/')<0)) {\n                                    if (options.verbose>1) console.warn('Creating pointer to data at', ptr);\n                                    jptr(options.openapi, ptr, { $ref: refs[ref].resolvedAt+refs[ref].extras[ptr], 'x-miro': ref+refs[ref].extras[ptr] }); // resolutionCase:E (new object)\n                                }\n                                else {\n                                    if (refs[ref].resolvedAt) {\n                                        if (options.verbose>1) console.warn('Avoiding circular reference');\n                                    }\n                                    else {\n                                        refs[ref].resolvedAt = ptr;\n                                        if (options.verbose>1) console.warn('Creating initial clone of data at', ptr);\n                                    }\n                                    let cdata = clone(data);\n                                    jptr(options.openapi, ptr, cdata); // resolutionCase:F (cloned:yes)\n                                }\n                            }\n                            if (options.resolver.actions[localOptions.resolver.depth].length === 0) {\n                                //options.resolver.actions[localOptions.resolver.depth].push(function () { return scanExternalRefs(localOptions) });\n                                options.resolver.actions[localOptions.resolver.depth].push(function () { return findExternalRefs(localOptions) }); // findExternalRefs calls scanExternalRefs\n                            }\n                        });\n                    });\n                }\n            }\n        })\n        .catch(function(ex){\n            if (options.verbose) console.warn(ex);\n            rej(ex);\n        });\n\n        let result = {options:options};\n        result.actions = options.resolver.actions[options.resolver.depth];\n        res(result);\n    });\n}\n\nconst serial = funcs =>\n    funcs.reduce((promise, func) =>\n        promise.then(result => func().then(Array.prototype.concat.bind(result))), Promise.resolve([]));\n\nfunction loopReferences(options, res, rej) {\n    options.resolver.actions.push([]);\n    findExternalRefs(options)\n        .then(function (data) {\n            serial(data.actions)\n                .then(function () {\n                    if (options.resolver.depth>=options.resolver.actions.length) {\n                        console.warn('Ran off the end of resolver actions');\n                        return res(true);\n                    } else {\n                        options.resolver.depth++;\n                        if (options.resolver.actions[options.resolver.depth].length) {\n                            setTimeout(function () {\n                                loopReferences(data.options, res, rej);\n                            }, 0);\n                        }\n                        else {\n                            if (options.verbose>1) console.warn(common.colour.yellow+'Finished external resolution!',common.colour.normal);\n                            if (options.resolveInternal) {\n                                if (options.verbose>1) console.warn(common.colour.yellow+'Starting internal resolution!',common.colour.normal);\n                                options.openapi = deRef(options.openapi,options.original,{verbose:options.verbose-1});\n                                if (options.verbose>1) console.warn(common.colour.yellow+'Finished internal resolution!',common.colour.normal);\n                            }\n                            recurse(options.openapi,{},function(obj,key,state){\n                                if (isRef(obj, key)) {\n                                    if (!options.preserveMiro) delete obj['x-miro'];\n                                }\n                            });\n                            res(options);\n                        }\n                    }\n                })\n                .catch(function (ex) {\n                    if (options.verbose) console.warn(ex);\n                    rej(ex);\n                });\n        })\n        .catch(function(ex){\n            if (options.verbose) console.warn(ex);\n            rej(ex);\n        });\n}\n\nfunction setupOptions(options) {\n    if (!options.cache) options.cache = {};\n    if (!options.fetch) options.fetch = fetch;\n\n    if (options.source) {\n        let srcUrl = url.parse(options.source);\n        if (!srcUrl.protocol || srcUrl.protocol.length <= 2) { // windows drive-letters\n            options.source = path.resolve(options.source);\n        }\n    }\n\n    options.externals = [];\n    options.externalRefs = {};\n    options.rewriteRefs = true;\n    options.resolver = {};\n    options.resolver.depth = 0;\n    options.resolver.base = options.source;\n    options.resolver.actions = [[]];\n}\n\n/** compatibility function for swagger2openapi */\nfunction optionalResolve(options) {\n    setupOptions(options);\n    return new Promise(function (res, rej) {\n        if (options.resolve)\n            loopReferences(options, res, rej)\n        else\n            res(options);\n    });\n}\n\nfunction resolve(openapi,source,options) {\n    if (!options) options = {};\n    options.openapi = openapi;\n    options.source = source;\n    options.resolve = true;\n    setupOptions(options);\n    return new Promise(function (res, rej) {\n        loopReferences(options, res, rej)\n    });\n}\n\nmodule.exports = {\n    optionalResolve: optionalResolve,\n    resolve: resolve\n};\n\n","'use strict';\n\n/**\n* functions to walk an OpenAPI schema object and traverse all subschemas\n* calling a callback function on each one\n*/\n\n/**\n* obtains the default starting state for the `state` object used\n* by walkSchema\n* @return the state object suitable for use in walkSchema\n*/\nfunction getDefaultState() {\n    return { depth: 0, seen: new WeakMap(), top: true, combine: false, allowRefSiblings: false };\n}\n\n/**\n* begins the walk of a schema object\n* @param schema the schema object to walk\n* @param parent the parent schema, if any. Use empty object if none\n* @param state the initial starting state of the walker, usually obtained from `getDefaultState`. Use empty object to auto-initialise\n* @param callback a function taking a schema, parent and state to be called on this and all subschemas\n* @return the schema object\n*/\nfunction walkSchema(schema, parent, state, callback) {\n\n    if (typeof state.depth === 'undefined') state = getDefaultState();\n    if ((schema === null) || (typeof schema === 'undefined')) return schema;\n    if (typeof schema.$ref !== 'undefined') {\n        let temp = {$ref:schema.$ref};\n        if (state.allowRefSiblings && schema.description) {\n            temp.description = schema.description;\n        }\n        callback(temp,parent,state);\n        return temp; // all other properties SHALL be ignored\n    }\n\n    if (state.combine) {\n        if (schema.allOf && Array.isArray(schema.allOf) && schema.allOf.length === 1) {\n            schema = Object.assign({},schema.allOf[0],schema);\n            delete schema.allOf;\n        }\n        if (schema.anyOf && Array.isArray(schema.anyOf) && schema.anyOf.length === 1) {\n            schema = Object.assign({},schema.anyOf[0],schema);\n            delete schema.anyOf;\n        }\n        if (schema.oneOf && Array.isArray(schema.oneOf) && schema.oneOf.length === 1) {\n            schema = Object.assign({},schema.oneOf[0],schema);\n            delete schema.oneOf;\n        }\n    }\n\n    callback(schema,parent,state);\n    if (state.seen.has(schema)) {\n        return schema;\n    }\n    //else\n    if ((typeof schema === 'object') && (schema !== null)) state.seen.set(schema,true);\n    state.top = false;\n    state.depth++;\n\n    if (typeof schema.items !== 'undefined') {\n        state.property = 'items';\n        walkSchema(schema.items,schema,state,callback);\n    }\n    if (schema.additionalItems) {\n        if (typeof schema.additionalItems === 'object') {\n            state.property = 'additionalItems';\n            walkSchema(schema.additionalItems,schema,state,callback);\n        }\n    }\n    if (schema.additionalProperties) {\n        if (typeof schema.additionalProperties === 'object') {\n            state.property = 'additionalProperties';\n            walkSchema(schema.additionalProperties,schema,state,callback);\n        }\n    }\n    if (schema.properties) {\n        for (let prop in schema.properties) {\n            let subSchema = schema.properties[prop];\n            state.property = 'properties/'+prop;\n            walkSchema(subSchema,schema,state,callback);\n        }\n    }\n    if (schema.patternProperties) {\n        for (let prop in schema.patternProperties) {\n            let subSchema = schema.patternProperties[prop];\n            state.property = 'patternProperties/'+prop;\n            walkSchema(subSchema,schema,state,callback);\n        }\n    }\n    if (schema.allOf) {\n        for (let index in schema.allOf) {\n            let subSchema = schema.allOf[index];\n            state.property = 'allOf/'+index;\n            walkSchema(subSchema,schema,state,callback);\n        }\n    }\n    if (schema.anyOf) {\n        for (let index in schema.anyOf) {\n            let subSchema = schema.anyOf[index];\n            state.property = 'anyOf/'+index;\n            walkSchema(subSchema,schema,state,callback);\n        }\n    }\n    if (schema.oneOf) {\n        for (let index in schema.oneOf) {\n            let subSchema = schema.oneOf[index];\n            state.property = 'oneOf/'+index;\n            walkSchema(subSchema,schema,state,callback);\n        }\n    }\n    if (schema.not) {\n        state.property = 'not';\n        walkSchema(schema.not,schema,state,callback);\n    }\n    state.depth--;\n    return schema;\n}\n\nmodule.exports = {\n    getDefaultState: getDefaultState,\n    walkSchema: walkSchema\n};\n\n","// 'path' module extracted from Node.js v8.11.1 (only the posix part)\n// transplited with Babel\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nfunction assertPath(path) {\n  if (typeof path !== 'string') {\n    throw new TypeError('Path must be a string. Received ' + JSON.stringify(path));\n  }\n}\n\n// Resolves . and .. elements in a path with directory names\nfunction normalizeStringPosix(path, allowAboveRoot) {\n  var res = '';\n  var lastSegmentLength = 0;\n  var lastSlash = -1;\n  var dots = 0;\n  var code;\n  for (var i = 0; i <= path.length; ++i) {\n    if (i < path.length)\n      code = path.charCodeAt(i);\n    else if (code === 47 /*/*/)\n      break;\n    else\n      code = 47 /*/*/;\n    if (code === 47 /*/*/) {\n      if (lastSlash === i - 1 || dots === 1) {\n        // NOOP\n      } else if (lastSlash !== i - 1 && dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {\n          if (res.length > 2) {\n            var lastSlashIndex = res.lastIndexOf('/');\n            if (lastSlashIndex !== res.length - 1) {\n              if (lastSlashIndex === -1) {\n                res = '';\n                lastSegmentLength = 0;\n              } else {\n                res = res.slice(0, lastSlashIndex);\n                lastSegmentLength = res.length - 1 - res.lastIndexOf('/');\n              }\n              lastSlash = i;\n              dots = 0;\n              continue;\n            }\n          } else if (res.length === 2 || res.length === 1) {\n            res = '';\n            lastSegmentLength = 0;\n            lastSlash = i;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          if (res.length > 0)\n            res += '/..';\n          else\n            res = '..';\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0)\n          res += '/' + path.slice(lastSlash + 1, i);\n        else\n          res = path.slice(lastSlash + 1, i);\n        lastSegmentLength = i - lastSlash - 1;\n      }\n      lastSlash = i;\n      dots = 0;\n    } else if (code === 46 /*.*/ && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\n\nfunction _format(sep, pathObject) {\n  var dir = pathObject.dir || pathObject.root;\n  var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');\n  if (!dir) {\n    return base;\n  }\n  if (dir === pathObject.root) {\n    return dir + base;\n  }\n  return dir + sep + base;\n}\n\nvar posix = {\n  // path.resolve([from ...], to)\n  resolve: function resolve() {\n    var resolvedPath = '';\n    var resolvedAbsolute = false;\n    var cwd;\n\n    for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n      var path;\n      if (i >= 0)\n        path = arguments[i];\n      else {\n        if (cwd === undefined)\n          cwd = process.cwd();\n        path = cwd;\n      }\n\n      assertPath(path);\n\n      // Skip empty entries\n      if (path.length === 0) {\n        continue;\n      }\n\n      resolvedPath = path + '/' + resolvedPath;\n      resolvedAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    }\n\n    // At this point the path should be resolved to a full absolute path, but\n    // handle relative paths to be safe (might happen when process.cwd() fails)\n\n    // Normalize the path\n    resolvedPath = normalizeStringPosix(resolvedPath, !resolvedAbsolute);\n\n    if (resolvedAbsolute) {\n      if (resolvedPath.length > 0)\n        return '/' + resolvedPath;\n      else\n        return '/';\n    } else if (resolvedPath.length > 0) {\n      return resolvedPath;\n    } else {\n      return '.';\n    }\n  },\n\n  normalize: function normalize(path) {\n    assertPath(path);\n\n    if (path.length === 0) return '.';\n\n    var isAbsolute = path.charCodeAt(0) === 47 /*/*/;\n    var trailingSeparator = path.charCodeAt(path.length - 1) === 47 /*/*/;\n\n    // Normalize the path\n    path = normalizeStringPosix(path, !isAbsolute);\n\n    if (path.length === 0 && !isAbsolute) path = '.';\n    if (path.length > 0 && trailingSeparator) path += '/';\n\n    if (isAbsolute) return '/' + path;\n    return path;\n  },\n\n  isAbsolute: function isAbsolute(path) {\n    assertPath(path);\n    return path.length > 0 && path.charCodeAt(0) === 47 /*/*/;\n  },\n\n  join: function join() {\n    if (arguments.length === 0)\n      return '.';\n    var joined;\n    for (var i = 0; i < arguments.length; ++i) {\n      var arg = arguments[i];\n      assertPath(arg);\n      if (arg.length > 0) {\n        if (joined === undefined)\n          joined = arg;\n        else\n          joined += '/' + arg;\n      }\n    }\n    if (joined === undefined)\n      return '.';\n    return posix.normalize(joined);\n  },\n\n  relative: function relative(from, to) {\n    assertPath(from);\n    assertPath(to);\n\n    if (from === to) return '';\n\n    from = posix.resolve(from);\n    to = posix.resolve(to);\n\n    if (from === to) return '';\n\n    // Trim any leading backslashes\n    var fromStart = 1;\n    for (; fromStart < from.length; ++fromStart) {\n      if (from.charCodeAt(fromStart) !== 47 /*/*/)\n        break;\n    }\n    var fromEnd = from.length;\n    var fromLen = fromEnd - fromStart;\n\n    // Trim any leading backslashes\n    var toStart = 1;\n    for (; toStart < to.length; ++toStart) {\n      if (to.charCodeAt(toStart) !== 47 /*/*/)\n        break;\n    }\n    var toEnd = to.length;\n    var toLen = toEnd - toStart;\n\n    // Compare paths to find the longest common path from root\n    var length = fromLen < toLen ? fromLen : toLen;\n    var lastCommonSep = -1;\n    var i = 0;\n    for (; i <= length; ++i) {\n      if (i === length) {\n        if (toLen > length) {\n          if (to.charCodeAt(toStart + i) === 47 /*/*/) {\n            // We get here if `from` is the exact base path for `to`.\n            // For example: from='/foo/bar'; to='/foo/bar/baz'\n            return to.slice(toStart + i + 1);\n          } else if (i === 0) {\n            // We get here if `from` is the root\n            // For example: from='/'; to='/foo'\n            return to.slice(toStart + i);\n          }\n        } else if (fromLen > length) {\n          if (from.charCodeAt(fromStart + i) === 47 /*/*/) {\n            // We get here if `to` is the exact base path for `from`.\n            // For example: from='/foo/bar/baz'; to='/foo/bar'\n            lastCommonSep = i;\n          } else if (i === 0) {\n            // We get here if `to` is the root.\n            // For example: from='/foo'; to='/'\n            lastCommonSep = 0;\n          }\n        }\n        break;\n      }\n      var fromCode = from.charCodeAt(fromStart + i);\n      var toCode = to.charCodeAt(toStart + i);\n      if (fromCode !== toCode)\n        break;\n      else if (fromCode === 47 /*/*/)\n        lastCommonSep = i;\n    }\n\n    var out = '';\n    // Generate the relative path based on the path difference between `to`\n    // and `from`\n    for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {\n      if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {\n        if (out.length === 0)\n          out += '..';\n        else\n          out += '/..';\n      }\n    }\n\n    // Lastly, append the rest of the destination (`to`) path that comes after\n    // the common path parts\n    if (out.length > 0)\n      return out + to.slice(toStart + lastCommonSep);\n    else {\n      toStart += lastCommonSep;\n      if (to.charCodeAt(toStart) === 47 /*/*/)\n        ++toStart;\n      return to.slice(toStart);\n    }\n  },\n\n  _makeLong: function _makeLong(path) {\n    return path;\n  },\n\n  dirname: function dirname(path) {\n    assertPath(path);\n    if (path.length === 0) return '.';\n    var code = path.charCodeAt(0);\n    var hasRoot = code === 47 /*/*/;\n    var end = -1;\n    var matchedSlash = true;\n    for (var i = path.length - 1; i >= 1; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          if (!matchedSlash) {\n            end = i;\n            break;\n          }\n        } else {\n        // We saw the first non-path separator\n        matchedSlash = false;\n      }\n    }\n\n    if (end === -1) return hasRoot ? '/' : '.';\n    if (hasRoot && end === 1) return '//';\n    return path.slice(0, end);\n  },\n\n  basename: function basename(path, ext) {\n    if (ext !== undefined && typeof ext !== 'string') throw new TypeError('\"ext\" argument must be a string');\n    assertPath(path);\n\n    var start = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i;\n\n    if (ext !== undefined && ext.length > 0 && ext.length <= path.length) {\n      if (ext.length === path.length && ext === path) return '';\n      var extIdx = ext.length - 1;\n      var firstNonSlashEnd = -1;\n      for (i = path.length - 1; i >= 0; --i) {\n        var code = path.charCodeAt(i);\n        if (code === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else {\n          if (firstNonSlashEnd === -1) {\n            // We saw the first non-path separator, remember this index in case\n            // we need it if the extension ends up not matching\n            matchedSlash = false;\n            firstNonSlashEnd = i + 1;\n          }\n          if (extIdx >= 0) {\n            // Try to match the explicit extension\n            if (code === ext.charCodeAt(extIdx)) {\n              if (--extIdx === -1) {\n                // We matched the extension, so mark this as the end of our path\n                // component\n                end = i;\n              }\n            } else {\n              // Extension does not match, so our result is the entire path\n              // component\n              extIdx = -1;\n              end = firstNonSlashEnd;\n            }\n          }\n        }\n      }\n\n      if (start === end) end = firstNonSlashEnd;else if (end === -1) end = path.length;\n      return path.slice(start, end);\n    } else {\n      for (i = path.length - 1; i >= 0; --i) {\n        if (path.charCodeAt(i) === 47 /*/*/) {\n            // If we reached a path separator that was not part of a set of path\n            // separators at the end of the string, stop now\n            if (!matchedSlash) {\n              start = i + 1;\n              break;\n            }\n          } else if (end === -1) {\n          // We saw the first non-path separator, mark this as the end of our\n          // path component\n          matchedSlash = false;\n          end = i + 1;\n        }\n      }\n\n      if (end === -1) return '';\n      return path.slice(start, end);\n    }\n  },\n\n  extname: function extname(path) {\n    assertPath(path);\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n    for (var i = path.length - 1; i >= 0; --i) {\n      var code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1)\n            startDot = i;\n          else if (preDotState !== 1)\n            preDotState = 1;\n      } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n        // We saw a non-dot character immediately before the dot\n        preDotState === 0 ||\n        // The (right-most) trimmed path component is exactly '..'\n        preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      return '';\n    }\n    return path.slice(startDot, end);\n  },\n\n  format: function format(pathObject) {\n    if (pathObject === null || typeof pathObject !== 'object') {\n      throw new TypeError('The \"pathObject\" argument must be of type Object. Received type ' + typeof pathObject);\n    }\n    return _format('/', pathObject);\n  },\n\n  parse: function parse(path) {\n    assertPath(path);\n\n    var ret = { root: '', dir: '', base: '', ext: '', name: '' };\n    if (path.length === 0) return ret;\n    var code = path.charCodeAt(0);\n    var isAbsolute = code === 47 /*/*/;\n    var start;\n    if (isAbsolute) {\n      ret.root = '/';\n      start = 1;\n    } else {\n      start = 0;\n    }\n    var startDot = -1;\n    var startPart = 0;\n    var end = -1;\n    var matchedSlash = true;\n    var i = path.length - 1;\n\n    // Track the state of characters (if any) we see before our first dot and\n    // after any path separator we find\n    var preDotState = 0;\n\n    // Get non-dir info\n    for (; i >= start; --i) {\n      code = path.charCodeAt(i);\n      if (code === 47 /*/*/) {\n          // If we reached a path separator that was not part of a set of path\n          // separators at the end of the string, stop now\n          if (!matchedSlash) {\n            startPart = i + 1;\n            break;\n          }\n          continue;\n        }\n      if (end === -1) {\n        // We saw the first non-path separator, mark this as the end of our\n        // extension\n        matchedSlash = false;\n        end = i + 1;\n      }\n      if (code === 46 /*.*/) {\n          // If this is our first dot, mark it as the start of our extension\n          if (startDot === -1) startDot = i;else if (preDotState !== 1) preDotState = 1;\n        } else if (startDot !== -1) {\n        // We saw a non-dot and non-path separator before our dot, so we should\n        // have a good chance at having a non-empty extension\n        preDotState = -1;\n      }\n    }\n\n    if (startDot === -1 || end === -1 ||\n    // We saw a non-dot character immediately before the dot\n    preDotState === 0 ||\n    // The (right-most) trimmed path component is exactly '..'\n    preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n      if (end !== -1) {\n        if (startPart === 0 && isAbsolute) ret.base = ret.name = path.slice(1, end);else ret.base = ret.name = path.slice(startPart, end);\n      }\n    } else {\n      if (startPart === 0 && isAbsolute) {\n        ret.name = path.slice(1, startDot);\n        ret.base = path.slice(1, end);\n      } else {\n        ret.name = path.slice(startPart, startDot);\n        ret.base = path.slice(startPart, end);\n      }\n      ret.ext = path.slice(startDot, end);\n    }\n\n    if (startPart > 0) ret.dir = path.slice(0, startPart - 1);else if (isAbsolute) ret.dir = '/';\n\n    return ret;\n  },\n\n  sep: '/',\n  delimiter: ':',\n  win32: null,\n  posix: null\n};\n\nposix.posix = posix;\n\nmodule.exports = posix;\n","'use strict';\n\n/**\n* a collection of cloning functions\n*/\n\n/**\n* a no-op placeholder which returns the given object unchanged\n* useful for when a clone function needs to be passed but cloning is not\n* required\n* @param obj the input object\n* @return the input object, unchanged\n*/\nfunction nop(obj) {\n    return obj;\n}\n\n/**\n* clones the given object using JSON.parse and JSON.stringify\n* @param obj the object to clone\n* @return the cloned object\n*/\nfunction clone(obj) {\n    return JSON.parse(JSON.stringify(obj));\n}\n\n/**\n* clones the given object's properties shallowly, ignores properties from prototype\n* @param obj the object to clone\n* @return the cloned object\n*/\nfunction shallowClone(obj) {\n    let result = {};\n    for (let p in obj) {\n        if (obj.hasOwnProperty(p)) {\n            result[p] = obj[p];\n        }\n    }\n    return result;\n}\n\n/**\n* clones the given object's properties deeply, ignores properties from prototype\n* @param obj the object to clone\n* @return the cloned object\n*/\nfunction deepClone(obj) {\n    let result = Array.isArray(obj) ? [] : {};\n    for (let p in obj) {\n        if (obj.hasOwnProperty(p) || Array.isArray(obj)) {\n            result[p] = (typeof obj[p] === 'object') ? deepClone(obj[p]) : obj[p];\n        }\n    }\n    return result;\n}\n\n/**\n* clones the given object's properties shallowly, using Object.assign\n* @param obj the object to clone\n* @return the cloned object\n*/\nfunction fastClone(obj) {\n    return Object.assign({},obj);\n}\n\n/**\n* Source: stackoverflow http://bit.ly/2A1Kha6\n*/\n\nfunction circularClone(obj, hash) {\n    if (!hash) hash = new WeakMap();\n    // Do not try to clone primitives or functions\n    if (Object(obj) !== obj || obj instanceof Function) return obj;\n    if (hash.has(obj)) return hash.get(obj); // Cyclic reference\n    try { // Try to run constructor (without arguments, as we don't know them)\n        var result = new obj.constructor();\n    } catch(e) { // Constructor failed, create object without running the constructor\n        result = Object.create(Object.getPrototypeOf(obj));\n    }\n    // Optional: support for some standard constructors (extend as desired)\n    /*if (obj instanceof Map)\n        Array.from(obj, ([key, val]) => result.set(circularClone(key, hash),\n                                                   circularClone(val, hash)) );\n    else if (obj instanceof Set)\n        Array.from(obj, (key) => result.add(circularClone(key, hash)) );\n    */\n    // Register in hash\n    hash.set(obj, result);\n    // Clone and assign enumerable own properties recursively\n    return Object.assign(result, ...Object.keys(obj).map (\n        key => ({ [key]: circularClone(obj[key], hash) }) ));\n}\n\nmodule.exports = {\n    nop : nop,\n    clone : clone,\n    shallowClone : shallowClone,\n    deepClone : deepClone,\n    fastClone : fastClone,\n    circularClone : circularClone\n};\n\n","'use strict';\n\nconst recurse = require('./recurse.js').recurse;\nconst clone = require('./clone.js').shallowClone;\nconst jptr = require('./jptr.js').jptr;\nconst isRef = require('./isref.js').isRef;\n\nvar getLogger = function (options) {\n    if (options && options.verbose) {\n        return {\n            warn: function() {\n                var args = Array.prototype.slice.call(arguments);\n                console.warn.apply(console, args);\n            }\n        }\n    }\n    else {\n        return {\n            warn: function() {\n                //nop\n            }\n        }\n    }\n}\n\n/**\n* dereferences the given object\n* @param o the object to dereference\n* @definitions a source of definitions to reference\n* @options optional settings (used recursively)\n* @return the dereferenced object\n*/\nfunction dereference(o,definitions,options) {\n    if (!options) options = {};\n    if (!options.cache) options.cache = {};\n    if (!options.state) options.state = {};\n    options.state.identityDetection = true;\n    // options.depth allows us to limit cloning to the first invocation\n    options.depth = (options.depth ? options.depth+1 : 1);\n    let obj = (options.depth > 1 ? o : clone(o));\n    let container = { data: obj };\n    let defs = (options.depth > 1 ? definitions : clone(definitions));\n    // options.master is the top level object, regardless of depth\n    if (!options.master) options.master = obj;\n\n    let logger = getLogger(options);\n\n    let changes = 1;\n    while (changes > 0) {\n        changes = 0;\n    recurse(container,options.state,function(obj,key,state){\n        if (isRef(obj,key)) {\n            let $ref = obj[key]; // immutable\n            changes++;\n            if (!options.cache[$ref]) {\n                let entry = {};\n                entry.path = state.path.split('/$ref')[0];\n                entry.key = $ref;\n                logger.warn('Dereffing %s at %s',$ref,entry.path);\n                entry.source = defs;\n                entry.data = jptr(entry.source,entry.key);\n                if (entry.data === false) {\n                    entry.data = jptr(options.master,entry.key);\n                    entry.source = options.master;\n                }\n                if (entry.data === false) {\n                    logger.warn('Missing $ref target',entry.key);\n                }\n                options.cache[$ref] = entry;\n                entry.data = state.parent[state.pkey] = dereference(jptr(entry.source,entry.key),entry.source,options);\n                if (options.$ref && (typeof state.parent[state.pkey] === 'object') && (state.parent[state.pkey] !== null)) state.parent[state.pkey][options.$ref] = $ref;\n                entry.resolved = true;\n            }\n            else {\n                let entry = options.cache[$ref];\n                if (entry.resolved) {\n                    // we have already seen and resolved this reference\n                    logger.warn('Patching %s for %s',$ref,entry.path);\n                    state.parent[state.pkey] = entry.data;\n                    if (options.$ref && (typeof state.parent[state.pkey] === 'object') && (state.parent[state.pkey] !== null)) state.parent[state.pkey][options.$ref] = $ref;\n                }\n                else if ($ref === entry.path) {\n                    // reference to itself, throw\n                    throw new Error(`Tight circle at ${entry.path}`);\n                }\n                else {\n                    // we're dealing with a circular reference here\n                    logger.warn('Unresolved ref');\n                    state.parent[state.pkey] = jptr(entry.source,entry.path);\n                    if (state.parent[state.pkey] === false) {\n                        state.parent[state.pkey] = jptr(entry.source,entry.key);\n                    }\n                    if (options.$ref && (typeof state.parent[state.pkey] === 'object') && (state.parent[state.pkey] !== null)) state.parent[options.$ref] = $ref;\n                }\n            }\n        }\n    });\n    }\n    return container.data;\n}\n\nmodule.exports = {\n    dereference : dereference\n};\n\n","'use strict';\n\nfunction isRef(obj,key) {\n    return ((key === '$ref') && (!!obj && typeof obj[key] === 'string'));\n}\n\nmodule.exports = {\n    isRef: isRef\n};\n\n","'use strict';\n\n/**\n* escapes JSON Pointer using ~0 for ~ and ~1 for /\n* @param s the string to escape\n* @return the escaped string\n*/\nfunction jpescape(s) {\n    return s.replace(/\\~/g, '~0').replace(/\\//g, '~1');\n}\n\n/**\n* unescapes JSON Pointer using ~0 for ~ and ~1 for /\n* @param s the string to unescape\n* @return the unescaped string\n*/\nfunction jpunescape(s) {\n    return s.replace(/\\~1/g, '/').replace(/~0/g, '~');\n}\n\n// JSON Pointer specification: http://tools.ietf.org/html/rfc6901\n\n/**\n* from obj, return the property with a JSON Pointer prop, optionally setting it\n* to newValue\n* @param obj the object to point into\n* @param prop the JSON Pointer or JSON Reference\n* @param newValue optional value to set the property to\n* @return the found property, or false\n*/\nfunction jptr(obj, prop, newValue) {\n    if (typeof obj === 'undefined') return false;\n    if (!prop || typeof prop !== 'string' || (prop === '#')) return (typeof newValue !== 'undefined' ? newValue : obj);\n\n    if (prop.indexOf('#')>=0) {\n        let parts = prop.split('#');\n        let uri = parts[0];\n        if (uri) return false; // we do internal resolution only\n        prop = parts[1];\n        prop = decodeURIComponent(prop.slice(1).split('+').join(' '));\n    }\n    if (prop.startsWith('/')) prop = prop.slice(1);\n\n    let components = prop.split('/');\n    for (let i=0;i<components.length;i++) {\n        components[i] = jpunescape(components[i]);\n\n        let setAndLast = (typeof newValue !== 'undefined') && (i == components.length-1);\n\n        let index = parseInt(components[i],10);\n        if (!Array.isArray(obj) || isNaN(index) || (index.toString() !== components[i])) {\n            index = (Array.isArray(obj) && components[i] === '-') ? -2 : -1;\n        }\n        else {\n            components[i] = (i > 0) ? components[i-1] : ''; // backtrack to indexed property name\n        }\n\n        if ((index != -1) || (obj && obj.hasOwnProperty(components[i]))) {\n            if (index >= 0) {\n                if (setAndLast) {\n                    obj[index] = newValue;\n                }\n                obj = obj[index];\n            }\n            else if (index === -2) {\n                if (setAndLast) {\n                    if (Array.isArray(obj)) {\n                        obj.push(newValue);\n                    }\n                    return newValue;\n                }\n                else return undefined;\n            }\n            else {\n                if (setAndLast) {\n                    obj[components[i]] = newValue;\n                }\n                obj = obj[components[i]];\n            }\n        }\n        else {\n            if ((typeof newValue !== 'undefined') && (typeof obj === 'object') &&\n                (!Array.isArray(obj))) {\n                obj[components[i]] = (setAndLast ? newValue : ((components[i+1] === '0' || components[i+1] === '-') ? [] : {}));\n                obj = obj[components[i]];\n            }\n            else return false;\n        }\n    }\n    return obj;\n}\n\nmodule.exports = {\n    jptr : jptr,\n    jpescape : jpescape,\n    jpunescape : jpunescape\n};\n","'use strict';\n\nconst jpescape = require('./jptr.js').jpescape;\n\nfunction defaultState() {\n    return {\n        path: '#',\n        depth: 0,\n        pkey: '',\n        parent: {},\n        payload: {},\n        seen: new WeakMap(),\n        identity: false,\n        identityDetection: false\n    };\n}\n\n/**\n* recurses through the properties of an object, given an optional starting state\n* anything you pass in state.payload is passed to the callback each time\n* @param object the object to recurse through\n* @param state optional starting state, can be set to null or {}\n* @param callback the function which receives object,key,state on each property\n*/\nfunction recurse(object, state, callback) {\n    if (!state) state = {depth:0};\n    if (!state.depth) {\n        state = Object.assign({},defaultState(),state);\n    }\n    if (typeof object !== 'object') return;\n    let oPath = state.path;\n    for (let key in object) {\n        state.key = key;\n        state.path = state.path + '/' + encodeURIComponent(jpescape(key));\n        state.identityPath = state.seen.get(object[key]);\n        state.identity = (typeof state.identityPath !== 'undefined');\n        if (object.hasOwnProperty(key)) {\n            callback(object, key, state);\n        }\n        if ((typeof object[key] === 'object') && (!state.identity)) {\n            if (state.identityDetection && !Array.isArray(object[key]) && object[key] !== null) {\n                state.seen.set(object[key],state.path);\n            }\n            let newState = {};\n            newState.parent = object;\n            newState.path = state.path;\n            newState.depth = state.depth ? state.depth+1 : 1;\n            newState.pkey = key;\n            newState.payload = state.payload;\n            newState.seen = state.seen;\n            newState.identity = false;\n            newState.identityDetection = state.identityDetection;\n            recurse(object[key], newState, callback);\n        }\n        state.path = oPath;\n    }\n}\n\nmodule.exports = {\n    recurse : recurse\n};\n\n","\n      import API from \"!../../style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n      import domAPI from \"!../../style-loader/dist/runtime/styleDomAPI.js\";\n      import insertFn from \"!../../style-loader/dist/runtime/insertBySelector.js\";\n      import setAttributes from \"!../../style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n      import insertStyleElement from \"!../../style-loader/dist/runtime/insertStyleElement.js\";\n      import styleTagTransformFn from \"!../../style-loader/dist/runtime/styleTagTransform.js\";\n      import content, * as namedExport from \"!!../../css-loader/dist/cjs.js!../../esbuild-loader/dist/index.cjs??ruleSet[1].rules[1].use[2]!./perfect-scrollbar.css\";\n      \n      \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n      options.insert = insertFn.bind(null, \"head\");\n    \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../css-loader/dist/cjs.js!../../esbuild-loader/dist/index.cjs??ruleSet[1].rules[1].use[2]!./perfect-scrollbar.css\";\n       export default content && content.locals ? content.locals : undefined;\n","\"use strict\";\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n  var result = -1;\n\n  for (var i = 0; i < stylesInDOM.length; i++) {\n    if (stylesInDOM[i].identifier === identifier) {\n      result = i;\n      break;\n    }\n  }\n\n  return result;\n}\n\nfunction modulesToDom(list, options) {\n  var idCountMap = {};\n  var identifiers = [];\n\n  for (var i = 0; i < list.length; i++) {\n    var item = list[i];\n    var id = options.base ? item[0] + options.base : item[0];\n    var count = idCountMap[id] || 0;\n    var identifier = \"\".concat(id, \" \").concat(count);\n    idCountMap[id] = count + 1;\n    var indexByIdentifier = getIndexByIdentifier(identifier);\n    var obj = {\n      css: item[1],\n      media: item[2],\n      sourceMap: item[3],\n      supports: item[4],\n      layer: item[5]\n    };\n\n    if (indexByIdentifier !== -1) {\n      stylesInDOM[indexByIdentifier].references++;\n      stylesInDOM[indexByIdentifier].updater(obj);\n    } else {\n      var updater = addElementStyle(obj, options);\n      options.byIndex = i;\n      stylesInDOM.splice(i, 0, {\n        identifier: identifier,\n        updater: updater,\n        references: 1\n      });\n    }\n\n    identifiers.push(identifier);\n  }\n\n  return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n  var api = options.domAPI(options);\n  api.update(obj);\n\n  var updater = function updater(newObj) {\n    if (newObj) {\n      if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n        return;\n      }\n\n      api.update(obj = newObj);\n    } else {\n      api.remove();\n    }\n  };\n\n  return updater;\n}\n\nmodule.exports = function (list, options) {\n  options = options || {};\n  list = list || [];\n  var lastIdentifiers = modulesToDom(list, options);\n  return function update(newList) {\n    newList = newList || [];\n\n    for (var i = 0; i < lastIdentifiers.length; i++) {\n      var identifier = lastIdentifiers[i];\n      var index = getIndexByIdentifier(identifier);\n      stylesInDOM[index].references--;\n    }\n\n    var newLastIdentifiers = modulesToDom(newList, options);\n\n    for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n      var _identifier = lastIdentifiers[_i];\n\n      var _index = getIndexByIdentifier(_identifier);\n\n      if (stylesInDOM[_index].references === 0) {\n        stylesInDOM[_index].updater();\n\n        stylesInDOM.splice(_index, 1);\n      }\n    }\n\n    lastIdentifiers = newLastIdentifiers;\n  };\n};","\"use strict\";\n\nvar memo = {};\n/* istanbul ignore next  */\n\nfunction getTarget(target) {\n  if (typeof memo[target] === \"undefined\") {\n    var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n    if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n      try {\n        // This will throw an exception if access to iframe is blocked\n        // due to cross-origin restrictions\n        styleTarget = styleTarget.contentDocument.head;\n      } catch (e) {\n        // istanbul ignore next\n        styleTarget = null;\n      }\n    }\n\n    memo[target] = styleTarget;\n  }\n\n  return memo[target];\n}\n/* istanbul ignore next  */\n\n\nfunction insertBySelector(insert, style) {\n  var target = getTarget(insert);\n\n  if (!target) {\n    throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n  }\n\n  target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction insertStyleElement(options) {\n  var element = document.createElement(\"style\");\n  options.setAttributes(element, options.attributes);\n  options.insert(element, options.options);\n  return element;\n}\n\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction setAttributesWithoutAttributes(styleElement) {\n  var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n\n  if (nonce) {\n    styleElement.setAttribute(\"nonce\", nonce);\n  }\n}\n\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction apply(styleElement, options, obj) {\n  var css = \"\";\n\n  if (obj.supports) {\n    css += \"@supports (\".concat(obj.supports, \") {\");\n  }\n\n  if (obj.media) {\n    css += \"@media \".concat(obj.media, \" {\");\n  }\n\n  var needLayer = typeof obj.layer !== \"undefined\";\n\n  if (needLayer) {\n    css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n  }\n\n  css += obj.css;\n\n  if (needLayer) {\n    css += \"}\";\n  }\n\n  if (obj.media) {\n    css += \"}\";\n  }\n\n  if (obj.supports) {\n    css += \"}\";\n  }\n\n  var sourceMap = obj.sourceMap;\n\n  if (sourceMap && typeof btoa !== \"undefined\") {\n    css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n  } // For old IE\n\n  /* istanbul ignore if  */\n\n\n  options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n  // istanbul ignore if\n  if (styleElement.parentNode === null) {\n    return false;\n  }\n\n  styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next  */\n\n\nfunction domAPI(options) {\n  var styleElement = options.insertStyleElement(options);\n  return {\n    update: function update(obj) {\n      apply(styleElement, options, obj);\n    },\n    remove: function remove() {\n      removeStyleElement(styleElement);\n    }\n  };\n}\n\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next  */\nfunction styleTagTransform(css, styleElement) {\n  if (styleElement.styleSheet) {\n    styleElement.styleSheet.cssText = css;\n  } else {\n    while (styleElement.firstChild) {\n      styleElement.removeChild(styleElement.firstChild);\n    }\n\n    styleElement.appendChild(document.createTextNode(css));\n  }\n}\n\nmodule.exports = styleTagTransform;","// @ts-check\n'use strict';\n\nconst fs = require('fs');\nconst url = require('url');\nconst pathlib = require('path');\n\nconst maybe = require('call-me-maybe');\nconst fetch = require('node-fetch-h2');\nconst yaml = require('yaml');\n\nconst jptr = require('reftools/lib/jptr.js');\nconst resolveInternal = jptr.jptr;\nconst isRef = require('reftools/lib/isref.js').isRef;\nconst clone = require('reftools/lib/clone.js').clone;\nconst cclone = require('reftools/lib/clone.js').circularClone;\nconst recurse = require('reftools/lib/recurse.js').recurse;\nconst resolver = require('oas-resolver');\nconst sw = require('oas-schema-walker');\nconst common = require('oas-kit-common');\n\nconst statusCodes = require('./lib/statusCodes.js').statusCodes;\n\nconst ourVersion = require('./package.json').version;\n\n// TODO handle specification-extensions with plugins?\n\nconst targetVersion = '3.0.0';\nlet componentNames; // initialised in main\n\nclass S2OError extends Error {\n  constructor(message) {\n    super(message);\n    this.name = 'S2OError';\n  }\n}\n\nfunction throwError(message, options) {\n    let err = new S2OError(message);\n    err.options = options;\n    if (options.promise) {\n        options.promise.reject(err);\n    }\n    else {\n        throw err;\n    }\n}\n\nfunction throwOrWarn(message, container, options) {\n    if (options.warnOnly) {\n        container[options.warnProperty||'x-s2o-warning'] = message;\n    }\n    else {\n        throwError(message, options);\n    }\n}\n\nfunction fixUpSubSchema(schema,parent,options) {\n    if (schema.nullable) options.patches++;\n    if (schema.discriminator && typeof schema.discriminator === 'string') {\n        schema.discriminator = { propertyName: schema.discriminator };\n    }\n    if (schema.items && Array.isArray(schema.items)) {\n        if (schema.items.length === 0) {\n            schema.items = {};\n        }\n        else if (schema.items.length === 1) {\n            schema.items = schema.items[0];\n        }\n        else schema.items = { anyOf: schema.items };\n    }\n\n    if (schema.type && Array.isArray(schema.type)) {\n        if (options.patch) {\n            options.patches++;\n            if (schema.type.length === 0) {\n                delete schema.type;\n            }\n            else {\n                if (!schema.oneOf) schema.oneOf = [];\n                for (let type of schema.type) {\n                    let newSchema = {};\n                    if (type === 'null') {\n                        schema.nullable = true;\n                    }\n                    else {\n                        newSchema.type = type;\n                        for (let prop of common.arrayProperties) {\n                            if (typeof schema.prop !== 'undefined') {\n                                newSchema[prop] = schema[prop];\n                                delete schema[prop];\n                            }\n                        }\n                    }\n                    if (newSchema.type) {\n                        schema.oneOf.push(newSchema);\n                    }\n                }\n                delete schema.type;\n                if (schema.oneOf.length === 0) {\n                    delete schema.oneOf; // means was just null => nullable\n                }\n                else if (schema.oneOf.length < 2) {\n                    schema.type = schema.oneOf[0].type;\n                    if (Object.keys(schema.oneOf[0]).length > 1) {\n                        throwOrWarn('Lost properties from oneOf',schema,options);\n                    }\n                    delete schema.oneOf;\n                }\n            }\n            // do not else this\n            if (schema.type && Array.isArray(schema.type) && schema.type.length === 1) {\n                schema.type = schema.type[0];\n            }\n        }\n        else {\n            throwError('(Patchable) schema type must not be an array', options);\n        }\n    }\n\n    if (schema.type && schema.type === 'null') {\n        delete schema.type;\n        schema.nullable = true;\n    }\n    if ((schema.type === 'array') && (!schema.items)) {\n        schema.items = {};\n    }\n    if (schema.type === 'file') {\n        schema.type = 'string';\n        schema.format = 'binary';\n    }\n    if (typeof schema.required === 'boolean') {\n        if (schema.required && schema.name) {\n            if (typeof parent.required === 'undefined') {\n                parent.required = [];\n            }\n            if (Array.isArray(parent.required)) parent.required.push(schema.name);\n        }\n        delete schema.required;\n    }\n\n    // TODO if we have a nested properties (object inside an object) and the\n    // *parent* type is not set, force it to object\n    // TODO if default is set but type is not set, force type to typeof default\n\n    if (schema.xml && typeof schema.xml.namespace === 'string') {\n        if (!schema.xml.namespace) delete schema.xml.namespace;\n    }\n    if (typeof schema.allowEmptyValue !== 'undefined') {\n      options.patches++;\n      delete schema.allowEmptyValue;\n    }\n}\n\nfunction fixUpSubSchemaExtensions(schema,parent) {\n    if (schema[\"x-required\"] && Array.isArray(schema[\"x-required\"])) {\n        if (!schema.required) schema.required = [];\n        schema.required = schema.required.concat(schema[\"x-required\"]);\n        delete schema[\"x-required\"];\n    }\n    if (schema[\"x-anyOf\"]) {\n        schema.anyOf = schema[\"x-anyOf\"];\n        delete schema[\"x-anyOf\"];\n    }\n    if (schema[\"x-oneOf\"]) {\n        schema.oneOf = schema[\"x-oneOf\"];\n        delete schema[\"x-oneOf\"];\n    }\n    if (schema[\"x-not\"]) {\n        schema.not = schema[\"x-not\"];\n        delete schema[\"x-not\"];\n    }\n    if (typeof schema[\"x-nullable\"] === 'boolean') {\n        schema.nullable = schema[\"x-nullable\"];\n        delete schema[\"x-nullable\"];\n    }\n    if ((typeof schema[\"x-discriminator\"] === 'object') && (typeof schema[\"x-discriminator\"].propertyName === 'string')) {\n        schema.discriminator = schema[\"x-discriminator\"];\n        delete schema[\"x-discriminator\"];\n        for (let entry in schema.discriminator.mapping) {\n            let schemaOrRef = schema.discriminator.mapping[entry];\n            if (schemaOrRef.startsWith('#/definitions/')) {\n                schema.discriminator.mapping[entry] = schemaOrRef.replace('#/definitions/','#/components/schemas/');\n            }\n        }\n    }\n}\n\nfunction fixUpSchema(schema,options) {\n    sw.walkSchema(schema,{},{},function(schema,parent,state){\n        fixUpSubSchemaExtensions(schema,parent);\n        fixUpSubSchema(schema,parent,options);\n    });\n}\n\nfunction getMiroComponentName(ref) {\n    if (ref.indexOf('#')>=0) {\n        ref = ref.split('#')[1].split('/').pop();\n    }\n    else {\n        ref = ref.split('/').pop().split('.')[0];\n    }\n    return encodeURIComponent(common.sanitise(ref));\n}\n\nfunction fixupRefs(obj, key, state) {\n    let options = state.payload.options;\n    if (isRef(obj,key)) {\n        if (obj[key].startsWith('#/components/')) {\n            // no-op\n        }\n        else if (obj[key] === '#/consumes') {\n            // people are *so* creative\n            delete obj[key];\n            state.parent[state.pkey] = clone(options.openapi.consumes);\n        }\n        else if (obj[key] === '#/produces') {\n            // and by creative, I mean devious\n            delete obj[key];\n            state.parent[state.pkey] = clone(options.openapi.produces);\n        }\n        else if (obj[key].startsWith('#/definitions/')) {\n            //only the first part of a schema component name must be sanitised\n            let keys = obj[key].replace('#/definitions/', '').split('/');\n            const ref = jptr.jpunescape(keys[0]);\n\n            let newKey = componentNames.schemas[decodeURIComponent(ref)]; // lookup, resolves a $ref\n            if (newKey) {\n                keys[0] = newKey;\n            }\n            else {\n                throwOrWarn('Could not resolve reference '+obj[key],obj,options);\n            }\n            obj[key] = '#/components/schemas/' + keys.join('/');\n        }\n        else if (obj[key].startsWith('#/parameters/')) {\n            // for extensions like Apigee's x-templates\n            obj[key] = '#/components/parameters/' + common.sanitise(obj[key].replace('#/parameters/', ''));\n        }\n        else if (obj[key].startsWith('#/responses/')) {\n            // for extensions like Apigee's x-templates\n            obj[key] = '#/components/responses/' + common.sanitise(obj[key].replace('#/responses/', ''));\n        }\n        else if (obj[key].startsWith('#')) {\n            // fixes up direct $refs or those created by resolvers\n            let target = clone(jptr.jptr(options.openapi,obj[key]));\n            if (target === false) throwOrWarn('direct $ref not found '+obj[key],obj,options)\n            else if (options.refmap[obj[key]]) {\n                obj[key] = options.refmap[obj[key]];\n            }\n            else {\n                // we use a heuristic to determine what kind of thing is being referenced\n                let oldRef = obj[key];\n                oldRef = oldRef.replace('/properties/headers/','');\n                oldRef = oldRef.replace('/properties/responses/','');\n                oldRef = oldRef.replace('/properties/parameters/','');\n                oldRef = oldRef.replace('/properties/schemas/','');\n                let type = 'schemas';\n                let schemaIndex = oldRef.lastIndexOf('/schema');\n                type = (oldRef.indexOf('/headers/')>schemaIndex) ? 'headers' :\n                    ((oldRef.indexOf('/responses/')>schemaIndex) ? 'responses' :\n                    ((oldRef.indexOf('/example')>schemaIndex) ? 'examples' :\n                    ((oldRef.indexOf('/x-')>schemaIndex) ? 'extensions' :\n                    ((oldRef.indexOf('/parameters/')>schemaIndex) ? 'parameters' : 'schemas'))));\n\n                // non-body/form parameters have not moved in the overall structure (like responses)\n                // but extracting the requestBodies can cause the *number* of parameters to change\n\n                if (type === 'schemas') {\n                    fixUpSchema(target,options);\n                }\n\n                if ((type !== 'responses') && (type !== 'extensions')) {\n                    let prefix = type.substr(0,type.length-1);\n                    if ((prefix === 'parameter') && target.name && (target.name === common.sanitise(target.name))) {\n                        prefix = encodeURIComponent(target.name);\n                    }\n\n                    let suffix = 1;\n                    if (obj['x-miro']) {\n                        prefix = getMiroComponentName(obj['x-miro']);\n                        suffix = '';\n                    }\n\n                    while (jptr.jptr(options.openapi,'#/components/'+type+'/'+prefix+suffix)) {\n                        suffix = (suffix === '' ? 2 : ++suffix);\n                    }\n\n                    let newRef = '#/components/'+type+'/'+prefix+suffix;\n                    let refSuffix = '';\n\n                    if (type === 'examples') {\n                        target = { value: target };\n                        refSuffix = '/value';\n                    }\n\n                    jptr.jptr(options.openapi,newRef,target);\n                    options.refmap[obj[key]] = newRef+refSuffix;\n                    obj[key] = newRef+refSuffix;\n                }\n            }\n        }\n\n        delete obj['x-miro'];\n        // do this last - rework cases where $ref object has sibling properties\n        if (Object.keys(obj).length > 1) {\n            const tmpRef = obj[key];\n            const inSchema = state.path.indexOf('/schema') >= 0; // not perfect, but in the absence of a reasonably-sized and complete OAS 2.0 parser...\n            if (options.refSiblings === 'preserve') {\n                // no-op\n            }\n            else if (inSchema && (options.refSiblings === 'allOf')) {\n                delete obj.$ref;\n                state.parent[state.pkey] = { allOf: [ { $ref: tmpRef }, obj ]};\n            }\n            else { // remove, or not 'preserve' and not in a schema\n                state.parent[state.pkey] = { $ref: tmpRef };\n            }\n        }\n\n    }\n    if ((key === 'x-ms-odata') && (typeof obj[key] === 'string') && (obj[key].startsWith('#/'))) {\n        let keys = obj[key].replace('#/definitions/', '').replace('#/components/schemas/','').split('/');\n        let newKey = componentNames.schemas[decodeURIComponent(keys[0])]; // lookup, resolves a $ref\n        if (newKey) {\n            keys[0] = newKey;\n        }\n        else {\n            throwOrWarn('Could not resolve reference '+obj[key],obj,options);\n        }\n        obj[key] = '#/components/schemas/' + keys.join('/');\n    }\n}\n\n/*\n* This has to happen as a separate pass because multiple $refs may point\n* through elements of the same path\n*/\nfunction dedupeRefs(openapi, options) {\n    for (let ref in options.refmap) {\n        jptr.jptr(openapi,ref,{ $ref: options.refmap[ref] });\n    }\n}\n\nfunction processSecurity(securityObject) {\n    for (let s in securityObject) {\n        for (let k in securityObject[s]) {\n            let sname = common.sanitise(k);\n            if (k !== sname) {\n                securityObject[s][sname] = securityObject[s][k];\n                delete securityObject[s][k];\n            }\n        }\n    }\n}\n\nfunction processSecurityScheme(scheme, options) {\n    if (scheme.type === 'basic') {\n        scheme.type = 'http';\n        scheme.scheme = 'basic';\n    }\n    if (scheme.type === 'oauth2') {\n        let flow = {};\n        let flowName = scheme.flow;\n        if (scheme.flow === 'application') flowName = 'clientCredentials';\n        if (scheme.flow === 'accessCode') flowName = 'authorizationCode';\n        if (typeof scheme.authorizationUrl !== 'undefined') flow.authorizationUrl = scheme.authorizationUrl.split('?')[0].trim() || '/';\n        if (typeof scheme.tokenUrl === 'string') flow.tokenUrl = scheme.tokenUrl.split('?')[0].trim() || '/';\n        flow.scopes = scheme.scopes || {};\n        scheme.flows = {};\n        scheme.flows[flowName] = flow;\n        delete scheme.flow;\n        delete scheme.authorizationUrl;\n        delete scheme.tokenUrl;\n        delete scheme.scopes;\n        if (typeof scheme.name !== 'undefined') {\n            if (options.patch) {\n                options.patches++;\n                delete scheme.name;\n            }\n            else {\n                throwError('(Patchable) oauth2 securitySchemes should not have name property', options);\n            }\n        }\n    }\n}\n\nfunction keepParameters(value) {\n    return (value && !value[\"x-s2o-delete\"]);\n}\n\nfunction processHeader(header, options) {\n    if (header.$ref) {\n        header.$ref = header.$ref.replace('#/responses/', '#/components/responses/');\n    }\n    else {\n        if (header.type && !header.schema) {\n            header.schema = {};\n        }\n        if (header.type) header.schema.type = header.type;\n        if (header.items && header.items.type !== 'array') {\n            if (header.items.collectionFormat !== header.collectionFormat) {\n                throwOrWarn('Nested collectionFormats are not supported', header, options);\n            }\n            delete header.items.collectionFormat;\n        }\n        if (header.type === 'array') {\n            if (header.collectionFormat === 'ssv') {\n                throwOrWarn('collectionFormat:ssv is no longer supported for headers', header, options); // not lossless\n            }\n            else if (header.collectionFormat === 'pipes') {\n                throwOrWarn('collectionFormat:pipes is no longer supported for headers', header, options); // not lossless\n            }\n            else if (header.collectionFormat === 'multi') {\n                header.explode = true;\n            }\n            else if (header.collectionFormat === 'tsv') {\n                throwOrWarn('collectionFormat:tsv is no longer supported', header, options); // not lossless\n                header[\"x-collectionFormat\"] = 'tsv';\n            }\n            else { // 'csv'\n                header.style = 'simple';\n            }\n            delete header.collectionFormat;\n        }\n        else if (header.collectionFormat) {\n            if (options.patch) {\n                options.patches++;\n                delete header.collectionFormat;\n            }\n            else {\n                throwError('(Patchable) collectionFormat is only applicable to header.type array', options);\n            }\n        }\n        delete header.type;\n        for (let prop of common.parameterTypeProperties) {\n            if (typeof header[prop] !== 'undefined') {\n                header.schema[prop] = header[prop];\n                delete header[prop];\n            }\n        }\n        for (let prop of common.arrayProperties) {\n            if (typeof header[prop] !== 'undefined') {\n                header.schema[prop] = header[prop];\n                delete header[prop];\n            }\n        }\n    }\n}\n\nfunction fixParamRef(param, options) {\n    if (param.$ref.indexOf('#/parameters/') >= 0) {\n        let refComponents = param.$ref.split('#/parameters/');\n        param.$ref = refComponents[0] + '#/components/parameters/' + common.sanitise(refComponents[1]);\n    }\n    if (param.$ref.indexOf('#/definitions/') >= 0) {\n        throwOrWarn('Definition used as parameter', param, options);\n    }\n}\n\nfunction attachRequestBody(op,options) {\n    let newOp = {};\n    for (let key of Object.keys(op)) {\n        newOp[key] = op[key];\n        if (key === 'parameters') {\n            newOp.requestBody = {};\n            if (options.rbname) newOp[options.rbname] = '';\n        }\n    }\n    newOp.requestBody = {}; // just in case there are no parameters\n    return newOp;\n}\n\n/**\n * @returns op, as it may have changed\n */\nfunction processParameter(param, op, path, method, index, openapi, options) {\n    let result = {};\n    let singularRequestBody = true;\n    let originalType;\n\n    if (op && op.consumes && (typeof op.consumes === 'string')) {\n        if (options.patch) {\n            options.patches++;\n            op.consumes = [op.consumes];\n        }\n        else {\n            return throwError('(Patchable) operation.consumes must be an array', options);\n        }\n    }\n    if (!Array.isArray(openapi.consumes)) delete openapi.consumes;\n    let consumes = ((op ? op.consumes : null) || (openapi.consumes || [])).filter(common.uniqueOnly);\n\n    if (param && param.$ref && (typeof param.$ref === 'string')) {\n        // if we still have a ref here, it must be an internal one\n        fixParamRef(param, options);\n        let ptr = decodeURIComponent(param.$ref.replace('#/components/parameters/', ''));\n        let rbody = false;\n        let target = openapi.components.parameters[ptr]; // resolves a $ref, must have been sanitised already\n\n        if (((!target) || (target[\"x-s2o-delete\"])) && param.$ref.startsWith('#/')) {\n            // if it's gone, chances are it's a requestBody component now unless spec was broken\n            param[\"x-s2o-delete\"] = true;\n            rbody = true;\n        }\n\n        // shared formData parameters from swagger or path level could be used in any combination.\n        // we dereference all op.requestBody's then hash them and pull out common ones later\n\n        if (rbody) {\n            let ref = param.$ref;\n            let newParam = resolveInternal(openapi, param.$ref);\n            if (!newParam && ref.startsWith('#/')) {\n                throwOrWarn('Could not resolve reference ' + ref, param, options);\n            }\n            else {\n                if (newParam) param = newParam; // preserve reference\n            }\n        }\n    }\n\n    if (param && (param.name || param.in)) { // if it's a real parameter OR we've dereferenced it\n\n        if (typeof param['x-deprecated'] === 'boolean') {\n            param.deprecated = param['x-deprecated'];\n            delete param['x-deprecated'];\n        }\n\n        if (typeof param['x-example'] !== 'undefined') {\n            param.example = param['x-example'];\n            delete param['x-example'];\n        }\n\n        if ((param.in !== 'body') && (!param.type)) {\n            if (options.patch) {\n                options.patches++;\n                param.type = 'string';\n            }\n            else {\n                throwError('(Patchable) parameter.type is mandatory for non-body parameters', options);\n            }\n        }\n        if (param.type && typeof param.type === 'object' && param.type.$ref) {\n            // $ref anywhere sensibility\n            param.type = resolveInternal(openapi, param.type.$ref);\n        }\n        if (param.type === 'file') {\n            param['x-s2o-originalType'] = param.type;\n            originalType = param.type;\n        }\n        if (param.description && typeof param.description === 'object' && param.description.$ref) {\n            // $ref anywhere sensibility\n            param.description = resolveInternal(openapi, param.description.$ref);\n        }\n        if (param.description === null) delete param.description;\n\n        let oldCollectionFormat = param.collectionFormat;\n        if ((param.type === 'array') && !oldCollectionFormat) {\n            oldCollectionFormat = 'csv';\n        }\n        if (oldCollectionFormat) {\n            if (param.type !== 'array') {\n                if (options.patch) {\n                    options.patches++;\n                    delete param.collectionFormat;\n                }\n                else {\n                    throwError('(Patchable) collectionFormat is only applicable to param.type array', options);\n                }\n            }\n            if ((oldCollectionFormat === 'csv') && ((param.in === 'query') || (param.in === 'cookie'))) {\n                param.style = 'form';\n                param.explode = false;\n            }\n            if ((oldCollectionFormat === 'csv') && ((param.in === 'path') || (param.in === 'header'))) {\n                param.style = 'simple';\n            }\n            if (oldCollectionFormat === 'ssv') {\n                if (param.in === 'query') {\n                    param.style = 'spaceDelimited';\n                }\n                else {\n                    throwOrWarn('collectionFormat:ssv is no longer supported except for in:query parameters', param, options); // not lossless\n                }\n            }\n            if (oldCollectionFormat === 'pipes') {\n                if (param.in === 'query') {\n                    param.style = 'pipeDelimited';\n                }\n                else {\n                    throwOrWarn('collectionFormat:pipes is no longer supported except for in:query parameters', param, options); // not lossless\n                }\n            }\n            if (oldCollectionFormat === 'multi') {\n                param.explode = true;\n            }\n            if (oldCollectionFormat === 'tsv') {\n                throwOrWarn('collectionFormat:tsv is no longer supported', param, options); // not lossless\n                param[\"x-collectionFormat\"] = 'tsv';\n            }\n            delete param.collectionFormat;\n        }\n\n        if (param.type && (param.type !== 'body') && (param.in !== 'formData')) {\n            if (param.items && param.schema) {\n                throwOrWarn('parameter has array,items and schema', param, options);\n            }\n            else {\n                if (param.schema) options.patches++; // already present\n                if ((!param.schema) || (typeof param.schema !== 'object')) param.schema = {};\n                param.schema.type = param.type;\n                if (param.items) {\n                    param.schema.items = param.items;\n                    delete param.items;\n                    recurse(param.schema.items, null, function (obj, key, state) {\n                        if ((key === 'collectionFormat') && (typeof obj[key] === 'string')) {\n                            if (oldCollectionFormat && obj[key] !== oldCollectionFormat) {\n                                throwOrWarn('Nested collectionFormats are not supported', param, options);\n                            }\n                            delete obj[key]; // not lossless\n                        }\n                        // items in 2.0 was a subset of the JSON-Schema items\n                        // object, it gets fixed up below\n                    });\n                }\n                for (let prop of common.parameterTypeProperties) {\n                    if (typeof param[prop] !== 'undefined') param.schema[prop] = param[prop];\n                    delete param[prop];\n                }\n            }\n        }\n\n        if (param.schema) {\n            fixUpSchema(param.schema,options);\n        }\n\n        if (param[\"x-ms-skip-url-encoding\"]) {\n            if (param.in === 'query') { // might be in:path, not allowed in OAS3\n                param.allowReserved = true;\n                delete param[\"x-ms-skip-url-encoding\"];\n            }\n        }\n    }\n\n    if (param && param.in === 'formData') {\n        // convert to requestBody component\n        singularRequestBody = false;\n        result.content = {};\n        let contentType = 'application/x-www-form-urlencoded';\n        if ((consumes.length) && (consumes.indexOf('multipart/form-data') >= 0)) {\n            contentType = 'multipart/form-data';\n        }\n\n        result.content[contentType] = {};\n        if (param.schema) {\n            result.content[contentType].schema = param.schema;\n            if (param.schema.$ref) {\n                result['x-s2o-name'] = decodeURIComponent(param.schema.$ref.replace('#/components/schemas/', ''));\n            }\n        }\n        else {\n            result.content[contentType].schema = {};\n            result.content[contentType].schema.type = 'object';\n            result.content[contentType].schema.properties = {};\n            result.content[contentType].schema.properties[param.name] = {};\n            let schema = result.content[contentType].schema;\n            let target = result.content[contentType].schema.properties[param.name];\n            if (param.description) target.description = param.description;\n            if (param.example) target.example = param.example;\n            if (param.type) target.type = param.type;\n\n            for (let prop of common.parameterTypeProperties) {\n                if (typeof param[prop] !== 'undefined') target[prop] = param[prop];\n            }\n            if (param.required === true) {\n                if (!schema.required) schema.required = [];\n                schema.required.push(param.name);\n                result.required = true;\n            }\n            if (typeof param.default !== 'undefined') target.default = param.default;\n            if (target.properties) target.properties = param.properties;\n            if (param.allOf) target.allOf = param.allOf; // new are anyOf, oneOf, not\n            if ((param.type === 'array') && (param.items)) {\n                target.items = param.items;\n                if (target.items.collectionFormat) delete target.items.collectionFormat;\n            }\n            if ((originalType === 'file') || (param['x-s2o-originalType'] === 'file')) {\n                target.type = 'string';\n                target.format = 'binary';\n            }\n\n            // Copy any extensions on the form param to the target schema property.\n            copyExtensions(param, target);\n        }\n    }\n    else if (param && (param.type === 'file')) {\n        // convert to requestBody\n        if (param.required) result.required = param.required;\n        result.content = {};\n        result.content[\"application/octet-stream\"] = {};\n        result.content[\"application/octet-stream\"].schema = {};\n        result.content[\"application/octet-stream\"].schema.type = 'string';\n        result.content[\"application/octet-stream\"].schema.format = 'binary';\n        copyExtensions(param, result);\n    }\n    if (param && param.in === 'body') {\n        result.content = {};\n        if (param.name) result['x-s2o-name'] = (op && op.operationId ? common.sanitiseAll(op.operationId) : '') + ('_' + param.name).toCamelCase();\n        if (param.description) result.description = param.description;\n        if (param.required) result.required = param.required;\n\n        // Set the \"request body name\" extension on the operation if requested.\n        if (op && options.rbname && param.name) {\n            op[options.rbname] = param.name;\n        }\n        if (param.schema && param.schema.$ref) {\n            result['x-s2o-name'] = decodeURIComponent(param.schema.$ref.replace('#/components/schemas/', ''));\n        }\n        else if (param.schema && (param.schema.type === 'array') && param.schema.items && param.schema.items.$ref) {\n            result['x-s2o-name'] = decodeURIComponent(param.schema.items.$ref.replace('#/components/schemas/', '')) + 'Array';\n        }\n\n        if (!consumes.length) {\n            consumes.push('application/json'); // TODO verify default\n        }\n\n        for (let mimetype of consumes) {\n            result.content[mimetype] = {};\n            result.content[mimetype].schema = clone(param.schema || {});\n            fixUpSchema(result.content[mimetype].schema,options);\n        }\n\n        // Copy any extensions from the original parameter to the new requestBody\n        copyExtensions(param, result);\n    }\n\n    if (Object.keys(result).length > 0) {\n        param[\"x-s2o-delete\"] = true;\n        // work out where to attach the requestBody\n        if (op) {\n            if (op.requestBody && singularRequestBody) {\n                op.requestBody[\"x-s2o-overloaded\"] = true;\n                let opId = op.operationId || index;\n\n                throwOrWarn('Operation ' + opId + ' has multiple requestBodies', op, options);\n            }\n            else {\n                if (!op.requestBody) {\n                   op = path[method] = attachRequestBody(op,options); // make sure we have one\n                }\n                if ((op.requestBody.content && op.requestBody.content[\"multipart/form-data\"])\n                    && (op.requestBody.content[\"multipart/form-data\"].schema) && (op.requestBody.content[\"multipart/form-data\"].schema.properties) && (result.content[\"multipart/form-data\"]) && (result.content[\"multipart/form-data\"].schema) && (result.content[\"multipart/form-data\"].schema.properties)) {\n                    op.requestBody.content[\"multipart/form-data\"].schema.properties =\n                        Object.assign(op.requestBody.content[\"multipart/form-data\"].schema.properties, result.content[\"multipart/form-data\"].schema.properties);\n                    op.requestBody.content[\"multipart/form-data\"].schema.required = (op.requestBody.content[\"multipart/form-data\"].schema.required || []).concat(result.content[\"multipart/form-data\"].schema.required||[]);\n                    if (!op.requestBody.content[\"multipart/form-data\"].schema.required.length) {\n                        delete op.requestBody.content[\"multipart/form-data\"].schema.required;\n                    }\n                }\n                else if ((op.requestBody.content && op.requestBody.content[\"application/x-www-form-urlencoded\"] && op.requestBody.content[\"application/x-www-form-urlencoded\"].schema && op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.properties)\n                    && result.content[\"application/x-www-form-urlencoded\"] && result.content[\"application/x-www-form-urlencoded\"].schema && result.content[\"application/x-www-form-urlencoded\"].schema.properties) {\n                    op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.properties =\n                        Object.assign(op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.properties, result.content[\"application/x-www-form-urlencoded\"].schema.properties);\n                    op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.required = (op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.required || []).concat(result.content[\"application/x-www-form-urlencoded\"].schema.required||[]);\n                    if (!op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.required.length) {\n                        delete op.requestBody.content[\"application/x-www-form-urlencoded\"].schema.required;\n                    }\n                }\n                else {\n                    op.requestBody = Object.assign(op.requestBody, result);\n                    if (!op.requestBody['x-s2o-name']) {\n                        if (op.requestBody.schema && op.requestBody.schema.$ref) {\n                            op.requestBody['x-s2o-name'] = decodeURIComponent(op.requestBody.schema.$ref.replace('#/components/schemas/', '')).split('/').join('');\n                        }\n                        else if (op.operationId) {\n                            op.requestBody['x-s2o-name'] = common.sanitiseAll(op.operationId);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    // tidy up\n    if (param && !param['x-s2o-delete']) {\n        delete param.type;\n        for (let prop of common.parameterTypeProperties) {\n            delete param[prop];\n        }\n\n        if ((param.in === 'path') && ((typeof param.required === 'undefined') || (param.required !== true))) {\n            if (options.patch) {\n                options.patches++;\n                param.required = true;\n            }\n            else {\n                throwError('(Patchable) path parameters must be required:true ['+param.name+' in '+index+']', options);\n            }\n        }\n    }\n\n    return op;\n}\n\nfunction copyExtensions(src, tgt) {\n    for (let prop in src) {\n        if (prop.startsWith('x-') && !prop.startsWith('x-s2o')) {\n            tgt[prop] = src[prop];\n        }\n    }\n}\n\nfunction processResponse(response, name, op, openapi, options) {\n    if (!response) return false;\n    if (response.$ref && (typeof response.$ref === 'string')) {\n        if (response.$ref.indexOf('#/definitions/') >= 0) {\n            //response.$ref = '#/components/schemas/'+common.sanitise(response.$ref.replace('#/definitions/',''));\n            throwOrWarn('definition used as response: ' + response.$ref, response, options);\n        }\n        else {\n            if (response.$ref.startsWith('#/responses/')) {\n                response.$ref = '#/components/responses/' + common.sanitise(decodeURIComponent(response.$ref.replace('#/responses/', '')));\n            }\n        }\n    }\n    else {\n        if ((typeof response.description === 'undefined') || (response.description === null)\n            || ((response.description === '') && options.patch)) {\n            if (options.patch) {\n                if ((typeof response === 'object') && (!Array.isArray(response))) {\n                    options.patches++;\n                    response.description = (statusCodes[response] || '');\n                }\n            }\n            else {\n                throwError('(Patchable) response.description is mandatory', options);\n            }\n        }\n        if (typeof response.schema !== 'undefined') {\n\n            fixUpSchema(response.schema,options);\n\n            if (response.schema.$ref && (typeof response.schema.$ref === 'string') && response.schema.$ref.startsWith('#/responses/')) {\n                response.schema.$ref = '#/components/responses/' + common.sanitise(decodeURIComponent(response.schema.$ref.replace('#/responses/', '')));\n            }\n\n            if (op && op.produces && (typeof op.produces === 'string')) {\n                if (options.patch) {\n                    options.patches++;\n                    op.produces = [op.produces];\n                }\n                else {\n                    return throwError('(Patchable) operation.produces must be an array', options);\n                }\n            }\n            if (openapi.produces && !Array.isArray(openapi.produces)) delete openapi.produces;\n\n            let produces = ((op ? op.produces : null) || (openapi.produces || [])).filter(common.uniqueOnly);\n            if (!produces.length) produces.push('*/*'); // TODO verify default\n\n            response.content = {};\n            for (let mimetype of produces) {\n                response.content[mimetype] = {};\n                response.content[mimetype].schema = clone(response.schema);\n                if (response.examples && response.examples[mimetype]) {\n                    let example = {};\n                    example.value = response.examples[mimetype];\n                    response.content[mimetype].examples = {};\n                    response.content[mimetype].examples.response = example;\n                    delete response.examples[mimetype];\n                }\n                if (response.content[mimetype].schema.type === 'file') {\n                    response.content[mimetype].schema = { type: 'string', format: 'binary' };\n                }\n            }\n            delete response.schema;\n        }\n        // examples for content-types not listed in produces\n        for (let mimetype in response.examples) {\n            if (!response.content) response.content = {};\n            if (!response.content[mimetype]) response.content[mimetype] = {};\n            response.content[mimetype].examples = {};\n            response.content[mimetype].examples.response = {};\n            response.content[mimetype].examples.response.value = response.examples[mimetype];\n        }\n        delete response.examples;\n\n        if (response.headers) {\n            for (let h in response.headers) {\n                if (h.toLowerCase() === 'status code') {\n                    if (options.patch) {\n                        options.patches++;\n                        delete response.headers[h];\n                    }\n                    else {\n                        throwError('(Patchable) \"Status Code\" is not a valid header', options);\n                    }\n                }\n                else {\n                    processHeader(response.headers[h], options);\n                }\n            }\n        }\n    }\n}\n\nfunction processPaths(container, containerName, options, requestBodyCache, openapi) {\n    for (let p in container) {\n        let path = container[p];\n        // path.$ref is external only\n        if (path && (path['x-trace']) && (typeof path['x-trace'] === 'object')) {\n            path.trace = path['x-trace'];\n            delete path['x-trace'];\n        }\n        if (path && (path['x-summary']) && (typeof path['x-summary'] === 'string')) {\n            path.summary = path['x-summary'];\n            delete path['x-summary'];\n        }\n        if (path && (path['x-description']) && (typeof path['x-description'] === 'string')) {\n            path.description = path['x-description'];\n            delete path['x-description'];\n        }\n        if (path && (path['x-servers']) && (Array.isArray(path['x-servers']))) {\n            path.servers = path['x-servers'];\n            delete path['x-servers'];\n        }\n        for (let method in path) {\n            if ((common.httpMethods.indexOf(method) >= 0) || (method === 'x-amazon-apigateway-any-method')) {\n                let op = path[method];\n\n                if (op && op.parameters && Array.isArray(op.parameters)) {\n                    if (path.parameters) {\n                        for (let param of path.parameters) {\n                            if (typeof param.$ref === 'string') {\n                                fixParamRef(param, options);\n                                param = resolveInternal(openapi, param.$ref);\n                            }\n                            let match = op.parameters.find(function (e, i, a) {\n                                return ((e.name === param.name) && (e.in === param.in));\n                            });\n\n                            if (!match && ((param.in === 'formData') || (param.in === 'body') || (param.type === 'file'))) {\n                                op = processParameter(param, op, path, method, p, openapi, options);\n                                if (options.rbname && op[options.rbname] === '') {\n                                    delete op[options.rbname];\n                                }\n                            }\n                        }\n                    }\n                    for (let param of op.parameters) {\n                        op = processParameter(param, op, path, method, method + ':' + p, openapi, options);\n                    }\n                    if (options.rbname && op[options.rbname] === '') {\n                        delete op[options.rbname];\n                    }\n                    if (!options.debug) {\n                        if (op.parameters) op.parameters = op.parameters.filter(keepParameters);\n                    }\n                }\n\n                if (op && op.security) processSecurity(op.security);\n\n                //don't need to remove requestBody for non-supported ops as they \"SHALL be ignored\"\n\n                // responses\n                if (typeof op === 'object') {\n                    if (!op.responses) {\n                        let defaultResp = {};\n                        defaultResp.description = 'Default response';\n                        op.responses = { default: defaultResp };\n                    }\n                    for (let r in op.responses) {\n                        let response = op.responses[r];\n                        processResponse(response, r, op, openapi, options);\n                    }\n                }\n\n                if (op && (op['x-servers']) && (Array.isArray(op['x-servers']))) {\n                    op.servers = op['x-servers'];\n                    delete op['x-servers'];\n                } else if (op && op.schemes && op.schemes.length) {\n                    for (let scheme of op.schemes) {\n                        if ((!openapi.schemes) || (openapi.schemes.indexOf(scheme) < 0)) {\n                            if (!op.servers) {\n                                op.servers = [];\n                            }\n                            if (Array.isArray(openapi.servers)) {\n                                for (let server of openapi.servers) {\n                                    let newServer = clone(server);\n                                    let serverUrl = url.parse(newServer.url);\n                                    serverUrl.protocol = scheme;\n                                    newServer.url = serverUrl.format();\n                                    op.servers.push(newServer);\n                                }\n                            }\n                        }\n                    }\n                }\n\n                if (options.debug) {\n                    op[\"x-s2o-consumes\"] = op.consumes || [];\n                    op[\"x-s2o-produces\"] = op.produces || [];\n                }\n                if (op) {\n                    delete op.consumes;\n                    delete op.produces;\n                    delete op.schemes;\n\n                    if (op[\"x-ms-examples\"]) {\n                        for (let e in op[\"x-ms-examples\"]) {\n                            let example = op[\"x-ms-examples\"][e];\n                            let se = common.sanitiseAll(e);\n                            if (example.parameters) {\n                                for (let p in example.parameters) {\n                                    let value = example.parameters[p];\n                                    for (let param of (op.parameters||[]).concat(path.parameters||[])) {\n                                        if (param.$ref) {\n                                            param = jptr.jptr(openapi,param.$ref);\n                                        }\n                                        if ((param.name === p) && (!param.example)) {\n                                            if (!param.examples) {\n                                                param.examples = {};\n                                            }\n                                            param.examples[e] = {value: value};\n                                        }\n                                    }\n                                }\n                            }\n                            if (example.responses) {\n                                for (let r in example.responses) {\n                                    if (example.responses[r].headers) {\n                                        for (let h in example.responses[r].headers) {\n                                            let value = example.responses[r].headers[h];\n                                            for (let rh in op.responses[r].headers) {\n                                                if (rh === h) {\n                                                    let header = op.responses[r].headers[rh];\n                                                    header.example = value;\n                                                }\n                                            }\n                                        }\n                                    }\n                                    if (example.responses[r].body) {\n                                        openapi.components.examples[se] = { value: clone(example.responses[r].body) };\n                                        if (op.responses[r] && op.responses[r].content) {\n                                            for (let ct in op.responses[r].content) {\n                                                let contentType = op.responses[r].content[ct];\n                                                if (!contentType.examples) {\n                                                    contentType.examples = {};\n                                                }\n                                                contentType.examples[e] = { $ref: '#/components/examples/'+se };\n                                            }\n                                        }\n                                    }\n\n                                }\n                            }\n                        }\n                        delete op[\"x-ms-examples\"];\n                    }\n\n                    if (op.parameters && op.parameters.length === 0) delete op.parameters;\n                    if (op.requestBody) {\n                        let effectiveOperationId = op.operationId ? common.sanitiseAll(op.operationId) : common.sanitiseAll(method + p).toCamelCase();\n                        let rbName = common.sanitise(op.requestBody['x-s2o-name'] || effectiveOperationId || '');\n                        delete op.requestBody['x-s2o-name'];\n                        let rbStr = JSON.stringify(op.requestBody);\n                        let rbHash = common.hash(rbStr);\n                        if (!requestBodyCache[rbHash]) {\n                            let entry = {};\n                            entry.name = rbName;\n                            entry.body = op.requestBody;\n                            entry.refs = [];\n                            requestBodyCache[rbHash] = entry;\n                        }\n                        let ptr = '#/'+containerName+'/'+encodeURIComponent(jptr.jpescape(p))+'/'+method+'/requestBody';\n                        requestBodyCache[rbHash].refs.push(ptr);\n                    }\n                }\n\n            }\n        }\n        if (path && path.parameters) {\n            for (let p2 in path.parameters) {\n                let param = path.parameters[p2];\n                processParameter(param, null, path, null, p, openapi, options); // index here is the path string\n            }\n            if (!options.debug && Array.isArray(path.parameters)) {\n                path.parameters = path.parameters.filter(keepParameters);\n            }\n        }\n    }\n}\n\nfunction main(openapi, options) {\n\n    let requestBodyCache = {};\n    componentNames = { schemas: {} };\n\n    if (openapi.security) processSecurity(openapi.security);\n\n    for (let s in openapi.components.securitySchemes) {\n        let sname = common.sanitise(s);\n        if (s !== sname) {\n            if (openapi.components.securitySchemes[sname]) {\n                throwError('Duplicate sanitised securityScheme name ' + sname, options);\n            }\n            openapi.components.securitySchemes[sname] = openapi.components.securitySchemes[s];\n            delete openapi.components.securitySchemes[s];\n        }\n        processSecurityScheme(openapi.components.securitySchemes[sname], options);\n    }\n\n    for (let s in openapi.components.schemas) {\n        let sname = common.sanitiseAll(s);\n        let suffix = '';\n        if (s !== sname) {\n            while (openapi.components.schemas[sname + suffix]) {\n                // @ts-ignore\n                suffix = (suffix ? ++suffix : 2);\n            }\n            openapi.components.schemas[sname + suffix] = openapi.components.schemas[s];\n            delete openapi.components.schemas[s];\n        }\n        componentNames.schemas[s] = sname + suffix;\n        fixUpSchema(openapi.components.schemas[sname+suffix],options)\n    }\n\n    // fix all $refs to their new locations (and potentially new names)\n    options.refmap = {};\n    recurse(openapi, { payload: { options: options } }, fixupRefs);\n    dedupeRefs(openapi,options);\n\n    for (let p in openapi.components.parameters) {\n        let sname = common.sanitise(p);\n        if (p !== sname) {\n            if (openapi.components.parameters[sname]) {\n                throwError('Duplicate sanitised parameter name ' + sname, options);\n            }\n            openapi.components.parameters[sname] = openapi.components.parameters[p];\n            delete openapi.components.parameters[p];\n        }\n        let param = openapi.components.parameters[sname];\n        processParameter(param, null, null, null, sname, openapi, options);\n    }\n\n    for (let r in openapi.components.responses) {\n        let sname = common.sanitise(r);\n        if (r !== sname) {\n            if (openapi.components.responses[sname]) {\n                throwError('Duplicate sanitised response name ' + sname, options);\n            }\n            openapi.components.responses[sname] = openapi.components.responses[r];\n            delete openapi.components.responses[r];\n        }\n        let response = openapi.components.responses[sname];\n        processResponse(response, sname, null, openapi, options);\n        if (response.headers) {\n            for (let h in response.headers) {\n                if (h.toLowerCase() === 'status code') {\n                    if (options.patch) {\n                        options.patches++;\n                        delete response.headers[h];\n                    }\n                    else {\n                        throwError('(Patchable) \"Status Code\" is not a valid header', options);\n                    }\n                }\n                else {\n                    processHeader(response.headers[h], options);\n                }\n            }\n        }\n    }\n\n    for (let r in openapi.components.requestBodies) { // converted ones\n        let rb = openapi.components.requestBodies[r];\n        let rbStr = JSON.stringify(rb);\n        let rbHash = common.hash(rbStr);\n        let entry = {};\n        entry.name = r;\n        entry.body = rb;\n        entry.refs = [];\n        requestBodyCache[rbHash] = entry;\n    }\n\n    processPaths(openapi.paths, 'paths', options, requestBodyCache, openapi);\n    if (openapi[\"x-ms-paths\"]) {\n        processPaths(openapi[\"x-ms-paths\"], 'x-ms-paths', options, requestBodyCache, openapi);\n    }\n\n    if (!options.debug) {\n        for (let p in openapi.components.parameters) {\n            let param = openapi.components.parameters[p];\n            if (param[\"x-s2o-delete\"]) {\n                delete openapi.components.parameters[p];\n            }\n        }\n    }\n\n    if (options.debug) {\n        openapi[\"x-s2o-consumes\"] = openapi.consumes || [];\n        openapi[\"x-s2o-produces\"] = openapi.produces || [];\n    }\n    delete openapi.consumes;\n    delete openapi.produces;\n    delete openapi.schemes;\n\n    let rbNamesGenerated = [];\n\n    openapi.components.requestBodies = {}; // for now as we've dereffed them\n\n    if (!options.resolveInternal) {\n        let counter = 1;\n        for (let e in requestBodyCache) {\n            let entry = requestBodyCache[e];\n            if (entry.refs.length > 1) {\n                // create a shared requestBody\n                let suffix = '';\n                if (!entry.name) {\n                    entry.name = 'requestBody';\n                    // @ts-ignore\n                    suffix = counter++;\n                }\n                while (rbNamesGenerated.indexOf(entry.name + suffix) >= 0) {\n                    // @ts-ignore - this can happen if descriptions are not exactly the same (e.g. bitbucket)\n                    suffix = (suffix ? ++suffix : 2);\n                }\n                entry.name = entry.name + suffix;\n                rbNamesGenerated.push(entry.name);\n                openapi.components.requestBodies[entry.name] = clone(entry.body);\n                for (let r in entry.refs) {\n                    let ref = {};\n                    ref.$ref = '#/components/requestBodies/' + entry.name;\n                    jptr.jptr(openapi,entry.refs[r],ref);\n                }\n            }\n        }\n    }\n\n    if (openapi.components.responses && Object.keys(openapi.components.responses).length === 0) {\n        delete openapi.components.responses;\n    }\n    if (openapi.components.parameters && Object.keys(openapi.components.parameters).length === 0) {\n        delete openapi.components.parameters;\n    }\n    if (openapi.components.examples && Object.keys(openapi.components.examples).length === 0) {\n        delete openapi.components.examples;\n    }\n    if (openapi.components.requestBodies && Object.keys(openapi.components.requestBodies).length === 0) {\n        delete openapi.components.requestBodies;\n    }\n    if (openapi.components.securitySchemes && Object.keys(openapi.components.securitySchemes).length === 0) {\n        delete openapi.components.securitySchemes;\n    }\n    if (openapi.components.headers && Object.keys(openapi.components.headers).length === 0) {\n        delete openapi.components.headers;\n    }\n    if (openapi.components.schemas && Object.keys(openapi.components.schemas).length === 0) {\n        delete openapi.components.schemas;\n    }\n    if (openapi.components && Object.keys(openapi.components).length === 0) {\n        delete openapi.components;\n    }\n\n    return openapi;\n}\n\nfunction extractServerParameters(server) {\n    if (!server || !server.url || (typeof server.url !== 'string')) return server;\n    server.url = server.url.split('{{').join('{');\n    server.url = server.url.split('}}').join('}');\n    server.url.replace(/\\{(.+?)\\}/g, function (match, group1) { // TODO extend to :parameters (not port)?\n        if (!server.variables) {\n            server.variables = {};\n        }\n        server.variables[group1] = { default: 'unknown' };\n    });\n    return server;\n}\n\nfunction fixInfo(openapi, options, reject) {\n    if ((typeof openapi.info === 'undefined') || (openapi.info === null)) {\n        if (options.patch) {\n            options.patches++;\n            openapi.info = { version: '', title: '' };\n        }\n        else {\n            return reject(new S2OError('(Patchable) info object is mandatory'));\n        }\n    }\n    if ((typeof openapi.info !== 'object') || (Array.isArray(openapi.info))) {\n        return reject(new S2OError('info must be an object'));\n    }\n    if ((typeof openapi.info.title === 'undefined') || (openapi.info.title === null)) {\n        if (options.patch) {\n            options.patches++;\n            openapi.info.title = '';\n        }\n        else {\n            return reject(new S2OError('(Patchable) info.title cannot be null'));\n        }\n    }\n    if ((typeof openapi.info.version === 'undefined') || (openapi.info.version === null)) {\n        if (options.patch) {\n            options.patches++;\n            openapi.info.version = '';\n        }\n        else {\n            return reject(new S2OError('(Patchable) info.version cannot be null'));\n        }\n    }\n    if (typeof openapi.info.version !== 'string') {\n        if (options.patch) {\n            options.patches++;\n            openapi.info.version = openapi.info.version.toString();\n        }\n        else {\n            return reject(new S2OError('(Patchable) info.version must be a string'));\n        }\n    }\n    if (typeof openapi.info.logo !== 'undefined') {\n        if (options.patch) {\n            options.patches++;\n            openapi.info['x-logo'] = openapi.info.logo;\n            delete openapi.info.logo;\n        }\n        else return reject(new S2OError('(Patchable) info should not have logo property'));\n    }\n    if (typeof openapi.info.termsOfService !== 'undefined') {\n        if (openapi.info.termsOfService === null) {\n            if (options.patch) {\n                options.patches++;\n                openapi.info.termsOfService = '';\n            }\n            else {\n                return reject(new S2OError('(Patchable) info.termsOfService cannot be null'));\n            }\n        }\n        try {\n            let u = new URL(openapi.info.termsOfService);\n        }\n        catch (ex) {\n            if (options.patch) {\n                options.patches++;\n                delete openapi.info.termsOfService;\n            }\n            else return reject(new S2OError('(Patchable) info.termsOfService must be a URL'));\n        }\n    }\n}\n\nfunction fixPaths(openapi, options, reject) {\n    if (typeof openapi.paths === 'undefined') {\n        if (options.patch) {\n            options.patches++;\n            openapi.paths = {};\n        }\n        else {\n            return reject(new S2OError('(Patchable) paths object is mandatory'));\n        }\n    }\n}\n\nfunction detectObjectReferences(obj, options) {\n    const seen = new WeakSet();\n    recurse(obj, {identityDetection:true}, function (obj, key, state) {\n        if ((typeof obj[key] === 'object') && (obj[key] !== null)) {\n            if (seen.has(obj[key])) {\n                if (options.anchors) {\n                    obj[key] = clone(obj[key]);\n                }\n                else {\n                    throwError('YAML anchor or merge key at '+state.path, options);\n                }\n            }\n            else {\n                seen.add(obj[key]);\n            }\n        }\n    });\n}\n\nfunction convertObj(swagger, options, callback) {\n    return maybe(callback, new Promise(function (resolve, reject) {\n        if (!swagger) swagger = {};\n        options.original = swagger;\n        if (!options.text) options.text = yaml.stringify(swagger);\n        options.externals = [];\n        options.externalRefs = {};\n        options.rewriteRefs = true; // avoids stack explosions\n        options.preserveMiro = true;\n        options.promise = {};\n        options.promise.resolve = resolve;\n        options.promise.reject = reject;\n        options.patches = 0;\n        if (!options.cache) options.cache = {};\n        if (options.source) options.cache[options.source] = options.original;\n\n        detectObjectReferences(swagger, options);\n\n        if (swagger.openapi && (typeof swagger.openapi === 'string') && swagger.openapi.startsWith('3.')) {\n            options.openapi = cclone(swagger);\n            fixInfo(options.openapi, options, reject);\n            fixPaths(options.openapi, options, reject);\n\n            resolver.optionalResolve(options) // is a no-op if options.resolve is not set\n            .then(function(){\n                if (options.direct) {\n                    return resolve(options.openapi);\n                }\n                else {\n                    return resolve(options);\n                }\n            })\n            .catch(function(ex){\n                console.warn(ex);\n                reject(ex);\n            });\n            return; // we should have resolved or rejected by now\n        }\n\n        if ((!swagger.swagger) || (swagger.swagger != \"2.0\")) {\n            return reject(new S2OError('Unsupported swagger/OpenAPI version: ' + (swagger.openapi ? swagger.openapi : swagger.swagger)));\n        }\n\n        let openapi = options.openapi = {};\n        openapi.openapi = (typeof options.targetVersion === 'string' && options.targetVersion.startsWith('3.')) ? options.targetVersion : targetVersion; // semver\n\n        if (options.origin) {\n            if (!openapi[\"x-origin\"]) {\n                openapi[\"x-origin\"] = [];\n            }\n            let origin = {};\n            origin.url = options.source||options.origin;\n            origin.format = 'swagger';\n            origin.version = swagger.swagger;\n            origin.converter = {};\n            origin.converter.url = 'https://github.com/mermade/oas-kit';\n            origin.converter.version = ourVersion;\n            openapi[\"x-origin\"].push(origin);\n        }\n\n        // we want the new and existing properties to appear in a sensible order. Not guaranteed\n        openapi = Object.assign(openapi, cclone(swagger));\n        delete openapi.swagger;\n        recurse(openapi, {}, function(obj, key, state){\n            if ((obj[key] === null) && (!key.startsWith('x-')) && key !== 'default' && (state.path.indexOf('/example') < 0)) delete obj[key]; // this saves *so* much grief later\n        });\n\n        if (swagger.host) {\n            for (let s of (Array.isArray(swagger.schemes) ? swagger.schemes : [''])) {\n                let server = {};\n                let basePath = (swagger.basePath || '').replace(/\\/$/, '') // Trailing slashes generally shouldn't be included\n                server.url = (s ? s+':' : '') + '//' + swagger.host + basePath;\n                extractServerParameters(server);\n                if (!openapi.servers) openapi.servers = [];\n                openapi.servers.push(server);\n            }\n        }\n        else if (swagger.basePath) {\n            let server = {};\n            server.url = swagger.basePath;\n            extractServerParameters(server);\n            if (!openapi.servers) openapi.servers = [];\n            openapi.servers.push(server);\n        }\n        delete openapi.host;\n        delete openapi.basePath;\n\n        if (openapi['x-servers'] && Array.isArray(openapi['x-servers'])) {\n            openapi.servers = openapi['x-servers'];\n            delete openapi['x-servers'];\n        }\n\n        // TODO APIMatic extensions (x-server-configuration) ?\n\n        if (swagger['x-ms-parameterized-host']) {\n            let xMsPHost = swagger['x-ms-parameterized-host'];\n            let server = {};\n            server.url = xMsPHost.hostTemplate + (swagger.basePath ? swagger.basePath : '');\n            server.variables = {};\n            const paramNames = server.url.match(/\\{\\w+\\}/g);\n            for (let msp in xMsPHost.parameters) {\n                let param = xMsPHost.parameters[msp];\n                if (param.$ref) {\n                    param = clone(resolveInternal(openapi, param.$ref));\n                }\n                if (!msp.startsWith('x-')) {\n                    delete param.required; // all true\n                    delete param.type; // all strings\n                    delete param.in; // all 'host'\n                    if (typeof param.default === 'undefined') {\n                        if (param.enum) {\n                            param.default = param.enum[0];\n                        }\n                        else {\n                            param.default = 'none';\n                        }\n                    }\n                    if (!param.name) {\n                      param.name = paramNames[msp].replace('{','').replace('}','');\n                    }\n                    server.variables[param.name] = param;\n                    delete param.name;\n                }\n            }\n            if (!openapi.servers) openapi.servers = [];\n            if (xMsPHost.useSchemePrefix === false) {\n                // The server URL already includes a protocol scheme\n                openapi.servers.push(server);\n            } else {\n                // Define this server once for each given protocol scheme\n                swagger.schemes.forEach((scheme) => {\n                    openapi.servers.push(\n                        Object.assign({}, server, { url: scheme + '://' + server.url })\n                    )\n                });\n            }\n            delete openapi['x-ms-parameterized-host'];\n        }\n\n        fixInfo(openapi, options, reject);\n        fixPaths(openapi, options, reject);\n\n        if (typeof openapi.consumes === 'string') {\n            openapi.consumes = [openapi.consumes];\n        }\n        if (typeof openapi.produces === 'string') {\n            openapi.produces = [openapi.produces];\n        }\n\n        openapi.components = {};\n        if (openapi['x-callbacks']) {\n            openapi.components.callbacks = openapi['x-callbacks'];\n            delete openapi['x-callbacks'];\n        }\n        openapi.components.examples = {};\n        openapi.components.headers = {};\n        if (openapi['x-links']) {\n            openapi.components.links = openapi['x-links'];\n            delete openapi['x-links'];\n        }\n        openapi.components.parameters = openapi.parameters || {};\n        openapi.components.responses = openapi.responses || {};\n        openapi.components.requestBodies = {};\n        openapi.components.securitySchemes = openapi.securityDefinitions || {};\n        openapi.components.schemas = openapi.definitions || {};\n        delete openapi.definitions;\n        delete openapi.responses;\n        delete openapi.parameters;\n        delete openapi.securityDefinitions;\n\n        resolver.optionalResolve(options) // is a no-op if options.resolve is not set\n        .then(function(){\n            main(options.openapi, options);\n            if (options.direct) {\n                resolve(options.openapi);\n            }\n            else {\n                resolve(options);\n            }\n        })\n        .catch(function(ex){\n            console.warn(ex);\n            reject(ex);\n        });\n\n    }));\n}\n\nfunction convertStr(str, options, callback) {\n    return maybe(callback, new Promise(function (resolve, reject) {\n        let obj = null;\n        let error = null;\n        try {\n            obj = JSON.parse(str);\n            options.text = JSON.stringify(obj,null,2);\n        }\n        catch (ex) {\n            error = ex;\n            try {\n                obj = yaml.parse(str, { schema: 'core', prettyErrors: true });\n                options.sourceYaml = true;\n                options.text = str;\n            }\n            catch (ex) {\n                error = ex;\n            }\n        }\n        if (obj) {\n            convertObj(obj, options)\n            .then(options => resolve(options))\n            .catch(ex => reject(ex));\n        }\n        else {\n            reject(new S2OError(error ? error.message : 'Could not parse string'));\n        }\n    }));\n}\n\nfunction convertUrl(url, options, callback) {\n    return maybe(callback, new Promise(function (resolve, reject) {\n        options.origin = true;\n        if (!options.source) {\n            options.source = url;\n        }\n        if (options.verbose) {\n            console.warn('GET ' + url);\n        }\n        if (!options.fetch) {\n          options.fetch = fetch;\n        }\n        const fetchOptions = Object.assign({}, options.fetchOptions, {agent:options.agent});\n        options.fetch(url, fetchOptions).then(function (res) {\n            if (res.status !== 200) throw new S2OError(`Received status code ${res.status}: ${url}`);\n            return res.text();\n        }).then(function (body) {\n            convertStr(body, options)\n            .then(options => resolve(options))\n            .catch(ex => reject(ex));\n        }).catch(function (err) {\n            reject(err);\n        });\n    }));\n}\n\nfunction convertFile(filename, options, callback) {\n    return maybe(callback, new Promise(function (resolve, reject) {\n        fs.readFile(filename, options.encoding || 'utf8', function (err, s) {\n            if (err) {\n                reject(err);\n            }\n            else {\n                options.sourceFile = filename;\n                convertStr(s, options)\n                .then(options => resolve(options))\n                .catch(ex => reject(ex));\n            }\n        });\n    }));\n}\n\nfunction convertStream(readable, options, callback) {\n    return maybe(callback, new Promise(function (resolve, reject) {\n        let data = '';\n        readable.on('data', function (chunk) {\n            data += chunk;\n        })\n        .on('end', function () {\n            convertStr(data, options)\n            .then(options => resolve(options))\n            .catch(ex => reject(ex));\n        });\n    }));\n}\n\nmodule.exports = {\n    S2OError: S2OError,\n    targetVersion: targetVersion,\n    convert: convertObj,\n    convertObj: convertObj,\n    convertUrl: convertUrl,\n    convertStr: convertStr,\n    convertFile: convertFile,\n    convertStream: convertStream\n};\n","'use strict';\n\nconst http = require('http');\n\nconst ours = {\n    \"default\": \"Default response\",\n    \"1XX\": \"Informational\",\n    \"103\": \"Early hints\", // not in Node < 10\n    \"2XX\": \"Successful\",\n    \"3XX\": \"Redirection\",\n    \"4XX\": \"Client Error\",\n    \"5XX\": \"Server Error\",\n    \"7XX\": \"Developer Error\" // April fools RFC\n};\n\nmodule.exports = {\n    statusCodes: Object.assign({},ours,http.STATUS_CODES)\n};\n\n","\n\t\t\t\tvar addMethods = require(\"../../node_modules/workerize-loader/dist/rpc-wrapper.js\")\n\t\t\t\tvar methods = [\"add\",\"done\",\"toJS\",\"fromExternalJS\",\"load\",\"dispose\",\"search\",\"Worker\"]\n\t\t\t\tmodule.exports = function() {\n\t\t\t\t\tvar w = new Worker(URL.createObjectURL(new Blob([\"/*! For license information please see cfb294d7f6536ffa8d42.worker.js.LICENSE.txt */\\n!function(){var e={291:function(e,t,r){var n,i;!function(){var s,o,a,u,l,c,h,d,f,p,y,m,g,x,v,w,Q,k,S,E,L,P,b,T,O,I,R,F,C,N,j=function(e){var t=new j.Builder;return t.pipeline.add(j.trimmer,j.stopWordFilter,j.stemmer),t.searchPipeline.add(j.stemmer),e.call(t,t),t.build()};j.version=\\\"2.3.9\\\",j.utils={},j.utils.warn=(s=this,function(e){s.console&&console.warn&&console.warn(e)}),j.utils.asString=function(e){return null==e?\\\"\\\":e.toString()},j.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),r=Object.keys(e),n=0;n<r.length;n++){var i=r[n],s=e[i];if(Array.isArray(s))t[i]=s.slice();else{if(\\\"string\\\"!=typeof s&&\\\"number\\\"!=typeof s&&\\\"boolean\\\"!=typeof s)throw new TypeError(\\\"clone is not deep and does not support nested objects\\\");t[i]=s}}return t},j.FieldRef=function(e,t,r){this.docRef=e,this.fieldName=t,this._stringValue=r},j.FieldRef.joiner=\\\"/\\\",j.FieldRef.fromString=function(e){var t=e.indexOf(j.FieldRef.joiner);if(-1===t)throw\\\"malformed field ref string\\\";var r=e.slice(0,t),n=e.slice(t+1);return new j.FieldRef(n,r,e)},j.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+j.FieldRef.joiner+this.docRef),this._stringValue},j.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},j.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},j.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},j.Set.prototype.contains=function(e){return!!this.elements[e]},j.Set.prototype.intersect=function(e){var t,r,n,i=[];if(e===j.Set.complete)return this;if(e===j.Set.empty)return e;this.length<e.length?(t=this,r=e):(t=e,r=this),n=Object.keys(t.elements);for(var s=0;s<n.length;s++){var o=n[s];o in r.elements&&i.push(o)}return new j.Set(i)},j.Set.prototype.union=function(e){return e===j.Set.complete?j.Set.complete:e===j.Set.empty?this:new j.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},j.idf=function(e,t){var r=0;for(var n in e)\\\"_index\\\"!=n&&(r+=Object.keys(e[n]).length);var i=(t-r+.5)/(r+.5);return Math.log(1+Math.abs(i))},j.Token=function(e,t){this.str=e||\\\"\\\",this.metadata=t||{}},j.Token.prototype.toString=function(){return this.str},j.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},j.Token.prototype.clone=function(e){return e=e||function(e){return e},new j.Token(e(this.str,this.metadata),this.metadata)},j.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new j.Token(j.utils.asString(e).toLowerCase(),j.utils.clone(t))}));for(var r=e.toString().toLowerCase(),n=r.length,i=[],s=0,o=0;s<=n;s++){var a=s-o;if(r.charAt(s).match(j.tokenizer.separator)||s==n){if(a>0){var u=j.utils.clone(t)||{};u.position=[o,a],u.index=i.length,i.push(new j.Token(r.slice(o,s),u))}o=s+1}}return i},j.tokenizer.separator=/[\\\\s\\\\-]+/,j.Pipeline=function(){this._stack=[]},j.Pipeline.registeredFunctions=Object.create(null),j.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&j.utils.warn(\\\"Overwriting existing registered function: \\\"+t),e.label=t,j.Pipeline.registeredFunctions[e.label]=e},j.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||j.utils.warn(\\\"Function is not registered with pipeline. This may cause problems when serialising the index.\\\\n\\\",e)},j.Pipeline.load=function(e){var t=new j.Pipeline;return e.forEach((function(e){var r=j.Pipeline.registeredFunctions[e];if(!r)throw new Error(\\\"Cannot load unregistered function: \\\"+e);t.add(r)})),t},j.Pipeline.prototype.add=function(){Array.prototype.slice.call(arguments).forEach((function(e){j.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},j.Pipeline.prototype.after=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error(\\\"Cannot find existingFn\\\");r+=1,this._stack.splice(r,0,t)},j.Pipeline.prototype.before=function(e,t){j.Pipeline.warnIfFunctionNotRegistered(t);var r=this._stack.indexOf(e);if(-1==r)throw new Error(\\\"Cannot find existingFn\\\");this._stack.splice(r,0,t)},j.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},j.Pipeline.prototype.run=function(e){for(var t=this._stack.length,r=0;r<t;r++){for(var n=this._stack[r],i=[],s=0;s<e.length;s++){var o=n(e[s],s,e);if(null!=o&&\\\"\\\"!==o)if(Array.isArray(o))for(var a=0;a<o.length;a++)i.push(o[a]);else i.push(o)}e=i}return e},j.Pipeline.prototype.runString=function(e,t){var r=new j.Token(e,t);return this.run([r]).map((function(e){return e.toString()}))},j.Pipeline.prototype.reset=function(){this._stack=[]},j.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return j.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},j.Vector=function(e){this._magnitude=0,this.elements=e||[]},j.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,r=this.elements.length/2,n=r-t,i=Math.floor(n/2),s=this.elements[2*i];n>1&&(s<e&&(t=i),s>e&&(r=i),s!=e);)n=r-t,i=t+Math.floor(n/2),s=this.elements[2*i];return s==e||s>e?2*i:s<e?2*(i+1):void 0},j.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw\\\"duplicate index\\\"}))},j.Vector.prototype.upsert=function(e,t,r){this._magnitude=0;var n=this.positionForIndex(e);this.elements[n]==e?this.elements[n+1]=r(this.elements[n+1],t):this.elements.splice(n,0,e,t)},j.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,r=1;r<t;r+=2){var n=this.elements[r];e+=n*n}return this._magnitude=Math.sqrt(e)},j.Vector.prototype.dot=function(e){for(var t=0,r=this.elements,n=e.elements,i=r.length,s=n.length,o=0,a=0,u=0,l=0;u<i&&l<s;)(o=r[u])<(a=n[l])?u+=2:o>a?l+=2:o==a&&(t+=r[u+1]*n[l+1],u+=2,l+=2);return t},j.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},j.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,r=0;t<this.elements.length;t+=2,r++)e[r]=this.elements[t];return e},j.Vector.prototype.toJSON=function(){return this.elements},j.stemmer=(o={ational:\\\"ate\\\",tional:\\\"tion\\\",enci:\\\"ence\\\",anci:\\\"ance\\\",izer:\\\"ize\\\",bli:\\\"ble\\\",alli:\\\"al\\\",entli:\\\"ent\\\",eli:\\\"e\\\",ousli:\\\"ous\\\",ization:\\\"ize\\\",ation:\\\"ate\\\",ator:\\\"ate\\\",alism:\\\"al\\\",iveness:\\\"ive\\\",fulness:\\\"ful\\\",ousness:\\\"ous\\\",aliti:\\\"al\\\",iviti:\\\"ive\\\",biliti:\\\"ble\\\",logi:\\\"log\\\"},a={icate:\\\"ic\\\",ative:\\\"\\\",alize:\\\"al\\\",iciti:\\\"ic\\\",ical:\\\"ic\\\",ful:\\\"\\\",ness:\\\"\\\"},h=\\\"^(\\\"+(l=\\\"[^aeiou][^aeiouy]*\\\")+\\\")?\\\"+(c=(u=\\\"[aeiouy]\\\")+\\\"[aeiou]*\\\")+l+\\\"(\\\"+c+\\\")?$\\\",d=\\\"^(\\\"+l+\\\")?\\\"+c+l+c+l,f=\\\"^(\\\"+l+\\\")?\\\"+u,p=new RegExp(\\\"^(\\\"+l+\\\")?\\\"+c+l),y=new RegExp(d),m=new RegExp(h),g=new RegExp(f),x=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,w=/^(.+?)eed$/,Q=/^(.+?)(ed|ing)$/,k=/.$/,S=/(at|bl|iz)$/,E=new RegExp(\\\"([^aeiouylsz])\\\\\\\\1$\\\"),L=new RegExp(\\\"^\\\"+l+u+\\\"[^aeiouwxy]$\\\"),P=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,T=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,O=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,I=/^(.+?)(s|t)(ion)$/,R=/^(.+?)e$/,F=/ll$/,C=new RegExp(\\\"^\\\"+l+u+\\\"[^aeiouwxy]$\\\"),N=function(e){var t,r,n,i,s,u,l;if(e.length<3)return e;if(\\\"y\\\"==(n=e.substr(0,1))&&(e=n.toUpperCase()+e.substr(1)),s=v,(i=x).test(e)?e=e.replace(i,\\\"$1$2\\\"):s.test(e)&&(e=e.replace(s,\\\"$1$2\\\")),s=Q,(i=w).test(e)){var c=i.exec(e);(i=p).test(c[1])&&(i=k,e=e.replace(i,\\\"\\\"))}else s.test(e)&&(t=(c=s.exec(e))[1],(s=g).test(t)&&(u=E,l=L,(s=S).test(e=t)?e+=\\\"e\\\":u.test(e)?(i=k,e=e.replace(i,\\\"\\\")):l.test(e)&&(e+=\\\"e\\\")));return(i=P).test(e)&&(e=(t=(c=i.exec(e))[1])+\\\"i\\\"),(i=b).test(e)&&(t=(c=i.exec(e))[1],r=c[2],(i=p).test(t)&&(e=t+o[r])),(i=T).test(e)&&(t=(c=i.exec(e))[1],r=c[2],(i=p).test(t)&&(e=t+a[r])),s=I,(i=O).test(e)?(t=(c=i.exec(e))[1],(i=y).test(t)&&(e=t)):s.test(e)&&(t=(c=s.exec(e))[1]+c[2],(s=y).test(t)&&(e=t)),(i=R).test(e)&&(t=(c=i.exec(e))[1],s=m,u=C,((i=y).test(t)||s.test(t)&&!u.test(t))&&(e=t)),s=y,(i=F).test(e)&&s.test(e)&&(i=k,e=e.replace(i,\\\"\\\")),\\\"y\\\"==n&&(e=n.toLowerCase()+e.substr(1)),e},function(e){return e.update(N)}),j.Pipeline.registerFunction(j.stemmer,\\\"stemmer\\\"),j.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},j.stopWordFilter=j.generateStopWordFilter([\\\"a\\\",\\\"able\\\",\\\"about\\\",\\\"across\\\",\\\"after\\\",\\\"all\\\",\\\"almost\\\",\\\"also\\\",\\\"am\\\",\\\"among\\\",\\\"an\\\",\\\"and\\\",\\\"any\\\",\\\"are\\\",\\\"as\\\",\\\"at\\\",\\\"be\\\",\\\"because\\\",\\\"been\\\",\\\"but\\\",\\\"by\\\",\\\"can\\\",\\\"cannot\\\",\\\"could\\\",\\\"dear\\\",\\\"did\\\",\\\"do\\\",\\\"does\\\",\\\"either\\\",\\\"else\\\",\\\"ever\\\",\\\"every\\\",\\\"for\\\",\\\"from\\\",\\\"get\\\",\\\"got\\\",\\\"had\\\",\\\"has\\\",\\\"have\\\",\\\"he\\\",\\\"her\\\",\\\"hers\\\",\\\"him\\\",\\\"his\\\",\\\"how\\\",\\\"however\\\",\\\"i\\\",\\\"if\\\",\\\"in\\\",\\\"into\\\",\\\"is\\\",\\\"it\\\",\\\"its\\\",\\\"just\\\",\\\"least\\\",\\\"let\\\",\\\"like\\\",\\\"likely\\\",\\\"may\\\",\\\"me\\\",\\\"might\\\",\\\"most\\\",\\\"must\\\",\\\"my\\\",\\\"neither\\\",\\\"no\\\",\\\"nor\\\",\\\"not\\\",\\\"of\\\",\\\"off\\\",\\\"often\\\",\\\"on\\\",\\\"only\\\",\\\"or\\\",\\\"other\\\",\\\"our\\\",\\\"own\\\",\\\"rather\\\",\\\"said\\\",\\\"say\\\",\\\"says\\\",\\\"she\\\",\\\"should\\\",\\\"since\\\",\\\"so\\\",\\\"some\\\",\\\"than\\\",\\\"that\\\",\\\"the\\\",\\\"their\\\",\\\"them\\\",\\\"then\\\",\\\"there\\\",\\\"these\\\",\\\"they\\\",\\\"this\\\",\\\"tis\\\",\\\"to\\\",\\\"too\\\",\\\"twas\\\",\\\"us\\\",\\\"wants\\\",\\\"was\\\",\\\"we\\\",\\\"were\\\",\\\"what\\\",\\\"when\\\",\\\"where\\\",\\\"which\\\",\\\"while\\\",\\\"who\\\",\\\"whom\\\",\\\"why\\\",\\\"will\\\",\\\"with\\\",\\\"would\\\",\\\"yet\\\",\\\"you\\\",\\\"your\\\"]),j.Pipeline.registerFunction(j.stopWordFilter,\\\"stopWordFilter\\\"),j.trimmer=function(e){return e.update((function(e){return e.replace(/^\\\\W+/,\\\"\\\").replace(/\\\\W+$/,\\\"\\\")}))},j.Pipeline.registerFunction(j.trimmer,\\\"trimmer\\\"),j.TokenSet=function(){this.final=!1,this.edges={},this.id=j.TokenSet._nextId,j.TokenSet._nextId+=1},j.TokenSet._nextId=1,j.TokenSet.fromArray=function(e){for(var t=new j.TokenSet.Builder,r=0,n=e.length;r<n;r++)t.insert(e[r]);return t.finish(),t.root},j.TokenSet.fromClause=function(e){return\\\"editDistance\\\"in e?j.TokenSet.fromFuzzyString(e.term,e.editDistance):j.TokenSet.fromString(e.term)},j.TokenSet.fromFuzzyString=function(e,t){for(var r=new j.TokenSet,n=[{node:r,editsRemaining:t,str:e}];n.length;){var i=n.pop();if(i.str.length>0){var s,o=i.str.charAt(0);o in i.node.edges?s=i.node.edges[o]:(s=new j.TokenSet,i.node.edges[o]=s),1==i.str.length&&(s.final=!0),n.push({node:s,editsRemaining:i.editsRemaining,str:i.str.slice(1)})}if(0!=i.editsRemaining){if(\\\"*\\\"in i.node.edges)var a=i.node.edges[\\\"*\\\"];else a=new j.TokenSet,i.node.edges[\\\"*\\\"]=a;if(0==i.str.length&&(a.final=!0),n.push({node:a,editsRemaining:i.editsRemaining-1,str:i.str}),i.str.length>1&&n.push({node:i.node,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)}),1==i.str.length&&(i.node.final=!0),i.str.length>=1){if(\\\"*\\\"in i.node.edges)var u=i.node.edges[\\\"*\\\"];else u=new j.TokenSet,i.node.edges[\\\"*\\\"]=u;1==i.str.length&&(u.final=!0),n.push({node:u,editsRemaining:i.editsRemaining-1,str:i.str.slice(1)})}if(i.str.length>1){var l,c=i.str.charAt(0),h=i.str.charAt(1);h in i.node.edges?l=i.node.edges[h]:(l=new j.TokenSet,i.node.edges[h]=l),1==i.str.length&&(l.final=!0),n.push({node:l,editsRemaining:i.editsRemaining-1,str:c+i.str.slice(2)})}}}return r},j.TokenSet.fromString=function(e){for(var t=new j.TokenSet,r=t,n=0,i=e.length;n<i;n++){var s=e[n],o=n==i-1;if(\\\"*\\\"==s)t.edges[s]=t,t.final=o;else{var a=new j.TokenSet;a.final=o,t.edges[s]=a,t=a}}return r},j.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:\\\"\\\",node:this}];t.length;){var r=t.pop(),n=Object.keys(r.node.edges),i=n.length;r.node.final&&(r.prefix.charAt(0),e.push(r.prefix));for(var s=0;s<i;s++){var o=n[s];t.push({prefix:r.prefix.concat(o),node:r.node.edges[o]})}}return e},j.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?\\\"1\\\":\\\"0\\\",t=Object.keys(this.edges).sort(),r=t.length,n=0;n<r;n++){var i=t[n];e=e+i+this.edges[i].id}return e},j.TokenSet.prototype.intersect=function(e){for(var t=new j.TokenSet,r=void 0,n=[{qNode:e,output:t,node:this}];n.length;){r=n.pop();for(var i=Object.keys(r.qNode.edges),s=i.length,o=Object.keys(r.node.edges),a=o.length,u=0;u<s;u++)for(var l=i[u],c=0;c<a;c++){var h=o[c];if(h==l||\\\"*\\\"==l){var d=r.node.edges[h],f=r.qNode.edges[l],p=d.final&&f.final,y=void 0;h in r.output.edges?(y=r.output.edges[h]).final=y.final||p:((y=new j.TokenSet).final=p,r.output.edges[h]=y),n.push({qNode:f,output:y,node:d})}}}return t},j.TokenSet.Builder=function(){this.previousWord=\\\"\\\",this.root=new j.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},j.TokenSet.Builder.prototype.insert=function(e){var t,r=0;if(e<this.previousWord)throw new Error(\\\"Out of order word insertion\\\");for(var n=0;n<e.length&&n<this.previousWord.length&&e[n]==this.previousWord[n];n++)r++;for(this.minimize(r),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child,n=r;n<e.length;n++){var i=new j.TokenSet,s=e[n];t.edges[s]=i,this.uncheckedNodes.push({parent:t,char:s,child:i}),t=i}t.final=!0,this.previousWord=e},j.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},j.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var r=this.uncheckedNodes[t],n=r.child.toString();n in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[n]:(r.child._str=n,this.minimizedNodes[n]=r.child),this.uncheckedNodes.pop()}},j.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},j.Index.prototype.search=function(e){return this.query((function(t){new j.QueryParser(e,t).parse()}))},j.Index.prototype.query=function(e){for(var t=new j.Query(this.fields),r=Object.create(null),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=0;a<this.fields.length;a++)n[this.fields[a]]=new j.Vector;for(e.call(t,t),a=0;a<t.clauses.length;a++){var u,l=t.clauses[a],c=j.Set.empty;u=l.usePipeline?this.pipeline.runString(l.term,{fields:l.fields}):[l.term];for(var h=0;h<u.length;h++){var d=u[h];l.term=d;var f=j.TokenSet.fromClause(l),p=this.tokenSet.intersect(f).toArray();if(0===p.length&&l.presence===j.Query.presence.REQUIRED){for(var y=0;y<l.fields.length;y++)s[R=l.fields[y]]=j.Set.empty;break}for(var m=0;m<p.length;m++){var g=p[m],x=this.invertedIndex[g],v=x._index;for(y=0;y<l.fields.length;y++){var w=x[R=l.fields[y]],Q=Object.keys(w),k=g+\\\"/\\\"+R,S=new j.Set(Q);if(l.presence==j.Query.presence.REQUIRED&&(c=c.union(S),void 0===s[R]&&(s[R]=j.Set.complete)),l.presence!=j.Query.presence.PROHIBITED){if(n[R].upsert(v,l.boost,(function(e,t){return e+t})),!i[k]){for(var E=0;E<Q.length;E++){var L,P=Q[E],b=new j.FieldRef(P,R),T=w[P];void 0===(L=r[b])?r[b]=new j.MatchData(g,R,T):L.add(g,R,T)}i[k]=!0}}else void 0===o[R]&&(o[R]=j.Set.empty),o[R]=o[R].union(S)}}}if(l.presence===j.Query.presence.REQUIRED)for(y=0;y<l.fields.length;y++)s[R=l.fields[y]]=s[R].intersect(c)}var O=j.Set.complete,I=j.Set.empty;for(a=0;a<this.fields.length;a++){var R;s[R=this.fields[a]]&&(O=O.intersect(s[R])),o[R]&&(I=I.union(o[R]))}var F=Object.keys(r),C=[],N=Object.create(null);if(t.isNegated())for(F=Object.keys(this.fieldVectors),a=0;a<F.length;a++){b=F[a];var _=j.FieldRef.fromString(b);r[b]=new j.MatchData}for(a=0;a<F.length;a++){var D=(_=j.FieldRef.fromString(F[a])).docRef;if(O.contains(D)&&!I.contains(D)){var A,B=this.fieldVectors[_],z=n[_.fieldName].similarity(B);if(void 0!==(A=N[D]))A.score+=z,A.matchData.combine(r[_]);else{var V={ref:D,score:z,matchData:r[_]};N[D]=V,C.push(V)}}}return C.sort((function(e,t){return t.score-e.score}))},j.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:j.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},j.Index.load=function(e){var t={},r={},n=e.fieldVectors,i=Object.create(null),s=e.invertedIndex,o=new j.TokenSet.Builder,a=j.Pipeline.load(e.pipeline);e.version!=j.version&&j.utils.warn(\\\"Version mismatch when loading serialised index. Current version of lunr '\\\"+j.version+\\\"' does not match serialized index '\\\"+e.version+\\\"'\\\");for(var u=0;u<n.length;u++){var l=(h=n[u])[0],c=h[1];r[l]=new j.Vector(c)}for(u=0;u<s.length;u++){var h,d=(h=s[u])[0],f=h[1];o.insert(d),i[d]=f}return o.finish(),t.fields=e.fields,t.fieldVectors=r,t.invertedIndex=i,t.tokenSet=o.root,t.pipeline=a,new j.Index(t)},j.Builder=function(){this._ref=\\\"id\\\",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=j.tokenizer,this.pipeline=new j.Pipeline,this.searchPipeline=new j.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},j.Builder.prototype.ref=function(e){this._ref=e},j.Builder.prototype.field=function(e,t){if(/\\\\//.test(e))throw new RangeError(\\\"Field '\\\"+e+\\\"' contains illegal character '/'\\\");this._fields[e]=t||{}},j.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},j.Builder.prototype.k1=function(e){this._k1=e},j.Builder.prototype.add=function(e,t){var r=e[this._ref],n=Object.keys(this._fields);this._documents[r]=t||{},this.documentCount+=1;for(var i=0;i<n.length;i++){var s=n[i],o=this._fields[s].extractor,a=o?o(e):e[s],u=this.tokenizer(a,{fields:[s]}),l=this.pipeline.run(u),c=new j.FieldRef(r,s),h=Object.create(null);this.fieldTermFrequencies[c]=h,this.fieldLengths[c]=0,this.fieldLengths[c]+=l.length;for(var d=0;d<l.length;d++){var f=l[d];if(null==h[f]&&(h[f]=0),h[f]+=1,null==this.invertedIndex[f]){var p=Object.create(null);p._index=this.termIndex,this.termIndex+=1;for(var y=0;y<n.length;y++)p[n[y]]=Object.create(null);this.invertedIndex[f]=p}null==this.invertedIndex[f][s][r]&&(this.invertedIndex[f][s][r]=Object.create(null));for(var m=0;m<this.metadataWhitelist.length;m++){var g=this.metadataWhitelist[m],x=f.metadata[g];null==this.invertedIndex[f][s][r][g]&&(this.invertedIndex[f][s][r][g]=[]),this.invertedIndex[f][s][r][g].push(x)}}}},j.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,r={},n={},i=0;i<t;i++){var s=j.FieldRef.fromString(e[i]),o=s.fieldName;n[o]||(n[o]=0),n[o]+=1,r[o]||(r[o]=0),r[o]+=this.fieldLengths[s]}var a=Object.keys(this._fields);for(i=0;i<a.length;i++){var u=a[i];r[u]=r[u]/n[u]}this.averageFieldLength=r},j.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),r=t.length,n=Object.create(null),i=0;i<r;i++){for(var s=j.FieldRef.fromString(t[i]),o=s.fieldName,a=this.fieldLengths[s],u=new j.Vector,l=this.fieldTermFrequencies[s],c=Object.keys(l),h=c.length,d=this._fields[o].boost||1,f=this._documents[s.docRef].boost||1,p=0;p<h;p++){var y,m,g,x=c[p],v=l[x],w=this.invertedIndex[x]._index;void 0===n[x]?(y=j.idf(this.invertedIndex[x],this.documentCount),n[x]=y):y=n[x],m=y*((this._k1+1)*v)/(this._k1*(1-this._b+this._b*(a/this.averageFieldLength[o]))+v),m*=d,m*=f,g=Math.round(1e3*m)/1e3,u.insert(w,g)}e[s]=u}this.fieldVectors=e},j.Builder.prototype.createTokenSet=function(){this.tokenSet=j.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},j.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new j.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},j.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},j.MatchData=function(e,t,r){for(var n=Object.create(null),i=Object.keys(r||{}),s=0;s<i.length;s++){var o=i[s];n[o]=r[o].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=n)},j.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),r=0;r<t.length;r++){var n=t[r],i=Object.keys(e.metadata[n]);null==this.metadata[n]&&(this.metadata[n]=Object.create(null));for(var s=0;s<i.length;s++){var o=i[s],a=Object.keys(e.metadata[n][o]);null==this.metadata[n][o]&&(this.metadata[n][o]=Object.create(null));for(var u=0;u<a.length;u++){var l=a[u];null==this.metadata[n][o][l]?this.metadata[n][o][l]=e.metadata[n][o][l]:this.metadata[n][o][l]=this.metadata[n][o][l].concat(e.metadata[n][o][l])}}}},j.MatchData.prototype.add=function(e,t,r){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=r);if(t in this.metadata[e])for(var n=Object.keys(r),i=0;i<n.length;i++){var s=n[i];s in this.metadata[e][t]?this.metadata[e][t][s]=this.metadata[e][t][s].concat(r[s]):this.metadata[e][t][s]=r[s]}else this.metadata[e][t]=r},j.Query=function(e){this.clauses=[],this.allFields=e},j.Query.wildcard=new String(\\\"*\\\"),j.Query.wildcard.NONE=0,j.Query.wildcard.LEADING=1,j.Query.wildcard.TRAILING=2,j.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},j.Query.prototype.clause=function(e){return\\\"fields\\\"in e||(e.fields=this.allFields),\\\"boost\\\"in e||(e.boost=1),\\\"usePipeline\\\"in e||(e.usePipeline=!0),\\\"wildcard\\\"in e||(e.wildcard=j.Query.wildcard.NONE),e.wildcard&j.Query.wildcard.LEADING&&e.term.charAt(0)!=j.Query.wildcard&&(e.term=\\\"*\\\"+e.term),e.wildcard&j.Query.wildcard.TRAILING&&e.term.slice(-1)!=j.Query.wildcard&&(e.term=e.term+\\\"*\\\"),\\\"presence\\\"in e||(e.presence=j.Query.presence.OPTIONAL),this.clauses.push(e),this},j.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=j.Query.presence.PROHIBITED)return!1;return!0},j.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,j.utils.clone(t))}),this),this;var r=t||{};return r.term=e.toString(),this.clause(r),this},j.QueryParseError=function(e,t,r){this.name=\\\"QueryParseError\\\",this.message=e,this.start=t,this.end=r},j.QueryParseError.prototype=new Error,j.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},j.QueryLexer.prototype.run=function(){for(var e=j.QueryLexer.lexText;e;)e=e(this)},j.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,r=this.pos,n=0;n<this.escapeCharPositions.length;n++)r=this.escapeCharPositions[n],e.push(this.str.slice(t,r)),t=r+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join(\\\"\\\")},j.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},j.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},j.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return j.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},j.QueryLexer.prototype.width=function(){return this.pos-this.start},j.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},j.QueryLexer.prototype.backup=function(){this.pos-=1},j.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=j.QueryLexer.EOS&&this.backup()},j.QueryLexer.prototype.more=function(){return this.pos<this.length},j.QueryLexer.EOS=\\\"EOS\\\",j.QueryLexer.FIELD=\\\"FIELD\\\",j.QueryLexer.TERM=\\\"TERM\\\",j.QueryLexer.EDIT_DISTANCE=\\\"EDIT_DISTANCE\\\",j.QueryLexer.BOOST=\\\"BOOST\\\",j.QueryLexer.PRESENCE=\\\"PRESENCE\\\",j.QueryLexer.lexField=function(e){return e.backup(),e.emit(j.QueryLexer.FIELD),e.ignore(),j.QueryLexer.lexText},j.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(j.QueryLexer.TERM)),e.ignore(),e.more())return j.QueryLexer.lexText},j.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.EDIT_DISTANCE),j.QueryLexer.lexText},j.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(j.QueryLexer.BOOST),j.QueryLexer.lexText},j.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(j.QueryLexer.TERM)},j.QueryLexer.termSeparator=j.tokenizer.separator,j.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==j.QueryLexer.EOS)return j.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(\\\":\\\"==t)return j.QueryLexer.lexField;if(\\\"~\\\"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexEditDistance;if(\\\"^\\\"==t)return e.backup(),e.width()>0&&e.emit(j.QueryLexer.TERM),j.QueryLexer.lexBoost;if(\\\"+\\\"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(\\\"-\\\"==t&&1===e.width())return e.emit(j.QueryLexer.PRESENCE),j.QueryLexer.lexText;if(t.match(j.QueryLexer.termSeparator))return j.QueryLexer.lexTerm}else e.escapeCharacter()}},j.QueryParser=function(e,t){this.lexer=new j.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},j.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=j.QueryParser.parseClause;e;)e=e(this);return this.query},j.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},j.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},j.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},j.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case j.QueryLexer.PRESENCE:return j.QueryParser.parsePresence;case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:var r=\\\"expected either a field or a term, found \\\"+t.type;throw t.str.length>=1&&(r+=\\\" with value '\\\"+t.str+\\\"'\\\"),new j.QueryParseError(r,t.start,t.end)}},j.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case\\\"-\\\":e.currentClause.presence=j.Query.presence.PROHIBITED;break;case\\\"+\\\":e.currentClause.presence=j.Query.presence.REQUIRED;break;default:var r=\\\"unrecognised presence operator'\\\"+t.str+\\\"'\\\";throw new j.QueryParseError(r,t.start,t.end)}var n=e.peekLexeme();if(null==n)throw r=\\\"expecting term or field, found nothing\\\",new j.QueryParseError(r,t.start,t.end);switch(n.type){case j.QueryLexer.FIELD:return j.QueryParser.parseField;case j.QueryLexer.TERM:return j.QueryParser.parseTerm;default:throw r=\\\"expecting term or field, found '\\\"+n.type+\\\"'\\\",new j.QueryParseError(r,n.start,n.end)}}},j.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var r=e.query.allFields.map((function(e){return\\\"'\\\"+e+\\\"'\\\"})).join(\\\", \\\"),n=\\\"unrecognised field '\\\"+t.str+\\\"', possible fields: \\\"+r;throw new j.QueryParseError(n,t.start,t.end)}e.currentClause.fields=[t.str];var i=e.peekLexeme();if(null==i)throw n=\\\"expecting term, found nothing\\\",new j.QueryParseError(n,t.start,t.end);if(i.type===j.QueryLexer.TERM)return j.QueryParser.parseTerm;throw n=\\\"expecting term, found '\\\"+i.type+\\\"'\\\",new j.QueryParseError(n,i.start,i.end)}},j.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf(\\\"*\\\")&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(null!=r)switch(r.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:var n=\\\"Unexpected lexeme type '\\\"+r.type+\\\"'\\\";throw new j.QueryParseError(n,r.start,r.end)}else e.nextClause()}},j.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n=\\\"edit distance must be numeric\\\";throw new j.QueryParseError(n,t.start,t.end)}e.currentClause.editDistance=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:throw n=\\\"Unexpected lexeme type '\\\"+i.type+\\\"'\\\",new j.QueryParseError(n,i.start,i.end)}else e.nextClause()}},j.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var r=parseInt(t.str,10);if(isNaN(r)){var n=\\\"boost must be numeric\\\";throw new j.QueryParseError(n,t.start,t.end)}e.currentClause.boost=r;var i=e.peekLexeme();if(null!=i)switch(i.type){case j.QueryLexer.TERM:return e.nextClause(),j.QueryParser.parseTerm;case j.QueryLexer.FIELD:return e.nextClause(),j.QueryParser.parseField;case j.QueryLexer.EDIT_DISTANCE:return j.QueryParser.parseEditDistance;case j.QueryLexer.BOOST:return j.QueryParser.parseBoost;case j.QueryLexer.PRESENCE:return e.nextClause(),j.QueryParser.parsePresence;default:throw n=\\\"Unexpected lexeme type '\\\"+i.type+\\\"'\\\",new j.QueryParseError(n,i.start,i.end)}else e.nextClause()}},void 0===(i=\\\"function\\\"==typeof(n=function(){return j})?n.call(t,r,t,e):n)||(e.exports=i)}()}},t={};function r(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,{a:t}),t},r.d=function(e,t){for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)};var n={};!function(){\\\"use strict\\\";r.d(n,{add:function(){return c},dispose:function(){return y},done:function(){return h},fromExternalJS:function(){return f},load:function(){return p},search:function(){return m},toJS:function(){return d}});var e=r(291),t=(e,t,r)=>new Promise(((n,i)=>{var s=e=>{try{a(r.next(e))}catch(e){i(e)}},o=e=>{try{a(r.throw(e))}catch(e){i(e)}},a=e=>e.done?n(e.value):Promise.resolve(e.value).then(s,o);a((r=r.apply(e,t)).next())}));let i,s,o,a=[];function u(){i=new e.Builder,i.field(\\\"title\\\"),i.field(\\\"description\\\"),i.ref(\\\"ref\\\"),i.pipeline.add(e.trimmer,e.stopWordFilter,e.stemmer),o=new Promise((e=>{s=e}))}e.tokenizer.separator=/\\\\s+/,u();const l=t=>{const r=e.trimmer(new e.Token(t,{}));return\\\"*\\\"+e.stemmer(r)+\\\"*\\\"};function c(e,t,r){const n=a.push(r)-1,s={title:e.toLowerCase(),description:t.toLowerCase(),ref:n};i.add(s)}function h(){return t(this,null,(function*(){s(i.build())}))}function d(){return t(this,null,(function*(){return{store:a,index:(yield o).toJSON()}}))}function f(e,r){return t(this,null,(function*(){try{if(importScripts(e),!self[r])throw new Error(\\\"Broken index file format\\\");p(self[r])}catch(e){console.error(\\\"Failed to load search index: \\\"+e.message)}}))}function p(r){return t(this,null,(function*(){a=r.store,s(e.Index.load(r.index))}))}function y(){return t(this,null,(function*(){a=[],u()}))}function m(e,r=0){return t(this,null,(function*(){if(0===e.trim().length)return[];let t=(yield o).query((t=>{e.trim().toLowerCase().split(/\\\\s+/).forEach((e=>{if(1===e.length)return;const r=l(e);t.term(r,{})}))}));return r>0&&(t=t.slice(0,r)),t.map((e=>({meta:a[e.ref],score:e.score})))}))}addEventListener(\\\"message\\\",(function(e){var t,r=e.data,i=r.type,s=r.method,o=r.id,a=r.params;\\\"RPC\\\"===i&&s&&((t=n[s])?Promise.resolve().then((function(){return t.apply(n,a)})):Promise.reject(\\\"No such method\\\")).then((function(e){postMessage({type:\\\"RPC\\\",id:o,result:e})})).catch((function(e){var t={message:e};e.stack&&(t.message=e.message,t.stack=e.stack,t.name=e.name),postMessage({type:\\\"RPC\\\",id:o,error:t})}))})),postMessage({type:\\\"RPC\\\",method:\\\"ready\\\"})}()}();\\n//# sourceMappingURL=cfb294d7f6536ffa8d42.worker.js.map\"])), { name: \"[fullhash].worker.js\" })\n\t\t\t\t\taddMethods(w, methods)\n\t\t\t\t\t\n\t\t\t\t\treturn w\n\t\t\t\t}\n\t\t\t","function addMethods(worker, methods) {\n  var c = 0;\n  var callbacks = {};\n  worker.addEventListener('message', function (e) {\n    var d = e.data;\n    if (d.type !== 'RPC') return;\n\n    if (d.id) {\n      var f = callbacks[d.id];\n\n      if (f) {\n        delete callbacks[d.id];\n\n        if (d.error) {\n          f[1](Object.assign(Error(d.error.message), d.error));\n        } else {\n          f[0](d.result);\n        }\n      }\n    } else {\n      var evt = document.createEvent('Event');\n      evt.initEvent(d.method, false, false);\n      evt.data = d.params;\n      worker.dispatchEvent(evt);\n    }\n  });\n  methods.forEach(function (method) {\n    worker[method] = function () {\n      var _arguments = arguments;\n      return new Promise(function (a, b) {\n        var id = ++c;\n        callbacks[id] = [a, b];\n        worker.postMessage({\n          type: 'RPC',\n          id: id,\n          method: method,\n          params: [].slice.call(_arguments)\n        });\n      });\n    };\n  });\n}\n\nmodule.exports = addMethods;\n//# sourceMappingURL=rpc-wrapper.js.map\n",null,null,null,null,null,"// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n",null,null,"__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();",null,null,"__webpack_require__.nc = undefined;",null,null,"import { darken, desaturate, lighten, readableColor, transparentize } from 'polished';\n\nconst defaultTheme: ThemeInterface = {\n  spacing: {\n    unit: 5,\n    sectionHorizontal: ({ spacing }) => spacing.unit * 8,\n    sectionVertical: ({ spacing }) => spacing.unit * 8,\n  },\n  breakpoints: {\n    small: '50rem',\n    medium: '75rem',\n    large: '105rem',\n  },\n  colors: {\n    tonalOffset: 0.2,\n    primary: {\n      main: '#32329f',\n      light: ({ colors }) => lighten(colors.tonalOffset, colors.primary.main),\n      dark: ({ colors }) => darken(colors.tonalOffset, colors.primary.main),\n      contrastText: ({ colors }) => readableColor(colors.primary.main),\n    },\n    success: {\n      main: '#1d8127',\n      light: ({ colors }) => lighten(colors.tonalOffset * 2, colors.success.main),\n      dark: ({ colors }) => darken(colors.tonalOffset, colors.success.main),\n      contrastText: ({ colors }) => readableColor(colors.success.main),\n    },\n    warning: {\n      main: '#ffa500',\n      light: ({ colors }) => lighten(colors.tonalOffset, colors.warning.main),\n      dark: ({ colors }) => darken(colors.tonalOffset, colors.warning.main),\n      contrastText: '#ffffff',\n    },\n    error: {\n      main: '#d41f1c',\n      light: ({ colors }) => lighten(colors.tonalOffset, colors.error.main),\n      dark: ({ colors }) => darken(colors.tonalOffset, colors.error.main),\n      contrastText: ({ colors }) => readableColor(colors.error.main),\n    },\n    gray: {\n      50: '#FAFAFA',\n      100: '#F5F5F5',\n    },\n    text: {\n      primary: '#333333',\n      secondary: ({ colors }) => lighten(colors.tonalOffset, colors.text.primary),\n    },\n    border: {\n      dark: 'rgba(0,0,0, 0.1)',\n      light: '#ffffff',\n    },\n    responses: {\n      success: {\n        color: ({ colors }) => colors.success.main,\n        backgroundColor: ({ colors }) => transparentize(0.93, colors.success.main),\n        tabTextColor: ({ colors }) => colors.responses.success.color,\n      },\n      error: {\n        color: ({ colors }) => colors.error.main,\n        backgroundColor: ({ colors }) => transparentize(0.93, colors.error.main),\n        tabTextColor: ({ colors }) => colors.responses.error.color,\n      },\n      redirect: {\n        color: ({ colors }) => colors.warning.main,\n        backgroundColor: ({ colors }) => transparentize(0.9, colors.responses.redirect.color),\n        tabTextColor: ({ colors }) => colors.responses.redirect.color,\n      },\n      info: {\n        color: '#87ceeb',\n        backgroundColor: ({ colors }) => transparentize(0.9, colors.responses.info.color),\n        tabTextColor: ({ colors }) => colors.responses.info.color,\n      },\n    },\n    http: {\n      get: '#2F8132',\n      post: '#186FAF',\n      put: '#95507c',\n      options: '#947014',\n      patch: '#bf581d',\n      delete: '#cc3333',\n      basic: '#707070',\n      link: '#07818F',\n      head: '#A23DAD',\n    },\n  },\n  schema: {\n    linesColor: theme =>\n      lighten(\n        theme.colors.tonalOffset,\n        desaturate(theme.colors.tonalOffset, theme.colors.primary.main),\n      ),\n    defaultDetailsWidth: '75%',\n    typeNameColor: theme => theme.colors.text.secondary,\n    typeTitleColor: theme => theme.schema.typeNameColor,\n    requireLabelColor: theme => theme.colors.error.main,\n    labelsTextSize: '0.9em',\n    nestingSpacing: '1em',\n    nestedBackground: '#fafafa',\n    arrow: {\n      size: '1.1em',\n      color: theme => theme.colors.text.secondary,\n    },\n  },\n  typography: {\n    fontSize: '14px',\n    lineHeight: '1.5em',\n    fontWeightRegular: '400',\n    fontWeightBold: '600',\n    fontWeightLight: '300',\n    fontFamily: 'Roboto, sans-serif',\n    smoothing: 'antialiased',\n    optimizeSpeed: true,\n    headings: {\n      fontFamily: 'Montserrat, sans-serif',\n      fontWeight: '400',\n      lineHeight: '1.6em',\n    },\n    code: {\n      fontSize: '13px',\n      fontFamily: 'Courier, monospace',\n      lineHeight: ({ typography }) => typography.lineHeight,\n      fontWeight: ({ typography }) => typography.fontWeightRegular,\n      color: '#e53935',\n      backgroundColor: 'rgba(38, 50, 56, 0.05)',\n      wrap: false,\n    },\n    links: {\n      color: ({ colors }) => colors.primary.main,\n      visited: ({ typography }) => typography.links.color,\n      hover: ({ typography }) => lighten(0.2, typography.links.color),\n      textDecoration: 'auto',\n      hoverTextDecoration: 'auto',\n    },\n  },\n  sidebar: {\n    width: '260px',\n    backgroundColor: '#fafafa',\n    textColor: '#333333',\n    activeTextColor: theme =>\n      theme.sidebar.textColor !== defaultTheme.sidebar!.textColor\n        ? theme.sidebar.textColor\n        : theme.colors.primary.main,\n    groupItems: {\n      activeBackgroundColor: theme => darken(0.1, theme.sidebar.backgroundColor),\n      activeTextColor: theme => theme.sidebar.activeTextColor,\n      textTransform: 'uppercase',\n    },\n    level1Items: {\n      activeBackgroundColor: theme => darken(0.05, theme.sidebar.backgroundColor),\n      activeTextColor: theme => theme.sidebar.activeTextColor,\n      textTransform: 'none',\n    },\n    arrow: {\n      size: '1.5em',\n      color: theme => theme.sidebar.textColor,\n    },\n  },\n  logo: {\n    maxHeight: ({ sidebar }) => sidebar.width,\n    maxWidth: ({ sidebar }) => sidebar.width,\n    gutter: '2px',\n  },\n  rightPanel: {\n    backgroundColor: '#263238',\n    width: '40%',\n    textColor: '#ffffff',\n    servers: {\n      overlay: {\n        backgroundColor: '#fafafa',\n        textColor: '#263238',\n      },\n      url: {\n        backgroundColor: '#fff',\n      },\n    },\n  },\n  codeBlock: {\n    backgroundColor: ({ rightPanel }) => darken(0.1, rightPanel.backgroundColor),\n  },\n  fab: {\n    backgroundColor: '#f2f2f2',\n    color: '#0065FB',\n  },\n};\n\nexport default defaultTheme;\n\nexport function resolveTheme(theme: ThemeInterface): ResolvedThemeInterface {\n  const resolvedValues = {};\n  let counter = 0;\n  const setProxy = (obj, path: string) => {\n    Object.keys(obj).forEach(k => {\n      const currentPath = (path ? path + '.' : '') + k;\n      const val = obj[k];\n      if (typeof val === 'function') {\n        Object.defineProperty(obj, k, {\n          get() {\n            if (!resolvedValues[currentPath]) {\n              counter++;\n              if (counter > 1000) {\n                throw new Error(\n                  `Theme probably contains circular dependency at ${currentPath}: ${val.toString()}`,\n                );\n              }\n\n              resolvedValues[currentPath] = val(theme);\n            }\n            return resolvedValues[currentPath];\n          },\n          enumerable: true,\n        });\n      } else if (typeof val === 'object') {\n        setProxy(val, currentPath);\n      }\n    });\n  };\n\n  setProxy(theme, '');\n  return JSON.parse(JSON.stringify(theme));\n}\n\nexport interface ColorSetting {\n  main: string;\n  light: string;\n  dark: string;\n  contrastText: string;\n}\n\nexport interface HTTPResponseColos {\n  color: string;\n  backgroundColor: string;\n  tabTextColor: string;\n}\n\nexport interface FontSettings {\n  fontSize: string;\n  fontWeight: string;\n  fontFamily: string;\n  lineHeight: string;\n  color: string;\n}\n\nexport interface Servers {\n  overlay: {\n    backgroundColor: string;\n    textColor: string;\n  };\n  url: {\n    backgroundColor: string;\n  };\n}\n\nexport interface ResolvedThemeInterface {\n  spacing: {\n    unit: number;\n    sectionHorizontal: number;\n    sectionVertical: number;\n  };\n  breakpoints: {\n    small: string;\n    medium: string;\n    large: string;\n  };\n  colors: {\n    tonalOffset: number;\n    primary: ColorSetting;\n    success: ColorSetting;\n    warning: ColorSetting;\n    error: ColorSetting;\n    gray: {\n      50: string;\n      100: string;\n    };\n    border: {\n      light: string;\n      dark: string;\n    };\n    text: {\n      primary: string;\n      secondary: string;\n    };\n    responses: {\n      success: HTTPResponseColos;\n      error: HTTPResponseColos;\n      redirect: HTTPResponseColos;\n      info: HTTPResponseColos;\n    };\n    http: {\n      get: string;\n      post: string;\n      put: string;\n      options: string;\n      patch: string;\n      delete: string;\n      basic: string;\n      link: string;\n      head: string;\n    };\n  };\n  schema: {\n    linesColor: string;\n    defaultDetailsWidth: string;\n    typeNameColor: string;\n    typeTitleColor: string;\n    requireLabelColor: string;\n    labelsTextSize: string;\n    nestingSpacing: string;\n    nestedBackground: string;\n    arrow: {\n      size: string;\n      color: string;\n    };\n  };\n  typography: {\n    fontSize: string;\n    lineHeight: string;\n    fontWeightLight: string;\n    fontWeightRegular: string;\n    fontWeightBold: string;\n    fontFamily: string;\n\n    smoothing: string;\n    optimizeSpeed: boolean;\n\n    code: FontSettings & {\n      backgroundColor: string;\n      wrap: boolean;\n    };\n    headings: {\n      fontFamily: string;\n      fontWeight: string;\n      lineHeight: string;\n    };\n\n    links: {\n      color: string;\n      visited: string;\n      hover: string;\n      textDecoration: string;\n      hoverTextDecoration: string;\n    };\n  };\n  sidebar: {\n    width: string;\n    backgroundColor: string;\n    textColor: string;\n    activeTextColor: string;\n    groupItems: {\n      activeBackgroundColor: string;\n      activeTextColor: string;\n      textTransform: string;\n    };\n    level1Items: {\n      activeBackgroundColor: string;\n      activeTextColor: string;\n      textTransform: string;\n    };\n    arrow: {\n      size: string;\n      color: string;\n    };\n  };\n  logo: {\n    maxHeight: string;\n    maxWidth: string;\n    gutter: string;\n  };\n  rightPanel: {\n    backgroundColor: string;\n    textColor: string;\n    width: string;\n    servers: Servers;\n  };\n  codeBlock: {\n    backgroundColor: string;\n  };\n  fab: {\n    backgroundColor: string;\n    color: string;\n  };\n\n  extensionsHook?: (name: string, props: any) => string;\n}\n\nexport type primitive = string | number | boolean | undefined | null;\nexport type AdvancedThemeDeep<T> = T extends primitive\n  ? T | ((theme: ResolvedThemeInterface) => T)\n  : AdvancedThemeObject<T>;\nexport type AdvancedThemeObject<T> = { [P in keyof T]?: AdvancedThemeDeep<T[P]> };\nexport type ThemeInterface = AdvancedThemeObject<ResolvedThemeInterface>;\n","export const IS_BROWSER = typeof window !== 'undefined' && 'HTMLElement' in window;\n\nexport function querySelector(selector: string): Element | null {\n  if (typeof document !== 'undefined') {\n    return document.querySelector(selector);\n  }\n  return null;\n}\n\n/**\n * Drop everything inside <...> (i.e., tags/elements), and keep the text.\n * Unlike browser innerText, this removes newlines; it also doesn't handle\n * un-encoded `<` or `>` characters very well, so don't feed it malformed HTML\n */\nexport function html2Str(html: string): string {\n  return html\n    .split(/<[^>]+>/)\n    .map(chunk => {\n      return chunk.trim();\n    })\n    .filter(trimmedChunk => {\n      return trimmedChunk.length > 0;\n    })\n    .join(' ');\n}\n\n// Alternate scrollIntoViewIfNeeded implementation.\n// Used in all cases, since it seems Chrome's implementation is buggy\n// when \"Experimental Web Platform Features\" is enabled (at least of version 96).\n// See #1714, #1742\n\nexport function scrollIntoViewIfNeeded(el: HTMLElement, centerIfNeeded = true) {\n  const parent = el.parentNode as HTMLElement | null;\n  if (!parent) {\n    return;\n  }\n  const parentComputedStyle = window.getComputedStyle(parent, undefined);\n  const parentBorderTopWidth = parseInt(\n    parentComputedStyle.getPropertyValue('border-top-width'),\n    10,\n  );\n  const parentBorderLeftWidth = parseInt(\n    parentComputedStyle.getPropertyValue('border-left-width'),\n    10,\n  );\n  const overTop = el.offsetTop - parent.offsetTop < parent.scrollTop;\n  const overBottom =\n    el.offsetTop - parent.offsetTop + el.clientHeight - parentBorderTopWidth >\n    parent.scrollTop + parent.clientHeight;\n  const overLeft = el.offsetLeft - parent.offsetLeft < parent.scrollLeft;\n  const overRight =\n    el.offsetLeft - parent.offsetLeft + el.clientWidth - parentBorderLeftWidth >\n    parent.scrollLeft + parent.clientWidth;\n  const alignWithTop = overTop && !overBottom;\n\n  if ((overTop || overBottom) && centerIfNeeded) {\n    parent.scrollTop =\n      el.offsetTop -\n      parent.offsetTop -\n      parent.clientHeight / 2 -\n      parentBorderTopWidth +\n      el.clientHeight / 2;\n  }\n\n  if ((overLeft || overRight) && centerIfNeeded) {\n    parent.scrollLeft =\n      el.offsetLeft -\n      parent.offsetLeft -\n      parent.clientWidth / 2 -\n      parentBorderLeftWidth +\n      el.clientWidth / 2;\n  }\n\n  if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {\n    el.scrollIntoView(alignWithTop);\n  }\n}\n",null,"import slugify from 'slugify';\n\n/**\n * Maps over array passing `isLast` bool to iterator as the second argument\n */\nexport function mapWithLast<T, P>(array: T[], iteratee: (item: T, isLast: boolean) => P) {\n  const res: P[] = [];\n  for (let i = 0; i < array.length - 1; i++) {\n    res.push(iteratee(array[i], false));\n  }\n  if (array.length !== 0) {\n    res.push(iteratee(array[array.length - 1], true));\n  }\n  return res;\n}\n\n/**\n * Creates an object with the same keys as object and values generated by running each\n * own enumerable string keyed property of object thru iteratee.\n * The iteratee is invoked with three arguments: (value, key, object).\n *\n * @param object the object to iterate over\n * @param iteratee the function invoked per iteration.\n */\nexport function mapValues<T, P>(\n  object: Record<string, T>,\n  iteratee: (val: T, key: string, obj: Record<string, T>) => P,\n): Record<string, P> {\n  const res: { [key: string]: P } = {};\n  for (const key in object) {\n    if (object.hasOwnProperty(key)) {\n      res[key] = iteratee(object[key], key, object);\n    }\n  }\n  return res;\n}\n\n/**\n * flattens collection using `prop` field as a children\n * @param collectionItems collection items\n * @param prop item property with child elements\n */\nexport function flattenByProp<T extends object, P extends keyof T>(\n  collectionItems: T[],\n  prop: P,\n): T[] {\n  const res: T[] = [];\n  const iterate = (items: T[]) => {\n    for (const item of items) {\n      res.push(item);\n      if (item[prop]) {\n        iterate(item[prop] as any as T[]);\n      }\n    }\n  };\n  iterate(collectionItems);\n  return res;\n}\n\nexport function stripTrailingSlash(path: string): string {\n  if (path.endsWith('/')) {\n    return path.substring(0, path.length - 1);\n  }\n  return path;\n}\n\nexport function isNumeric(n: any): n is number {\n  return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nexport function appendToMdHeading(md: string, heading: string, content: string) {\n  // if  heading is already in md and append to the end of it\n  const testRegex = new RegExp(`(^|\\\\n)#\\\\s?${heading}\\\\s*\\\\n`, 'i');\n  const replaceRegex = new RegExp(`((\\\\n|^)#\\\\s*${heading}\\\\s*(\\\\n|$)(?:.|\\\\n)*?)(\\\\n#|$)`, 'i');\n  if (testRegex.test(md)) {\n    return md.replace(replaceRegex, `$1\\n\\n${content}\\n$4`);\n  } else {\n    // else append heading itself\n    const br = md === '' || md.endsWith('\\n\\n') ? '' : md.endsWith('\\n') ? '\\n' : '\\n\\n';\n    return `${md}${br}# ${heading}\\n\\n${content}`;\n  }\n}\n\nexport const mergeObjects = (target: any, ...sources: any[]): any => {\n  if (!sources.length) {\n    return target;\n  }\n  const source = sources.shift();\n  if (source === undefined) {\n    return target;\n  }\n\n  if (isMergebleObject(target) && isMergebleObject(source)) {\n    Object.keys(source).forEach((key: string) => {\n      if (Object.prototype.hasOwnProperty.call(source, key) && key !== '__proto__') {\n        if (isMergebleObject(source[key])) {\n          if (!target[key]) {\n            target[key] = {};\n          }\n          mergeObjects(target[key], source[key]);\n        } else {\n          target[key] = source[key];\n        }\n      }\n    });\n  }\n\n  return mergeObjects(target, ...sources);\n};\n\nexport const isObject = (item: unknown): item is Record<string, unknown> => {\n  return item !== null && typeof item === 'object';\n};\n\nconst isMergebleObject = (item): boolean => {\n  return isObject(item) && !isArray(item);\n};\n\n/**\n * slugify() returns empty string when failed to slugify.\n * so try to return minimum slugified-string with failed one which keeps original value\n * the regex codes are referenced with https://gist.github.com/mathewbyrne/1280286\n */\nexport function safeSlugify(value: string): string {\n  return (\n    slugify(value) ||\n    value\n      .toString()\n      .toLowerCase()\n      .replace(/\\s+/g, '-') // Replace spaces with -\n      .replace(/&/g, '-and-') // Replace & with 'and'\n      .replace(/\\--+/g, '-') // Replace multiple - with single -\n      .replace(/^-+/, '') // Trim - from start of text\n      .replace(/-+$/, '')\n  ); // Trim - from end of text\n}\n\nexport function isAbsoluteUrl(url: string) {\n  return /(?:^[a-z][a-z0-9+.-]*:|\\/\\/)/i.test(url);\n}\n\n/**\n * simple resolve URL which doesn't break on strings with url fragments\n * e.g. resolveUrl('http://test.com:{port}', 'path') results in http://test.com:{port}/path\n */\nexport function resolveUrl(url: string, to: string) {\n  let res;\n  if (to.startsWith('//')) {\n    try {\n      res = `${new URL(url).protocol || 'https:'}${to}`;\n    } catch {\n      res = `https:${to}`;\n    }\n  } else if (isAbsoluteUrl(to)) {\n    res = to;\n  } else if (!to.startsWith('/')) {\n    res = stripTrailingSlash(url) + '/' + to;\n  } else {\n    try {\n      const urlObj = new URL(url);\n      urlObj.pathname = to;\n      res = urlObj.href;\n    } catch {\n      res = to;\n    }\n  }\n  return stripTrailingSlash(res);\n}\n\nexport function getBasePath(serverUrl: string): string {\n  try {\n    return parseURL(serverUrl).pathname;\n  } catch (e) {\n    // when using with redoc-cli serverUrl can be empty resulting in crash\n    return serverUrl;\n  }\n}\n\nexport function titleize(text: string) {\n  return text.charAt(0).toUpperCase() + text.slice(1);\n}\n\nexport function removeQueryStringAndHash(serverUrl: string): string {\n  try {\n    const url = parseURL(serverUrl);\n    url.search = '';\n    url.hash = '';\n    return url.toString();\n  } catch (e) {\n    // when using with redoc-cli serverUrl can be empty resulting in crash\n    return serverUrl;\n  }\n}\n\nfunction parseURL(url: string) {\n  if (typeof URL === 'undefined') {\n    // node\n    return new (require('url').URL)(url);\n  } else {\n    return new URL(url);\n  }\n}\n\nexport function escapeHTMLAttrChars(str: string): string {\n  return str.replace(/[\"\\\\]/g, '\\\\$&');\n}\n\nexport function unescapeHTMLChars(str: string): string {\n  return str\n    .replace(/&#(\\d+);/g, (_m, code) => String.fromCharCode(parseInt(code, 10)))\n    .replace(/&amp;/g, '&')\n    .replace(/&quot;/g, '\"');\n}\n\nexport function isArray(value: unknown): value is any[] {\n  return Array.isArray(value);\n}\n\nexport function isBoolean(value: unknown): value is boolean {\n  return typeof value === 'boolean';\n}\n","import type { LabelsConfig, LabelsConfigRaw } from './types';\n\nconst labels: LabelsConfig = {\n  enum: 'Enum',\n  enumSingleValue: 'Value',\n  enumArray: 'Items',\n  default: 'Default',\n  deprecated: 'Deprecated',\n  example: 'Example',\n  examples: 'Examples',\n  recursive: 'Recursive',\n  arrayOf: 'Array of ',\n  webhook: 'Event',\n  const: 'Value',\n  noResultsFound: 'No results found',\n  download: 'Download',\n  downloadSpecification: 'Download OpenAPI specification',\n  responses: 'Responses',\n  callbackResponses: 'Callback responses',\n  requestSamples: 'Request samples',\n  responseSamples: 'Response samples',\n};\n\nexport function setRedocLabels(_labels?: LabelsConfigRaw) {\n  Object.assign(labels, _labels);\n}\n\nexport function l(key: keyof LabelsConfig, idx?: number): string {\n  const label = labels[key];\n  if (idx !== undefined) {\n    return label[idx];\n  }\n  return label;\n}\n","import {\n  OpenAPIOperation,\n  OpenAPIParameter,\n  OpenAPISchema,\n  OpenAPIServer,\n  OpenAPITag,\n  Referenced,\n} from '../types';\nimport { AppStore } from './AppStore';\nimport { GroupModel } from './models';\nimport { OperationModel } from './models/Operation';\nimport { RedocRawOptions } from './RedocNormalizedOptions';\n\nexport interface StoreState {\n  menu: {\n    activeItemIdx: number;\n  };\n  spec: {\n    url?: string;\n    data: any;\n  };\n  searchIndex: any;\n  options: RedocRawOptions;\n}\n\nexport interface LabelsConfig {\n  enum: string;\n  enumSingleValue: string;\n  enumArray: string;\n  default: string;\n  deprecated: string;\n  example: string;\n  examples: string;\n  recursive: string;\n  arrayOf: string;\n  webhook: string;\n  const: string;\n  noResultsFound: string;\n  download: string;\n  downloadSpecification: string;\n  responses: string;\n  callbackResponses: string;\n  requestSamples: string;\n  responseSamples: string;\n}\n\nexport type LabelsConfigRaw = Partial<LabelsConfig>;\n\nexport interface MDXComponentMeta {\n  component: React.ComponentType;\n  propsSelector: (store?: AppStore) => any;\n  props?: object;\n}\n\nexport interface MarkdownHeading {\n  id: string;\n  name: string;\n  level: number;\n  items?: MarkdownHeading[];\n  description?: string;\n}\n\nexport type ContentItemModel = GroupModel | OperationModel;\n\nexport type TagInfo = OpenAPITag & {\n  operations: ExtendedOpenAPIOperation[];\n  used?: boolean;\n};\n\nexport type ExtendedOpenAPIOperation = {\n  pointer: string;\n  pathName: string;\n  httpVerb: string;\n  pathParameters: Array<Referenced<OpenAPIParameter>>;\n  pathServers: Array<OpenAPIServer> | undefined;\n  isWebhook: boolean;\n} & OpenAPIOperation;\n\nexport type TagsInfoMap = Record<string, TagInfo>;\n\nexport interface TagGroup {\n  name: string;\n  tags: string[];\n}\n\nexport type MenuItemGroupType = 'group' | 'tag' | 'section' | 'schema';\nexport type MenuItemType = MenuItemGroupType | 'operation';\n\nexport interface IMenuItem {\n  id: string;\n  absoluteIdx?: number;\n  name: string;\n  sidebarLabel: string;\n  description?: string;\n  depth: number;\n  active: boolean;\n  expanded: boolean;\n  items: IMenuItem[];\n  parent?: IMenuItem;\n  deprecated?: boolean;\n  type: MenuItemType;\n\n  deactivate(): void;\n  activate(): void;\n\n  collapse(): void;\n  expand(): void;\n}\n\nexport interface SearchDocument {\n  title: string;\n  description: string;\n  id: string;\n}\n\nexport interface SearchResult<T = string> {\n  meta: T;\n  score: number;\n}\n\nexport enum SideNavStyleEnum {\n  SummaryOnly = 'summary-only',\n  PathOnly = 'path-only',\n  IdOnly = 'id-only',\n}\n\nexport type MergedOpenAPISchema = OpenAPISchema & {\n  'x-refsStack'?: string[];\n  'x-parentRefs'?: string[];\n  'x-circular-ref'?: boolean;\n};\n","import defaultTheme, { ResolvedThemeInterface, resolveTheme, ThemeInterface } from '../theme';\nimport { querySelector } from '../utils/dom';\nimport { isArray, isNumeric, mergeObjects } from '../utils/helpers';\n\nimport { setRedocLabels } from './Labels';\nimport { SideNavStyleEnum } from './types';\nimport type { LabelsConfigRaw, MDXComponentMeta } from './types';\n\nexport type DownloadUrlsConfig = {\n  title?: string;\n  url: string;\n}[];\n\nexport interface RedocRawOptions {\n  theme?: ThemeInterface;\n  scrollYOffset?: number | string | (() => number);\n  hideHostname?: boolean | string;\n  expandResponses?: string | 'all';\n  requiredPropsFirst?: boolean | string; // remove in next major release\n  sortRequiredPropsFirst?: boolean | string;\n  sortPropsAlphabetically?: boolean | string;\n  sortEnumValuesAlphabetically?: boolean | string;\n  sortOperationsAlphabetically?: boolean | string;\n  sortTagsAlphabetically?: boolean | string;\n  nativeScrollbars?: boolean | string;\n  pathInMiddlePanel?: boolean | string;\n  untrustedSpec?: boolean | string; // remove in next major release\n  sanitize?: boolean | string;\n  hideLoading?: boolean | string;\n  hideDownloadButton?: boolean | string; // remove in next major release\n  hideDownloadButtons?: boolean | string;\n  downloadFileName?: string;\n  downloadDefinitionUrl?: string;\n  downloadUrls?: DownloadUrlsConfig;\n  disableSearch?: boolean | string;\n  onlyRequiredInSamples?: boolean | string;\n  showExtensions?: boolean | string | string[];\n  sideNavStyle?: SideNavStyleEnum;\n  hideSingleRequestSampleTab?: boolean | string;\n  hideRequestPayloadSample?: boolean;\n  menuToggle?: boolean | string;\n  jsonSampleExpandLevel?: number | string | 'all'; // remove in next major release\n  jsonSamplesExpandLevel?: number | string | 'all';\n  hideSchemaTitles?: boolean | string;\n  simpleOneOfTypeLabel?: boolean | string;\n  payloadSampleIdx?: number;\n  expandSingleSchemaField?: boolean | string;\n  schemaExpansionLevel?: number | string | 'all'; // remove in next major release\n  schemasExpansionLevel?: number | string | 'all';\n  schemaDefinitionsTagName?: string;\n  showObjectSchemaExamples?: boolean | string;\n  showSecuritySchemeType?: boolean;\n  hideSecuritySection?: boolean;\n\n  unstable_ignoreMimeParameters?: boolean;\n\n  allowedMdComponents?: Record<string, MDXComponentMeta>;\n\n  labels?: LabelsConfigRaw;\n\n  enumSkipQuotes?: boolean | string;\n\n  expandDefaultServerVariables?: boolean;\n  maxDisplayedEnumValues?: number;\n  ignoreNamedSchemas?: string[] | string;\n  hideSchemaPattern?: boolean;\n  generatedPayloadSamplesMaxDepth?: number; // remove in next major release\n  generatedSamplesMaxDepth?: number;\n  nonce?: string;\n  hideFab?: boolean;\n  minCharacterLengthToInitSearch?: number;\n  showWebhookVerb?: boolean;\n  hidePropertiesPrefix?: boolean;\n}\n\nexport function argValueToBoolean(val?: string | boolean, defaultValue?: boolean): boolean {\n  if (val === undefined) {\n    return defaultValue || false;\n  }\n  if (typeof val === 'string') {\n    return val !== 'false';\n  }\n  return val;\n}\n\nfunction argValueToNumber(value: number | string | undefined): number | undefined {\n  if (typeof value === 'string') {\n    return parseInt(value, 10);\n  }\n\n  if (typeof value === 'number') {\n    return value;\n  }\n}\n\nfunction argValueToExpandLevel(value?: number | string | undefined, defaultValue = 0): number {\n  if (value === 'all') return Infinity;\n\n  return argValueToNumber(value) || defaultValue;\n}\n\nexport class RedocNormalizedOptions {\n  static normalizeExpandResponses(value: RedocRawOptions['expandResponses']) {\n    if (value === 'all') {\n      return 'all';\n    }\n    if (typeof value === 'string') {\n      const res = {};\n      value.split(',').forEach(code => {\n        res[code.trim()] = true;\n      });\n      return res;\n    } else if (value !== undefined) {\n      console.warn(\n        `expandResponses must be a string but received value \"${value}\" of type ${typeof value}`,\n      );\n    }\n    return {};\n  }\n\n  static normalizeHideHostname(value: RedocRawOptions['hideHostname']): boolean {\n    return !!value;\n  }\n\n  static normalizeScrollYOffset(value: RedocRawOptions['scrollYOffset']): () => number {\n    // just number is not valid selector and leads to crash so checking if isNumeric here\n    if (typeof value === 'string' && !isNumeric(value)) {\n      const el = querySelector(value);\n      if (!el) {\n        console.warn(\n          'scrollYOffset value is a selector to non-existing element. Using offset 0 by default',\n        );\n      }\n      const bottom = (el && el.getBoundingClientRect().bottom) || 0;\n      return () => bottom;\n    } else if (typeof value === 'number' || isNumeric(value)) {\n      return () => (typeof value === 'number' ? value : parseFloat(value));\n    } else if (typeof value === 'function') {\n      return () => {\n        const res = value();\n        if (typeof res !== 'number') {\n          console.warn(\n            `scrollYOffset should return number but returned value \"${res}\" of type ${typeof res}`,\n          );\n        }\n        return res;\n      };\n    } else if (value !== undefined) {\n      console.warn(\n        'Wrong value for scrollYOffset ReDoc option: should be string, number or function',\n      );\n    }\n\n    return () => 0;\n  }\n\n  static normalizeShowExtensions(value: RedocRawOptions['showExtensions']): string[] | boolean {\n    if (typeof value === 'undefined') {\n      return false;\n    }\n    if (value === '') {\n      return true;\n    }\n\n    if (typeof value !== 'string') {\n      return value;\n    }\n\n    switch (value) {\n      case 'true':\n        return true;\n      case 'false':\n        return false;\n      default:\n        return value.split(',').map(ext => ext.trim());\n    }\n  }\n\n  static normalizeSideNavStyle(value: RedocRawOptions['sideNavStyle']): SideNavStyleEnum {\n    const defaultValue = SideNavStyleEnum.SummaryOnly;\n    if (typeof value !== 'string') {\n      return defaultValue;\n    }\n\n    switch (value) {\n      case defaultValue:\n        return value;\n      case SideNavStyleEnum.PathOnly:\n        return SideNavStyleEnum.PathOnly;\n      case SideNavStyleEnum.IdOnly:\n        return SideNavStyleEnum.IdOnly;\n      default:\n        return defaultValue;\n    }\n  }\n\n  static normalizePayloadSampleIdx(value: RedocRawOptions['payloadSampleIdx']): number {\n    if (typeof value === 'number') {\n      return Math.max(0, value); // always greater or equal than 0\n    }\n\n    if (typeof value === 'string') {\n      return isFinite(value) ? parseInt(value, 10) : 0;\n    }\n\n    return 0;\n  }\n\n  private static normalizeJsonSampleExpandLevel(level?: number | string | 'all'): number {\n    if (level === 'all') {\n      return +Infinity;\n    }\n    if (!isNaN(Number(level))) {\n      return Math.ceil(Number(level));\n    }\n    return 2;\n  }\n\n  private static normalizeGeneratedPayloadSamplesMaxDepth(\n    value?: number | string | undefined,\n  ): number {\n    if (!isNaN(Number(value))) {\n      return Math.max(0, Number(value));\n    }\n\n    return 10;\n  }\n\n  theme: ResolvedThemeInterface;\n  scrollYOffset: () => number;\n  hideHostname: boolean;\n  expandResponses: { [code: string]: boolean } | 'all';\n  sortRequiredPropsFirst: boolean;\n  sortPropsAlphabetically: boolean;\n  sortEnumValuesAlphabetically: boolean;\n  sortOperationsAlphabetically: boolean;\n  sortTagsAlphabetically: boolean;\n  nativeScrollbars: boolean;\n  pathInMiddlePanel: boolean;\n  sanitize: boolean;\n  hideDownloadButtons: boolean;\n  downloadFileName?: string;\n  downloadDefinitionUrl?: string;\n  downloadUrls?: DownloadUrlsConfig;\n  disableSearch: boolean;\n  onlyRequiredInSamples: boolean;\n  showExtensions: boolean | string[];\n  sideNavStyle: SideNavStyleEnum;\n  hideSingleRequestSampleTab: boolean;\n  hideRequestPayloadSample: boolean;\n  menuToggle: boolean;\n  jsonSamplesExpandLevel: number;\n  enumSkipQuotes: boolean;\n  hideSchemaTitles: boolean;\n  simpleOneOfTypeLabel: boolean;\n  payloadSampleIdx: number;\n  expandSingleSchemaField: boolean;\n  schemasExpansionLevel: number;\n  schemaDefinitionsTagName?: string;\n  showObjectSchemaExamples: boolean;\n  showSecuritySchemeType?: boolean;\n  hideSecuritySection?: boolean;\n\n  /* tslint:disable-next-line */\n  unstable_ignoreMimeParameters: boolean;\n  allowedMdComponents: Record<string, MDXComponentMeta>;\n\n  expandDefaultServerVariables: boolean;\n  maxDisplayedEnumValues?: number;\n\n  ignoreNamedSchemas: Set<string>;\n  hideSchemaPattern: boolean;\n  generatedSamplesMaxDepth: number;\n  hideFab: boolean;\n  minCharacterLengthToInitSearch: number;\n  showWebhookVerb: boolean;\n  hidePropertiesPrefix?: boolean;\n\n  nonce?: string;\n\n  constructor(raw: RedocRawOptions, defaults: RedocRawOptions = {}) {\n    raw = { ...defaults, ...raw };\n    const hook = raw.theme && raw.theme.extensionsHook;\n\n    // migrate from old theme\n    if ((raw.theme as any)?.menu && !raw.theme?.sidebar) {\n      console.warn('Theme setting \"menu\" is deprecated. Rename to \"sidebar\"');\n      raw.theme!.sidebar = (raw.theme as any).menu;\n    }\n\n    if ((raw.theme as any)?.codeSample && !raw.theme?.codeBlock) {\n      console.warn('Theme setting \"codeSample\" is deprecated. Rename to \"codeBlock\"');\n      raw.theme!.codeBlock = (raw.theme as any).codeSample;\n    }\n\n    this.theme = resolveTheme(\n      mergeObjects({} as any, defaultTheme, { ...raw.theme, extensionsHook: undefined }),\n    );\n\n    this.theme.extensionsHook = hook as any;\n\n    // do not support dynamic labels changes. Labels should be configured before\n    setRedocLabels(raw.labels);\n\n    this.scrollYOffset = RedocNormalizedOptions.normalizeScrollYOffset(raw.scrollYOffset);\n    this.hideHostname = RedocNormalizedOptions.normalizeHideHostname(raw.hideHostname);\n    this.expandResponses = RedocNormalizedOptions.normalizeExpandResponses(raw.expandResponses);\n    this.sortRequiredPropsFirst = argValueToBoolean(\n      raw.sortRequiredPropsFirst || raw.requiredPropsFirst,\n    );\n    this.sortPropsAlphabetically = argValueToBoolean(raw.sortPropsAlphabetically);\n    this.sortEnumValuesAlphabetically = argValueToBoolean(raw.sortEnumValuesAlphabetically);\n    this.sortOperationsAlphabetically = argValueToBoolean(raw.sortOperationsAlphabetically);\n    this.sortTagsAlphabetically = argValueToBoolean(raw.sortTagsAlphabetically);\n    this.nativeScrollbars = argValueToBoolean(raw.nativeScrollbars);\n    this.pathInMiddlePanel = argValueToBoolean(raw.pathInMiddlePanel);\n    this.sanitize = argValueToBoolean(raw.sanitize || raw.untrustedSpec);\n    this.hideDownloadButtons = argValueToBoolean(raw.hideDownloadButtons || raw.hideDownloadButton);\n    this.downloadFileName = raw.downloadFileName;\n    this.downloadDefinitionUrl = raw.downloadDefinitionUrl;\n    this.downloadUrls = raw.downloadUrls;\n    this.disableSearch = argValueToBoolean(raw.disableSearch);\n    this.onlyRequiredInSamples = argValueToBoolean(raw.onlyRequiredInSamples);\n    this.showExtensions = RedocNormalizedOptions.normalizeShowExtensions(raw.showExtensions);\n    this.sideNavStyle = RedocNormalizedOptions.normalizeSideNavStyle(raw.sideNavStyle);\n    this.hideSingleRequestSampleTab = argValueToBoolean(raw.hideSingleRequestSampleTab);\n    this.hideRequestPayloadSample = argValueToBoolean(raw.hideRequestPayloadSample);\n    this.menuToggle = argValueToBoolean(raw.menuToggle, true);\n    this.jsonSamplesExpandLevel = RedocNormalizedOptions.normalizeJsonSampleExpandLevel(\n      raw.jsonSamplesExpandLevel || raw.jsonSampleExpandLevel,\n    );\n    this.enumSkipQuotes = argValueToBoolean(raw.enumSkipQuotes);\n    this.hideSchemaTitles = argValueToBoolean(raw.hideSchemaTitles);\n    this.simpleOneOfTypeLabel = argValueToBoolean(raw.simpleOneOfTypeLabel);\n    this.payloadSampleIdx = RedocNormalizedOptions.normalizePayloadSampleIdx(raw.payloadSampleIdx);\n    this.expandSingleSchemaField = argValueToBoolean(raw.expandSingleSchemaField);\n    this.schemasExpansionLevel = argValueToExpandLevel(\n      raw.schemasExpansionLevel || raw.schemaExpansionLevel,\n    );\n    this.schemaDefinitionsTagName = raw.schemaDefinitionsTagName;\n    this.showObjectSchemaExamples = argValueToBoolean(raw.showObjectSchemaExamples);\n    this.showSecuritySchemeType = argValueToBoolean(raw.showSecuritySchemeType);\n    this.hideSecuritySection = argValueToBoolean(raw.hideSecuritySection);\n\n    this.unstable_ignoreMimeParameters = argValueToBoolean(raw.unstable_ignoreMimeParameters);\n\n    this.allowedMdComponents = raw.allowedMdComponents || {};\n\n    this.expandDefaultServerVariables = argValueToBoolean(raw.expandDefaultServerVariables);\n    this.maxDisplayedEnumValues = argValueToNumber(raw.maxDisplayedEnumValues);\n    const ignoreNamedSchemas = isArray(raw.ignoreNamedSchemas)\n      ? raw.ignoreNamedSchemas\n      : raw.ignoreNamedSchemas?.split(',').map(s => s.trim());\n    this.ignoreNamedSchemas = new Set(ignoreNamedSchemas);\n    this.hideSchemaPattern = argValueToBoolean(raw.hideSchemaPattern);\n    this.generatedSamplesMaxDepth = RedocNormalizedOptions.normalizeGeneratedPayloadSamplesMaxDepth(\n      raw.generatedSamplesMaxDepth || raw.generatedPayloadSamplesMaxDepth,\n    );\n    this.nonce = raw.nonce;\n    this.hideFab = argValueToBoolean(raw.hideFab);\n    this.minCharacterLengthToInitSearch = argValueToNumber(raw.minCharacterLengthToInitSearch) || 3;\n    this.showWebhookVerb = argValueToBoolean(raw.showWebhookVerb);\n    this.hidePropertiesPrefix = argValueToBoolean(raw.hidePropertiesPrefix, true);\n  }\n}\n",null,"import * as styledComponents from 'styled-components';\n\nimport type { ResolvedThemeInterface } from './theme';\n\nexport type { ResolvedThemeInterface };\n\nconst {\n  default: styled,\n  css,\n  createGlobalStyle,\n  keyframes,\n  ThemeProvider,\n} = styledComponents as unknown as styledComponents.ThemedStyledComponentsModule<ResolvedThemeInterface>;\n\nexport const media = {\n  lessThan(breakpoint, print?: boolean, extra?: string) {\n    return (...args) => css`\n      @media ${print ? 'print, ' : ''} screen and (max-width: ${props =>\n          props.theme.breakpoints[breakpoint]}) ${extra || ''} {\n        ${(css as any)(...args)};\n      }\n    `;\n  },\n\n  greaterThan(breakpoint) {\n    return (...args) => css`\n      @media (min-width: ${props => props.theme.breakpoints[breakpoint]}) {\n        ${(css as any)(...args)};\n      }\n    `;\n  },\n\n  between(firstBreakpoint, secondBreakpoint) {\n    return (...args) => css`\n      @media (min-width: ${props =>\n          props.theme.breakpoints[firstBreakpoint]}) and (max-width: ${props =>\n          props.theme.breakpoints[secondBreakpoint]}) {\n        ${(css as any)(...args)};\n      }\n    `;\n  },\n};\n\nexport { css, createGlobalStyle, keyframes, ThemeProvider };\nexport default styled;\n\nexport function extensionsHook(styledName: string) {\n  return props => {\n    if (!props.theme.extensionsHook) {\n      return;\n    }\n    return props.theme.extensionsHook(styledName, props);\n  };\n}\n","import * as React from 'react';\nimport styled from '../styled-components';\n\nconst ErrorWrapper = styled.div`\n  padding: 20px;\n  color: red;\n`;\n\nexport class ErrorBoundary extends React.Component<\n  React.PropsWithChildren<unknown>,\n  { error?: Error }\n> {\n  constructor(props) {\n    super(props);\n    this.state = { error: undefined };\n  }\n\n  componentDidCatch(error) {\n    this.setState({ error });\n    return false;\n  }\n\n  render() {\n    if (this.state.error) {\n      return (\n        <ErrorWrapper>\n          <h1>Something went wrong...</h1>\n          <small> {this.state.error.message} </small>\n          <p>\n            <details>\n              <summary>Stack trace</summary>\n              <pre>{this.state.error.stack}</pre>\n            </details>\n          </p>\n          <small> ReDoc Version: {__REDOC_VERSION__}</small> <br />\n          <small> Commit: {__REDOC_REVISION__}</small>\n        </ErrorWrapper>\n      );\n    }\n    return <React.Fragment>{React.Children.only(this.props.children)}</React.Fragment>;\n  }\n}\n","import * as React from 'react';\nimport styled, { keyframes } from '../../styled-components';\n\nconst _Spinner = (props: { className?: string; color: string }) => (\n  <svg className={props.className} version=\"1.1\" width=\"512\" height=\"512\" viewBox=\"0 0 512 512\">\n    <path d=\"M275.682 147.999c0 10.864-8.837 19.661-19.682 19.661v0c-10.875 0-19.681-8.796-19.681-19.661v-96.635c0-10.885 8.806-19.661 19.681-19.661v0c10.844 0 19.682 8.776 19.682 19.661v96.635z\" />\n    <path d=\"M275.682 460.615c0 10.865-8.837 19.682-19.682 19.682v0c-10.875 0-19.681-8.817-19.681-19.682v-96.604c0-10.885 8.806-19.681 19.681-19.681v0c10.844 0 19.682 8.796 19.682 19.682v96.604z\" />\n    <path d=\"M147.978 236.339c10.885 0 19.681 8.755 19.681 19.641v0c0 10.885-8.796 19.702-19.681 19.702h-96.624c-10.864 0-19.661-8.817-19.661-19.702v0c0-10.885 8.796-19.641 19.661-19.641h96.624z\" />\n    <path d=\"M460.615 236.339c10.865 0 19.682 8.755 19.682 19.641v0c0 10.885-8.817 19.702-19.682 19.702h-96.584c-10.885 0-19.722-8.817-19.722-19.702v0c0-10.885 8.837-19.641 19.722-19.641h96.584z\" />\n    <path d=\"M193.546 165.703c7.69 7.66 7.68 20.142 0 27.822v0c-7.701 7.701-20.162 7.701-27.853 0.020l-68.311-68.322c-7.68-7.701-7.68-20.142 0-27.863v0c7.68-7.68 20.121-7.68 27.822 0l68.342 68.342z\" />\n    <path d=\"M414.597 386.775c7.7 7.68 7.7 20.163 0.021 27.863v0c-7.7 7.659-20.142 7.659-27.843-0.062l-68.311-68.26c-7.68-7.7-7.68-20.204 0-27.863v0c7.68-7.7 20.163-7.7 27.842 0l68.291 68.322z\" />\n    <path d=\"M165.694 318.464c7.69-7.7 20.153-7.7 27.853 0v0c7.68 7.659 7.69 20.163 0 27.863l-68.342 68.322c-7.67 7.659-20.142 7.659-27.822-0.062v0c-7.68-7.68-7.68-20.122 0-27.801l68.311-68.322z\" />\n    <path d=\"M386.775 97.362c7.7-7.68 20.142-7.68 27.822 0v0c7.7 7.68 7.7 20.183 0.021 27.863l-68.322 68.311c-7.68 7.68-20.163 7.68-27.843-0.020v0c-7.68-7.68-7.68-20.162 0-27.822l68.322-68.332z\" />\n  </svg>\n);\n\nconst rotate = keyframes`\n  0% {\n    transform: rotate(0deg); }\n  100% {\n    transform: rotate(360deg);\n  }\n`;\n\nexport const Spinner = styled(_Spinner)`\n  animation: 2s ${rotate} linear infinite;\n  width: 50px;\n  height: 50px;\n  content: '';\n  display: inline-block;\n  margin-left: -25px;\n\n  path {\n    fill: ${props => props.color};\n  }\n`;\n","import * as React from 'react';\nimport styled from '../../styled-components';\n\nimport { Spinner } from './Spinner.svg';\n\nconst LoadingMessage = styled.div<{ color: string }>`\n  font-family: helvetica, sans;\n  width: 100%;\n  text-align: center;\n  font-size: 25px;\n  margin: 30px 0 20px 0;\n  color: ${props => props.color};\n`;\n\nexport interface LoadingProps {\n  color: string;\n}\n\nexport class Loading extends React.PureComponent<LoadingProps> {\n  render() {\n    return (\n      <div style={{ textAlign: 'center' }}>\n        <LoadingMessage color={this.props.color}>Loading ...</LoadingMessage>\n        <Spinner color={this.props.color} />\n      </div>\n    );\n  }\n}\n",null,"import * as React from 'react';\n\nimport { RedocNormalizedOptions } from '../services/RedocNormalizedOptions';\n\nexport const OptionsContext = React.createContext(new RedocNormalizedOptions({}));\nexport const OptionsProvider = OptionsContext.Provider;\nexport const OptionsConsumer = OptionsContext.Consumer;\n",null,null,null,"import type { Source, Document } from '@redocly/openapi-core';\n// eslint-disable-next-line import/no-internal-modules\nimport type { ResolvedConfig } from '@redocly/openapi-core/lib/config';\n\n// eslint-disable-next-line import/no-internal-modules\nimport { bundle } from '@redocly/openapi-core/lib/bundle';\n// eslint-disable-next-line import/no-internal-modules\nimport { Config } from '@redocly/openapi-core/lib/config/config';\n\n/* tslint:disable-next-line:no-implicit-dependencies */\nimport { convertObj } from 'swagger2openapi';\nimport { OpenAPISpec } from '../types';\nimport { IS_BROWSER } from './dom';\n\nexport async function loadAndBundleSpec(specUrlOrObject: object | string): Promise<OpenAPISpec> {\n  const config = new Config({} as ResolvedConfig);\n  const bundleOpts = {\n    config,\n    base: IS_BROWSER ? window.location.href : process.cwd(),\n  };\n\n  if (IS_BROWSER) {\n    config.resolve.http.customFetch = global.fetch;\n  }\n\n  if (typeof specUrlOrObject === 'object' && specUrlOrObject !== null) {\n    bundleOpts['doc'] = {\n      source: { absoluteRef: '' } as Source,\n      parsed: specUrlOrObject,\n    } as Document;\n  } else {\n    bundleOpts['ref'] = specUrlOrObject;\n  }\n\n  const {\n    bundle: { parsed },\n  } = await bundle(bundleOpts);\n  return parsed.swagger !== undefined ? convertSwagger2OpenAPI(parsed) : parsed;\n}\n\nexport function convertSwagger2OpenAPI(spec: any): Promise<OpenAPISpec> {\n  console.warn('[ReDoc Compatibility mode]: Converting OpenAPI 2.0 to OpenAPI 3.0');\n  return new Promise<OpenAPISpec>((resolve, reject) =>\n    convertObj(spec, { patch: true, warnOnly: true, text: '{}', anchors: true }, (err, res) => {\n      // TODO: log any warnings\n      if (err) {\n        return reject(err);\n      }\n      resolve(res && (res.openapi as any));\n    }),\n  );\n}\n",null,null,null,"'use strict';\nimport * as JsonPointerLib from 'json-pointer';\n\nconst origParse = JsonPointerLib.parse;\n/**\n * Wrapper for JsonPointer. Provides common operations\n */\n\nexport class JsonPointer {\n  /**\n   * returns last JsonPointer token\n   * if level > 1 returns levels last (second last/third last)\n   * @example\n   * // returns subpath\n   * JsonPointerHelper.baseName('/path/0/subpath')\n   * // returns foo\n   * JsonPointerHelper.baseName('/path/foo/subpath', 2)\n   */\n  static baseName(pointer, level = 1) {\n    const tokens = JsonPointer.parse(pointer);\n    return tokens[tokens.length - level];\n  }\n\n  /**\n   * returns dirname of pointer\n   * if level > 1 returns corresponding dirname in the hierarchy\n   * @example\n   * // returns /path/0\n   * JsonPointerHelper.dirName('/path/0/subpath')\n   * // returns /path\n   * JsonPointerHelper.dirName('/path/foo/subpath', 2)\n   */\n  static dirName(pointer, level = 1) {\n    const tokens = JsonPointer.parse(pointer);\n    return JsonPointerLib.compile(tokens.slice(0, tokens.length - level));\n  }\n\n  /**\n   * returns relative path tokens\n   * @example\n   * // returns ['subpath']\n   * JsonPointerHelper.relative('/path/0', '/path/0/subpath')\n   * // returns ['foo', 'subpath']\n   * JsonPointerHelper.relative('/path', '/path/foo/subpath')\n   */\n  static relative(from, to): string[] {\n    const fromTokens = JsonPointer.parse(from);\n    const toTokens = JsonPointer.parse(to);\n    return toTokens.slice(fromTokens.length);\n  }\n\n  /**\n   * overridden JsonPointer original parse to take care of prefixing '#' symbol\n   * that is not valid JsonPointer\n   */\n  static parse(pointer) {\n    let ptr = pointer;\n    if (ptr.charAt(0) === '#') {\n      ptr = ptr.substring(1);\n    }\n    return origParse(ptr);\n  }\n\n  /**\n   * Creates a JSON pointer path, by joining one or more tokens to a base path.\n   *\n   * @param {string} base - The base path\n   * @param {string|string[]} tokens - The token(s) to append (e.g. [\"name\", \"first\"])\n   * @returns {string}\n   */\n  static join(base, tokens) {\n    // TODO: optimize\n    const baseTokens = JsonPointer.parse(base);\n    const resTokens = baseTokens.concat(tokens);\n    return JsonPointerLib.compile(resTokens);\n  }\n\n  static get(object: object, pointer: string) {\n    return JsonPointerLib.get(object, pointer);\n  }\n\n  static compile(tokens: string[]) {\n    return JsonPointerLib.compile(tokens);\n  }\n\n  static escape(pointer: string) {\n    return JsonPointerLib.escape(pointer);\n  }\n}\n(JsonPointerLib as any).parse = JsonPointer.parse;\nObject.assign(JsonPointer, JsonPointerLib);\nexport default JsonPointer;\n",null,"import { dirname } from 'path';\nimport * as URLtemplate from 'url-template';\n\nimport { ExtendedOpenAPIOperation } from '../services';\nimport { FieldModel } from '../services/models';\nimport { OpenAPIParser } from '../services/OpenAPIParser';\nimport {\n  OpenAPIEncoding,\n  OpenAPIMediaType,\n  OpenAPIParameter,\n  OpenAPIParameterStyle,\n  OpenAPIRequestBody,\n  OpenAPIResponse,\n  OpenAPISchema,\n  OpenAPIServer,\n  Referenced,\n} from '../types';\nimport { IS_BROWSER } from './dom';\nimport { isNumeric, removeQueryStringAndHash, resolveUrl, isArray, isBoolean } from './helpers';\n\nfunction isWildcardStatusCode(statusCode: string | number): statusCode is string {\n  return typeof statusCode === 'string' && /\\dxx/i.test(statusCode);\n}\n\nexport function isStatusCode(statusCode: string) {\n  return statusCode === 'default' || isNumeric(statusCode) || isWildcardStatusCode(statusCode);\n}\n\nexport function getStatusCodeType(statusCode: string | number, defaultAsError = false): string {\n  if (statusCode === 'default') {\n    return defaultAsError ? 'error' : 'success';\n  }\n\n  let code = typeof statusCode === 'string' ? parseInt(statusCode, 10) : statusCode;\n  if (isWildcardStatusCode(statusCode)) {\n    code *= 100; // parseInt('2xx') parses to 2\n  }\n\n  if (code < 100 || code > 599) {\n    throw new Error('invalid HTTP code');\n  }\n  let res = 'success';\n  if (code >= 300 && code < 400) {\n    res = 'redirect';\n  } else if (code >= 400) {\n    res = 'error';\n  } else if (code < 200) {\n    res = 'info';\n  }\n  return res;\n}\n\nconst operationNames = {\n  get: true,\n  post: true,\n  put: true,\n  head: true,\n  patch: true,\n  delete: true,\n  options: true,\n  $ref: true,\n};\n\nexport function isOperationName(key: string): boolean {\n  return key in operationNames;\n}\n\nexport function getOperationSummary(operation: ExtendedOpenAPIOperation): string {\n  return (\n    operation.summary ||\n    operation.operationId ||\n    (operation.description && operation.description.substring(0, 50)) ||\n    operation.pathName ||\n    '<no summary>'\n  );\n}\n\nconst schemaKeywordTypes = {\n  multipleOf: 'number',\n  maximum: 'number',\n  exclusiveMaximum: 'number',\n  minimum: 'number',\n  exclusiveMinimum: 'number',\n\n  maxLength: 'string',\n  minLength: 'string',\n  pattern: 'string',\n  contentEncoding: 'string',\n  contentMediaType: 'string',\n\n  items: 'array',\n  maxItems: 'array',\n  minItems: 'array',\n  uniqueItems: 'array',\n\n  maxProperties: 'object',\n  minProperties: 'object',\n  required: 'object',\n  additionalProperties: 'object',\n  unevaluatedProperties: 'object',\n  properties: 'object',\n  patternProperties: 'object',\n};\n\nexport function detectType(schema: OpenAPISchema): string {\n  if (schema.type !== undefined && !isArray(schema.type)) {\n    return schema.type;\n  }\n  const keywords = Object.keys(schemaKeywordTypes);\n  for (const keyword of keywords) {\n    const type = schemaKeywordTypes[keyword];\n    if (schema[keyword] !== undefined) {\n      return type;\n    }\n  }\n\n  return 'any';\n}\n\nexport function isPrimitiveType(\n  schema: OpenAPISchema,\n  type: string | string[] | undefined = schema.type,\n) {\n  if (schema['x-circular-ref']) {\n    return true;\n  }\n\n  if (schema.oneOf !== undefined || schema.anyOf !== undefined) {\n    return false;\n  }\n\n  if ((schema.if && schema.then) || (schema.if && schema.else)) {\n    return false;\n  }\n\n  let isPrimitive = true;\n  const isArrayType = isArray(type);\n\n  if (type === 'object' || (isArrayType && type?.includes('object'))) {\n    isPrimitive =\n      schema.properties !== undefined\n        ? Object.keys(schema.properties).length === 0\n        : schema.additionalProperties === undefined &&\n          schema.unevaluatedProperties === undefined &&\n          schema.patternProperties === undefined;\n  }\n\n  if (isArray(schema.items) || isArray(schema.prefixItems)) {\n    return false;\n  }\n\n  if (\n    schema.items !== undefined &&\n    !isBoolean(schema.items) &&\n    (type === 'array' || (isArrayType && type?.includes('array')))\n  ) {\n    isPrimitive = isPrimitiveType(schema.items, schema.items.type);\n  }\n\n  return isPrimitive;\n}\n\nexport function isJsonLike(contentType: string): boolean {\n  return contentType.search(/json/i) !== -1;\n}\n\nexport function isFormUrlEncoded(contentType: string): boolean {\n  return contentType === 'application/x-www-form-urlencoded';\n}\n\nfunction delimitedEncodeField(fieldVal: any, fieldName: string, delimiter: string): string {\n  if (isArray(fieldVal)) {\n    return fieldVal.map(v => v.toString()).join(delimiter);\n  } else if (typeof fieldVal === 'object') {\n    return Object.keys(fieldVal)\n      .map(k => `${k}${delimiter}${fieldVal[k]}`)\n      .join(delimiter);\n  } else {\n    return fieldName + '=' + fieldVal.toString();\n  }\n}\n\nfunction deepObjectEncodeField(fieldVal: any, fieldName: string): string {\n  if (isArray(fieldVal)) {\n    console.warn('deepObject style cannot be used with array value:' + fieldVal.toString());\n    return '';\n  } else if (typeof fieldVal === 'object') {\n    return Object.keys(fieldVal)\n      .map(k => `${fieldName}[${k}]=${fieldVal[k]}`)\n      .join('&');\n  } else {\n    console.warn('deepObject style cannot be used with non-object value:' + fieldVal.toString());\n    return '';\n  }\n}\n\nfunction serializeFormValue(name: string, explode: boolean, value: any) {\n  // Use RFC6570 safe name ([a-zA-Z0-9_]) and replace with our name later\n  // e.g. URI.template doesn't parse names with hyphen (-) which are valid query param names\n  const safeName = '__redoc_param_name__';\n  const suffix = explode ? '*' : '';\n  const template = URLtemplate.parse(`{?${safeName}${suffix}}`);\n  return template\n    .expand({ [safeName]: value })\n    .substring(1)\n    .replace(/__redoc_param_name__/g, name);\n}\n\n/*\n * Should be used only for url-form-encoded body payloads\n * To be used for parameters should be extended with other style values\n */\nexport function urlFormEncodePayload(\n  payload: object,\n  encoding: { [field: string]: OpenAPIEncoding } = {},\n) {\n  if (isArray(payload)) {\n    throw new Error('Payload must have fields: ' + payload.toString());\n  } else {\n    return Object.keys(payload)\n      .map(fieldName => {\n        const fieldVal = payload[fieldName];\n        const { style = 'form', explode = true } = encoding[fieldName] || {};\n        switch (style) {\n          case 'form':\n            return serializeFormValue(fieldName, explode, fieldVal);\n          case 'spaceDelimited':\n            return delimitedEncodeField(fieldVal, fieldName, '%20');\n          case 'pipeDelimited':\n            return delimitedEncodeField(fieldVal, fieldName, '|');\n          case 'deepObject':\n            return deepObjectEncodeField(fieldVal, fieldName);\n          default:\n            // TODO implement rest of styles for path parameters\n            console.warn('Incorrect or unsupported encoding style: ' + style);\n            return '';\n        }\n      })\n      .join('&');\n  }\n}\n\nfunction serializePathParameter(\n  name: string,\n  style: OpenAPIParameterStyle,\n  explode: boolean,\n  value: any,\n): string {\n  const suffix = explode ? '*' : '';\n  let prefix = '';\n\n  if (style === 'label') {\n    prefix = '.';\n  } else if (style === 'matrix') {\n    prefix = ';';\n  }\n\n  // Use RFC6570 safe name ([a-zA-Z0-9_]) and replace with our name later\n  // e.g. URI.template doesn't parse names with hyphen (-) which are valid query param names\n  const safeName = '__redoc_param_name__';\n  const template = URLtemplate.parse(`{${prefix}${safeName}${suffix}}`);\n\n  return template.expand({ [safeName]: value }).replace(/__redoc_param_name__/g, name);\n}\n\nfunction serializeQueryParameter(\n  name: string,\n  style: OpenAPIParameterStyle,\n  explode: boolean,\n  value: any,\n): string {\n  switch (style) {\n    case 'form':\n      return serializeFormValue(name, explode, value);\n    case 'spaceDelimited':\n      if (!isArray(value)) {\n        console.warn('The style spaceDelimited is only applicable to arrays');\n        return '';\n      }\n      if (explode) {\n        return serializeFormValue(name, explode, value);\n      }\n\n      return `${name}=${value.join('%20')}`;\n    case 'pipeDelimited':\n      if (!isArray(value)) {\n        console.warn('The style pipeDelimited is only applicable to arrays');\n        return '';\n      }\n      if (explode) {\n        return serializeFormValue(name, explode, value);\n      }\n\n      return `${name}=${value.join('|')}`;\n    case 'deepObject':\n      if (!explode || isArray(value) || typeof value !== 'object') {\n        console.warn('The style deepObject is only applicable for objects with explode=true');\n        return '';\n      }\n\n      return deepObjectEncodeField(value, name);\n    default:\n      console.warn('Unexpected style for query: ' + style);\n      return '';\n  }\n}\n\nfunction serializeHeaderParameter(\n  style: OpenAPIParameterStyle,\n  explode: boolean,\n  value: any,\n): string {\n  switch (style) {\n    case 'simple':\n      const suffix = explode ? '*' : '';\n\n      // name is not important here, so use RFC6570 safe name ([a-zA-Z0-9_])\n      const name = '__redoc_param_name__';\n      const template = URLtemplate.parse(`{${name}${suffix}}`);\n      return decodeURIComponent(template.expand({ [name]: value }));\n    default:\n      console.warn('Unexpected style for header: ' + style);\n      return '';\n  }\n}\n\nfunction serializeCookieParameter(\n  name: string,\n  style: OpenAPIParameterStyle,\n  explode: boolean,\n  value: any,\n): string {\n  switch (style) {\n    case 'form':\n      return serializeFormValue(name, explode, value);\n    default:\n      console.warn('Unexpected style for cookie: ' + style);\n      return '';\n  }\n}\n\nexport function serializeParameterValueWithMime(value: any, mime: string): string {\n  if (isJsonLike(mime)) {\n    return JSON.stringify(value);\n  } else {\n    console.warn(`Parameter serialization as ${mime} is not supported`);\n    return '';\n  }\n}\n\nexport function serializeParameterValue(\n  parameter: (OpenAPIParameter & { serializationMime?: string }) | FieldModel,\n  value: any,\n): string {\n  const { name, style, explode = false, serializationMime } = parameter;\n\n  if (serializationMime) {\n    switch (parameter.in) {\n      case 'path':\n      case 'header':\n        return serializeParameterValueWithMime(value, serializationMime);\n      case 'cookie':\n      case 'query':\n        return `${name}=${serializeParameterValueWithMime(value, serializationMime)}`;\n      default:\n        console.warn('Unexpected parameter location: ' + parameter.in);\n        return '';\n    }\n  }\n\n  if (!style) {\n    console.warn(`Missing style attribute or content for parameter ${name}`);\n    return '';\n  }\n\n  switch (parameter.in) {\n    case 'path':\n      return serializePathParameter(name, style, explode, value);\n    case 'query':\n      return serializeQueryParameter(name, style, explode, value);\n    case 'header':\n      return serializeHeaderParameter(style, explode, value);\n    case 'cookie':\n      return serializeCookieParameter(name, style, explode, value);\n    default:\n      console.warn('Unexpected parameter location: ' + parameter.in);\n      return '';\n  }\n}\n\nexport function getSerializedValue(field: FieldModel, example: any) {\n  if (field.in) {\n    // decode for better readability in examples: see https://github.com/Redocly/redoc/issues/1138\n    return decodeURIComponent(serializeParameterValue(field, example));\n  } else {\n    return typeof example === 'object' ? example : String(example);\n  }\n}\n\nexport function langFromMime(contentType: string): string {\n  if (contentType.search(/xml/i) !== -1) {\n    return 'xml';\n  }\n\n  if (contentType.search(/csv/i) !== -1) {\n    return 'csv';\n  }\n\n  if (contentType.search(/plain/i) !== -1) {\n    return 'tex';\n  }\n\n  return 'clike';\n}\n\nconst DEFINITION_NAME_REGEX = /^#\\/components\\/(schemas|pathItems)\\/([^/]+)$/;\n\nexport function isNamedDefinition(pointer?: string): boolean {\n  return DEFINITION_NAME_REGEX.test(pointer || '');\n}\n\nexport function getDefinitionName(pointer?: string): string | undefined {\n  const [name] = pointer?.match(DEFINITION_NAME_REGEX)?.reverse() || [];\n  return name;\n}\n\nfunction humanizeMultipleOfConstraint(multipleOf: number | undefined): string | undefined {\n  if (multipleOf === undefined) {\n    return;\n  }\n  const strigifiedMultipleOf = multipleOf.toString(10);\n  if (!/^0\\.0*1$/.test(strigifiedMultipleOf)) {\n    return `multiple of ${strigifiedMultipleOf}`;\n  }\n  return `decimal places <= ${strigifiedMultipleOf.split('.')[1].length}`;\n}\n\nfunction humanizeRangeConstraint(\n  description: string,\n  min: number | undefined,\n  max: number | undefined,\n): string | undefined {\n  let stringRange;\n  if (min !== undefined && max !== undefined) {\n    if (min === max) {\n      stringRange = `= ${min} ${description}`;\n    } else {\n      stringRange = `[ ${min} .. ${max} ] ${description}`;\n    }\n  } else if (max !== undefined) {\n    stringRange = `<= ${max} ${description}`;\n  } else if (min !== undefined) {\n    if (min === 1) {\n      stringRange = 'non-empty';\n    } else {\n      stringRange = `>= ${min} ${description}`;\n    }\n  }\n\n  return stringRange;\n}\n\nexport function humanizeNumberRange(schema: OpenAPISchema): string | undefined {\n  const minimum =\n    typeof schema.exclusiveMinimum === 'number'\n      ? Math.min(schema.exclusiveMinimum, schema.minimum ?? Infinity)\n      : schema.minimum;\n  const maximum =\n    typeof schema.exclusiveMaximum === 'number'\n      ? Math.max(schema.exclusiveMaximum, schema.maximum ?? -Infinity)\n      : schema.maximum;\n  const exclusiveMinimum = typeof schema.exclusiveMinimum === 'number' || schema.exclusiveMinimum;\n  const exclusiveMaximum = typeof schema.exclusiveMaximum === 'number' || schema.exclusiveMaximum;\n\n  if (minimum !== undefined && maximum !== undefined) {\n    return `${exclusiveMinimum ? '( ' : '[ '}${minimum} .. ${maximum}${\n      exclusiveMaximum ? ' )' : ' ]'\n    }`;\n  } else if (maximum !== undefined) {\n    return `${exclusiveMaximum ? '< ' : '<= '}${maximum}`;\n  } else if (minimum !== undefined) {\n    return `${exclusiveMinimum ? '> ' : '>= '}${minimum}`;\n  }\n}\n\nexport function humanizeConstraints(schema: OpenAPISchema): string[] {\n  const res: string[] = [];\n\n  const stringRange = humanizeRangeConstraint('characters', schema.minLength, schema.maxLength);\n  if (stringRange !== undefined) {\n    res.push(stringRange);\n  }\n\n  const arrayRange = humanizeRangeConstraint('items', schema.minItems, schema.maxItems);\n  if (arrayRange !== undefined) {\n    res.push(arrayRange);\n  }\n\n  const propertiesRange = humanizeRangeConstraint(\n    'properties',\n    schema.minProperties,\n    schema.maxProperties,\n  );\n  if (propertiesRange !== undefined) {\n    res.push(propertiesRange);\n  }\n\n  const multipleOfConstraint = humanizeMultipleOfConstraint(schema.multipleOf);\n  if (multipleOfConstraint !== undefined) {\n    res.push(multipleOfConstraint);\n  }\n\n  const numberRange = humanizeNumberRange(schema);\n  if (numberRange !== undefined) {\n    res.push(numberRange);\n  }\n\n  if (schema.uniqueItems) {\n    res.push('unique');\n  }\n\n  return res;\n}\n\nexport function sortByRequired(fields: FieldModel[], order: string[] = []) {\n  const unrequiredFields: FieldModel[] = [];\n  const orderedFields: FieldModel[] = [];\n  const unorderedFields: FieldModel[] = [];\n\n  fields.forEach(field => {\n    if (field.required) {\n      order.includes(field.name) ? orderedFields.push(field) : unorderedFields.push(field);\n    } else {\n      unrequiredFields.push(field);\n    }\n  });\n\n  orderedFields.sort((a, b) => order.indexOf(a.name) - order.indexOf(b.name));\n\n  return [...orderedFields, ...unorderedFields, ...unrequiredFields];\n}\n\nexport function sortByField(\n  fields: FieldModel[],\n  param: keyof Pick<FieldModel, 'name' | 'description' | 'kind'>,\n) {\n  return [...fields].sort((a, b) => {\n    return a[param].localeCompare(b[param]);\n  });\n}\n\nexport function mergeParams(\n  parser: OpenAPIParser,\n  pathParams: Array<Referenced<OpenAPIParameter>> = [],\n  operationParams: Array<Referenced<OpenAPIParameter>> = [],\n): Array<Referenced<OpenAPIParameter>> {\n  const operationParamNames = {};\n  operationParams.forEach(param => {\n    ({ resolved: param } = parser.deref(param));\n    operationParamNames[param.name + '_' + param.in] = true;\n  });\n\n  // filter out path params overridden by operation ones with the same name\n  pathParams = pathParams.filter(param => {\n    ({ resolved: param } = parser.deref(param));\n    return !operationParamNames[param.name + '_' + param.in];\n  });\n\n  return pathParams.concat(operationParams);\n}\n\nexport function mergeSimilarMediaTypes(\n  types: Record<string, OpenAPIMediaType>,\n): Record<string, OpenAPIMediaType> {\n  const mergedTypes = {};\n  Object.keys(types).forEach(name => {\n    const mime = types[name];\n    // ignore content type parameters (e.g. charset) and merge\n    const normalizedMimeName = name.split(';')[0].trim();\n    if (!mergedTypes[normalizedMimeName]) {\n      mergedTypes[normalizedMimeName] = mime;\n      return;\n    }\n    mergedTypes[normalizedMimeName] = { ...mergedTypes[normalizedMimeName], ...mime };\n  });\n\n  return mergedTypes;\n}\n\nexport function expandDefaultServerVariables(url: string, variables: object = {}) {\n  return url.replace(\n    /(?:{)([\\w-.]+)(?:})/g,\n    (match, name) => (variables[name] && variables[name].default) || match,\n  );\n}\n\nexport function normalizeServers(\n  specUrl: string | undefined,\n  servers: OpenAPIServer[],\n): OpenAPIServer[] {\n  const getHref = () => {\n    if (!IS_BROWSER) {\n      return '';\n    }\n    const href = window.location.href;\n    return href.endsWith('.html') ? dirname(href) : href;\n  };\n\n  const baseUrl = specUrl === undefined ? removeQueryStringAndHash(getHref()) : dirname(specUrl);\n\n  if (servers.length === 0) {\n    // Behaviour defined in OpenAPI spec: https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#openapi-object\n    servers = [\n      {\n        url: '/',\n      },\n    ];\n  }\n\n  function normalizeUrl(url: string): string {\n    return resolveUrl(baseUrl, url);\n  }\n\n  return servers.map(server => {\n    return {\n      ...server,\n      url: normalizeUrl(server.url),\n      description: server.description || '',\n    };\n  });\n}\n\nexport const SECURITY_DEFINITIONS_JSX_NAME = 'SecurityDefinitions';\nexport const OLD_SECURITY_DEFINITIONS_JSX_NAME = 'security-definitions';\nexport const SCHEMA_DEFINITION_JSX_NAME = 'SchemaDefinition';\n\nexport let SECURITY_SCHEMES_SECTION_PREFIX = 'section/Authentication/';\nexport function setSecuritySchemePrefix(prefix: string) {\n  SECURITY_SCHEMES_SECTION_PREFIX = prefix;\n}\n\nexport const shortenHTTPVerb = verb =>\n  ({\n    delete: 'del',\n    options: 'opts',\n  }[verb] || verb);\n\nexport function isRedocExtension(key: string): boolean {\n  const redocExtensions = {\n    'x-circular-ref': true,\n    'x-parentRefs': true,\n    'x-refsStack': true,\n    'x-code-samples': true, // deprecated\n    'x-codeSamples': true,\n    'x-displayName': true,\n    'x-examples': true,\n    'x-enumDescriptions': true,\n    'x-logo': true,\n    'x-nullable': true,\n    'x-servers': true,\n    'x-tagGroups': true,\n    'x-traitTag': true,\n    'x-badges': true,\n    'x-additionalPropertiesName': true,\n    'x-explicitMappingOnly': true,\n  };\n\n  return key in redocExtensions;\n}\n\nexport function extractExtensions(\n  obj: object,\n  showExtensions: string[] | true,\n): Record<string, any> {\n  return Object.keys(obj)\n    .filter(key => {\n      if (showExtensions === true) {\n        return key.startsWith('x-') && !isRedocExtension(key);\n      }\n      return key.startsWith('x-') && showExtensions.indexOf(key) > -1;\n    })\n    .reduce((acc, key) => {\n      acc[key] = obj[key];\n      return acc;\n    }, {});\n}\n\nexport function pluralizeType(displayType: string): string {\n  return displayType\n    .split(' or ')\n    .map(type => type.replace(/^(string|object|number|integer|array|boolean)s?( ?.*)/, '$1s$2'))\n    .join(' or ');\n}\n\nexport function getContentWithLegacyExamples(\n  info: OpenAPIRequestBody | OpenAPIResponse,\n): { [mime: string]: OpenAPIMediaType } | undefined {\n  let mediaContent = info.content;\n  const xExamples = info['x-examples']; // converted from OAS2 body param\n  const xExample = info['x-example']; // converted from OAS2 body param\n\n  if (xExamples) {\n    mediaContent = { ...mediaContent };\n    for (const mime of Object.keys(xExamples)) {\n      const examples = xExamples[mime];\n      mediaContent[mime] = {\n        ...mediaContent[mime],\n        examples,\n      };\n    }\n  } else if (xExample) {\n    mediaContent = { ...mediaContent };\n    for (const mime of Object.keys(xExample)) {\n      const example = xExample[mime];\n      mediaContent[mime] = {\n        ...mediaContent[mime],\n        example,\n      };\n    }\n  }\n\n  return mediaContent;\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"import * as Prism from 'prismjs';\nimport 'prismjs/components/prism-bash.js';\nimport 'prismjs/components/prism-c.js';\nimport 'prismjs/components/prism-clike.js';\nimport 'prismjs/components/prism-coffeescript.js';\nimport 'prismjs/components/prism-cpp.js';\nimport 'prismjs/components/prism-csharp.js';\nimport 'prismjs/components/prism-go.js';\nimport 'prismjs/components/prism-http.js';\nimport 'prismjs/components/prism-java.js';\nimport 'prismjs/components/prism-lua.js';\nimport 'prismjs/components/prism-markup-templating.js'; // dep of php\nimport 'prismjs/components/prism-markup.js'; // xml\nimport 'prismjs/components/prism-objectivec.js';\nimport 'prismjs/components/prism-perl.js';\nimport 'prismjs/components/prism-php.js';\nimport 'prismjs/components/prism-python.js';\nimport 'prismjs/components/prism-q.js';\nimport 'prismjs/components/prism-ruby.js';\nimport 'prismjs/components/prism-scala.js';\nimport 'prismjs/components/prism-sql.js';\nimport 'prismjs/components/prism-swift.js';\nimport 'prismjs/components/prism-yaml.js';\nimport 'prismjs/components/prism-csv.js';\n\nconst DEFAULT_LANG = 'clike';\n\nPrism.languages.insertBefore(\n  'javascript',\n  'string',\n  {\n    'property string': {\n      pattern: /([{,]\\s*)\"(?:\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/i,\n      lookbehind: true,\n    },\n  } as any,\n  undefined as any,\n);\n\nPrism.languages.insertBefore(\n  'javascript',\n  'punctuation',\n  {\n    property: {\n      pattern: /([{,]\\s*)[a-z]\\w*(?=\\s*:)/i,\n      lookbehind: true,\n    },\n  },\n  undefined as any,\n);\n\n/**\n * map language names to Prism.js names\n */\nexport function mapLang(lang: string): string {\n  return (\n    {\n      json: 'js',\n      'c++': 'cpp',\n      'c#': 'csharp',\n      'objective-c': 'objectivec',\n      shell: 'bash',\n      viml: 'vim',\n    }[lang] || DEFAULT_LANG\n  );\n}\n\n/**\n * Highlight source code string using Prism.js\n * @param source source code to highlight\n * @param lang highlight language\n * @return highlighted source code as **html string**\n */\nexport function highlight(source: string | number | boolean, lang: string = DEFAULT_LANG): string {\n  lang = lang.toLowerCase();\n  let grammar = Prism.languages[lang];\n  if (!grammar) {\n    grammar = Prism.languages[mapLang(lang)];\n  }\n  return Prism.highlight(source.toString(), grammar, lang);\n}\n","function throttle(func, wait) {\n  let context;\n  let args;\n  let result;\n  let timeout: any = null;\n  let previous = 0;\n  const later = () => {\n    previous = new Date().getTime();\n    timeout = null;\n    result = func.apply(context, args);\n    if (!timeout) {\n      context = args = null;\n    }\n  };\n  return function () {\n    const now = new Date().getTime();\n    const remaining = wait - (now - previous);\n    // eslint-disable-next-line @typescript-eslint/no-this-alias\n    context = this;\n    // eslint-disable-next-line prefer-rest-params\n    args = arguments;\n    if (remaining <= 0 || remaining > wait) {\n      if (timeout) {\n        clearTimeout(timeout);\n        timeout = null;\n      }\n      previous = now;\n      result = func.apply(context, args);\n      if (!timeout) {\n        context = args = null;\n      }\n    } else if (!timeout) {\n      timeout = setTimeout(later, remaining);\n    }\n    return result;\n  };\n}\n\nexport function Throttle(delay: number) {\n  return (_, _2, desc: PropertyDescriptor) => {\n    desc.value = throttle(desc.value, delay);\n  };\n}\n","export function debugTime(label: string) {\n  if (process.env.NODE_ENV !== 'production') {\n    console.time(label);\n  }\n}\n\nexport function debugTimeEnd(label: string) {\n  if (process.env.NODE_ENV !== 'production') {\n    console.timeEnd(label);\n  }\n}\n","// source: https://github.com/andreypopp/memoize-decorator\nconst SENTINEL = {};\n\nexport function memoize<T>(target: any, name: string, descriptor: TypedPropertyDescriptor<T>) {\n  if (typeof descriptor.value === 'function') {\n    return _memoizeMethod(target, name, descriptor) as any as TypedPropertyDescriptor<T>;\n  } else if (typeof descriptor.get === 'function') {\n    return _memoizeGetter(target, name, descriptor) as TypedPropertyDescriptor<T>;\n  } else {\n    throw new Error(\n      '@memoize decorator can be applied to methods or getters, got ' +\n        String(descriptor.value) +\n        ' instead',\n    );\n  }\n}\n\nfunction _memoizeGetter(target: any, name: string, descriptor: PropertyDescriptor) {\n  const memoizedName = `_memoized_${name}`;\n  const get = descriptor.get!;\n  target[memoizedName] = SENTINEL;\n  return {\n    ...descriptor,\n    get() {\n      if (this[memoizedName] === SENTINEL) {\n        this[memoizedName] = get.call(this);\n      }\n      return this[memoizedName];\n    },\n  };\n}\n\nfunction _memoizeMethod<T>(target: any, name: string, descriptor: TypedPropertyDescriptor<T>) {\n  if (!descriptor.value || (descriptor.value as any).length > 0) {\n    throw new Error('@memoize decorator can only be applied to methods of zero arguments');\n  }\n  const memoizedName = `_memoized_${name}`;\n  const value = descriptor.value;\n  target[memoizedName] = SENTINEL;\n  return {\n    ...descriptor,\n    value() {\n      if (this[memoizedName] === SENTINEL) {\n        this[memoizedName] = (value as any).call(this);\n      }\n      return this[memoizedName] as any;\n    },\n  };\n}\n","/**\n * Function that returns a comparator for sorting objects by some specific key alphabetically.\n *\n * @param {String} property key of the object to sort, if starts from `-` - reverse\n */\nexport function alphabeticallyByProp<T>(property: string): (a: T, b: T) => number {\n  let sortOrder = 1;\n\n  if (property[0] === '-') {\n    sortOrder = -1;\n    property = property.substr(1);\n  }\n\n  return (a: T, b: T) => {\n    if (sortOrder == -1) {\n      return b[property].localeCompare(a[property]);\n    } else {\n      return a[property].localeCompare(b[property]);\n    }\n  };\n}\n","import { bind, debounce } from 'decko';\nimport { EventEmitter } from 'eventemitter3';\nimport { IS_BROWSER } from '../utils/';\n\nconst EVENT = 'hashchange';\n\nexport class HistoryService {\n  private _emiter;\n\n  constructor() {\n    this._emiter = new EventEmitter();\n    this.bind();\n  }\n\n  get currentId(): string {\n    return IS_BROWSER ? decodeURIComponent(window.location.hash.substring(1)) : '';\n  }\n\n  linkForId(id: string) {\n    if (!id) {\n      return '';\n    }\n    return '#' + id;\n  }\n\n  subscribe(cb): () => void {\n    const emmiter = this._emiter.addListener(EVENT, cb);\n    return () => emmiter.removeListener(EVENT, cb);\n  }\n\n  emit = () => {\n    this._emiter.emit(EVENT, this.currentId);\n  };\n\n  bind() {\n    if (IS_BROWSER) {\n      window.addEventListener('hashchange', this.emit, false);\n    }\n  }\n\n  dispose() {\n    if (IS_BROWSER) {\n      window.removeEventListener('hashchange', this.emit);\n    }\n  }\n\n  @bind\n  @debounce\n  replace(id: string | null, rewriteHistory: boolean = false) {\n    if (!IS_BROWSER) {\n      return;\n    }\n\n    if (id == null || id === this.currentId) {\n      return;\n    }\n    if (rewriteHistory) {\n      window.history.replaceState(\n        null,\n        '',\n        window.location.href.split('#')[0] + this.linkForId(id),\n      );\n\n      return;\n    }\n    window.history.pushState(null, '', window.location.href.split('#')[0] + this.linkForId(id));\n    this.emit();\n  }\n}\n\nexport const history = new HistoryService();\n\nif (module.hot) {\n  module.hot.dispose(() => {\n    history.dispose();\n  });\n}\n",null,"import * as Mark from 'mark.js';\n\nexport class MarkerService {\n  map: Map<Element, Mark> = new Map();\n\n  private prevTerm: string = '';\n\n  add(el: HTMLElement) {\n    this.map.set(el, new Mark(el));\n  }\n\n  delete(el: Element) {\n    this.map.delete(el);\n  }\n\n  addOnly(elements: Element[]) {\n    this.map.forEach((inst, elem) => {\n      if (elements.indexOf(elem) === -1) {\n        inst.unmark();\n        this.map.delete(elem);\n      }\n    });\n\n    for (const el of elements) {\n      if (!this.map.has(el)) {\n        this.map.set(el, new Mark(el as HTMLElement));\n      }\n    }\n  }\n\n  clearAll() {\n    this.unmark();\n    this.map.clear();\n  }\n\n  mark(term?: string) {\n    if (!term && !this.prevTerm) {\n      return;\n    }\n    this.map.forEach(val => {\n      val.unmark();\n      val.mark(term || this.prevTerm);\n    });\n    this.prevTerm = term || this.prevTerm;\n  }\n\n  unmark() {\n    this.map.forEach(val => val.unmark());\n    this.prevTerm = '';\n  }\n}\n","/**\n * marked v4.3.0 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction getDefaults() {\n  return {\n    async: false,\n    baseUrl: null,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    headerIds: true,\n    headerPrefix: '',\n    highlight: null,\n    hooks: null,\n    langPrefix: 'language-',\n    mangle: true,\n    pedantic: false,\n    renderer: null,\n    sanitize: false,\n    sanitizer: null,\n    silent: false,\n    smartypants: false,\n    tokenizer: null,\n    walkTokens: null,\n    xhtml: false\n  };\n}\n\nlet defaults = getDefaults();\n\nfunction changeDefaults(newDefaults) {\n  defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n  if (encode) {\n    if (escapeTest.test(html)) {\n      return html.replace(escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (escapeTestNoEncode.test(html)) {\n      return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n\n  return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n/**\n * @param {string} html\n */\nfunction unescape(html) {\n  // explicitly match decimal, hex, and named HTML entities\n  return html.replace(unescapeTest, (_, n) => {\n    n = n.toLowerCase();\n    if (n === 'colon') return ':';\n    if (n.charAt(0) === '#') {\n      return n.charAt(1) === 'x'\n        ? String.fromCharCode(parseInt(n.substring(2), 16))\n        : String.fromCharCode(+n.substring(1));\n    }\n    return '';\n  });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\n\n/**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\nfunction edit(regex, opt) {\n  regex = typeof regex === 'string' ? regex : regex.source;\n  opt = opt || '';\n  const obj = {\n    replace: (name, val) => {\n      val = val.source || val;\n      val = val.replace(caret, '$1');\n      regex = regex.replace(name, val);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(regex, opt);\n    }\n  };\n  return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n/**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\nfunction cleanUrl(sanitize, base, href) {\n  if (sanitize) {\n    let prot;\n    try {\n      prot = decodeURIComponent(unescape(href))\n        .replace(nonWordAndColonTest, '')\n        .toLowerCase();\n    } catch (e) {\n      return null;\n    }\n    if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n      return null;\n    }\n  }\n  if (base && !originIndependentUrl.test(href)) {\n    href = resolveUrl(base, href);\n  }\n  try {\n    href = encodeURI(href).replace(/%25/g, '%');\n  } catch (e) {\n    return null;\n  }\n  return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n/**\n * @param {string} base\n * @param {string} href\n */\nfunction resolveUrl(base, href) {\n  if (!baseUrls[' ' + base]) {\n    // we can ignore everything in base after the last slash of its path component,\n    // but we might need to add _that_\n    // https://tools.ietf.org/html/rfc3986#section-3\n    if (justDomain.test(base)) {\n      baseUrls[' ' + base] = base + '/';\n    } else {\n      baseUrls[' ' + base] = rtrim(base, '/', true);\n    }\n  }\n  base = baseUrls[' ' + base];\n  const relativeBase = base.indexOf(':') === -1;\n\n  if (href.substring(0, 2) === '//') {\n    if (relativeBase) {\n      return href;\n    }\n    return base.replace(protocol, '$1') + href;\n  } else if (href.charAt(0) === '/') {\n    if (relativeBase) {\n      return href;\n    }\n    return base.replace(domain, '$1') + href;\n  } else {\n    return base + href;\n  }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction splitCells(tableRow, count) {\n  // ensure that every cell-delimiting pipe has a space\n  // before it to distinguish it from an escaped pipe\n  const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n      let escaped = false,\n        curr = offset;\n      while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n    cells = row.split(/ \\|/);\n  let i = 0;\n\n  // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n  if (!cells[0].trim()) { cells.shift(); }\n  if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }\n\n  if (cells.length > count) {\n    cells.splice(count);\n  } else {\n    while (cells.length < count) cells.push('');\n  }\n\n  for (; i < cells.length; i++) {\n    // leading or trailing whitespace is ignored per the gfm spec\n    cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n  }\n  return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n  const l = str.length;\n  if (l === 0) {\n    return '';\n  }\n\n  // Length of suffix matching the invert condition.\n  let suffLen = 0;\n\n  // Step left until we fail to match the invert condition.\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n\n  return str.slice(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n  if (str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n  const l = str.length;\n  let level = 0,\n    i = 0;\n  for (; i < l; i++) {\n    if (str[i] === '\\\\') {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n  if (opt && opt.sanitize && !opt.silent) {\n    console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n  }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\n/**\n * @param {string} pattern\n * @param {number} count\n */\nfunction repeatString(pattern, count) {\n  if (count < 1) {\n    return '';\n  }\n  let result = '';\n  while (count > 1) {\n    if (count & 1) {\n      result += pattern;\n    }\n    count >>= 1;\n    pattern += pattern;\n  }\n  return result + pattern;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n  const href = link.href;\n  const title = link.title ? escape(link.title) : null;\n  const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n  if (cap[0].charAt(0) !== '!') {\n    lexer.state.inLink = true;\n    const token = {\n      type: 'link',\n      raw,\n      href,\n      title,\n      text,\n      tokens: lexer.inlineTokens(text)\n    };\n    lexer.state.inLink = false;\n    return token;\n  }\n  return {\n    type: 'image',\n    raw,\n    href,\n    title,\n    text: escape(text)\n  };\n}\n\nfunction indentCodeCompensation(raw, text) {\n  const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n  if (matchIndentToCode === null) {\n    return text;\n  }\n\n  const indentToCode = matchIndentToCode[1];\n\n  return text\n    .split('\\n')\n    .map(node => {\n      const matchIndentInNode = node.match(/^\\s+/);\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      const [indentInNode] = matchIndentInNode;\n\n      if (indentInNode.length >= indentToCode.length) {\n        return node.slice(indentToCode.length);\n      }\n\n      return node;\n    })\n    .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nclass Tokenizer {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  space(src) {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: 'space',\n        raw: cap[0]\n      };\n    }\n  }\n\n  code(src) {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const text = cap[0].replace(/^ {1,4}/gm, '');\n      return {\n        type: 'code',\n        raw: cap[0],\n        codeBlockStyle: 'indented',\n        text: !this.options.pedantic\n          ? rtrim(text, '\\n')\n          : text\n      };\n    }\n  }\n\n  fences(src) {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || '');\n\n      return {\n        type: 'code',\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n        text\n      };\n    }\n  }\n\n  heading(src) {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n\n      // remove trailing #s\n      if (/#$/.test(text)) {\n        const trimmed = rtrim(text, '#');\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || / $/.test(trimmed)) {\n          // CommonMark requires space before trailing #s\n          text = trimmed.trim();\n        }\n      }\n\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n\n  hr(src) {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: 'hr',\n        raw: cap[0]\n      };\n    }\n  }\n\n  blockquote(src) {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      const text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n      const top = this.lexer.state.top;\n      this.lexer.state.top = true;\n      const tokens = this.lexer.blockTokens(text);\n      this.lexer.state.top = top;\n      return {\n        type: 'blockquote',\n        raw: cap[0],\n        tokens,\n        text\n      };\n    }\n  }\n\n  list(src) {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,\n        line, nextLine, rawLine, itemContents, endEarly;\n\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n\n      const list = {\n        type: 'list',\n        raw: '',\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : '',\n        loose: false,\n        items: []\n      };\n\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n      if (this.options.pedantic) {\n        bull = isordered ? bull : '[*+-]';\n      }\n\n      // Get next list item\n      const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n\n      // Check if current bullet point can start a new List Item\n      while (src) {\n        endEarly = false;\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n\n        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n          break;\n        }\n\n        raw = cap[0];\n        src = src.substring(raw.length);\n\n        line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n        nextLine = src.split('\\n', 1)[0];\n\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimLeft();\n        } else {\n          indent = cap[2].search(/[^ ]/); // Find first non-space char\n          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n          itemContents = line.slice(indent);\n          indent += cap[1].length;\n        }\n\n        blankLine = false;\n\n        if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n          raw += nextLine + '\\n';\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n\n        if (!endEarly) {\n          const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n          const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n          const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n          const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n\n          // Check if following lines should be included in List Item\n          while (src) {\n            rawLine = src.split('\\n', 1)[0];\n            nextLine = rawLine;\n\n            // Re-align to follow commonmark nesting rules\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, '  ');\n            }\n\n            // End list item if found code fences\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new heading\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new bullet\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n\n            // Horizontal rule found\n            if (hrRegex.test(src)) {\n              break;\n            }\n\n            if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n              itemContents += '\\n' + nextLine.slice(indent);\n            } else {\n              // not enough indentation\n              if (blankLine) {\n                break;\n              }\n\n              // paragraph continuation unless last line was a different block level element\n              if (line.search(/[^ ]/) >= 4) { // indented code block\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n\n              itemContents += '\\n' + nextLine;\n            }\n\n            if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n              blankLine = true;\n            }\n\n            raw += rawLine + '\\n';\n            src = src.substring(rawLine.length + 1);\n            line = nextLine.slice(indent);\n          }\n        }\n\n        if (!list.loose) {\n          // If the previous item ended with a blank line, the list is loose\n          if (endsWithBlankLine) {\n            list.loose = true;\n          } else if (/\\n *\\n *$/.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n\n        // Check for task list items\n        if (this.options.gfm) {\n          istask = /^\\[[ xX]\\] /.exec(itemContents);\n          if (istask) {\n            ischecked = istask[0] !== '[ ] ';\n            itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n          }\n        }\n\n        list.items.push({\n          type: 'list_item',\n          raw,\n          task: !!istask,\n          checked: ischecked,\n          loose: false,\n          text: itemContents\n        });\n\n        list.raw += raw;\n      }\n\n      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n      list.items[list.items.length - 1].raw = raw.trimRight();\n      list.items[list.items.length - 1].text = itemContents.trimRight();\n      list.raw = list.raw.trimRight();\n\n      const l = list.items.length;\n\n      // Item child tokens handled here at end because we needed to have the final item to trim it first\n      for (i = 0; i < l; i++) {\n        this.lexer.state.top = false;\n        list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n\n        if (!list.loose) {\n          // Check if list should be loose\n          const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n\n          list.loose = hasMultipleLineBreaks;\n        }\n      }\n\n      // Set all items to loose if list is loose\n      if (list.loose) {\n        for (i = 0; i < l; i++) {\n          list.items[i].loose = true;\n        }\n      }\n\n      return list;\n    }\n  }\n\n  html(src) {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const token = {\n        type: 'html',\n        raw: cap[0],\n        pre: !this.options.sanitizer\n          && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n        text: cap[0]\n      };\n      if (this.options.sanitize) {\n        const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n        token.type = 'paragraph';\n        token.text = text;\n        token.tokens = this.lexer.inline(text);\n      }\n      return token;\n    }\n  }\n\n  def(src) {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n      const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n      return {\n        type: 'def',\n        tag,\n        raw: cap[0],\n        href,\n        title\n      };\n    }\n  }\n\n  table(src) {\n    const cap = this.rules.block.table.exec(src);\n    if (cap) {\n      const item = {\n        type: 'table',\n        header: splitCells(cap[1]).map(c => { return { text: c }; }),\n        align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n        rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n      };\n\n      if (item.header.length === item.align.length) {\n        item.raw = cap[0];\n\n        let l = item.align.length;\n        let i, j, k, row;\n        for (i = 0; i < l; i++) {\n          if (/^ *-+: *$/.test(item.align[i])) {\n            item.align[i] = 'right';\n          } else if (/^ *:-+: *$/.test(item.align[i])) {\n            item.align[i] = 'center';\n          } else if (/^ *:-+ *$/.test(item.align[i])) {\n            item.align[i] = 'left';\n          } else {\n            item.align[i] = null;\n          }\n        }\n\n        l = item.rows.length;\n        for (i = 0; i < l; i++) {\n          item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });\n        }\n\n        // parse child tokens inside headers and cells\n\n        // header child tokens\n        l = item.header.length;\n        for (j = 0; j < l; j++) {\n          item.header[j].tokens = this.lexer.inline(item.header[j].text);\n        }\n\n        // cell child tokens\n        l = item.rows.length;\n        for (j = 0; j < l; j++) {\n          row = item.rows[j];\n          for (k = 0; k < row.length; k++) {\n            row[k].tokens = this.lexer.inline(row[k].text);\n          }\n        }\n\n        return item;\n      }\n    }\n  }\n\n  lheading(src) {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      return {\n        type: 'heading',\n        raw: cap[0],\n        depth: cap[2].charAt(0) === '=' ? 1 : 2,\n        text: cap[1],\n        tokens: this.lexer.inline(cap[1])\n      };\n    }\n  }\n\n  paragraph(src) {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n        ? cap[1].slice(0, -1)\n        : cap[1];\n      return {\n        type: 'paragraph',\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text)\n      };\n    }\n  }\n\n  text(src) {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0])\n      };\n    }\n  }\n\n  escape(src) {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: 'escape',\n        raw: cap[0],\n        text: escape(cap[1])\n      };\n    }\n  }\n\n  tag(src) {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n\n      return {\n        type: this.options.sanitize\n          ? 'text'\n          : 'html',\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        text: this.options.sanitize\n          ? (this.options.sanitizer\n            ? this.options.sanitizer(cap[0])\n            : escape(cap[0]))\n          : cap[0]\n      };\n    }\n  }\n\n  link(src) {\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n        // commonmark requires matching angle brackets\n        if (!(/>$/.test(trimmedUrl))) {\n          return;\n        }\n\n        // ending angle bracket cannot be escaped\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        // find closing parenthesis\n        const lastParenIndex = findClosingBracket(cap[2], '()');\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = '';\n        }\n      }\n      let href = cap[2];\n      let title = '';\n      if (this.options.pedantic) {\n        // split pedantic href and title\n        const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n        if (link) {\n          href = link[1];\n          title = link[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : '';\n      }\n\n      href = href.trim();\n      if (/^</.test(href)) {\n        if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n          // pedantic allows starting angle bracket without ending angle bracket\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n        title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n      }, cap[0], this.lexer);\n    }\n  }\n\n  reflink(src, links) {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src))\n        || (cap = this.rules.inline.nolink.exec(src))) {\n      let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n      link = links[link.toLowerCase()];\n      if (!link) {\n        const text = cap[0].charAt(0);\n        return {\n          type: 'text',\n          raw: text,\n          text\n        };\n      }\n      return outputLink(cap, link, cap[0], this.lexer);\n    }\n  }\n\n  emStrong(src, maskedSrc, prevChar = '') {\n    let match = this.rules.inline.emStrong.lDelim.exec(src);\n    if (!match) return;\n\n    // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n    if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return;\n\n    const nextChar = match[1] || match[2] || '';\n\n    if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n      const lLength = match[0].length - 1;\n      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n      const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src (move to lexer?)\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) != null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue; // skip single * in __abc*abc__\n\n        rLength = rDelim.length;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) { // either Left or Right Delim\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue; // CommonMark Emphasis Rules 9-10\n          }\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters. *a*** -> *a*\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n\n        const raw = src.slice(0, lLength + match.index + (match[0].length - rDelim.length) + rLength);\n\n        // Create `em` if smallest delimiter has odd char count. *a***\n        if (Math.min(lLength, rLength) % 2) {\n          const text = raw.slice(1, -1);\n          return {\n            type: 'em',\n            raw,\n            text,\n            tokens: this.lexer.inlineTokens(text)\n          };\n        }\n\n        // Create 'strong' if smallest delimiter has even char count. **a***\n        const text = raw.slice(2, -2);\n        return {\n          type: 'strong',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text)\n        };\n      }\n    }\n  }\n\n  codespan(src) {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(/\\n/g, ' ');\n      const hasNonSpaceChars = /[^ ]/.test(text);\n      const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      text = escape(text, true);\n      return {\n        type: 'codespan',\n        raw: cap[0],\n        text\n      };\n    }\n  }\n\n  br(src) {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: 'br',\n        raw: cap[0]\n      };\n    }\n  }\n\n  del(src) {\n    const cap = this.rules.inline.del.exec(src);\n    if (cap) {\n      return {\n        type: 'del',\n        raw: cap[0],\n        text: cap[2],\n        tokens: this.lexer.inlineTokens(cap[2])\n      };\n    }\n  }\n\n  autolink(src, mangle) {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n        href = 'mailto:' + text;\n      } else {\n        text = escape(cap[1]);\n        href = text;\n      }\n\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text\n          }\n        ]\n      };\n    }\n  }\n\n  url(src, mangle) {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n        href = 'mailto:' + text;\n      } else {\n        // do extended autolink path validation\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n        } while (prevCapZero !== cap[0]);\n        text = escape(cap[0]);\n        if (cap[1] === 'www.') {\n          href = 'http://' + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text\n          }\n        ]\n      };\n    }\n  }\n\n  inlineText(src, smartypants) {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      let text;\n      if (this.lexer.state.inRawBlock) {\n        text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n      } else {\n        text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n      }\n      return {\n        type: 'text',\n        raw: cap[0],\n        text\n      };\n    }\n  }\n}\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n  newline: /^(?: *(?:\\n|$))+/,\n  code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n  fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n  hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n  heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n  blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n  list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n  html: '^ {0,3}(?:' // optional indentation\n    + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n    + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n    + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n    + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n    + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n    + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n    + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n    + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n    + ')',\n  def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n  table: noopTest,\n  lheading: /^((?:.|\\n(?!\\n))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  // regex template, placeholders will be replaced according to different paragraph\n  // interruption rules of commonmark and the original markdown spec:\n  _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n  text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n  .replace('label', block._label)\n  .replace('title', block._title)\n  .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n  .replace('bull', block.bullet)\n  .getRegex();\n\nblock.list = edit(block.list)\n  .replace(/bull/g, block.bullet)\n  .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n  .replace('def', '\\\\n+(?=' + block.def.source + ')')\n  .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n  + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n  + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit(block.html, 'i')\n  .replace('comment', block._comment)\n  .replace('tag', block._tag)\n  .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n  .replace('|table', '')\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n  .replace('paragraph', block.paragraph)\n  .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = { ...block };\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = {\n  ...block.normal,\n  table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n    + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n    + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n};\n\nblock.gfm.table = edit(block.gfm.table)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('blockquote', ' {0,3}>')\n  .replace('code', ' {4}[^\\\\n]')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n  .getRegex();\n\nblock.gfm.paragraph = edit(block._paragraph)\n  .replace('hr', block.hr)\n  .replace('heading', ' {0,3}#{1,6} ')\n  .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n  .replace('table', block.gfm.table) // interrupt paragraphs with table\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n  .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n  .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n  .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = {\n  ...block.normal,\n  html: edit(\n    '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n    + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n    .replace('comment', block._comment)\n    .replace(/tag/g, '(?!(?:'\n      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n      + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n    .getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest, // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(block.normal._paragraph)\n    .replace('hr', block.hr)\n    .replace('heading', ' *#{1,6} *[^\\n]')\n    .replace('lheading', block.lheading)\n    .replace('blockquote', ' {0,3}>')\n    .replace('|fences', '')\n    .replace('|list', '')\n    .replace('|html', '')\n    .getRegex()\n};\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n  escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n  autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n  url: noopTest,\n  tag: '^comment'\n    + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>', // CDATA section\n  link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n  reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n  nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n  reflinkSearch: 'reflink|nolink(?!\\\\()',\n  emStrong: {\n    lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n    //        (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left.  (5) and (6) can be either Left or Right.\n    //          () Skip orphan inside strong                                      () Consume to delim     (1) #***                (2) a***#, a***                             (3) #***a, ***a                 (4) ***#              (5) #***#                 (6) a***a\n    rDelimAst: /^(?:[^_*\\\\]|\\\\.)*?\\_\\_(?:[^_*\\\\]|\\\\.)*?\\*(?:[^_*\\\\]|\\\\.)*?(?=\\_\\_)|(?:[^*\\\\]|\\\\.)+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|(?:[^punct*_\\s\\\\]|\\\\.)(\\*+)(?=[^punct*_\\s])/,\n    rDelimUnd: /^(?:[^_*\\\\]|\\\\.)*?\\*\\*(?:[^_*\\\\]|\\\\.)*?\\_(?:[^_*\\\\]|\\\\.)*?(?=\\*\\*)|(?:[^_\\\\]|\\\\.)+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|(?:[^punct*_\\s\\\\]|\\\\.)(\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n  },\n  code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n  br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n  del: noopTest,\n  text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n  punctuation: /^([\\spunctuation])/\n};\n\n// list of punctuation marks from CommonMark spec\n// without * and _ to handle the different emphasis markers * and _\ninline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n// lookbehind is not available on Safari as of version 16\n// inline.escapedEmSt = /(?<=(?:^|[^\\\\)(?:\\\\[^])*)\\\\[*_]/g;\ninline.escapedEmSt = /(?:^|[^\\\\])(?:\\\\\\\\)*\\\\[*_]/g;\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim)\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')\n  .replace(/punct/g, inline._punctuation)\n  .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n  .replace('scheme', inline._scheme)\n  .replace('email', inline._email)\n  .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n  .replace('comment', inline._comment)\n  .replace('attribute', inline._attribute)\n  .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n  .replace('label', inline._label)\n  .replace('href', inline._href)\n  .replace('title', inline._title)\n  .getRegex();\n\ninline.reflink = edit(inline.reflink)\n  .replace('label', inline._label)\n  .replace('ref', block._label)\n  .getRegex();\n\ninline.nolink = edit(inline.nolink)\n  .replace('ref', block._label)\n  .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n  .replace('reflink', inline.reflink)\n  .replace('nolink', inline.nolink)\n  .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = { ...inline };\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = {\n  ...inline.normal,\n  strong: {\n    start: /^__|\\*\\*/,\n    middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n    endAst: /\\*\\*(?!\\*)/g,\n    endUnd: /__(?!_)/g\n  },\n  em: {\n    start: /^_|\\*/,\n    middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n    endAst: /\\*(?!\\*)/g,\n    endUnd: /_(?!_)/g\n  },\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n    .replace('label', inline._label)\n    .getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n    .replace('label', inline._label)\n    .getRegex()\n};\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = {\n  ...inline.normal,\n  escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n  _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n  url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n  text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\n\ninline.gfm.url = edit(inline.gfm.url, 'i')\n  .replace('email', inline.gfm._extended_email)\n  .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\ninline.breaks = {\n  ...inline.gfm,\n  br: edit(inline.br).replace('{2,}', '*').getRegex(),\n  text: edit(inline.gfm.text)\n    .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n    .replace(/\\{2,\\}/g, '*')\n    .getRegex()\n};\n\n/**\n * smartypants text replacement\n * @param {string} text\n */\nfunction smartypants(text) {\n  return text\n    // em-dashes\n    .replace(/---/g, '\\u2014')\n    // en-dashes\n    .replace(/--/g, '\\u2013')\n    // opening singles\n    .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, '$1\\u2018')\n    // closing singles & apostrophes\n    .replace(/'/g, '\\u2019')\n    // opening doubles\n    .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, '$1\\u201c')\n    // closing doubles\n    .replace(/\"/g, '\\u201d')\n    // ellipses\n    .replace(/\\.{3}/g, '\\u2026');\n}\n\n/**\n * mangle email addresses\n * @param {string} text\n */\nfunction mangle(text) {\n  let out = '',\n    i,\n    ch;\n\n  const l = text.length;\n  for (i = 0; i < l; i++) {\n    ch = text.charCodeAt(i);\n    if (Math.random() > 0.5) {\n      ch = 'x' + ch.toString(16);\n    }\n    out += '&#' + ch + ';';\n  }\n\n  return out;\n}\n\n/**\n * Block Lexer\n */\nclass Lexer {\n  constructor(options) {\n    this.tokens = [];\n    this.tokens.links = Object.create(null);\n    this.options = options || defaults;\n    this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      top: true\n    };\n\n    const rules = {\n      block: block.normal,\n      inline: inline.normal\n    };\n\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline\n    };\n  }\n\n  /**\n   * Static Lex Method\n   */\n  static lex(src, options) {\n    const lexer = new Lexer(options);\n    return lexer.lex(src);\n  }\n\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline(src, options) {\n    const lexer = new Lexer(options);\n    return lexer.inlineTokens(src);\n  }\n\n  /**\n   * Preprocessing\n   */\n  lex(src) {\n    src = src\n      .replace(/\\r\\n|\\r/g, '\\n');\n\n    this.blockTokens(src, this.tokens);\n\n    let next;\n    while (next = this.inlineQueue.shift()) {\n      this.inlineTokens(next.src, next.tokens);\n    }\n\n    return this.tokens;\n  }\n\n  /**\n   * Lexing\n   */\n  blockTokens(src, tokens = []) {\n    if (this.options.pedantic) {\n      src = src.replace(/\\t/g, '    ').replace(/^ +$/gm, '');\n    } else {\n      src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n        return leading + '    '.repeat(tabs.length);\n      });\n    }\n\n    let token, lastToken, cutSrc, lastParagraphClipped;\n\n    while (src) {\n      if (this.options.extensions\n        && this.options.extensions.block\n        && this.options.extensions.block.some((extTokenizer) => {\n          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n          return false;\n        })) {\n        continue;\n      }\n\n      // newline\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.length === 1 && tokens.length > 0) {\n          // if there's a single \\n as a spacer, it's terminating the last line,\n          // so move it there so that we don't get unecessary paragraph tags\n          tokens[tokens.length - 1].raw += '\\n';\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        // An indented code block cannot interrupt a paragraph.\n        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // fences\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // heading\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // hr\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // blockquote\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // list\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // html\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // def\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.raw;\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title\n          };\n        }\n        continue;\n      }\n\n      // table (gfm)\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // lheading\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // top-level paragraph\n      // prevent paragraph consuming extensions by clipping 'src' to extension start\n      cutSrc = src;\n      if (this.options.extensions && this.options.extensions.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach(function(getStartIndex) {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        lastToken = tokens[tokens.length - 1];\n        if (lastParagraphClipped && lastToken.type === 'paragraph') {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = (cutSrc.length !== src.length);\n        src = src.substring(token.raw.length);\n        continue;\n      }\n\n      // text\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && lastToken.type === 'text') {\n          lastToken.raw += '\\n' + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    this.state.top = true;\n    return tokens;\n  }\n\n  inline(src, tokens = []) {\n    this.inlineQueue.push({ src, tokens });\n    return tokens;\n  }\n\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src, tokens = []) {\n    let token, lastToken, cutSrc;\n\n    // String with links masked to avoid interference with em and strong\n    let maskedSrc = src;\n    let match;\n    let keepPrevChar, prevChar;\n\n    // Mask out reflinks\n    if (this.tokens.links) {\n      const links = Object.keys(this.tokens.links);\n      if (links.length > 0) {\n        while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n          if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n            maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n          }\n        }\n      }\n    }\n    // Mask out other blocks\n    while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n    }\n\n    // Mask out escaped em & strong delimiters\n    while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n      maskedSrc = maskedSrc.slice(0, match.index + match[0].length - 2) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n      this.tokenizer.rules.inline.escapedEmSt.lastIndex--;\n    }\n\n    while (src) {\n      if (!keepPrevChar) {\n        prevChar = '';\n      }\n      keepPrevChar = false;\n\n      // extensions\n      if (this.options.extensions\n        && this.options.extensions.inline\n        && this.options.extensions.inline.some((extTokenizer) => {\n          if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n            src = src.substring(token.raw.length);\n            tokens.push(token);\n            return true;\n          }\n          return false;\n        })) {\n        continue;\n      }\n\n      // escape\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // tag\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // link\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // reflink, nolink\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // em & strong\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // br\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // del (gfm)\n      if (token = this.tokenizer.del(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // autolink\n      if (token = this.tokenizer.autolink(src, mangle)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // url (gfm)\n      if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // text\n      // prevent inlineText consuming extensions by clipping 'src' to extension start\n      cutSrc = src;\n      if (this.options.extensions && this.options.extensions.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach(function(getStartIndex) {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        lastToken = tokens[tokens.length - 1];\n        if (lastToken && lastToken.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n        if (this.options.silent) {\n          console.error(errMsg);\n          break;\n        } else {\n          throw new Error(errMsg);\n        }\n      }\n    }\n\n    return tokens;\n  }\n}\n\n/**\n * Renderer\n */\nclass Renderer {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  code(code, infostring, escaped) {\n    const lang = (infostring || '').match(/\\S*/)[0];\n    if (this.options.highlight) {\n      const out = this.options.highlight(code, lang);\n      if (out != null && out !== code) {\n        escaped = true;\n        code = out;\n      }\n    }\n\n    code = code.replace(/\\n$/, '') + '\\n';\n\n    if (!lang) {\n      return '<pre><code>'\n        + (escaped ? code : escape(code, true))\n        + '</code></pre>\\n';\n    }\n\n    return '<pre><code class=\"'\n      + this.options.langPrefix\n      + escape(lang)\n      + '\">'\n      + (escaped ? code : escape(code, true))\n      + '</code></pre>\\n';\n  }\n\n  /**\n   * @param {string} quote\n   */\n  blockquote(quote) {\n    return `<blockquote>\\n${quote}</blockquote>\\n`;\n  }\n\n  html(html) {\n    return html;\n  }\n\n  /**\n   * @param {string} text\n   * @param {string} level\n   * @param {string} raw\n   * @param {any} slugger\n   */\n  heading(text, level, raw, slugger) {\n    if (this.options.headerIds) {\n      const id = this.options.headerPrefix + slugger.slug(raw);\n      return `<h${level} id=\"${id}\">${text}</h${level}>\\n`;\n    }\n\n    // ignore IDs\n    return `<h${level}>${text}</h${level}>\\n`;\n  }\n\n  hr() {\n    return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n  }\n\n  list(body, ordered, start) {\n    const type = ordered ? 'ol' : 'ul',\n      startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n    return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n  }\n\n  /**\n   * @param {string} text\n   */\n  listitem(text) {\n    return `<li>${text}</li>\\n`;\n  }\n\n  checkbox(checked) {\n    return '<input '\n      + (checked ? 'checked=\"\" ' : '')\n      + 'disabled=\"\" type=\"checkbox\"'\n      + (this.options.xhtml ? ' /' : '')\n      + '> ';\n  }\n\n  /**\n   * @param {string} text\n   */\n  paragraph(text) {\n    return `<p>${text}</p>\\n`;\n  }\n\n  /**\n   * @param {string} header\n   * @param {string} body\n   */\n  table(header, body) {\n    if (body) body = `<tbody>${body}</tbody>`;\n\n    return '<table>\\n'\n      + '<thead>\\n'\n      + header\n      + '</thead>\\n'\n      + body\n      + '</table>\\n';\n  }\n\n  /**\n   * @param {string} content\n   */\n  tablerow(content) {\n    return `<tr>\\n${content}</tr>\\n`;\n  }\n\n  tablecell(content, flags) {\n    const type = flags.header ? 'th' : 'td';\n    const tag = flags.align\n      ? `<${type} align=\"${flags.align}\">`\n      : `<${type}>`;\n    return tag + content + `</${type}>\\n`;\n  }\n\n  /**\n   * span level renderer\n   * @param {string} text\n   */\n  strong(text) {\n    return `<strong>${text}</strong>`;\n  }\n\n  /**\n   * @param {string} text\n   */\n  em(text) {\n    return `<em>${text}</em>`;\n  }\n\n  /**\n   * @param {string} text\n   */\n  codespan(text) {\n    return `<code>${text}</code>`;\n  }\n\n  br() {\n    return this.options.xhtml ? '<br/>' : '<br>';\n  }\n\n  /**\n   * @param {string} text\n   */\n  del(text) {\n    return `<del>${text}</del>`;\n  }\n\n  /**\n   * @param {string} href\n   * @param {string} title\n   * @param {string} text\n   */\n  link(href, title, text) {\n    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n    if (href === null) {\n      return text;\n    }\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + title + '\"';\n    }\n    out += '>' + text + '</a>';\n    return out;\n  }\n\n  /**\n   * @param {string} href\n   * @param {string} title\n   * @param {string} text\n   */\n  image(href, title, text) {\n    href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n    if (href === null) {\n      return text;\n    }\n\n    let out = `<img src=\"${href}\" alt=\"${text}\"`;\n    if (title) {\n      out += ` title=\"${title}\"`;\n    }\n    out += this.options.xhtml ? '/>' : '>';\n    return out;\n  }\n\n  text(text) {\n    return text;\n  }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass TextRenderer {\n  // no need for block level renderers\n  strong(text) {\n    return text;\n  }\n\n  em(text) {\n    return text;\n  }\n\n  codespan(text) {\n    return text;\n  }\n\n  del(text) {\n    return text;\n  }\n\n  html(text) {\n    return text;\n  }\n\n  text(text) {\n    return text;\n  }\n\n  link(href, title, text) {\n    return '' + text;\n  }\n\n  image(href, title, text) {\n    return '' + text;\n  }\n\n  br() {\n    return '';\n  }\n}\n\n/**\n * Slugger generates header id\n */\nclass Slugger {\n  constructor() {\n    this.seen = {};\n  }\n\n  /**\n   * @param {string} value\n   */\n  serialize(value) {\n    return value\n      .toLowerCase()\n      .trim()\n      // remove html tags\n      .replace(/<[!\\/a-z].*?>/ig, '')\n      // remove unwanted chars\n      .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n      .replace(/\\s/g, '-');\n  }\n\n  /**\n   * Finds the next safe (unique) slug to use\n   * @param {string} originalSlug\n   * @param {boolean} isDryRun\n   */\n  getNextSafeSlug(originalSlug, isDryRun) {\n    let slug = originalSlug;\n    let occurenceAccumulator = 0;\n    if (this.seen.hasOwnProperty(slug)) {\n      occurenceAccumulator = this.seen[originalSlug];\n      do {\n        occurenceAccumulator++;\n        slug = originalSlug + '-' + occurenceAccumulator;\n      } while (this.seen.hasOwnProperty(slug));\n    }\n    if (!isDryRun) {\n      this.seen[originalSlug] = occurenceAccumulator;\n      this.seen[slug] = 0;\n    }\n    return slug;\n  }\n\n  /**\n   * Convert string to unique id\n   * @param {object} [options]\n   * @param {boolean} [options.dryrun] Generates the next unique slug without\n   * updating the internal accumulator.\n   */\n  slug(value, options = {}) {\n    const slug = this.serialize(value);\n    return this.getNextSafeSlug(slug, options.dryrun);\n  }\n}\n\n/**\n * Parsing & Compiling\n */\nclass Parser {\n  constructor(options) {\n    this.options = options || defaults;\n    this.options.renderer = this.options.renderer || new Renderer();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.textRenderer = new TextRenderer();\n    this.slugger = new Slugger();\n  }\n\n  /**\n   * Static Parse Method\n   */\n  static parse(tokens, options) {\n    const parser = new Parser(options);\n    return parser.parse(tokens);\n  }\n\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline(tokens, options) {\n    const parser = new Parser(options);\n    return parser.parseInline(tokens);\n  }\n\n  /**\n   * Parse Loop\n   */\n  parse(tokens, top = true) {\n    let out = '',\n      i,\n      j,\n      k,\n      l2,\n      l3,\n      row,\n      cell,\n      header,\n      body,\n      token,\n      ordered,\n      start,\n      loose,\n      itemBody,\n      item,\n      checked,\n      task,\n      checkbox,\n      ret;\n\n    const l = tokens.length;\n    for (i = 0; i < l; i++) {\n      token = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      switch (token.type) {\n        case 'space': {\n          continue;\n        }\n        case 'hr': {\n          out += this.renderer.hr();\n          continue;\n        }\n        case 'heading': {\n          out += this.renderer.heading(\n            this.parseInline(token.tokens),\n            token.depth,\n            unescape(this.parseInline(token.tokens, this.textRenderer)),\n            this.slugger);\n          continue;\n        }\n        case 'code': {\n          out += this.renderer.code(token.text,\n            token.lang,\n            token.escaped);\n          continue;\n        }\n        case 'table': {\n          header = '';\n\n          // header\n          cell = '';\n          l2 = token.header.length;\n          for (j = 0; j < l2; j++) {\n            cell += this.renderer.tablecell(\n              this.parseInline(token.header[j].tokens),\n              { header: true, align: token.align[j] }\n            );\n          }\n          header += this.renderer.tablerow(cell);\n\n          body = '';\n          l2 = token.rows.length;\n          for (j = 0; j < l2; j++) {\n            row = token.rows[j];\n\n            cell = '';\n            l3 = row.length;\n            for (k = 0; k < l3; k++) {\n              cell += this.renderer.tablecell(\n                this.parseInline(row[k].tokens),\n                { header: false, align: token.align[k] }\n              );\n            }\n\n            body += this.renderer.tablerow(cell);\n          }\n          out += this.renderer.table(header, body);\n          continue;\n        }\n        case 'blockquote': {\n          body = this.parse(token.tokens);\n          out += this.renderer.blockquote(body);\n          continue;\n        }\n        case 'list': {\n          ordered = token.ordered;\n          start = token.start;\n          loose = token.loose;\n          l2 = token.items.length;\n\n          body = '';\n          for (j = 0; j < l2; j++) {\n            item = token.items[j];\n            checked = item.checked;\n            task = item.task;\n\n            itemBody = '';\n            if (item.task) {\n              checkbox = this.renderer.checkbox(checked);\n              if (loose) {\n                if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n                  item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n                  if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n                    item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n                  }\n                } else {\n                  item.tokens.unshift({\n                    type: 'text',\n                    text: checkbox\n                  });\n                }\n              } else {\n                itemBody += checkbox;\n              }\n            }\n\n            itemBody += this.parse(item.tokens, loose);\n            body += this.renderer.listitem(itemBody, task, checked);\n          }\n\n          out += this.renderer.list(body, ordered, start);\n          continue;\n        }\n        case 'html': {\n          // TODO parse inline content if parameter markdown=1\n          out += this.renderer.html(token.text);\n          continue;\n        }\n        case 'paragraph': {\n          out += this.renderer.paragraph(this.parseInline(token.tokens));\n          continue;\n        }\n        case 'text': {\n          body = token.tokens ? this.parseInline(token.tokens) : token.text;\n          while (i + 1 < l && tokens[i + 1].type === 'text') {\n            token = tokens[++i];\n            body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n          }\n          out += top ? this.renderer.paragraph(body) : body;\n          continue;\n        }\n\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n\n    return out;\n  }\n\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens, renderer) {\n    renderer = renderer || this.renderer;\n    let out = '',\n      i,\n      token,\n      ret;\n\n    const l = tokens.length;\n    for (i = 0; i < l; i++) {\n      token = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n        ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n        if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      switch (token.type) {\n        case 'escape': {\n          out += renderer.text(token.text);\n          break;\n        }\n        case 'html': {\n          out += renderer.html(token.text);\n          break;\n        }\n        case 'link': {\n          out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'image': {\n          out += renderer.image(token.href, token.title, token.text);\n          break;\n        }\n        case 'strong': {\n          out += renderer.strong(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'em': {\n          out += renderer.em(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'codespan': {\n          out += renderer.codespan(token.text);\n          break;\n        }\n        case 'br': {\n          out += renderer.br();\n          break;\n        }\n        case 'del': {\n          out += renderer.del(this.parseInline(token.tokens, renderer));\n          break;\n        }\n        case 'text': {\n          out += renderer.text(token.text);\n          break;\n        }\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n    return out;\n  }\n}\n\nclass Hooks {\n  constructor(options) {\n    this.options = options || defaults;\n  }\n\n  static passThroughHooks = new Set([\n    'preprocess',\n    'postprocess'\n  ]);\n\n  /**\n   * Process markdown before marked\n   */\n  preprocess(markdown) {\n    return markdown;\n  }\n\n  /**\n   * Process HTML after marked is finished\n   */\n  postprocess(html) {\n    return html;\n  }\n}\n\nfunction onError(silent, async, callback) {\n  return (e) => {\n    e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n    if (silent) {\n      const msg = '<p>An error occurred:</p><pre>'\n        + escape(e.message + '', true)\n        + '</pre>';\n      if (async) {\n        return Promise.resolve(msg);\n      }\n      if (callback) {\n        callback(null, msg);\n        return;\n      }\n      return msg;\n    }\n\n    if (async) {\n      return Promise.reject(e);\n    }\n    if (callback) {\n      callback(e);\n      return;\n    }\n    throw e;\n  };\n}\n\nfunction parseMarkdown(lexer, parser) {\n  return (src, opt, callback) => {\n    if (typeof opt === 'function') {\n      callback = opt;\n      opt = null;\n    }\n\n    const origOpt = { ...opt };\n    opt = { ...marked.defaults, ...origOpt };\n    const throwError = onError(opt.silent, opt.async, callback);\n\n    // throw error in case of non string input\n    if (typeof src === 'undefined' || src === null) {\n      return throwError(new Error('marked(): input parameter is undefined or null'));\n    }\n    if (typeof src !== 'string') {\n      return throwError(new Error('marked(): input parameter is of type '\n        + Object.prototype.toString.call(src) + ', string expected'));\n    }\n\n    checkSanitizeDeprecation(opt);\n\n    if (opt.hooks) {\n      opt.hooks.options = opt;\n    }\n\n    if (callback) {\n      const highlight = opt.highlight;\n      let tokens;\n\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src);\n        }\n        tokens = lexer(src, opt);\n      } catch (e) {\n        return throwError(e);\n      }\n\n      const done = function(err) {\n        let out;\n\n        if (!err) {\n          try {\n            if (opt.walkTokens) {\n              marked.walkTokens(tokens, opt.walkTokens);\n            }\n            out = parser(tokens, opt);\n            if (opt.hooks) {\n              out = opt.hooks.postprocess(out);\n            }\n          } catch (e) {\n            err = e;\n          }\n        }\n\n        opt.highlight = highlight;\n\n        return err\n          ? throwError(err)\n          : callback(null, out);\n      };\n\n      if (!highlight || highlight.length < 3) {\n        return done();\n      }\n\n      delete opt.highlight;\n\n      if (!tokens.length) return done();\n\n      let pending = 0;\n      marked.walkTokens(tokens, function(token) {\n        if (token.type === 'code') {\n          pending++;\n          setTimeout(() => {\n            highlight(token.text, token.lang, function(err, code) {\n              if (err) {\n                return done(err);\n              }\n              if (code != null && code !== token.text) {\n                token.text = code;\n                token.escaped = true;\n              }\n\n              pending--;\n              if (pending === 0) {\n                done();\n              }\n            });\n          }, 0);\n        }\n      });\n\n      if (pending === 0) {\n        done();\n      }\n\n      return;\n    }\n\n    if (opt.async) {\n      return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n        .then(src => lexer(src, opt))\n        .then(tokens => opt.walkTokens ? Promise.all(marked.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n        .then(tokens => parser(tokens, opt))\n        .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n        .catch(throwError);\n    }\n\n    try {\n      if (opt.hooks) {\n        src = opt.hooks.preprocess(src);\n      }\n      const tokens = lexer(src, opt);\n      if (opt.walkTokens) {\n        marked.walkTokens(tokens, opt.walkTokens);\n      }\n      let html = parser(tokens, opt);\n      if (opt.hooks) {\n        html = opt.hooks.postprocess(html);\n      }\n      return html;\n    } catch (e) {\n      return throwError(e);\n    }\n  };\n}\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n  return parseMarkdown(Lexer.lex, Parser.parse)(src, opt, callback);\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n  marked.defaults = { ...marked.defaults, ...opt };\n  changeDefaults(marked.defaults);\n  return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args) {\n  const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };\n\n  args.forEach((pack) => {\n    // copy options to new object\n    const opts = { ...pack };\n\n    // set async to true if it was set to true before\n    opts.async = marked.defaults.async || opts.async || false;\n\n    // ==-- Parse \"addon\" extensions --== //\n    if (pack.extensions) {\n      pack.extensions.forEach((ext) => {\n        if (!ext.name) {\n          throw new Error('extension name required');\n        }\n        if (ext.renderer) { // Renderer extensions\n          const prevRenderer = extensions.renderers[ext.name];\n          if (prevRenderer) {\n            // Replace extension with func to run new extension but fall back if false\n            extensions.renderers[ext.name] = function(...args) {\n              let ret = ext.renderer.apply(this, args);\n              if (ret === false) {\n                ret = prevRenderer.apply(this, args);\n              }\n              return ret;\n            };\n          } else {\n            extensions.renderers[ext.name] = ext.renderer;\n          }\n        }\n        if (ext.tokenizer) { // Tokenizer Extensions\n          if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n            throw new Error(\"extension level must be 'block' or 'inline'\");\n          }\n          if (extensions[ext.level]) {\n            extensions[ext.level].unshift(ext.tokenizer);\n          } else {\n            extensions[ext.level] = [ext.tokenizer];\n          }\n          if (ext.start) { // Function to check for start of token\n            if (ext.level === 'block') {\n              if (extensions.startBlock) {\n                extensions.startBlock.push(ext.start);\n              } else {\n                extensions.startBlock = [ext.start];\n              }\n            } else if (ext.level === 'inline') {\n              if (extensions.startInline) {\n                extensions.startInline.push(ext.start);\n              } else {\n                extensions.startInline = [ext.start];\n              }\n            }\n          }\n        }\n        if (ext.childTokens) { // Child tokens to be visited by walkTokens\n          extensions.childTokens[ext.name] = ext.childTokens;\n        }\n      });\n      opts.extensions = extensions;\n    }\n\n    // ==-- Parse \"overwrite\" extensions --== //\n    if (pack.renderer) {\n      const renderer = marked.defaults.renderer || new Renderer();\n      for (const prop in pack.renderer) {\n        const prevRenderer = renderer[prop];\n        // Replace renderer with func to run extension, but fall back if false\n        renderer[prop] = (...args) => {\n          let ret = pack.renderer[prop].apply(renderer, args);\n          if (ret === false) {\n            ret = prevRenderer.apply(renderer, args);\n          }\n          return ret;\n        };\n      }\n      opts.renderer = renderer;\n    }\n    if (pack.tokenizer) {\n      const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n      for (const prop in pack.tokenizer) {\n        const prevTokenizer = tokenizer[prop];\n        // Replace tokenizer with func to run extension, but fall back if false\n        tokenizer[prop] = (...args) => {\n          let ret = pack.tokenizer[prop].apply(tokenizer, args);\n          if (ret === false) {\n            ret = prevTokenizer.apply(tokenizer, args);\n          }\n          return ret;\n        };\n      }\n      opts.tokenizer = tokenizer;\n    }\n\n    // ==-- Parse Hooks extensions --== //\n    if (pack.hooks) {\n      const hooks = marked.defaults.hooks || new Hooks();\n      for (const prop in pack.hooks) {\n        const prevHook = hooks[prop];\n        if (Hooks.passThroughHooks.has(prop)) {\n          hooks[prop] = (arg) => {\n            if (marked.defaults.async) {\n              return Promise.resolve(pack.hooks[prop].call(hooks, arg)).then(ret => {\n                return prevHook.call(hooks, ret);\n              });\n            }\n\n            const ret = pack.hooks[prop].call(hooks, arg);\n            return prevHook.call(hooks, ret);\n          };\n        } else {\n          hooks[prop] = (...args) => {\n            let ret = pack.hooks[prop].apply(hooks, args);\n            if (ret === false) {\n              ret = prevHook.apply(hooks, args);\n            }\n            return ret;\n          };\n        }\n      }\n      opts.hooks = hooks;\n    }\n\n    // ==-- Parse WalkTokens extensions --== //\n    if (pack.walkTokens) {\n      const walkTokens = marked.defaults.walkTokens;\n      opts.walkTokens = function(token) {\n        let values = [];\n        values.push(pack.walkTokens.call(this, token));\n        if (walkTokens) {\n          values = values.concat(walkTokens.call(this, token));\n        }\n        return values;\n      };\n    }\n\n    marked.setOptions(opts);\n  });\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n  let values = [];\n  for (const token of tokens) {\n    values = values.concat(callback.call(marked, token));\n    switch (token.type) {\n      case 'table': {\n        for (const cell of token.header) {\n          values = values.concat(marked.walkTokens(cell.tokens, callback));\n        }\n        for (const row of token.rows) {\n          for (const cell of row) {\n            values = values.concat(marked.walkTokens(cell.tokens, callback));\n          }\n        }\n        break;\n      }\n      case 'list': {\n        values = values.concat(marked.walkTokens(token.items, callback));\n        break;\n      }\n      default: {\n        if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions\n          marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {\n            values = values.concat(marked.walkTokens(token[childTokens], callback));\n          });\n        } else if (token.tokens) {\n          values = values.concat(marked.walkTokens(token.tokens, callback));\n        }\n      }\n    }\n  }\n  return values;\n};\n\n/**\n * Parse Inline\n * @param {string} src\n */\nmarked.parseInline = parseMarkdown(Lexer.lexInline, Parser.parseInline);\n\n/**\n * Expose\n */\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.Tokenizer = Tokenizer;\nmarked.Slugger = Slugger;\nmarked.Hooks = Hooks;\nmarked.parse = marked;\n\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = Parser.parse;\nconst lexer = Lexer.lex;\n\nexport { Hooks, Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n","import { marked } from 'marked';\n\nimport { highlight, safeSlugify, unescapeHTMLChars } from '../utils';\nimport { RedocNormalizedOptions } from './RedocNormalizedOptions';\nimport type { MarkdownHeading, MDXComponentMeta } from './types';\n\nconst renderer = new marked.Renderer();\n\nmarked.setOptions({\n  renderer,\n  highlight: (str, lang) => {\n    return highlight(str, lang);\n  },\n});\n\nexport const LEGACY_REGEXP = '^ {0,3}<!-- ReDoc-Inject:\\\\s+?<({component}).*?/?>\\\\s+?-->\\\\s*$';\n\n// prettier-ignore\nexport const MDX_COMPONENT_REGEXP = '(?:^ {0,3}<({component})([\\\\s\\\\S]*?)>([\\\\s\\\\S]*?)</\\\\2>' // with children\n  + '|^ {0,3}<({component})([\\\\s\\\\S]*?)(?:/>|\\\\n{2,}))'; // self-closing\n\nexport const COMPONENT_REGEXP = '(?:' + LEGACY_REGEXP + '|' + MDX_COMPONENT_REGEXP + ')';\n\nexport function buildComponentComment(name: string) {\n  return `<!-- ReDoc-Inject: <${name}> -->`;\n}\n\nexport class MarkdownRenderer {\n  static containsComponent(rawText: string, componentName: string) {\n    const compRegexp = new RegExp(COMPONENT_REGEXP.replace(/{component}/g, componentName), 'gmi');\n    return compRegexp.test(rawText);\n  }\n\n  static getTextBeforeHading(md: string, heading: string): string {\n    const headingLinePos = md.search(new RegExp(`^##?\\\\s+${heading}`, 'm'));\n    if (headingLinePos > -1) {\n      return md.substring(0, headingLinePos);\n    }\n    return md;\n  }\n\n  headings: MarkdownHeading[] = [];\n  currentTopHeading: MarkdownHeading;\n\n  public parser: marked.Parser; // required initialization, `parser` is used by `marked.Renderer` instance under the hood\n  private headingEnhanceRenderer: marked.Renderer;\n  private originalHeadingRule: typeof marked.Renderer.prototype.heading;\n\n  constructor(public options?: RedocNormalizedOptions, public parentId?: string) {\n    this.parentId = parentId;\n    this.parser = new marked.Parser();\n    this.headingEnhanceRenderer = new marked.Renderer();\n    this.originalHeadingRule = this.headingEnhanceRenderer.heading.bind(\n      this.headingEnhanceRenderer,\n    );\n    this.headingEnhanceRenderer.heading = this.headingRule;\n  }\n\n  saveHeading(\n    name: string,\n    level: number,\n    container: MarkdownHeading[] = this.headings,\n    parentId?: string,\n  ): MarkdownHeading {\n    name = unescapeHTMLChars(name);\n    const item: MarkdownHeading = {\n      id: parentId\n        ? `${parentId}/${safeSlugify(name)}`\n        : `${this.parentId || 'section'}/${safeSlugify(name)}`,\n      name,\n      level,\n      items: [],\n    };\n    container.push(item);\n    return item;\n  }\n\n  flattenHeadings(container?: MarkdownHeading[]): MarkdownHeading[] {\n    if (container === undefined) {\n      return [];\n    }\n    const res: MarkdownHeading[] = [];\n    for (const heading of container) {\n      res.push(heading);\n      res.push(...this.flattenHeadings(heading.items));\n    }\n    return res;\n  }\n\n  attachHeadingsDescriptions(rawText: string) {\n    const buildRegexp = (heading: MarkdownHeading) => {\n      return new RegExp(\n        `##?\\\\s+${heading.name.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')}\\s*(\\n|\\r\\n|$|\\s*)`,\n      );\n    };\n\n    const flatHeadings = this.flattenHeadings(this.headings);\n    if (flatHeadings.length < 1) {\n      return;\n    }\n    let prevHeading = flatHeadings[0];\n    let prevRegexp = buildRegexp(prevHeading);\n    let prevPos = rawText.search(prevRegexp);\n    for (let i = 1; i < flatHeadings.length; i++) {\n      const heading = flatHeadings[i];\n      const regexp = buildRegexp(heading);\n      const currentPos = rawText.substr(prevPos + 1).search(regexp) + prevPos + 1;\n      prevHeading.description = rawText\n        .substring(prevPos, currentPos)\n        .replace(prevRegexp, '')\n        .trim();\n\n      prevHeading = heading;\n      prevRegexp = regexp;\n      prevPos = currentPos;\n    }\n    prevHeading.description = rawText.substring(prevPos).replace(prevRegexp, '').trim();\n  }\n\n  headingRule = (\n    text: string,\n    level: 1 | 2 | 3 | 4 | 5 | 6,\n    raw: string,\n    slugger: marked.Slugger,\n  ): string => {\n    if (level === 1) {\n      this.currentTopHeading = this.saveHeading(text, level);\n    } else if (level === 2) {\n      this.saveHeading(\n        text,\n        level,\n        this.currentTopHeading && this.currentTopHeading.items,\n        this.currentTopHeading && this.currentTopHeading.id,\n      );\n    }\n    return this.originalHeadingRule(text, level, raw, slugger);\n  };\n\n  renderMd(rawText: string, extractHeadings: boolean = false): string {\n    const opts = extractHeadings ? { renderer: this.headingEnhanceRenderer } : undefined;\n\n    const res = marked(rawText.toString(), opts);\n\n    return res;\n  }\n\n  extractHeadings(rawText: string): MarkdownHeading[] {\n    this.renderMd(rawText, true);\n    this.attachHeadingsDescriptions(rawText);\n    const res = this.headings;\n    this.headings = [];\n    return res;\n  }\n\n  // regexp-based 👎: remark is slow and too big so for now using marked + regexps soup\n  renderMdWithComponents(rawText: string): Array<string | MDXComponentMeta> {\n    const components = this.options && this.options.allowedMdComponents;\n    if (!components || Object.keys(components).length === 0) {\n      return [this.renderMd(rawText)];\n    }\n\n    const names = Object.keys(components).join('|');\n    const componentsRegexp = new RegExp(COMPONENT_REGEXP.replace(/{component}/g, names), 'mig');\n\n    const htmlParts: string[] = [];\n    const componentDefs: MDXComponentMeta[] = [];\n\n    let match = componentsRegexp.exec(rawText);\n    let lasxtIdx = 0;\n    while (match) {\n      htmlParts.push(rawText.substring(lasxtIdx, match.index));\n      lasxtIdx = componentsRegexp.lastIndex;\n      const compName = match[1] || match[2] || match[5];\n      const componentMeta = components[compName];\n\n      const props = match[3] || match[6];\n      const children = match[4];\n\n      if (componentMeta) {\n        componentDefs.push({\n          component: componentMeta.component,\n          propsSelector: componentMeta.propsSelector,\n          props: { ...parseProps(props), ...componentMeta.props, children },\n        });\n      }\n      match = componentsRegexp.exec(rawText);\n    }\n    htmlParts.push(rawText.substring(lasxtIdx));\n\n    const res: any[] = [];\n    for (let i = 0; i < htmlParts.length; i++) {\n      const htmlPart = htmlParts[i];\n      if (htmlPart) {\n        res.push(this.renderMd(htmlPart));\n      }\n      if (componentDefs[i]) {\n        res.push(componentDefs[i]);\n      }\n    }\n    return res;\n  }\n}\n\nfunction parseProps(props: string): object {\n  if (!props) {\n    return {};\n  }\n\n  const regex = /([\\w-]+)\\s*=\\s*(?:{([^}]+?)}|\"([^\"]+?)\")/gim;\n  const parsed = {};\n  let match;\n  // tslint:disable-next-line\n  while ((match = regex.exec(props)) !== null) {\n    if (match[3]) {\n      // string prop match (in double quotes)\n      parsed[match[1]] = match[3];\n    } else if (match[2]) {\n      // jsx prop match (in curly braces)\n      let val;\n      try {\n        val = JSON.parse(match[2]);\n      } catch (e) {\n        /* noop */\n      }\n      parsed[match[1]] = val;\n    }\n  }\n\n  return parsed;\n}\n","import type { OpenAPIContact, OpenAPIInfo, OpenAPILicense } from '../../types';\nimport { IS_BROWSER } from '../../utils/';\nimport { l } from '../Labels';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport { RedocNormalizedOptions } from '../RedocNormalizedOptions';\n\nexport class ApiInfoModel implements OpenAPIInfo {\n  title: string;\n  version: string;\n\n  description: string;\n  summary: string;\n  termsOfService?: string;\n  contact?: OpenAPIContact;\n  license?: OpenAPILicense;\n\n  downloadUrls: {\n    title?: string;\n    url?: string;\n  }[];\n  downloadFileName?: string;\n\n  constructor(\n    private parser: OpenAPIParser,\n    private options: RedocNormalizedOptions = new RedocNormalizedOptions({}),\n  ) {\n    Object.assign(this, parser.spec.info);\n    this.description = parser.spec.info.description || '';\n    this.summary = parser.spec.info.summary || '';\n\n    const firstHeadingLinePos = this.description.search(/^\\s*##?\\s+/m);\n    if (firstHeadingLinePos > -1) {\n      this.description = this.description.substring(0, firstHeadingLinePos);\n    }\n\n    this.downloadUrls = this.getDownloadUrls();\n    this.downloadFileName = this.getDownloadFileName();\n  }\n  private getDownloadUrls() {\n    return (\n      !this.options.downloadUrls\n        ? [\n            {\n              title: l('download'),\n              url: this.getDownloadLink(this.options.downloadDefinitionUrl),\n            },\n          ]\n        : this.options.downloadUrls.map(({ title, url }) => ({\n            title: title || l('download'),\n            url: this.getDownloadLink(url),\n          }))\n    ).filter(({ title, url }) => title && url);\n  }\n\n  private getDownloadLink(url?: string): string | undefined {\n    if (url) {\n      return url;\n    }\n\n    if (this.parser.specUrl) {\n      return this.parser.specUrl;\n    }\n\n    if (IS_BROWSER && window.Blob && window.URL && window.URL.createObjectURL) {\n      const blob = new Blob([JSON.stringify(this.parser.spec, null, 2)], {\n        type: 'application/json',\n      });\n      return window.URL.createObjectURL(blob);\n    }\n  }\n\n  private getDownloadFileName(): string | undefined {\n    if (!this.parser.specUrl && !this.options.downloadDefinitionUrl) {\n      return this.options.downloadFileName || 'openapi.json';\n    }\n    return this.options.downloadFileName;\n  }\n}\n","import type { OpenAPISecurityRequirement, OpenAPISecurityScheme } from '../../types';\nimport type { OpenAPIParser } from '../OpenAPIParser';\n\nexport interface SecurityScheme extends OpenAPISecurityScheme {\n  id: string;\n  sectionId: string;\n  displayName: string;\n  scopes: string[];\n}\n\nexport class SecurityRequirementModel {\n  schemes: SecurityScheme[];\n\n  constructor(requirement: OpenAPISecurityRequirement, parser: OpenAPIParser) {\n    const schemes = (parser.spec.components && parser.spec.components.securitySchemes) || {};\n\n    this.schemes = Object.keys(requirement || {})\n      .map(id => {\n        const { resolved: scheme } = parser.deref(schemes[id]);\n        const scopes = requirement[id] || [];\n\n        if (!scheme) {\n          console.warn(`Non existing security scheme referenced: ${id}. Skipping`);\n          return undefined;\n        }\n        const displayName = scheme['x-displayName'] || id;\n\n        return {\n          ...scheme,\n          id,\n          sectionId: id,\n          displayName,\n          scopes,\n        };\n      })\n      .filter(scheme => scheme !== undefined) as SecurityScheme[];\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport { isOperationName, JsonPointer } from '../../utils';\nimport { OperationModel } from './Operation';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport type { OpenAPICallback, Referenced } from '../../types';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\n\nexport class CallbackModel {\n  @observable\n  expanded: boolean = false;\n\n  name: string;\n  operations: OperationModel[] = [];\n\n  constructor(\n    parser: OpenAPIParser,\n    name: string,\n    infoOrRef: Referenced<OpenAPICallback>,\n    pointer: string,\n    options: RedocNormalizedOptions,\n  ) {\n    makeObservable(this);\n\n    this.name = name;\n    const { resolved: paths } = parser.deref<OpenAPICallback>(infoOrRef);\n\n    for (const pathName of Object.keys(paths)) {\n      const path = paths[pathName];\n      const operations = Object.keys(path).filter(isOperationName);\n      for (const operationName of operations) {\n        const operationInfo = path[operationName];\n\n        const operation = new OperationModel(\n          parser,\n          {\n            ...operationInfo,\n            pathName,\n            pointer: JsonPointer.compile([pointer, name, pathName, operationName]),\n            httpVerb: operationName,\n            pathParameters: path.parameters || [],\n            pathServers: path.servers,\n          },\n          undefined,\n          options,\n          true,\n        );\n\n        this.operations.push(operation);\n      }\n    }\n  }\n\n  @action\n  toggle() {\n    this.expanded = !this.expanded;\n  }\n}\n","import type { OpenAPIRef, OpenAPISchema, OpenAPISpec } from '../types';\nimport { IS_BROWSER, getDefinitionName } from '../utils/';\nimport { JsonPointer } from '../utils/JsonPointer';\n\nimport { RedocNormalizedOptions } from './RedocNormalizedOptions';\nimport type { MergedOpenAPISchema } from './types';\n\nconst MAX_DEREF_DEPTH = 999; // prevent circular detection crashes by adding hard limit on deref depth\n\n/**\n * Loads and keeps spec. Provides raw spec operations\n */\n\nexport function pushRef(stack: string[], ref?: string): string[] {\n  return ref && stack[stack.length - 1] !== ref ? [...stack, ref] : stack;\n}\n\nexport function concatRefStacks(base: string[], stack?: string[]): string[] {\n  return stack ? base.concat(stack) : base;\n}\n\nexport class OpenAPIParser {\n  specUrl?: string;\n  spec: OpenAPISpec;\n\n  private readonly allowMergeRefs: boolean = false;\n\n  constructor(\n    spec: OpenAPISpec,\n    specUrl?: string,\n    private options: RedocNormalizedOptions = new RedocNormalizedOptions({}),\n  ) {\n    this.validate(spec);\n\n    this.spec = spec;\n    this.allowMergeRefs = spec.openapi.startsWith('3.1');\n\n    const href = IS_BROWSER ? window.location.href : '';\n    if (typeof specUrl === 'string') {\n      this.specUrl = href ? new URL(specUrl, href).href : specUrl;\n    }\n  }\n\n  validate(spec: Record<string, any>): void {\n    if (spec.openapi === undefined) {\n      throw new Error('Document must be valid OpenAPI 3.0.0 definition');\n    }\n  }\n\n  /**\n   * get spec part by JsonPointer ($ref)\n   */\n  byRef = <T = any>(ref: string): T | undefined => {\n    let res;\n    if (!this.spec) {\n      return;\n    }\n    if (ref.charAt(0) !== '#') {\n      ref = '#' + ref;\n    }\n    ref = decodeURIComponent(ref);\n    try {\n      res = JsonPointer.get(this.spec, ref);\n    } catch (e) {\n      // do nothing\n    }\n    return res || {};\n  };\n\n  /**\n   * checks if the object is OpenAPI reference (contains $ref property)\n   */\n  isRef<T>(obj: OpenAPIRef | T): obj is OpenAPIRef {\n    if (!obj) {\n      return false;\n    }\n    obj = <OpenAPIRef>obj;\n    return obj.$ref !== undefined && obj.$ref !== null;\n  }\n\n  /**\n   * Resolve given reference object or return as is if it is not a reference\n   * @param obj object to dereference\n   * @param forceCircular whether to dereference even if it is circular ref\n   * @param mergeAsAllOf\n   */\n  deref<T>(\n    obj: OpenAPIRef | T,\n    baseRefsStack: string[] = [],\n    mergeAsAllOf = false,\n  ): { resolved: T; refsStack: string[] } {\n    // this can be set by all of when it mergers props from different sources\n    const objRefsStack = obj?.['x-refsStack'];\n    baseRefsStack = concatRefStacks(baseRefsStack, objRefsStack);\n\n    if (this.isRef(obj)) {\n      const schemaName = getDefinitionName(obj.$ref);\n      if (schemaName && this.options.ignoreNamedSchemas.has(schemaName)) {\n        return { resolved: { type: 'object', title: schemaName } as T, refsStack: baseRefsStack };\n      }\n\n      let resolved = this.byRef<T>(obj.$ref);\n      if (!resolved) {\n        throw new Error(`Failed to resolve $ref \"${obj.$ref}\"`);\n      }\n\n      let refsStack = baseRefsStack;\n      if (baseRefsStack.includes(obj.$ref) || baseRefsStack.length > MAX_DEREF_DEPTH) {\n        resolved = Object.assign({}, resolved, { 'x-circular-ref': true });\n      } else if (this.isRef(resolved)) {\n        const res = this.deref(resolved, baseRefsStack, mergeAsAllOf);\n        refsStack = res.refsStack;\n        resolved = res.resolved;\n      }\n\n      refsStack = pushRef(baseRefsStack, obj.$ref);\n      resolved = this.allowMergeRefs ? this.mergeRefs(obj, resolved, mergeAsAllOf) : resolved;\n\n      return { resolved, refsStack };\n    }\n    return {\n      resolved: obj,\n      refsStack: concatRefStacks(baseRefsStack, objRefsStack),\n    };\n  }\n\n  mergeRefs<T>(ref: OpenAPIRef, resolved: T, mergeAsAllOf: boolean): T {\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    const { $ref, ...rest } = ref;\n    const keys = Object.keys(rest);\n    if (keys.length === 0) {\n      return resolved;\n    }\n    if (\n      mergeAsAllOf &&\n      keys.some(\n        k =>\n          ![\n            'description',\n            'title',\n            'externalDocs',\n            'x-refsStack',\n            'x-parentRefs',\n            'readOnly',\n            'writeOnly',\n          ].includes(k),\n      )\n    ) {\n      const { description, title, readOnly, writeOnly, ...restSchema } = rest as OpenAPISchema;\n      return {\n        allOf: [{ description, title, readOnly, writeOnly }, resolved, restSchema],\n      } as T;\n    } else {\n      // small optimization\n      return {\n        ...(resolved as object),\n        ...rest,\n      } as T;\n    }\n  }\n\n  /**\n   * Merge allOf constraints.\n   * @param schema schema with allOF\n   * @param $ref pointer of the schema\n   * @param forceCircular whether to dereference children even if it is a circular ref\n   * @param used$Refs\n   */\n  mergeAllOf(\n    schema: MergedOpenAPISchema,\n    $ref: string | undefined,\n    refsStack: string[],\n  ): MergedOpenAPISchema {\n    if (schema['x-circular-ref']) {\n      return schema;\n    }\n\n    schema = this.hoistOneOfs(schema, refsStack);\n\n    if (schema.allOf === undefined) {\n      return schema;\n    }\n\n    let receiver: MergedOpenAPISchema = {\n      ...schema,\n      'x-parentRefs': [],\n      allOf: undefined,\n      title: schema.title || getDefinitionName($ref),\n    };\n\n    // avoid mutating inner objects\n    if (receiver.properties !== undefined && typeof receiver.properties === 'object') {\n      receiver.properties = { ...receiver.properties };\n    }\n    if (receiver.items !== undefined && typeof receiver.items === 'object') {\n      receiver.items = { ...receiver.items };\n    }\n\n    const allOfSchemas = uniqByPropIncludeMissing(\n      schema.allOf\n        .map((subSchema: OpenAPISchema) => {\n          const { resolved, refsStack: subRefsStack } = this.deref(subSchema, refsStack, true);\n\n          const subRef = subSchema.$ref || undefined;\n          const subMerged = this.mergeAllOf(resolved, subRef, subRefsStack);\n          if (subMerged['x-circular-ref'] && subMerged.allOf) {\n            // if mergeAllOf is circular and still contains allOf, we should ignore it\n            return undefined;\n          }\n          if (subRef) {\n            // collect information for implicit descriminator lookup\n            receiver['x-parentRefs']?.push(...(subMerged['x-parentRefs'] || []), subRef);\n          }\n          return {\n            $ref: subRef,\n            refsStack: pushRef(subRefsStack, subRef),\n            schema: subMerged,\n          };\n        })\n        .filter(child => child !== undefined) as Array<{\n        schema: MergedOpenAPISchema;\n        refsStack: string[];\n        $ref?: string;\n      }>,\n      '$ref',\n    );\n\n    for (const { schema: subSchema, refsStack: subRefsStack } of allOfSchemas) {\n      const {\n        type,\n        enum: enumProperty,\n        properties,\n        items,\n        required,\n        title,\n        description,\n        readOnly,\n        writeOnly,\n        oneOf,\n        anyOf,\n        'x-circular-ref': isCircular,\n        ...otherConstraints\n      } = subSchema;\n\n      if (receiver.type !== type && receiver.type !== undefined && type !== undefined) {\n        console.warn(`Incompatible types in allOf at \"${$ref}\": \"${receiver.type}\" and \"${type}\"`);\n      }\n\n      if (type !== undefined) {\n        if (Array.isArray(type) && Array.isArray(receiver.type)) {\n          receiver.type = [...type, ...receiver.type];\n        } else {\n          receiver.type = type;\n        }\n      }\n\n      if (enumProperty !== undefined) {\n        if (Array.isArray(enumProperty) && Array.isArray(receiver.enum)) {\n          receiver.enum = Array.from(new Set([...enumProperty, ...receiver.enum]));\n        } else {\n          receiver.enum = enumProperty;\n        }\n      }\n\n      if (properties !== undefined && typeof properties === 'object') {\n        receiver.properties = receiver.properties || {};\n        for (const prop in properties) {\n          const propRefsStack = concatRefStacks(subRefsStack, properties[prop]?.['x-refsStack']);\n          if (!receiver.properties[prop]) {\n            receiver.properties[prop] = {\n              ...properties[prop],\n              'x-refsStack': propRefsStack,\n            } as MergedOpenAPISchema;\n          } else if (!isCircular) {\n            // merge inner properties\n            const mergedProp = this.mergeAllOf(\n              {\n                allOf: [\n                  receiver.properties[prop],\n                  { ...properties[prop], 'x-refsStack': propRefsStack } as any,\n                ],\n                'x-refsStack': propRefsStack,\n              },\n              $ref + '/properties/' + prop,\n              propRefsStack,\n            );\n            receiver.properties[prop] = mergedProp;\n          }\n        }\n      }\n\n      if (items !== undefined && !isCircular) {\n        const receiverItems =\n          typeof receiver.items === 'boolean'\n            ? {}\n            : (Object.assign({}, receiver.items) as OpenAPISchema);\n        const subSchemaItems =\n          typeof subSchema.items === 'boolean'\n            ? {}\n            : (Object.assign({}, subSchema.items) as OpenAPISchema);\n        // merge inner properties\n        receiver.items = this.mergeAllOf(\n          {\n            allOf: [receiverItems, subSchemaItems],\n          },\n          $ref + '/items',\n          subRefsStack,\n        );\n      }\n      if (oneOf !== undefined) {\n        receiver.oneOf = oneOf;\n      }\n\n      if (anyOf !== undefined) {\n        receiver.anyOf = anyOf;\n      }\n\n      if (required !== undefined) {\n        receiver.required = [...(receiver.required || []), ...required];\n      }\n\n      // merge rest of constraints\n      // TODO: do more intelligent merge\n      receiver = {\n        ...receiver,\n        title: receiver.title || title,\n        description: receiver.description || description,\n        readOnly: receiver.readOnly !== undefined ? receiver.readOnly : readOnly,\n        writeOnly: receiver.writeOnly !== undefined ? receiver.writeOnly : writeOnly,\n        'x-circular-ref': receiver['x-circular-ref'] || isCircular,\n        ...otherConstraints,\n      };\n    }\n\n    return receiver;\n  }\n\n  /**\n   * Find all derived definitions among #/components/schemas from any of $refs\n   * returns map of definition pointer to definition name\n   * @param $refs array of references to find derived from\n   */\n  findDerived($refs: string[]): Record<string, string[] | string> {\n    const res: Record<string, string[]> = {};\n    const schemas = (this.spec.components && this.spec.components.schemas) || {};\n    for (const defName in schemas) {\n      const { resolved: def } = this.deref(schemas[defName]);\n      if (\n        def.allOf !== undefined &&\n        def.allOf.find(\n          (obj: OpenAPISchema) => obj.$ref !== undefined && $refs.indexOf(obj.$ref) > -1,\n        )\n      ) {\n        res['#/components/schemas/' + defName] = [def['x-discriminator-value'] || defName];\n      }\n    }\n    return res;\n  }\n\n  private hoistOneOfs(schema: OpenAPISchema, refsStack: string[]) {\n    if (schema.allOf === undefined) {\n      return schema;\n    }\n\n    const allOf = schema.allOf;\n    for (let i = 0; i < allOf.length; i++) {\n      const { oneOf, ...sub } = allOf[i];\n      if (!oneOf) {\n        continue;\n      }\n      if (Array.isArray(oneOf)) {\n        const beforeAllOf = allOf.slice(0, i);\n        const afterAllOf = allOf.slice(i + 1);\n        const siblingValues = Object.keys(sub).length > 0 ? [sub] : [];\n        return {\n          oneOf: oneOf.map((part: OpenAPISchema) => {\n            return {\n              allOf: [...beforeAllOf, ...siblingValues, part, ...afterAllOf],\n              'x-refsStack': refsStack,\n            };\n          }),\n        };\n      }\n    }\n\n    return schema;\n  }\n}\n\n/**\n * Unique array by property, missing properties are included\n */\nfunction uniqByPropIncludeMissing<T extends object>(arr: T[], prop: keyof T): T[] {\n  const seen = new Set();\n  return arr.filter(item => {\n    const k = item[prop];\n    if (!k) return true;\n    return k && !seen.has(k) && seen.add(k);\n  });\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport type { OpenAPIExternalDocumentation, OpenAPISchema, Referenced } from '../../types';\n\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport { pushRef } from '../OpenAPIParser';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport { FieldModel } from './Field';\n\nimport { MergedOpenAPISchema } from '../types';\nimport {\n  detectType,\n  extractExtensions,\n  humanizeConstraints,\n  isArray,\n  isBoolean,\n  isNamedDefinition,\n  isObject,\n  isPrimitiveType,\n  JsonPointer,\n  pluralizeType,\n  sortByField,\n  sortByRequired,\n} from '../../utils/';\n\nimport { l } from '../Labels';\n\n// TODO: refactor this model, maybe use getters instead of copying all the values\nexport class SchemaModel {\n  pointer: string;\n\n  type: string | string[];\n  displayType: string;\n  typePrefix: string = '';\n  title: string;\n  description: string;\n  externalDocs?: OpenAPIExternalDocumentation;\n\n  isPrimitive: boolean;\n  isCircular: boolean = false;\n\n  format?: string;\n  displayFormat?: string;\n  nullable: boolean;\n  deprecated: boolean;\n  pattern?: string;\n  example?: any;\n  examples?: any[];\n  enum: any[];\n  default?: any;\n  readOnly: boolean;\n  writeOnly: boolean;\n\n  constraints: string[];\n\n  fields?: FieldModel[];\n  items?: SchemaModel;\n\n  oneOf?: SchemaModel[];\n  oneOfType: string;\n  discriminatorProp: string;\n  @observable\n  activeOneOf: number = 0;\n\n  rawSchema: OpenAPISchema;\n  schema: MergedOpenAPISchema;\n  extensions?: Record<string, any>;\n  'x-enumDescriptions': { [name: string]: string };\n  const: any;\n  contentEncoding?: string;\n  contentMediaType?: string;\n  minItems?: number;\n  maxItems?: number;\n\n  /**\n   * @param isChild if schema discriminator Child\n   * When true forces dereferencing in allOfs even if circular\n   */\n  constructor(\n    parser: OpenAPIParser,\n    schemaOrRef: Referenced<OpenAPISchema>,\n    pointer: string,\n    private options: RedocNormalizedOptions,\n    isChild: boolean = false,\n    private refsStack: string[] = [],\n  ) {\n    makeObservable(this);\n\n    this.pointer = schemaOrRef.$ref || pointer || '';\n\n    const { resolved, refsStack: newRefsStack } = parser.deref(schemaOrRef, refsStack, true);\n    this.refsStack = pushRef(newRefsStack, this.pointer);\n    this.rawSchema = resolved;\n\n    this.schema = parser.mergeAllOf(this.rawSchema, this.pointer, this.refsStack);\n    this.init(parser, isChild);\n\n    if (options.showExtensions) {\n      this.extensions = extractExtensions(this.schema, options.showExtensions);\n    }\n  }\n\n  /**\n   * Set specified alternative schema as active\n   * @param idx oneOf index\n   */\n  @action\n  activateOneOf(idx: number) {\n    this.activeOneOf = idx;\n  }\n\n  hasType(type: string) {\n    return this.type === type || (isArray(this.type) && this.type.includes(type));\n  }\n\n  init(parser: OpenAPIParser, isChild: boolean) {\n    const schema = this.schema;\n    this.isCircular = !!schema['x-circular-ref'];\n\n    this.title =\n      schema.title || (isNamedDefinition(this.pointer) && JsonPointer.baseName(this.pointer)) || '';\n    this.description = schema.description || '';\n    this.type = schema.type || detectType(schema);\n    this.format = schema.format;\n    this.enum = schema.enum || [];\n    this['x-enumDescriptions'] = schema['x-enumDescriptions'];\n    this.example = schema.example;\n    this.examples = schema.examples;\n    this.deprecated = !!schema.deprecated;\n    this.pattern = schema.pattern;\n    this.externalDocs = schema.externalDocs;\n\n    this.constraints = humanizeConstraints(schema);\n    this.displayFormat = this.format;\n    this.isPrimitive = isPrimitiveType(schema, this.type);\n    this.default = schema.default;\n    this.readOnly = !!schema.readOnly;\n    this.writeOnly = !!schema.writeOnly;\n    this.const = schema.const || '';\n    this.contentEncoding = schema.contentEncoding;\n    this.contentMediaType = schema.contentMediaType;\n    this.minItems = schema.minItems;\n    this.maxItems = schema.maxItems;\n\n    if (!!schema.nullable || schema['x-nullable']) {\n      if (isArray(this.type) && !this.type.some(value => value === null || value === 'null')) {\n        this.type = [...this.type, 'null'];\n      } else if (!isArray(this.type) && (this.type !== null || this.type !== 'null')) {\n        this.type = [this.type, 'null'];\n      }\n    }\n\n    this.displayType = isArray(this.type)\n      ? this.type.map(item => (item === null ? 'null' : item)).join(' or ')\n      : this.type;\n\n    if (this.isCircular) {\n      return;\n    }\n\n    if ((schema.if && schema.then) || (schema.if && schema.else)) {\n      this.initConditionalOperators(schema, parser);\n      return;\n    }\n\n    if (!isChild && getDiscriminator(schema) !== undefined) {\n      this.initDiscriminator(schema, parser);\n      return;\n    } else if (\n      isChild &&\n      isArray(schema.oneOf) &&\n      schema.oneOf.find(s => s.$ref === this.pointer)\n    ) {\n      // we hit allOf of the schema with the parent discriminator\n      delete schema.oneOf;\n    }\n\n    if (schema.oneOf !== undefined) {\n      this.initOneOf(schema.oneOf, parser);\n      this.oneOfType = 'One of';\n      if (schema.anyOf !== undefined) {\n        console.warn(\n          `oneOf and anyOf are not supported on the same level. Skipping anyOf at ${this.pointer}`,\n        );\n      }\n      return;\n    }\n\n    if (schema.anyOf !== undefined) {\n      this.initOneOf(schema.anyOf, parser);\n      this.oneOfType = 'Any of';\n      return;\n    }\n\n    if (this.hasType('object')) {\n      this.fields = buildFields(parser, schema, this.pointer, this.options, this.refsStack);\n    } else if (this.hasType('array')) {\n      if (isArray(schema.items) || isArray(schema.prefixItems)) {\n        this.fields = buildFields(parser, schema, this.pointer, this.options, this.refsStack);\n      } else if (schema.items) {\n        this.items = new SchemaModel(\n          parser,\n          schema.items as OpenAPISchema,\n          this.pointer + '/items',\n          this.options,\n          false,\n          this.refsStack,\n        );\n      }\n\n      this.displayType =\n        schema.prefixItems || isArray(schema.items)\n          ? 'items'\n          : pluralizeType(this.items?.displayType || this.displayType);\n      this.displayFormat = this.items?.format || '';\n      this.typePrefix = this.items?.typePrefix || '' + l('arrayOf');\n      this.title = this.title || this.items?.title || '';\n      this.isPrimitive =\n        this.items?.isPrimitive !== undefined ? this.items?.isPrimitive : this.isPrimitive;\n\n      if (this.example === undefined && this.items?.example !== undefined) {\n        this.example = [this.items.example];\n      }\n      if (this.items?.isPrimitive) {\n        this.enum = this.items.enum;\n        this['x-enumDescriptions'] = this.items['x-enumDescriptions'];\n      }\n      if (isArray(this.type)) {\n        const filteredType = this.type.filter(item => item !== 'array');\n        if (filteredType.length) this.displayType += ` or ${filteredType.join(' or ')}`;\n      }\n    }\n\n    if (this.enum.length && this.options.sortEnumValuesAlphabetically) {\n      this.enum.sort();\n    }\n  }\n\n  private initOneOf(oneOf: OpenAPISchema[], parser: OpenAPIParser) {\n    this.oneOf = oneOf!.map((variant, idx) => {\n      const { resolved: derefVariant, refsStack } = parser.deref(variant, this.refsStack, true);\n\n      const merged = parser.mergeAllOf(derefVariant, this.pointer + '/oneOf/' + idx, refsStack);\n\n      // try to infer title\n      const title =\n        isNamedDefinition(variant.$ref) && !merged.title\n          ? JsonPointer.baseName(variant.$ref)\n          : `${merged.title || ''}${\n              (typeof merged.const !== 'undefined' && JSON.stringify(merged.const)) || ''\n            }`;\n      const schema = new SchemaModel(\n        parser,\n        // merge base schema into each of oneOf's subschemas\n        {\n          // variant may already have allOf so merge it to not get overwritten\n          ...merged,\n          title,\n          allOf: [{ ...this.schema, oneOf: undefined, anyOf: undefined }],\n          // if specific child schemas are listed in oneOf/anyOf, they are not supposed to be discriminated\n          discriminator: derefVariant.allOf ? undefined : merged.discriminator,\n        } as OpenAPISchema,\n        variant.$ref || this.pointer + '/oneOf/' + idx,\n        this.options,\n        false,\n        refsStack,\n      );\n\n      return schema;\n    });\n\n    if (this.options.simpleOneOfTypeLabel) {\n      const types = collectUniqueOneOfTypesDeep(this);\n      this.displayType = types.join(' or ');\n    } else {\n      this.displayType = this.oneOf\n        .map(schema => {\n          let name =\n            schema.typePrefix +\n            (schema.title ? `${schema.title} (${schema.displayType})` : schema.displayType);\n          if (name.indexOf(' or ') > -1) {\n            name = `(${name})`;\n          }\n          return name;\n        })\n        .join(' or ');\n    }\n  }\n\n  private initDiscriminator(schema: OpenAPISchema, parser: OpenAPIParser) {\n    const discriminator = getDiscriminator(schema)!;\n    this.discriminatorProp = discriminator.propertyName;\n    const implicitInversedMapping = parser.findDerived([\n      ...(this.schema['x-parentRefs'] || []),\n      this.pointer,\n    ]);\n\n    if (schema.oneOf) {\n      for (const variant of schema.oneOf) {\n        if (variant.$ref === undefined) {\n          continue;\n        }\n        const name = JsonPointer.baseName(variant.$ref);\n        implicitInversedMapping[variant.$ref] = name;\n      }\n    }\n\n    const mapping = discriminator.mapping || {};\n\n    // Defines if the mapping is exhaustive. This avoids having references\n    // that overlap with the mapping entries\n    let isLimitedToMapping = discriminator['x-explicitMappingOnly'] || false;\n    // if there are no mappings, assume non-exhaustive\n    if (Object.keys(mapping).length === 0) {\n      isLimitedToMapping = false;\n    }\n\n    const explicitInversedMapping = {};\n    for (const name in mapping) {\n      const $ref = mapping[name];\n\n      if (isArray(explicitInversedMapping[$ref])) {\n        explicitInversedMapping[$ref].push(name);\n      } else {\n        // overrides implicit mapping here\n        explicitInversedMapping[$ref] = [name];\n      }\n    }\n\n    const inversedMapping = isLimitedToMapping\n      ? { ...explicitInversedMapping }\n      : { ...implicitInversedMapping, ...explicitInversedMapping };\n\n    let refs: Array<{ $ref; name }> = [];\n\n    for (const $ref of Object.keys(inversedMapping)) {\n      const names = inversedMapping[$ref];\n      if (isArray(names)) {\n        for (const name of names) {\n          refs.push({ $ref, name });\n        }\n      } else {\n        refs.push({ $ref, name: names });\n      }\n    }\n\n    // Make the listing respects the mapping\n    // in case a mapping is defined, the user usually wants to have the order shown\n    // as it was defined in the yaml. This will sort the names given the provided\n    // mapping (if provided).\n    // The logic is:\n    // - If a name is among the mapping, promote it to first\n    // - Names among the mapping are sorted by their order in the mapping\n    // - Names outside the mapping are sorted alphabetically\n    const names = Object.keys(mapping);\n    if (names.length !== 0) {\n      refs = refs.sort((left, right) => {\n        const indexLeft = names.indexOf(left.name);\n        const indexRight = names.indexOf(right.name);\n\n        if (indexLeft < 0 && indexRight < 0) {\n          // out of mapping, order by name\n          return left.name.localeCompare(right.name);\n        } else if (indexLeft < 0) {\n          // the right is found, so mapping wins\n          return 1;\n        } else if (indexRight < 0) {\n          // left wins as it's in mapping\n          return -1;\n        } else {\n          return indexLeft - indexRight;\n        }\n      });\n    }\n\n    this.oneOf = refs.map(({ $ref, name }) => {\n      const innerSchema = new SchemaModel(\n        parser,\n        { $ref },\n        $ref,\n        this.options,\n        true,\n        this.refsStack.slice(0, -1),\n      );\n      innerSchema.title = name;\n      return innerSchema;\n    });\n  }\n\n  private initConditionalOperators(schema: OpenAPISchema, parser: OpenAPIParser) {\n    const {\n      if: ifOperator,\n      else: elseOperator = {},\n      then: thenOperator = {},\n      ...restSchema\n    } = schema;\n    const groupedOperators = [\n      {\n        allOf: [restSchema, thenOperator, ifOperator],\n        title: (ifOperator && ifOperator['x-displayName']) || ifOperator?.title || 'case 1',\n      },\n      {\n        allOf: [restSchema, elseOperator],\n        title: (elseOperator && elseOperator['x-displayName']) || elseOperator?.title || 'case 2',\n      },\n    ];\n\n    this.oneOf = groupedOperators.map(\n      (variant, idx) =>\n        new SchemaModel(\n          parser,\n          {\n            ...variant,\n          } as OpenAPISchema,\n          this.pointer + '/oneOf/' + idx,\n          this.options,\n          false,\n          this.refsStack,\n        ),\n    );\n    this.oneOfType = 'One of';\n  }\n}\n\nfunction buildFields(\n  parser: OpenAPIParser,\n  schema: OpenAPISchema,\n  $ref: string,\n  options: RedocNormalizedOptions,\n  refsStack: string[],\n): FieldModel[] {\n  const props = schema.properties || schema.prefixItems || schema.items || {};\n  const patternProps = schema.patternProperties || {};\n  const additionalProps = schema.additionalProperties || schema.unevaluatedProperties;\n  const itemsProps = schema.prefixItems ? schema.items : schema.additionalItems;\n  const defaults = schema.default;\n  let fields = Object.keys(props || []).map(fieldName => {\n    let field = props[fieldName];\n\n    if (!field) {\n      console.warn(\n        `Field \"${fieldName}\" is invalid, skipping.\\n Field must be an object but got ${typeof field} at \"${$ref}\"`,\n      );\n      field = {};\n    }\n\n    const required =\n      schema.required === undefined ? false : schema.required.indexOf(fieldName) > -1;\n\n    return new FieldModel(\n      parser,\n      {\n        name: schema.properties ? fieldName : `[${fieldName}]`,\n        required,\n        schema: {\n          ...field,\n          default: field.default === undefined && defaults ? defaults[fieldName] : field.default,\n        },\n      },\n      $ref + '/properties/' + fieldName,\n      options,\n      refsStack,\n    );\n  });\n\n  if (options.sortPropsAlphabetically) {\n    fields = sortByField(fields, 'name');\n  }\n  if (options.sortRequiredPropsFirst) {\n    // if not sort alphabetically sort in the order from required keyword\n    fields = sortByRequired(fields, !options.sortPropsAlphabetically ? schema.required : undefined);\n  }\n\n  fields.push(\n    ...Object.keys(patternProps).map(fieldName => {\n      let field = patternProps[fieldName];\n\n      if (!field) {\n        console.warn(\n          `Field \"${fieldName}\" is invalid, skipping.\\n Field must be an object but got ${typeof field} at \"${$ref}\"`,\n        );\n        field = {};\n      }\n\n      return new FieldModel(\n        parser,\n        {\n          name: fieldName,\n          required: false,\n          schema: field,\n          kind: 'patternProperties',\n        },\n        `${$ref}/patternProperties/${fieldName}`,\n        options,\n        refsStack,\n      );\n    }),\n  );\n\n  if (typeof additionalProps === 'object' || additionalProps === true) {\n    fields.push(\n      new FieldModel(\n        parser,\n        {\n          name: (typeof additionalProps === 'object'\n            ? additionalProps['x-additionalPropertiesName'] || 'property name'\n            : 'property name'\n          ).concat('*'),\n          required: false,\n          schema: additionalProps === true ? {} : additionalProps,\n          kind: 'additionalProperties',\n        },\n        $ref + '/additionalProperties',\n        options,\n        refsStack,\n      ),\n    );\n  }\n\n  fields.push(\n    ...buildAdditionalItems({\n      parser,\n      schema: itemsProps,\n      fieldsCount: fields.length,\n      $ref,\n      options,\n      refsStack,\n    }),\n  );\n\n  return fields;\n}\n\nfunction buildAdditionalItems({\n  parser,\n  schema = false,\n  fieldsCount,\n  $ref,\n  options,\n  refsStack,\n}: {\n  parser: OpenAPIParser;\n  schema?: OpenAPISchema | OpenAPISchema[] | boolean;\n  fieldsCount: number;\n  $ref: string;\n  options: RedocNormalizedOptions;\n  refsStack: string[];\n}) {\n  if (isBoolean(schema)) {\n    return schema\n      ? [\n          new FieldModel(\n            parser,\n            {\n              name: `[${fieldsCount}...]`,\n              schema: {},\n            },\n            `${$ref}/additionalItems`,\n            options,\n            refsStack,\n          ),\n        ]\n      : [];\n  }\n\n  if (isArray(schema)) {\n    return [\n      ...schema.map(\n        (field, idx) =>\n          new FieldModel(\n            parser,\n            {\n              name: `[${fieldsCount + idx}]`,\n              schema: field,\n            },\n            `${$ref}/additionalItems`,\n            options,\n            refsStack,\n          ),\n      ),\n    ];\n  }\n\n  if (isObject(schema)) {\n    return [\n      new FieldModel(\n        parser,\n        {\n          name: `[${fieldsCount}...]`,\n          schema: schema,\n        },\n        `${$ref}/additionalItems`,\n        options,\n        refsStack,\n      ),\n    ];\n  }\n\n  return [];\n}\n\nfunction getDiscriminator(schema: OpenAPISchema): OpenAPISchema['discriminator'] {\n  return schema.discriminator || schema['x-discriminator'];\n}\n\nfunction collectUniqueOneOfTypesDeep(schema: SchemaModel) {\n  const uniqueTypes = new Set();\n\n  function crawl(schema: SchemaModel) {\n    for (const oneOfType of schema.oneOf || []) {\n      if (oneOfType.oneOf) {\n        crawl(oneOfType);\n        continue;\n      }\n\n      if (oneOfType.type) {\n        uniqueTypes.add(oneOfType.type);\n      }\n    }\n  }\n\n  crawl(schema);\n  return Array.from(uniqueTypes.values());\n}\n","import type { OpenAPIEncoding, OpenAPIExample, Referenced } from '../../types';\nimport { isFormUrlEncoded, isJsonLike, urlFormEncodePayload } from '../../utils/openapi';\nimport type { OpenAPIParser } from '../OpenAPIParser';\n\nconst externalExamplesCache: { [url: string]: Promise<any> } = {};\n\nexport class ExampleModel {\n  value: any;\n  summary?: string;\n  description?: string;\n  externalValueUrl?: string;\n\n  constructor(\n    parser: OpenAPIParser,\n    infoOrRef: Referenced<OpenAPIExample>,\n    public mime: string,\n    encoding?: { [field: string]: OpenAPIEncoding },\n  ) {\n    const { resolved: example } = parser.deref(infoOrRef);\n    this.value = example.value;\n    this.summary = example.summary;\n    this.description = example.description;\n    if (example.externalValue) {\n      this.externalValueUrl = new URL(example.externalValue, parser.specUrl).href;\n    }\n\n    if (isFormUrlEncoded(mime) && this.value && typeof this.value === 'object') {\n      this.value = urlFormEncodePayload(this.value, encoding);\n    }\n  }\n\n  getExternalValue(mimeType: string): Promise<any> {\n    if (!this.externalValueUrl) {\n      return Promise.resolve(undefined);\n    }\n\n    if (this.externalValueUrl in externalExamplesCache) {\n      return externalExamplesCache[this.externalValueUrl];\n    }\n\n    externalExamplesCache[this.externalValueUrl] = fetch(this.externalValueUrl).then(res => {\n      return res.text().then(txt => {\n        if (!res.ok) {\n          return Promise.reject(new Error(txt));\n        }\n\n        if (isJsonLike(mimeType)) {\n          try {\n            return JSON.parse(txt);\n          } catch (e) {\n            return txt;\n          }\n        } else {\n          return txt;\n        }\n      });\n    });\n\n    return externalExamplesCache[this.externalValueUrl];\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport type {\n  OpenAPIParameter,\n  OpenAPIParameterLocation,\n  OpenAPIParameterStyle,\n  Referenced,\n} from '../../types';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\n\nimport { extractExtensions } from '../../utils/openapi';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport { SchemaModel } from './Schema';\nimport { ExampleModel } from './Example';\nimport { isArray, mapValues } from '../../utils/helpers';\n\nconst DEFAULT_SERIALIZATION: Record<\n  OpenAPIParameterLocation,\n  { explode: boolean; style: OpenAPIParameterStyle }\n> = {\n  path: {\n    style: 'simple',\n    explode: false,\n  },\n  query: {\n    style: 'form',\n    explode: true,\n  },\n  header: {\n    style: 'simple',\n    explode: false,\n  },\n  cookie: {\n    style: 'form',\n    explode: true,\n  },\n};\n\n/**\n * Field or Parameter model ready to be used by components\n */\nexport class FieldModel {\n  @observable\n  expanded: boolean | undefined = undefined;\n\n  schema: SchemaModel;\n  name: string;\n  required: boolean;\n  description: string;\n  example?: string;\n  examples?: Record<string, ExampleModel> | any[];\n  deprecated: boolean;\n  in?: OpenAPIParameterLocation;\n  kind: string;\n  extensions?: Record<string, any>;\n  explode: boolean;\n  style?: OpenAPIParameterStyle;\n  const?: any;\n\n  serializationMime?: string;\n\n  constructor(\n    parser: OpenAPIParser,\n    infoOrRef: Referenced<OpenAPIParameter> & { name?: string; kind?: string },\n    pointer: string,\n    options: RedocNormalizedOptions,\n    refsStack?: string[],\n  ) {\n    makeObservable(this);\n\n    const { resolved: info } = parser.deref<OpenAPIParameter>(infoOrRef);\n    this.kind = infoOrRef.kind || 'field';\n    this.name = infoOrRef.name || info.name;\n    this.in = info.in;\n    this.required = !!info.required;\n\n    let fieldSchema = info.schema;\n    let serializationMime = '';\n    if (!fieldSchema && info.in && info.content) {\n      serializationMime = Object.keys(info.content)[0];\n      fieldSchema = info.content[serializationMime] && info.content[serializationMime].schema;\n    }\n\n    this.schema = new SchemaModel(parser, fieldSchema || {}, pointer, options, false, refsStack);\n    this.description =\n      info.description === undefined ? this.schema.description || '' : info.description;\n    this.example = info.example || this.schema.example;\n\n    if (info.examples !== undefined || this.schema.examples !== undefined) {\n      const exampleValue = info.examples || this.schema.examples;\n      this.examples = isArray(exampleValue)\n        ? exampleValue\n        : mapValues(\n            exampleValue!,\n            (example, name) => new ExampleModel(parser, example, name, info.encoding),\n          );\n    }\n\n    if (serializationMime) {\n      this.serializationMime = serializationMime;\n    } else if (info.style) {\n      this.style = info.style;\n    } else if (this.in) {\n      this.style = DEFAULT_SERIALIZATION[this.in]?.style ?? 'form'; // fallback to from in case \"in\" is invalid\n    }\n\n    if (info.explode === undefined && this.in) {\n      this.explode = DEFAULT_SERIALIZATION[this.in]?.explode ?? true;\n    } else {\n      this.explode = !!info.explode;\n    }\n\n    this.deprecated = info.deprecated === undefined ? !!this.schema.deprecated : info.deprecated;\n\n    if (options.showExtensions) {\n      this.extensions = extractExtensions(info, options.showExtensions);\n    }\n\n    this.const = this.schema?.const || info?.const || '';\n  }\n\n  @action\n  toggle() {\n    this.expanded = !this.expanded;\n  }\n\n  @action\n  collapse(): void {\n    this.expanded = false;\n  }\n\n  @action\n  expand(): void {\n    this.expanded = true;\n  }\n}\n",null,"import * as Sampler from 'openapi-sampler';\n\nimport type { OpenAPIMediaType } from '../../types';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport { SchemaModel } from './Schema';\n\nimport { isJsonLike, mapValues } from '../../utils';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport { ExampleModel } from './Example';\n\nexport class MediaTypeModel {\n  examples?: { [name: string]: ExampleModel };\n  schema?: SchemaModel;\n  name: string;\n  isRequestType: boolean;\n  onlyRequiredInSamples: boolean;\n  generatedSamplesMaxDepth: number;\n\n  /**\n   * @param isRequestType needed to know if skipe RO/RW fields in objects\n   */\n  constructor(\n    parser: OpenAPIParser,\n    name: string,\n    isRequestType: boolean,\n    info: OpenAPIMediaType,\n    options: RedocNormalizedOptions,\n  ) {\n    this.name = name;\n    this.isRequestType = isRequestType;\n    this.schema = info.schema && new SchemaModel(parser, info.schema, '', options);\n    this.onlyRequiredInSamples = options.onlyRequiredInSamples;\n    this.generatedSamplesMaxDepth = options.generatedSamplesMaxDepth;\n    if (info.examples !== undefined) {\n      this.examples = mapValues(\n        info.examples,\n        example => new ExampleModel(parser, example, name, info.encoding),\n      );\n    } else if (info.example !== undefined) {\n      this.examples = {\n        default: new ExampleModel(\n          parser,\n          { value: parser.deref(info.example).resolved },\n          name,\n          info.encoding,\n        ),\n      };\n    } else if (isJsonLike(name)) {\n      this.generateExample(parser, info);\n    }\n  }\n\n  generateExample(parser: OpenAPIParser, info: OpenAPIMediaType) {\n    const samplerOptions = {\n      skipReadOnly: this.isRequestType,\n      skipWriteOnly: !this.isRequestType,\n      skipNonRequired: this.isRequestType && this.onlyRequiredInSamples,\n      maxSampleDepth: this.generatedSamplesMaxDepth,\n    };\n    if (this.schema && this.schema.oneOf) {\n      this.examples = {};\n      for (const subSchema of this.schema.oneOf) {\n        const sample = Sampler.sample(subSchema.rawSchema as any, samplerOptions, parser.spec);\n\n        if (this.schema.discriminatorProp && typeof sample === 'object' && sample) {\n          sample[this.schema.discriminatorProp] = subSchema.title;\n        }\n\n        this.examples[subSchema.title] = new ExampleModel(\n          parser,\n          {\n            value: sample,\n          },\n          this.name,\n          info.encoding,\n        );\n      }\n    } else if (this.schema) {\n      this.examples = {\n        default: new ExampleModel(\n          parser,\n          {\n            value: Sampler.sample(info.schema as any, samplerOptions, parser.spec),\n          },\n          this.name,\n          info.encoding,\n        ),\n      };\n    }\n  }\n}\n","import { action, computed, observable, makeObservable } from 'mobx';\n\nimport type { OpenAPIMediaType } from '../../types';\nimport { MediaTypeModel } from './MediaType';\n\nimport { mergeSimilarMediaTypes } from '../../utils';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\n\n/**\n * MediaContent model ready to be sued by React components\n * Contains multiple MediaTypes and keeps track of the currently active one\n */\nexport class MediaContentModel {\n  mediaTypes: MediaTypeModel[];\n\n  @observable\n  activeMimeIdx = 0;\n\n  /**\n   * @param isRequestType needed to know if skipe RO/RW fields in objects\n   */\n  constructor(\n    parser: OpenAPIParser,\n    info: Record<string, OpenAPIMediaType>,\n    public isRequestType: boolean,\n    options: RedocNormalizedOptions,\n  ) {\n    makeObservable(this);\n\n    if (options.unstable_ignoreMimeParameters) {\n      info = mergeSimilarMediaTypes(info);\n    }\n    this.mediaTypes = Object.keys(info).map(name => {\n      const mime = info[name];\n      // reset deref cache just in case something is left there\n      return new MediaTypeModel(parser, name, isRequestType, mime, options);\n    });\n  }\n\n  /**\n   * Set active media type by index\n   * @param idx media type index\n   */\n  @action\n  activate(idx: number) {\n    this.activeMimeIdx = idx;\n  }\n\n  @computed\n  get active() {\n    return this.mediaTypes[this.activeMimeIdx];\n  }\n\n  get hasSample(): boolean {\n    return this.mediaTypes.filter(mime => !!mime.examples).length > 0;\n  }\n}\n","import type { OpenAPIRequestBody, Referenced } from '../../types';\n\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport { MediaContentModel } from './MediaContent';\nimport { getContentWithLegacyExamples } from '../../utils';\n\ntype RequestBodyProps = {\n  parser: OpenAPIParser;\n  infoOrRef: Referenced<OpenAPIRequestBody>;\n  options: RedocNormalizedOptions;\n  isEvent: boolean;\n};\n\nexport class RequestBodyModel {\n  description: string;\n  required?: boolean;\n  content?: MediaContentModel;\n\n  constructor({ parser, infoOrRef, options, isEvent }: RequestBodyProps) {\n    const isRequest = !isEvent;\n    const { resolved: info } = parser.deref(infoOrRef);\n    this.description = info.description || '';\n    this.required = info.required;\n\n    const mediaContent = getContentWithLegacyExamples(info);\n    if (mediaContent !== undefined) {\n      this.content = new MediaContentModel(parser, mediaContent, isRequest, options);\n    }\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport type { OpenAPIResponse, Referenced } from '../../types';\n\nimport { getStatusCodeType, extractExtensions } from '../../utils';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport { FieldModel } from './Field';\nimport { MediaContentModel } from './MediaContent';\n\ntype ResponseProps = {\n  parser: OpenAPIParser;\n  code: string;\n  defaultAsError: boolean;\n  infoOrRef: Referenced<OpenAPIResponse>;\n  options: RedocNormalizedOptions;\n  isEvent: boolean;\n};\n\nexport class ResponseModel {\n  @observable\n  expanded: boolean = false;\n\n  content?: MediaContentModel;\n  code: string;\n  summary: string;\n  description: string;\n  type: string;\n  headers: FieldModel[] = [];\n  extensions: Record<string, any>;\n\n  constructor({\n    parser,\n    code,\n    defaultAsError,\n    infoOrRef,\n    options,\n    isEvent: isRequest,\n  }: ResponseProps) {\n    makeObservable(this);\n\n    this.expanded = options.expandResponses === 'all' || options.expandResponses[code];\n\n    const { resolved: info } = parser.deref(infoOrRef);\n    this.code = code;\n    if (info.content !== undefined) {\n      this.content = new MediaContentModel(parser, info.content, isRequest, options);\n    }\n\n    if (info['x-summary'] !== undefined) {\n      this.summary = info['x-summary'];\n      this.description = info.description || '';\n    } else {\n      this.summary = info.description || '';\n      this.description = '';\n    }\n\n    this.type = getStatusCodeType(code, defaultAsError);\n\n    const headers = info.headers;\n    if (headers !== undefined) {\n      this.headers = Object.keys(headers).map(name => {\n        const header = headers[name];\n        return new FieldModel(parser, { ...header, name }, '', options);\n      });\n    }\n\n    if (options.showExtensions) {\n      this.extensions = extractExtensions(info, options.showExtensions);\n    }\n  }\n\n  @action\n  toggle() {\n    this.expanded = !this.expanded;\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport {\n  extractExtensions,\n  getOperationSummary,\n  getStatusCodeType,\n  isStatusCode,\n  memoize,\n  mergeParams,\n  normalizeServers,\n  sortByField,\n  sortByRequired,\n} from '../../utils';\n\nimport { GroupModel } from './Group.model';\nimport { SecurityRequirementModel } from './SecurityRequirement';\nimport { CallbackModel } from './Callback';\nimport { FieldModel } from './Field';\nimport { RequestBodyModel } from './RequestBody';\nimport { ResponseModel } from './Response';\nimport { SideNavStyleEnum } from '../types';\n\nimport type {\n  OpenAPIExternalDocumentation,\n  OpenAPIServer,\n  OpenAPIXBadges,\n  OpenAPIXCodeSample,\n} from '../../types';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport type { MediaContentModel } from './MediaContent';\nimport type { ContentItemModel, ExtendedOpenAPIOperation, IMenuItem } from '../types';\n\nexport interface XPayloadSample {\n  lang: 'payload';\n  label: string;\n  requestBodyContent: MediaContentModel;\n  source: string;\n}\n\nexport function isPayloadSample(\n  sample: XPayloadSample | OpenAPIXCodeSample,\n): sample is XPayloadSample {\n  return sample.lang === 'payload' && (sample as any).requestBodyContent;\n}\n\nlet isCodeSamplesWarningPrinted = false;\n\n/**\n * Operation model ready to be used by components\n */\nexport class OperationModel implements IMenuItem {\n  //#region IMenuItem fields\n  id: string;\n  absoluteIdx?: number;\n  name: string;\n  sidebarLabel: string;\n  description?: string;\n  type = 'operation' as const;\n\n  parent?: GroupModel;\n  externalDocs?: OpenAPIExternalDocumentation;\n  items: ContentItemModel[] = [];\n\n  depth: number;\n\n  @observable\n  ready?: boolean = true;\n  @observable\n  active: boolean = false;\n  @observable\n  expanded: boolean = false;\n  //#endregion\n\n  pointer: string;\n  operationId?: string;\n  operationHash?: string;\n  httpVerb: string;\n  badges: OpenAPIXBadges[];\n  deprecated: boolean;\n  path: string;\n  servers: OpenAPIServer[];\n  security: SecurityRequirementModel[];\n  extensions: Record<string, any>;\n  isCallback: boolean;\n  isWebhook: boolean;\n  isEvent: boolean;\n\n  constructor(\n    private parser: OpenAPIParser,\n    private operationSpec: ExtendedOpenAPIOperation,\n    parent: GroupModel | undefined,\n    private options: RedocNormalizedOptions,\n    isCallback: boolean = false,\n  ) {\n    makeObservable(this);\n\n    this.pointer = operationSpec.pointer;\n\n    this.description = operationSpec.description;\n    this.parent = parent;\n    this.externalDocs = operationSpec.externalDocs;\n\n    this.deprecated = !!operationSpec.deprecated;\n    this.httpVerb = operationSpec.httpVerb;\n    this.deprecated = !!operationSpec.deprecated;\n    this.operationId = operationSpec.operationId;\n    this.path = operationSpec.pathName;\n    this.isCallback = isCallback;\n    this.isWebhook = operationSpec.isWebhook;\n    this.isEvent = this.isCallback || this.isWebhook;\n\n    this.name = getOperationSummary(operationSpec);\n\n    this.sidebarLabel =\n      options.sideNavStyle === SideNavStyleEnum.IdOnly\n        ? this.operationId || this.path\n        : options.sideNavStyle === SideNavStyleEnum.PathOnly\n        ? this.path\n        : this.name;\n    this.badges =\n      operationSpec['x-badges']?.map(({ name, color, position }) => ({\n        name,\n        color: color,\n        position: position || 'after',\n      })) || [];\n\n    if (this.isCallback) {\n      // NOTE: Callbacks by default should not inherit the specification's global `security` definition.\n      // Can be defined individually per-callback in the specification. Defaults to none.\n      this.security = (operationSpec.security || []).map(\n        security => new SecurityRequirementModel(security, parser),\n      );\n\n      // TODO: update getting pathInfo for overriding servers on path level\n      this.servers = normalizeServers('', operationSpec.servers || operationSpec.pathServers || []);\n    } else {\n      this.operationHash = operationSpec.operationId && 'operation/' + operationSpec.operationId;\n      this.id =\n        operationSpec.operationId !== undefined\n          ? (parent ? parent.id + '/' : '') + this.operationHash\n          : parent !== undefined\n          ? parent.id + this.pointer\n          : this.pointer;\n\n      this.security = (operationSpec.security || parser.spec.security || []).map(\n        security => new SecurityRequirementModel(security, parser),\n      );\n\n      this.servers = normalizeServers(\n        parser.specUrl,\n        operationSpec.servers || operationSpec.pathServers || parser.spec.servers || [],\n      );\n    }\n\n    if (options.showExtensions) {\n      this.extensions = extractExtensions(operationSpec, options.showExtensions);\n    }\n  }\n\n  /**\n   * set operation as active (used by side menu)\n   */\n  @action\n  activate() {\n    this.active = true;\n  }\n\n  /**\n   * set operation as inactive (used by side menu)\n   */\n  @action\n  deactivate() {\n    this.active = false;\n  }\n\n  /**\n   * Toggle expansion in middle panel (for callbacks, which are operations)\n   */\n  @action\n  toggle() {\n    this.expanded = !this.expanded;\n  }\n\n  expand() {\n    if (this.parent) {\n      this.parent.expand();\n    }\n  }\n\n  collapse() {\n    /* do nothing */\n  }\n\n  @memoize\n  get requestBody() {\n    return (\n      this.operationSpec.requestBody &&\n      new RequestBodyModel({\n        parser: this.parser,\n        infoOrRef: this.operationSpec.requestBody,\n        options: this.options,\n        isEvent: this.isEvent,\n      })\n    );\n  }\n\n  @memoize\n  get codeSamples() {\n    const { payloadSampleIdx, hideRequestPayloadSample } = this.options;\n    let samples: Array<OpenAPIXCodeSample | XPayloadSample> =\n      this.operationSpec['x-codeSamples'] || this.operationSpec['x-code-samples'] || [];\n\n    if (this.operationSpec['x-code-samples'] && !isCodeSamplesWarningPrinted) {\n      isCodeSamplesWarningPrinted = true;\n      console.warn('\"x-code-samples\" is deprecated. Use \"x-codeSamples\" instead');\n    }\n\n    const requestBodyContent = this.requestBody && this.requestBody.content;\n    if (requestBodyContent && requestBodyContent.hasSample && !hideRequestPayloadSample) {\n      const insertInx = Math.min(samples.length, payloadSampleIdx);\n\n      samples = [\n        ...samples.slice(0, insertInx),\n        {\n          lang: 'payload',\n          label: 'Payload',\n          source: '',\n          requestBodyContent,\n        },\n        ...samples.slice(insertInx),\n      ];\n    }\n\n    return samples;\n  }\n\n  @memoize\n  get parameters() {\n    const _parameters = mergeParams(\n      this.parser,\n      this.operationSpec.pathParameters,\n      this.operationSpec.parameters,\n      // TODO: fix pointer\n    ).map(paramOrRef => new FieldModel(this.parser, paramOrRef, this.pointer, this.options));\n\n    if (this.options.sortPropsAlphabetically) {\n      return sortByField(_parameters, 'name');\n    }\n    if (this.options.sortRequiredPropsFirst) {\n      return sortByRequired(_parameters);\n    }\n\n    return _parameters;\n  }\n\n  @memoize\n  get responses() {\n    let hasSuccessResponses = false;\n    return Object.keys(this.operationSpec.responses || [])\n      .filter(code => {\n        if (code === 'default') {\n          return true;\n        }\n\n        if (getStatusCodeType(code) === 'success') {\n          hasSuccessResponses = true;\n        }\n\n        return isStatusCode(code);\n      }) // filter out other props (e.g. x-props)\n      .map(code => {\n        return new ResponseModel({\n          parser: this.parser,\n          code,\n          defaultAsError: hasSuccessResponses,\n          infoOrRef: this.operationSpec.responses[code],\n          options: this.options,\n          isEvent: this.isEvent,\n        });\n      });\n  }\n\n  @memoize\n  get callbacks() {\n    return Object.keys(this.operationSpec.callbacks || []).map(callbackEventName => {\n      return new CallbackModel(\n        this.parser,\n        callbackEventName,\n        this.operationSpec.callbacks![callbackEventName],\n        this.pointer,\n        this.options,\n      );\n    });\n  }\n}\n","import type { OpenAPIPath, Referenced } from '../../types';\nimport type { OpenAPIParser } from '../OpenAPIParser';\nimport { OperationModel } from './Operation';\nimport type { RedocNormalizedOptions } from '../RedocNormalizedOptions';\nimport { isOperationName } from '../..';\n\nexport class WebhookModel {\n  operations: OperationModel[] = [];\n\n  constructor(\n    parser: OpenAPIParser,\n    options: RedocNormalizedOptions,\n    infoOrRef?: Referenced<OpenAPIPath>,\n  ) {\n    const { resolved: webhooks } = parser.deref<OpenAPIPath>(infoOrRef || {});\n    this.initWebhooks(parser, webhooks, options);\n  }\n\n  initWebhooks(parser: OpenAPIParser, webhooks: OpenAPIPath, options: RedocNormalizedOptions) {\n    for (const webhookName of Object.keys(webhooks)) {\n      const webhook = webhooks[webhookName];\n      const operations = Object.keys(webhook).filter(isOperationName);\n      for (const operationName of operations) {\n        const operationInfo = webhook[operationName];\n        if (webhook.$ref) {\n          const resolvedWebhook = parser.deref<OpenAPIPath>(webhook || {});\n          this.initWebhooks(parser, { [operationName]: resolvedWebhook }, options);\n        }\n\n        if (!operationInfo) continue;\n        const operation = new OperationModel(\n          parser,\n          {\n            ...operationInfo,\n            httpVerb: operationName,\n          },\n          undefined,\n          options,\n          false,\n        );\n\n        this.operations.push(operation);\n      }\n    }\n  }\n}\n","import type { OpenAPISecurityScheme, Referenced } from '../../types';\nimport { SECURITY_SCHEMES_SECTION_PREFIX } from '../../utils';\nimport type { OpenAPIParser } from '../OpenAPIParser';\n\nexport class SecuritySchemeModel {\n  id: string;\n  sectionId: string;\n  type: OpenAPISecurityScheme['type'];\n  description: string;\n  displayName: string;\n  apiKey?: {\n    name: string;\n    in: OpenAPISecurityScheme['in'];\n  };\n\n  http?: {\n    scheme: string;\n    bearerFormat?: string;\n  };\n\n  flows: OpenAPISecurityScheme['flows'];\n  openId?: {\n    connectUrl: string;\n  };\n\n  constructor(parser: OpenAPIParser, id: string, scheme: Referenced<OpenAPISecurityScheme>) {\n    const { resolved: info } = parser.deref(scheme);\n    this.id = id;\n    this.sectionId = SECURITY_SCHEMES_SECTION_PREFIX + id;\n    this.type = info.type;\n    this.displayName = info['x-displayName'] || id;\n    this.description = info.description || '';\n    if (info.type === 'apiKey') {\n      this.apiKey = {\n        name: info.name!,\n        in: info.in,\n      };\n    }\n\n    if (info.type === 'http') {\n      this.http = {\n        scheme: info.scheme!,\n        bearerFormat: info.bearerFormat,\n      };\n    }\n\n    if (info.type === 'openIdConnect') {\n      this.openId = {\n        connectUrl: info.openIdConnectUrl!,\n      };\n    }\n\n    if (info.type === 'oauth2' && info.flows) {\n      this.flows = info.flows;\n    }\n  }\n}\n\nexport class SecuritySchemesModel {\n  schemes: SecuritySchemeModel[];\n\n  constructor(parser: OpenAPIParser) {\n    const schemes = (parser.spec.components && parser.spec.components.securitySchemes) || {};\n    this.schemes = Object.keys(schemes).map(\n      name => new SecuritySchemeModel(parser, name, schemes[name]),\n    );\n  }\n}\n","import type { OpenAPIExternalDocumentation, OpenAPIPath, OpenAPISpec, Referenced } from '../types';\n\nimport { MenuBuilder } from './MenuBuilder';\nimport { ApiInfoModel } from './models/ApiInfo';\nimport { WebhookModel } from './models/Webhook';\nimport { SecuritySchemesModel } from './models/SecuritySchemes';\nimport { OpenAPIParser } from './OpenAPIParser';\nimport type { RedocNormalizedOptions } from './RedocNormalizedOptions';\nimport type { ContentItemModel } from './types';\n/**\n * Store that contains all the specification related information in the form of tree\n */\nexport class SpecStore {\n  parser: OpenAPIParser;\n\n  info: ApiInfoModel;\n  externalDocs?: OpenAPIExternalDocumentation;\n  contentItems: ContentItemModel[];\n  securitySchemes: SecuritySchemesModel;\n  webhooks?: WebhookModel;\n\n  constructor(\n    spec: OpenAPISpec,\n    specUrl: string | undefined,\n    private options: RedocNormalizedOptions,\n  ) {\n    this.parser = new OpenAPIParser(spec, specUrl, options);\n    this.info = new ApiInfoModel(this.parser, this.options);\n    this.externalDocs = this.parser.spec.externalDocs;\n    this.contentItems = MenuBuilder.buildStructure(this.parser, this.options);\n    this.securitySchemes = new SecuritySchemesModel(this.parser);\n    const webhookPath: Referenced<OpenAPIPath> = {\n      ...this.parser?.spec?.['x-webhooks'],\n      ...this.parser?.spec.webhooks,\n    };\n    this.webhooks = new WebhookModel(this.parser, options, webhookPath);\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\n\nimport type { OpenAPIExternalDocumentation, OpenAPITag } from '../../types';\nimport { safeSlugify } from '../../utils';\nimport { MarkdownRenderer } from '../MarkdownRenderer';\nimport type { ContentItemModel, IMenuItem, MarkdownHeading, MenuItemGroupType } from '../types';\n\n/**\n * Operations Group model ready to be used by components\n */\nexport class GroupModel implements IMenuItem {\n  //#region IMenuItem fields\n  id: string;\n  absoluteIdx?: number;\n  name: string;\n  sidebarLabel: string;\n  description?: string;\n  type: MenuItemGroupType;\n\n  items: ContentItemModel[] = [];\n  parent?: GroupModel;\n  externalDocs?: OpenAPIExternalDocumentation;\n\n  @observable\n  active: boolean = false;\n  @observable\n  expanded: boolean = false;\n\n  depth: number;\n  level: number;\n  //#endregion\n\n  constructor(\n    type: MenuItemGroupType,\n    tagOrGroup: OpenAPITag | MarkdownHeading,\n    parent?: GroupModel,\n  ) {\n    makeObservable(this);\n\n    // markdown headings already have ids calculated as they are needed for heading anchors\n    this.id = (tagOrGroup as MarkdownHeading).id || type + '/' + safeSlugify(tagOrGroup.name);\n    this.type = type;\n    this.name = tagOrGroup['x-displayName'] || tagOrGroup.name;\n    this.level = (tagOrGroup as MarkdownHeading).level || 1;\n\n    this.sidebarLabel = this.name;\n\n    // remove sections from markdown, same as in ApiInfo\n    this.description = tagOrGroup.description || '';\n\n    const items = (tagOrGroup as MarkdownHeading).items;\n    if (items && items.length) {\n      this.description = MarkdownRenderer.getTextBeforeHading(this.description, items[0].name);\n    }\n\n    this.parent = parent;\n    this.externalDocs = (tagOrGroup as OpenAPITag).externalDocs;\n\n    // groups are active (expanded) by default\n    if (this.type === 'group') {\n      this.expanded = true;\n    }\n  }\n\n  @action\n  activate() {\n    this.active = true;\n  }\n\n  @action\n  expand() {\n    if (this.parent) {\n      this.parent.expand();\n    }\n    this.expanded = true;\n  }\n\n  @action\n  collapse() {\n    // disallow collapsing groups\n    if (this.type === 'group') {\n      return;\n    }\n    this.expanded = false;\n  }\n\n  @action\n  deactivate() {\n    this.active = false;\n  }\n}\n","import type { OpenAPIPaths, OpenAPITag, OpenAPISchema } from '../types';\nimport { isOperationName, JsonPointer, alphabeticallyByProp } from '../utils';\nimport { MarkdownRenderer } from './MarkdownRenderer';\nimport { GroupModel, OperationModel } from './models';\nimport type { OpenAPIParser } from './OpenAPIParser';\nimport type { RedocNormalizedOptions } from './RedocNormalizedOptions';\nimport type { ContentItemModel, TagGroup, TagInfo, TagsInfoMap } from './types';\n\nexport const GROUP_DEPTH = 0;\n\nexport class MenuBuilder {\n  /**\n   * Builds page content structure based on tags\n   */\n  static buildStructure(\n    parser: OpenAPIParser,\n    options: RedocNormalizedOptions,\n  ): ContentItemModel[] {\n    const spec = parser.spec;\n    const { schemaDefinitionsTagName } = options;\n\n    const items: ContentItemModel[] = [];\n    const tags = [...(spec.tags || [])];\n    const hasAutogenerated = tags.find(\n      tag => tag?.name === schemaDefinitionsTagName,\n    );\n\n    if (!hasAutogenerated && schemaDefinitionsTagName) {\n      tags.push({ name: schemaDefinitionsTagName });\n    }\n    const tagsMap = MenuBuilder.getTagsWithOperations(parser, tags);\n\n    items.push(...MenuBuilder.addMarkdownItems(spec.info.description || '', undefined, 1, options));\n    if (spec['x-tagGroups'] && spec['x-tagGroups'].length > 0) {\n      items.push(\n        ...MenuBuilder.getTagGroupsItems(parser, undefined, spec['x-tagGroups'], tagsMap, options),\n      );\n    } else {\n      items.push(...MenuBuilder.getTagsItems(parser, tagsMap, undefined, undefined, options));\n    }\n\n    return items;\n  }\n\n  /**\n   * extracts items from markdown description\n   * @param description - markdown source\n   */\n  static addMarkdownItems(\n    description: string,\n    parent: GroupModel | undefined,\n    initialDepth: number,\n    options: RedocNormalizedOptions,\n  ): ContentItemModel[] {\n    const renderer = new MarkdownRenderer(options, parent?.id);\n    const headings = renderer.extractHeadings(description || '');\n\n    if (headings.length && parent && parent.description) {\n      parent.description = MarkdownRenderer.getTextBeforeHading(\n        parent.description,\n        headings[0].name,\n      );\n    }\n\n    const mapHeadingsDeep = (_parent, items, depth = 1) =>\n      items.map(heading => {\n        const group = new GroupModel('section', heading, _parent);\n        group.depth = depth;\n        if (heading.items) {\n          group.items = mapHeadingsDeep(group, heading.items, depth + 1);\n        }\n\n        return group;\n      });\n\n    return mapHeadingsDeep(parent, headings, initialDepth);\n  }\n\n  /**\n   * Returns array of OperationsGroup items for the tag groups (x-tagGroups vendor extension)\n   * @param tags value of `x-tagGroups` vendor extension\n   */\n  static getTagGroupsItems(\n    parser: OpenAPIParser,\n    parent: GroupModel | undefined,\n    groups: TagGroup[],\n    tags: TagsInfoMap,\n    options: RedocNormalizedOptions,\n  ): GroupModel[] {\n    const res: GroupModel[] = [];\n    for (const group of groups) {\n      const item = new GroupModel('group', group, parent);\n      item.depth = GROUP_DEPTH;\n      item.items = MenuBuilder.getTagsItems(parser, tags, item, group, options);\n      res.push(item);\n    }\n    // TODO checkAllTagsUsedInGroups\n    return res;\n  }\n\n  /**\n   * Returns array of OperationsGroup items for the tags of the group or for all tags\n   * @param parser\n   * @param tagsMap tags info returned from `getTagsWithOperations`\n   * @param parent parent item\n   * @param group group which this tag belongs to. if not provided gets all tags\n   * @param options normalized options\n   */\n  static getTagsItems(\n    parser: OpenAPIParser,\n    tagsMap: TagsInfoMap,\n    parent: GroupModel | undefined,\n    group: TagGroup | undefined,\n    options: RedocNormalizedOptions,\n  ): ContentItemModel[] {\n    let tagNames;\n\n    if (group === undefined) {\n      tagNames = Object.keys(tagsMap); // all tags\n    } else {\n      tagNames = group.tags;\n    }\n\n    const tags = tagNames.map(tagName => {\n      if (!tagsMap[tagName]) {\n        console.warn(`Non-existing tag \"${tagName}\" is added to the group \"${group!.name}\"`);\n        return null;\n      }\n      tagsMap[tagName].used = true;\n      return tagsMap[tagName];\n    });\n\n    const res: Array<GroupModel | OperationModel> = [];\n    for (const tag of tags) {\n      if (!tag) {\n        continue;\n      }\n      const item = new GroupModel('tag', tag, parent);\n      item.depth = GROUP_DEPTH + 1;\n\n      // don't put empty tag into content, instead put its operations\n      if (tag.name === '') {\n        const items = [\n          ...MenuBuilder.addMarkdownItems(tag.description || '', item, item.depth + 1, options),\n          ...this.getOperationsItems(parser, undefined, tag, item.depth + 1, options),\n        ];\n        res.push(...items);\n        continue;\n      }\n\n      const relatedSchemas = this.getTagRelatedSchema({\n        parser,\n        tag,\n        parent: item,\n        schemaDefinitionsTagName: options.schemaDefinitionsTagName,\n      });\n\n      item.items = [\n        ...relatedSchemas,\n        ...MenuBuilder.addMarkdownItems(tag.description || '', item, item.depth + 1, options),\n        ...this.getOperationsItems(parser, item, tag, item.depth + 1, options),\n      ];\n\n      res.push(item);\n    }\n\n    if (options.sortTagsAlphabetically) {\n      res.sort(alphabeticallyByProp<GroupModel | OperationModel>('name'));\n    }\n\n    return res;\n  }\n\n  /**\n   * Returns array of Operation items for the tag\n   * @param parser\n   * @param parent parent OperationsGroup\n   * @param tag tag info returned from `getTagsWithOperations`\n   * @param depth items depth\n   * @param options - normalized options\n   */\n  static getOperationsItems(\n    parser: OpenAPIParser,\n    parent: GroupModel | undefined,\n    tag: TagInfo,\n    depth: number,\n    options: RedocNormalizedOptions,\n  ): OperationModel[] {\n    if (tag.operations.length === 0) {\n      return [];\n    }\n\n    const res: OperationModel[] = [];\n    for (const operationInfo of tag.operations) {\n      const operation = new OperationModel(parser, operationInfo, parent, options);\n      operation.depth = depth;\n      res.push(operation);\n    }\n\n    if (options.sortOperationsAlphabetically) {\n      res.sort(alphabeticallyByProp<OperationModel>('name'));\n    }\n\n    return res;\n  }\n\n  /**\n   * collects tags and maps each tag to list of operations belonging to this tag\n   */\n  static getTagsWithOperations(parser: OpenAPIParser, explicitTags: OpenAPITag[]): TagsInfoMap {\n    const { spec } = parser;\n    const tags: TagsInfoMap = {};\n    const webhooks = spec['x-webhooks'] || spec.webhooks;\n    for (const tag of explicitTags || []) {\n      tags[tag.name] = { ...tag, operations: [] };\n    }\n\n    if (webhooks) {\n      getTags(parser, webhooks, true);\n    }\n\n    if (spec.paths) {\n      getTags(parser, spec.paths);\n    }\n\n    function getTags(parser: OpenAPIParser, paths: OpenAPIPaths, isWebhook?: boolean) {\n      for (const pathName of Object.keys(paths)) {\n        const path = paths[pathName];\n        const operations = Object.keys(path).filter(isOperationName);\n        for (const operationName of operations) {\n          const operationInfo = path[operationName];\n          if (path.$ref) {\n            const { resolved: resolvedPaths } = parser.deref<OpenAPIPaths>(path as OpenAPIPaths);\n            getTags(parser, { [pathName]: resolvedPaths }, isWebhook);\n            continue;\n          }\n          let operationTags = operationInfo?.tags;\n\n          if (!operationTags || !operationTags.length) {\n            // empty tag\n            operationTags = [''];\n          }\n\n          for (const tagName of operationTags) {\n            let tag = tags[tagName];\n            if (tag === undefined) {\n              tag = {\n                name: tagName,\n                operations: [],\n              };\n              tags[tagName] = tag;\n            }\n            if (tag['x-traitTag']) {\n              continue;\n            }\n            tag.operations.push({\n              ...operationInfo,\n              pathName,\n              pointer: JsonPointer.compile(['paths', pathName, operationName]),\n              httpVerb: operationName,\n              pathParameters: path.parameters || [],\n              pathServers: path.servers,\n              isWebhook: !!isWebhook,\n            });\n          }\n        }\n      }\n    }\n    return tags;\n  }\n\n  static getTagRelatedSchema({\n    parser,\n    tag,\n    parent,\n    schemaDefinitionsTagName,\n  }: {\n    parser: OpenAPIParser;\n    tag: TagInfo;\n    parent: GroupModel;\n    schemaDefinitionsTagName?: string;\n  }): GroupModel[] {\n    const defaultTags = schemaDefinitionsTagName ? [schemaDefinitionsTagName] : [];\n\n    return Object.entries(parser.spec.components?.schemas || {})\n      .map(([schemaName, schema]) => {\n        const schemaTags = schema['x-tags'] || defaultTags;\n        if (!schemaTags?.includes(tag.name)) return null;\n\n        const item = new GroupModel(\n          'schema',\n          {\n            name: schemaName,\n            'x-displayName': `${(schema as OpenAPISchema).title || schemaName}`,\n            description: `<SchemaDefinition showWriteOnly={true} schemaRef=\"#/components/schemas/${schemaName}\" />`,\n          } as OpenAPITag,\n          parent,\n        );\n        item.depth = parent.depth + 1;\n        return item;\n      })\n      .filter(Boolean) as GroupModel[];\n  }\n}\n","import { action, observable, makeObservable } from 'mobx';\nimport { querySelector } from '../utils/dom';\nimport { escapeHTMLAttrChars, flattenByProp, SECURITY_SCHEMES_SECTION_PREFIX } from '../utils';\n\nimport { history as historyInst, HistoryService } from './HistoryService';\nimport { GROUP_DEPTH } from './MenuBuilder';\n\nimport type { SpecStore } from './models';\nimport type { ScrollService } from './ScrollService';\nimport type { IMenuItem } from './types';\n\n/** Generic interface for MenuItems */\n\nexport const SECTION_ATTR = 'data-section-id';\n\n/**\n * Stores all side-menu related information\n */\nexport class MenuStore {\n  /**\n   * Statically try update scroll position\n   * Used before hydrating from server-side rendered html to scroll page faster\n   */\n  static updateOnHistory(id: string = historyInst.currentId, scroll: ScrollService) {\n    if (!id) {\n      return;\n    }\n    scroll.scrollIntoViewBySelector(`[${SECTION_ATTR}=\"${escapeHTMLAttrChars(id)}\"]`);\n  }\n\n  /**\n   * active item absolute index (when flattened). -1 means nothing is selected\n   */\n  @observable\n  activeItemIdx: number = -1;\n\n  /**\n   * whether sidebar with menu is opened or not\n   */\n  @observable\n  sideBarOpened: boolean = false;\n\n  items: IMenuItem[];\n  flatItems: IMenuItem[];\n\n  /**\n   * cached flattened menu items to support absolute indexing\n   */\n  private _unsubscribe: () => void;\n  private _hashUnsubscribe: () => void;\n\n  /**\n   *\n   * @param spec [SpecStore](#SpecStore) which contains page content structure\n   * @param scroll scroll service instance used by this menu\n   */\n  constructor(spec: SpecStore, public scroll: ScrollService, public history: HistoryService) {\n    makeObservable(this);\n\n    this.items = spec.contentItems;\n\n    this.flatItems = flattenByProp(this.items || [], 'items');\n    this.flatItems.forEach((item, idx) => (item.absoluteIdx = idx));\n\n    this.subscribe();\n  }\n\n  subscribe() {\n    this._unsubscribe = this.scroll.subscribe(this.updateOnScroll);\n    this._hashUnsubscribe = this.history.subscribe(this.updateOnHistory);\n  }\n\n  @action\n  toggleSidebar() {\n    this.sideBarOpened = this.sideBarOpened ? false : true;\n  }\n\n  @action\n  closeSidebar() {\n    this.sideBarOpened = false;\n  }\n\n  /**\n   * update active items on scroll\n   * @param isScrolledDown whether last scroll was downside\n   */\n  updateOnScroll = (isScrolledDown: boolean): void => {\n    const step = isScrolledDown ? 1 : -1;\n    let itemIdx = this.activeItemIdx;\n    while (true) {\n      if (itemIdx === -1 && !isScrolledDown) {\n        break;\n      }\n\n      if (itemIdx >= this.flatItems.length - 1 && isScrolledDown) {\n        break;\n      }\n\n      if (isScrolledDown) {\n        const el = this.getElementAtOrFirstChild(itemIdx + 1);\n        if (this.scroll.isElementBellow(el)) {\n          break;\n        }\n      } else {\n        const el = this.getElementAt(itemIdx);\n        if (this.scroll.isElementAbove(el)) {\n          break;\n        }\n      }\n      itemIdx += step;\n    }\n\n    this.activate(this.flatItems[itemIdx], true, true);\n  };\n\n  /**\n   * update active items on hash change\n   * @param id current hash\n   */\n  updateOnHistory = (id: string = this.history.currentId) => {\n    if (!id) {\n      return;\n    }\n    let item: IMenuItem | undefined;\n\n    item = this.flatItems.find(i => i.id === id);\n\n    if (item) {\n      this.activateAndScroll(item, false);\n    } else {\n      if (id.startsWith(SECURITY_SCHEMES_SECTION_PREFIX)) {\n        item = this.flatItems.find(i => SECURITY_SCHEMES_SECTION_PREFIX.startsWith(i.id));\n        this.activateAndScroll(item, false);\n      }\n      this.scroll.scrollIntoViewBySelector(`[${SECTION_ATTR}=\"${escapeHTMLAttrChars(id)}\"]`);\n    }\n  };\n\n  /**\n   * get section/operation DOM Node related to the item or null if it doesn't exist\n   * @param idx item absolute index\n   */\n  getElementAt(idx: number): Element | null {\n    const item = this.flatItems[idx];\n    return (item && querySelector(`[${SECTION_ATTR}=\"${escapeHTMLAttrChars(item.id)}\"]`)) || null;\n  }\n\n  /**\n   * get section/operation DOM Node related to the item or if it is group item, returns first item of the group\n   * @param idx item absolute index\n   */\n  getElementAtOrFirstChild(idx: number): Element | null {\n    let item = this.flatItems[idx];\n    if (item && item.type === 'group') {\n      item = item.items[0];\n    }\n    return (item && querySelector(`[${SECTION_ATTR}=\"${escapeHTMLAttrChars(item.id)}\"]`)) || null;\n  }\n\n  /**\n   * current active item\n   */\n  get activeItem(): IMenuItem {\n    return this.flatItems[this.activeItemIdx] || undefined;\n  }\n\n  getItemById = (id: string) => {\n    return this.flatItems.find(item => item.id === id);\n  };\n\n  /**\n   * activate menu item\n   * @param item item to activate\n   * @param updateLocation [true] whether to update location\n   * @param rewriteHistory [false] whether to rewrite browser history (do not create new entry)\n   */\n  @action\n  activate(\n    item: IMenuItem | undefined,\n    updateLocation: boolean = true,\n    rewriteHistory: boolean = false,\n  ) {\n    if ((this.activeItem && this.activeItem.id) === (item && item.id)) {\n      return;\n    }\n\n    if (item && item.type === 'group') {\n      return;\n    }\n\n    this.deactivate(this.activeItem);\n    if (!item) {\n      this.activeItemIdx = -1;\n      this.history.replace('', rewriteHistory);\n      return;\n    }\n\n    // do not allow activating group items\n    // TODO: control over options\n    if (item.depth <= GROUP_DEPTH) {\n      return;\n    }\n\n    this.activeItemIdx = item.absoluteIdx!;\n    if (updateLocation) {\n      this.history.replace(encodeURI(item.id), rewriteHistory);\n    }\n\n    item.activate();\n    item.expand();\n  }\n\n  /**\n   * makes item and all the parents not active\n   * @param item item to deactivate\n   */\n  deactivate(item: IMenuItem | undefined) {\n    if (item === undefined) {\n      return;\n    }\n    item.deactivate();\n    while (item !== undefined) {\n      item.collapse();\n      item = item.parent;\n    }\n  }\n\n  /**\n   * activate menu item and scroll to it\n   * @see MenuStore.activate\n   */\n  @action.bound\n  activateAndScroll(\n    item: IMenuItem | undefined,\n    updateLocation?: boolean,\n    rewriteHistory?: boolean,\n  ) {\n    // item here can be a copy from search results so find corresponding item from menu\n    const menuItem = (item && this.getItemById(item.id)) || item;\n    this.activate(menuItem, updateLocation, rewriteHistory);\n    this.scrollToActive();\n    if (!menuItem || !menuItem.items.length) {\n      this.closeSidebar();\n    }\n  }\n\n  /**\n   * scrolls to active section\n   */\n  scrollToActive(): void {\n    this.scroll.scrollIntoView(this.getElementAt(this.activeItemIdx));\n  }\n\n  dispose() {\n    this._unsubscribe();\n    this._hashUnsubscribe();\n  }\n}\n","import { bind } from 'decko';\nimport { EventEmitter } from 'eventemitter3';\n\nimport { IS_BROWSER, querySelector, Throttle } from '../utils';\nimport type { RedocNormalizedOptions } from './RedocNormalizedOptions';\n\nconst EVENT = 'scroll';\n\nexport class ScrollService {\n  private _scrollParent: Window | HTMLElement | undefined;\n  private _emiter: EventEmitter;\n  private _prevOffsetY = 0;\n  constructor(private options: RedocNormalizedOptions) {\n    this._scrollParent = IS_BROWSER ? window : undefined;\n    this._emiter = new EventEmitter();\n    this.bind();\n  }\n\n  bind() {\n    this._prevOffsetY = this.scrollY();\n    if (this._scrollParent) {\n      this._scrollParent.addEventListener('scroll', this.handleScroll);\n    }\n  }\n\n  dispose() {\n    if (this._scrollParent) {\n      this._scrollParent.removeEventListener('scroll', this.handleScroll);\n    }\n    this._emiter.removeAllListeners(EVENT);\n  }\n\n  scrollY(): number {\n    if (typeof HTMLElement !== 'undefined' && this._scrollParent instanceof HTMLElement) {\n      return this._scrollParent.scrollTop;\n    } else if (this._scrollParent !== undefined) {\n      return (this._scrollParent as Window).pageYOffset;\n    } else {\n      return 0;\n    }\n  }\n\n  isElementBellow(el: Element | null) {\n    if (el === null) {\n      return;\n    }\n    return el.getBoundingClientRect().top > this.options.scrollYOffset();\n  }\n\n  isElementAbove(el: Element | null) {\n    if (el === null) {\n      return;\n    }\n    const top = el.getBoundingClientRect().top;\n    return (top > 0 ? Math.floor(top) : Math.ceil(top)) <= this.options.scrollYOffset();\n  }\n\n  subscribe(cb): () => void {\n    const emmiter = this._emiter.addListener(EVENT, cb);\n    return () => emmiter.removeListener(EVENT, cb);\n  }\n\n  scrollIntoView(element: Element | null) {\n    if (element === null) {\n      return;\n    }\n    element.scrollIntoView();\n    if (this._scrollParent && this._scrollParent.scrollBy) {\n      // adding 1 account rounding errors in case scrollYOffset is float-number\n      (this._scrollParent.scrollBy as any)(0, -this.options.scrollYOffset() + 1);\n    }\n  }\n\n  scrollIntoViewBySelector(selector: string) {\n    const element = querySelector(selector);\n    this.scrollIntoView(element);\n  }\n\n  @bind\n  @Throttle(100)\n  handleScroll() {\n    const scrollY = this.scrollY();\n    const isScrolledDown = scrollY - this._prevOffsetY > 0;\n    this._prevOffsetY = this.scrollY();\n    this._emiter.emit(EVENT, isScrolledDown);\n  }\n}\n","import { IS_BROWSER } from '../utils/';\nimport type { IMenuItem } from './types';\nimport type { OperationModel } from './models';\n\nimport Worker from './SearchWorker.worker';\n\nfunction getWorker() {\n  let worker: new () => Worker;\n  if (IS_BROWSER) {\n    try {\n      // tslint:disable-next-line\n      worker = require('workerize-loader?inline&fallback=false!./SearchWorker.worker');\n    } catch (e) {\n      worker = require('./SearchWorker.worker').default;\n    }\n  } else {\n    worker = require('./SearchWorker.worker').default;\n  }\n  return new worker();\n}\n\nexport class SearchStore<T> {\n  searchWorker = getWorker();\n\n  indexItems(groups: Array<IMenuItem | OperationModel>) {\n    const recurse = items => {\n      items.forEach(group => {\n        if (group.type !== 'group') {\n          this.add(group.name, (group.description || '').concat(' ', group.path || ''), group.id);\n        }\n        recurse(group.items);\n      });\n    };\n\n    recurse(groups);\n    this.searchWorker.done();\n  }\n\n  add(title: string, body: string, meta?: T) {\n    this.searchWorker.add(title, body, meta);\n  }\n\n  dispose() {\n    (this.searchWorker as any).terminate();\n    (this.searchWorker as any).dispose();\n  }\n\n  search(q: string) {\n    return this.searchWorker.search<T>(q);\n  }\n\n  async toJS() {\n    return this.searchWorker.toJS();\n  }\n\n  load(state: any) {\n    this.searchWorker.load(state);\n  }\n\n  fromExternalJS(path?: string, exportName?: string) {\n    if (path && exportName) {\n      this.searchWorker.fromExternalJS(path, exportName);\n    }\n  }\n}\n","import { SECTION_ATTR } from '../services/MenuStore';\nimport styled, { media } from '../styled-components';\n\nexport const MiddlePanel = styled.div<{ $compact?: boolean }>`\n  width: calc(100% - ${props => props.theme.rightPanel.width});\n  padding: 0 ${props => props.theme.spacing.sectionHorizontal}px;\n\n  ${({ $compact, theme }) =>\n    media.lessThan('medium', true)`\n    width: 100%;\n    padding: ${`${$compact ? 0 : theme.spacing.sectionVertical}px ${\n      theme.spacing.sectionHorizontal\n    }px`};\n  `};\n`;\n\nexport const Section = styled.div.attrs(props => ({\n  [SECTION_ATTR]: props.id,\n}))<{ $underlined?: boolean }>`\n  padding: ${props => props.theme.spacing.sectionVertical}px 0;\n\n  &:last-child {\n    min-height: calc(100vh + 1px);\n  }\n\n  & > &:last-child {\n    min-height: initial;\n  }\n\n  ${media.lessThan('medium', true)`\n    padding: 0;\n  `}\n  ${({ $underlined }) =>\n    ($underlined &&\n      `\n    position: relative;\n\n    &:not(:last-of-type):after {\n      position: absolute;\n      bottom: 0;\n      width: 100%;\n      display: block;\n      content: '';\n      border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n    }\n  `) ||\n    ''}\n`;\n\nexport const RightPanel = styled.div`\n  width: ${props => props.theme.rightPanel.width};\n  color: ${({ theme }) => theme.rightPanel.textColor};\n  background-color: ${props => props.theme.rightPanel.backgroundColor};\n  padding: 0 ${props => props.theme.spacing.sectionHorizontal}px;\n\n  ${media.lessThan('medium', true)`\n    width: 100%;\n    padding: ${props =>\n      `${props.theme.spacing.sectionVertical}px ${props.theme.spacing.sectionHorizontal}px`};\n  `};\n`;\n\nexport const DarkRightPanel = styled(RightPanel)`\n  background-color: ${props => props.theme.rightPanel.backgroundColor};\n`;\n\nexport const Row = styled.div`\n  display: flex;\n  width: 100%;\n  padding: 0;\n\n  ${media.lessThan('medium', true)`\n    flex-direction: column;\n  `};\n`;\n","import styled, { css, extensionsHook } from '../styled-components';\n\nconst headerFontSize = {\n  1: '1.85714em',\n  2: '1.57143em',\n  3: '1.27em',\n};\n\nexport const headerCommonMixin = level => css`\n  font-family: ${({ theme }) => theme.typography.headings.fontFamily};\n  font-weight: ${({ theme }) => theme.typography.headings.fontWeight};\n  font-size: ${headerFontSize[level]};\n  line-height: ${({ theme }) => theme.typography.headings.lineHeight};\n`;\n\nexport const H1 = styled.h1`\n  ${headerCommonMixin(1)};\n  color: ${({ theme }) => theme.colors.text.primary};\n\n  ${extensionsHook('H1')};\n`;\n\nexport const H2 = styled.h2`\n  ${headerCommonMixin(2)};\n  color: ${({ theme }) => theme.colors.text.primary};\n  margin: 0 0 20px;\n\n  ${extensionsHook('H2')};\n`;\n\nexport const H3 = styled.h2`\n  ${headerCommonMixin(3)};\n  color: ${({ theme }) => theme.colors.text.primary};\n\n  ${extensionsHook('H3')};\n`;\n\nexport const RightPanelHeader = styled.h3`\n  color: ${({ theme }) => theme.rightPanel.textColor};\n\n  ${extensionsHook('RightPanelHeader')};\n`;\n\nexport const UnderlinedHeader = styled.h5`\n  border-bottom: 1px solid rgba(38, 50, 56, 0.3);\n  margin: 1em 0 1em 0;\n  color: rgba(38, 50, 56, 0.5);\n  font-weight: normal;\n  text-transform: uppercase;\n  font-size: 0.929em;\n  line-height: 20px;\n\n  ${extensionsHook('UnderlinedHeader')};\n`;\n","import * as React from 'react';\nimport { createContext, useContext } from 'react';\n\nimport { AppStore } from '../services/';\nimport { RedocRawOptions } from '../services/RedocNormalizedOptions';\nimport { loadAndBundleSpec } from '../utils';\n\nexport interface StoreBuilderProps {\n  specUrl?: string;\n  spec?: object;\n  store?: AppStore;\n\n  options?: RedocRawOptions;\n\n  onLoaded?: (e?: Error) => void;\n\n  children: (props: { loading: boolean; store: AppStore | null }) => any;\n}\n\nexport interface StoreBuilderState {\n  error?: Error;\n  loading: boolean;\n  resolvedSpec?: any;\n  prevSpec?: any;\n  prevSpecUrl?: string;\n}\n\nconst StoreContext = createContext<AppStore | undefined>(undefined);\nconst { Provider, Consumer } = StoreContext;\nexport { Provider as StoreProvider, Consumer as StoreConsumer, StoreContext };\n\nexport function StoreBuilder(props: StoreBuilderProps) {\n  const { spec, specUrl, options, onLoaded, children } = props;\n\n  const [resolvedSpec, setResolvedSpec] = React.useState<any>(null);\n  const [error, setError] = React.useState<Error | null>(null);\n  if (error) {\n    throw error;\n  }\n\n  React.useEffect(() => {\n    async function load() {\n      if (!spec && !specUrl) {\n        return undefined;\n      }\n      setResolvedSpec(null);\n      try {\n        const resolved = await loadAndBundleSpec(spec || specUrl!);\n        setResolvedSpec(resolved);\n      } catch (e) {\n        if (onLoaded) {\n          onLoaded(e);\n        }\n        setError(e);\n        throw e;\n      }\n    }\n    load();\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [spec, specUrl]);\n\n  const store = React.useMemo(() => {\n    if (!resolvedSpec) return null;\n    try {\n      return new AppStore(resolvedSpec, specUrl, options);\n    } catch (e) {\n      if (onLoaded) {\n        onLoaded(e);\n      }\n      throw e;\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [resolvedSpec, specUrl, options]);\n\n  React.useEffect(() => {\n    if (store && onLoaded) {\n      onLoaded();\n    }\n  }, [store, onLoaded]);\n\n  return children({\n    loading: !store,\n    store,\n  });\n}\n\nexport function useStore(): AppStore | undefined {\n  return useContext(StoreContext);\n}\n","import * as React from 'react';\n\nimport { StoreContext } from '../components/StoreBuilder';\nimport styled, { css } from '../styled-components';\n\nimport { HistoryService } from '../services';\n\n// tslint:disable-next-line\nexport const linkifyMixin = className => css`\n  ${className} {\n    cursor: pointer;\n    margin-left: -20px;\n    padding: 0;\n    line-height: 1;\n    width: 20px;\n    display: inline-block;\n    outline: 0;\n  }\n  ${className}:before {\n    content: '';\n    width: 15px;\n    height: 15px;\n    background-size: contain;\n    background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjUxMiIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCA1MTIgNTEyIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBmaWxsPSIjMDEwMTAxIiBkPSJNNDU5LjcgMjMzLjRsLTkwLjUgOTAuNWMtNTAgNTAtMTMxIDUwLTE4MSAwIC03LjktNy44LTE0LTE2LjctMTkuNC0yNS44bDQyLjEtNDIuMWMyLTIgNC41LTMuMiA2LjgtNC41IDIuOSA5LjkgOCAxOS4zIDE1LjggMjcuMiAyNSAyNSA2NS42IDI0LjkgOTAuNSAwbDkwLjUtOTAuNWMyNS0yNSAyNS02NS42IDAtOTAuNSAtMjQuOS0yNS02NS41LTI1LTkwLjUgMGwtMzIuMiAzMi4yYy0yNi4xLTEwLjItNTQuMi0xMi45LTgxLjYtOC45bDY4LjYtNjguNmM1MC01MCAxMzEtNTAgMTgxIDBDNTA5LjYgMTAyLjMgNTA5LjYgMTgzLjQgNDU5LjcgMjMzLjR6TTIyMC4zIDM4Mi4ybC0zMi4yIDMyLjJjLTI1IDI0LjktNjUuNiAyNC45LTkwLjUgMCAtMjUtMjUtMjUtNjUuNiAwLTkwLjVsOTAuNS05MC41YzI1LTI1IDY1LjUtMjUgOTAuNSAwIDcuOCA3LjggMTIuOSAxNy4yIDE1LjggMjcuMSAyLjQtMS40IDQuOC0yLjUgNi44LTQuNWw0Mi4xLTQyYy01LjQtOS4yLTExLjYtMTgtMTkuNC0yNS44IC01MC01MC0xMzEtNTAtMTgxIDBsLTkwLjUgOTAuNWMtNTAgNTAtNTAgMTMxIDAgMTgxIDUwIDUwIDEzMSA1MCAxODEgMGw2OC42LTY4LjZDMjc0LjYgMzk1LjEgMjQ2LjQgMzkyLjMgMjIwLjMgMzgyLjJ6Ii8+PC9zdmc+Cg==');\n    opacity: 0.5;\n    visibility: hidden;\n    display: inline-block;\n    vertical-align: middle;\n  }\n\n  h1:hover > ${className}::before, h2:hover > ${className}::before, ${className}:hover::before {\n    visibility: visible;\n  }\n`;\n\nconst isModifiedEvent = event =>\n  !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n\nexport function Link(props: { to: string; className?: string; children?: any }) {\n  const store = React.useContext(StoreContext);\n  const clickHandler = React.useCallback(\n    (event: React.MouseEvent<HTMLAnchorElement>) => {\n      if (!store) return;\n      navigate(store.menu.history, event, props.to);\n    },\n    [store, props.to],\n  );\n\n  if (!store) return null;\n\n  return (\n    <a\n      className={props.className}\n      href={store!.menu.history.linkForId(props.to)}\n      onClick={clickHandler}\n      aria-label={props.to}\n    >\n      {props.children}\n    </a>\n  );\n}\n\nfunction navigate(history: HistoryService, event: React.MouseEvent<HTMLAnchorElement>, to: string) {\n  if (\n    !event.defaultPrevented && // onClick prevented default\n    event.button === 0 && // ignore everything but left clicks\n    !isModifiedEvent(event) // ignore clicks with modifier keys\n  ) {\n    event.preventDefault();\n    history.replace(encodeURI(to));\n  }\n}\n\nconst StyledShareLink = styled(Link)`\n  ${linkifyMixin('&')};\n`;\n\nexport function ShareLink(props: { to: string }) {\n  return <StyledShareLink to={props.to} />;\n}\n","import * as React from 'react';\nimport styled from '../styled-components';\n\nconst directionMap = {\n  left: '90deg',\n  right: '-90deg',\n  up: '-180deg',\n  down: '0',\n};\n\nconst IntShelfIcon = (props: {\n  className?: string;\n  float?: 'left' | 'right';\n  size?: string;\n  color?: string;\n  direction: 'left' | 'right' | 'up' | 'down';\n  style?: React.CSSProperties;\n}): JSX.Element => {\n  return (\n    <svg\n      className={props.className}\n      style={props.style}\n      version=\"1.1\"\n      viewBox=\"0 0 24 24\"\n      x=\"0\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      y=\"0\"\n      aria-hidden=\"true\"\n    >\n      <polygon points=\"17.3 8.3 12 13.6 6.7 8.3 5.3 9.7 12 16.4 18.7 9.7 \" />\n    </svg>\n  );\n};\n\nexport const ShelfIcon = styled(IntShelfIcon)`\n  height: ${props => props.size || '18px'};\n  width: ${props => props.size || '18px'};\n  min-width: ${props => props.size || '18px'};\n  vertical-align: middle;\n  float: ${props => props.float || ''};\n  transition: transform 0.2s ease-out;\n  transform: rotateZ(${props => directionMap[props.direction || 'down']});\n\n  polygon {\n    fill: ${({ color, theme }) =>\n      (color && theme.colors.responses[color] && theme.colors.responses[color].color) || color};\n  }\n`;\n\nexport const Badge = styled.span<{ type: string; color?: string }>`\n  display: inline-block;\n  padding: 2px 8px;\n  margin: 0;\n  background-color: ${props => props.color || props.theme.colors[props.type].main};\n  color: ${props => props.theme.colors[props.type].contrastText};\n  font-size: ${props => props.theme.typography.code.fontSize};\n  vertical-align: middle;\n  line-height: 1.6;\n  border-radius: 4px;\n  font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n  font-size: 12px;\n  + span[type] {\n    margin-left: 4px;\n  }\n`;\n","import { css } from '../styled-components';\n\nexport const deprecatedCss = css`\n  text-decoration: line-through;\n  color: #707070;\n`;\n","import styled, { extensionsHook, media, css } from '../styled-components';\nimport { deprecatedCss } from './mixins';\n\nexport const PropertiesTableCaption = styled.caption`\n  text-align: right;\n  font-size: 0.9em;\n  font-weight: normal;\n  color: ${props => props.theme.colors.text.secondary};\n`;\n\nexport const PropertyCell = styled.td<{ kind?: string }>`\n  border-left: 1px solid ${props => props.theme.schema.linesColor};\n  box-sizing: border-box;\n  position: relative;\n  padding: 10px 10px 10px 0;\n\n  ${media.lessThan('small')`\n    display: block;\n    overflow: hidden;\n  `}\n\n  tr:first-of-type > &,\n  tr.last > & {\n    border-left-width: 0;\n    background-position: top left;\n    background-repeat: no-repeat;\n    background-size: 1px 100%;\n  }\n\n  tr:first-of-type > & {\n    background-image: linear-gradient(\n      to bottom,\n      transparent 0%,\n      transparent 22px,\n      ${props => props.theme.schema.linesColor} 22px,\n      ${props => props.theme.schema.linesColor} 100%\n    );\n  }\n\n  tr.last > & {\n    background-image: linear-gradient(\n      to bottom,\n      ${props => props.theme.schema.linesColor} 0%,\n      ${props => props.theme.schema.linesColor} 22px,\n      transparent 22px,\n      transparent 100%\n    );\n  }\n\n  tr.last + tr > & {\n    border-left-color: transparent;\n  }\n\n  tr.last:first-child > & {\n    background: none;\n    border-left-color: transparent;\n  }\n`;\n\nexport const PropertyCellWithInner = styled(PropertyCell)`\n  padding: 0;\n`;\n\nexport const PropertyNameCell = styled(PropertyCell)`\n  vertical-align: top;\n  line-height: 20px;\n  white-space: nowrap;\n  font-size: 13px;\n  font-family: ${props => props.theme.typography.code.fontFamily};\n\n  &.deprecated {\n    ${deprecatedCss};\n  }\n\n  ${({ kind }) =>\n    kind === 'patternProperties' &&\n    css`\n      > span.property-name {\n        display: inline-table;\n        white-space: break-spaces;\n        margin-right: 20px;\n\n        ::before,\n        ::after {\n          content: '/';\n          filter: opacity(0.2);\n        }\n      }\n    `}\n\n  ${({ kind = '' }) =>\n    ['field', 'additionalProperties', 'patternProperties'].includes(kind)\n      ? ''\n      : 'font-style: italic'};\n\n  ${extensionsHook('PropertyNameCell')};\n`;\n\nexport const PropertyDetailsCell = styled.td`\n  border-bottom: 1px solid #9fb4be;\n  padding: 10px 0;\n  width: ${props => props.theme.schema.defaultDetailsWidth};\n  box-sizing: border-box;\n\n  tr.expanded & {\n    border-bottom: none;\n  }\n\n  ${media.lessThan('small')`\n    padding: 0 20px;\n    border-bottom: none;\n    border-left: 1px solid ${props => props.theme.schema.linesColor};\n\n    tr.last > & {\n      border-left: none;\n    }\n  `}\n\n  ${extensionsHook('PropertyDetailsCell')};\n`;\n\nexport const PropertyBullet = styled.span`\n  color: ${props => props.theme.schema.linesColor};\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  margin-right: 10px;\n\n  &::before {\n    content: '';\n    display: inline-block;\n    vertical-align: middle;\n    width: 10px;\n    height: 1px;\n    background: ${props => props.theme.schema.linesColor};\n  }\n\n  &::after {\n    content: '';\n    display: inline-block;\n    vertical-align: middle;\n    width: 1px;\n    background: ${props => props.theme.schema.linesColor};\n    height: 7px;\n  }\n`;\n\nexport const InnerPropertiesWrap = styled.div`\n  padding: ${({ theme }) => theme.schema.nestingSpacing};\n`;\n\nexport const PropertiesTable = styled.table`\n  border-collapse: separate;\n  border-radius: 3px;\n  font-size: ${props => props.theme.typography.fontSize};\n\n  border-spacing: 0;\n  width: 100%;\n\n  > tr {\n    vertical-align: middle;\n  }\n\n  ${media.lessThan('small')`\n    display: block;\n    > tr, > tbody > tr {\n      display: block;\n    }\n  `}\n\n  ${media.lessThan('small', false, ' and (-ms-high-contrast:none)')`\n    td {\n      float: left;\n      width: 100%;\n    }\n  `}\n\n  &\n    ${InnerPropertiesWrap},\n    &\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap},\n    &\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap} {\n    margin: ${({ theme }) => theme.schema.nestingSpacing};\n    margin-right: 0;\n    background: ${({ theme }) => theme.schema.nestedBackground};\n  }\n\n  &\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap},\n    &\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap},\n    &\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap}\n    ${InnerPropertiesWrap} {\n    background: #ffffff;\n  }\n`;\n","import styled from '../styled-components';\nimport { darken } from 'polished';\nimport { deprecatedCss } from './mixins';\n\nexport const OneOfList = styled.div`\n  margin: 0 0 3px 0;\n  display: inline-block;\n`;\n\nexport const OneOfLabel = styled.span`\n  font-size: 0.9em;\n  margin-right: 10px;\n  color: ${props => props.theme.colors.primary.main};\n  font-family: ${props => props.theme.typography.headings.fontFamily};\n}\n`;\n\nexport const OneOfButton = styled.button<{ $active: boolean; $deprecated: boolean }>`\n  display: inline-block;\n  margin-right: 10px;\n  margin-bottom: 5px;\n  font-size: 0.8em;\n  cursor: pointer;\n  border: 1px solid ${props => props.theme.colors.primary.main};\n  padding: 2px 10px;\n  line-height: 1.5em;\n  outline: none;\n  &:focus {\n    box-shadow: 0 0 0 1px ${props => props.theme.colors.primary.main};\n  }\n\n  ${({ $deprecated }) => ($deprecated && deprecatedCss) || ''};\n\n  ${props => {\n    if (props.$active) {\n      return `\n      color: white;\n      background-color: ${props.theme.colors.primary.main};\n      &:focus {\n        box-shadow: none;\n        background-color: ${darken(0.15, props.theme.colors.primary.main)};\n      }\n      `;\n    } else {\n      return `\n        color: ${props.theme.colors.primary.main};\n        background-color: white;\n      `;\n    }\n  }}\n`;\n\nexport const ArrayOpenningLabel = styled.div`\n  font-size: 0.9em;\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  &::after {\n    content: ' [';\n  }\n`;\n\nexport const ArrayClosingLabel = styled.div`\n  font-size: 0.9em;\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  &::after {\n    content: ']';\n  }\n`;\n",null,"import { darken } from 'polished';\nimport { Tabs as ReactTabs } from 'react-tabs';\n\nimport styled from '../styled-components';\n\nexport { Tab, TabList, TabPanel } from 'react-tabs';\n\nexport const Tabs = styled(ReactTabs)`\n  > ul {\n    list-style: none;\n    padding: 0;\n    margin: 0;\n    margin: 0 -5px;\n\n    > li {\n      padding: 5px 10px;\n      display: inline-block;\n\n      background-color: ${({ theme }) => theme.codeBlock.backgroundColor};\n      border-bottom: 1px solid rgba(0, 0, 0, 0.5);\n      cursor: pointer;\n      text-align: center;\n      outline: none;\n      color: ${({ theme }) => darken(theme.colors.tonalOffset, theme.rightPanel.textColor)};\n      margin: 0\n        ${({ theme }) => `${theme.spacing.unit}px ${theme.spacing.unit}px ${theme.spacing.unit}px`};\n      border: 1px solid ${({ theme }) => darken(0.05, theme.codeBlock.backgroundColor)};\n      border-radius: 5px;\n      min-width: 60px;\n      font-size: 0.9em;\n      font-weight: bold;\n\n      &.react-tabs__tab--selected {\n        color: ${props => props.theme.colors.text.primary};\n        background: ${({ theme }) => theme.rightPanel.textColor};\n        &:focus {\n          outline: auto;\n        }\n      }\n\n      &:only-child {\n        flex: none;\n        min-width: 100px;\n      }\n\n      &.tab-success {\n        color: ${props => props.theme.colors.responses.success.tabTextColor};\n      }\n\n      &.tab-redirect {\n        color: ${props => props.theme.colors.responses.redirect.tabTextColor};\n      }\n\n      &.tab-info {\n        color: ${props => props.theme.colors.responses.info.tabTextColor};\n      }\n\n      &.tab-error {\n        color: ${props => props.theme.colors.responses.error.tabTextColor};\n      }\n    }\n  }\n  > .react-tabs__tab-panel {\n    background: ${({ theme }) => theme.codeBlock.backgroundColor};\n    & > div,\n    & > pre {\n      padding: ${props => props.theme.spacing.unit * 4}px;\n      margin: 0;\n    }\n\n    & > div > pre {\n      padding: 0;\n    }\n  }\n`;\n\nexport const SmallTabs = styled(Tabs)`\n  > ul {\n    display: block;\n    > li {\n      padding: 2px 5px;\n      min-width: auto;\n      margin: 0 15px 0 0;\n      font-size: 13px;\n      font-weight: normal;\n      border-bottom: 1px dashed;\n      color: ${({ theme }) => darken(theme.colors.tonalOffset, theme.rightPanel.textColor)};\n      border-radius: 0;\n      background: none;\n\n      &:last-child {\n        margin-right: 0;\n      }\n\n      &.react-tabs__tab--selected {\n        color: ${({ theme }) => theme.rightPanel.textColor};\n        background: none;\n      }\n    }\n  }\n  > .react-tabs__tab-panel {\n    & > div,\n    & > pre {\n      padding: ${props => props.theme.spacing.unit * 2}px 0;\n    }\n  }\n`;\n","import styled, { extensionsHook } from '../styled-components';\n\nexport const PrismDiv = styled.div`\n  /**\n  * Based on prism-dark.css\n  */\n\n  code[class*='language-'],\n  pre[class*='language-'] {\n    /* color: white;\n    background: none; */\n    text-shadow: 0 -0.1em 0.2em black;\n    text-align: left;\n    white-space: pre;\n    word-spacing: normal;\n    word-break: normal;\n    word-wrap: normal;\n    line-height: 1.5;\n\n    -moz-tab-size: 4;\n    -o-tab-size: 4;\n    tab-size: 4;\n\n    -webkit-hyphens: none;\n    -moz-hyphens: none;\n    -ms-hyphens: none;\n    hyphens: none;\n  }\n\n  @media print {\n    code[class*='language-'],\n    pre[class*='language-'] {\n      text-shadow: none;\n    }\n  }\n\n  /* Code blocks */\n  pre[class*='language-'] {\n    padding: 1em;\n    margin: 0.5em 0;\n    overflow: auto;\n  }\n\n  .token.comment,\n  .token.prolog,\n  .token.doctype,\n  .token.cdata {\n    color: hsl(30, 20%, 50%);\n  }\n\n  .token.punctuation {\n    opacity: 0.7;\n  }\n\n  .namespace {\n    opacity: 0.7;\n  }\n\n  .token.property,\n  .token.tag,\n  .token.number,\n  .token.constant,\n  .token.symbol {\n    color: #4a8bb3;\n  }\n\n  .token.boolean {\n    color: #e64441;\n  }\n\n  .token.selector,\n  .token.attr-name,\n  .token.string,\n  .token.char,\n  .token.builtin,\n  .token.inserted {\n    color: #a0fbaa;\n    & + a,\n    & + a:visited {\n      color: #4ed2ba;\n      text-decoration: underline;\n    }\n  }\n\n  .token.property.string {\n    color: white;\n  }\n\n  .token.operator,\n  .token.entity,\n  .token.url,\n  .token.variable {\n    color: hsl(40, 90%, 60%);\n  }\n\n  .token.atrule,\n  .token.attr-value,\n  .token.keyword {\n    color: hsl(350, 40%, 70%);\n  }\n\n  .token.regex,\n  .token.important {\n    color: #e90;\n  }\n\n  .token.important,\n  .token.bold {\n    font-weight: bold;\n  }\n  .token.italic {\n    font-style: italic;\n  }\n\n  .token.entity {\n    cursor: help;\n  }\n\n  .token.deleted {\n    color: red;\n  }\n\n  ${extensionsHook('Prism')};\n`;\n","import styled from '../styled-components';\nimport { PrismDiv } from './PrismDiv';\n\nexport const SampleControls = styled.div`\n  opacity: 0.7;\n  transition: opacity 0.3s ease;\n  text-align: right;\n  &:focus-within {\n    opacity: 1;\n  }\n  > button {\n    background-color: transparent;\n    border: 0;\n    color: inherit;\n    padding: 2px 10px;\n    font-family: ${({ theme }) => theme.typography.fontFamily};\n    font-size: ${({ theme }) => theme.typography.fontSize};\n    line-height: ${({ theme }) => theme.typography.lineHeight};\n    cursor: pointer;\n    outline: 0;\n\n    :hover,\n    :focus {\n      background: rgba(255, 255, 255, 0.1);\n    }\n  }\n`;\n\nexport const SampleControlsWrap = styled.div`\n  &:hover ${SampleControls} {\n    opacity: 1;\n  }\n`;\n\nexport const StyledPre = styled(PrismDiv).attrs({\n  as: 'pre',\n})`\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  font-size: ${props => props.theme.typography.code.fontSize};\n  overflow-x: auto;\n  margin: 0;\n\n  white-space: ${({ theme }) => (theme.typography.code.wrap ? 'pre-wrap' : 'pre')};\n`;\n",null,"import * as React from 'react';\n\nimport PerfectScrollbarType, * as PerfectScrollbarNamespace from 'perfect-scrollbar';\n\nimport { OptionsContext } from '../components/OptionsProvider';\nimport styled, { createGlobalStyle } from '../styled-components';\nimport { IS_BROWSER } from '../utils';\n\n/*\n * perfect scrollbar umd bundle uses exports assignment while module uses default export\n * so when bundled with webpack default export works but with jest it crashes\n * That's why the following ugly fix is required\n */\nconst PerfectScrollbarConstructor =\n  PerfectScrollbarNamespace.default || (PerfectScrollbarNamespace as any as PerfectScrollbarType);\n\nlet psStyles = '';\nif (IS_BROWSER) {\n  psStyles = require('perfect-scrollbar/css/perfect-scrollbar.css');\n  psStyles = (typeof psStyles.toString === 'function' && psStyles.toString()) || '';\n  psStyles = psStyles === '[object Object]' ? '' : psStyles;\n}\n\nconst PSStyling = createGlobalStyle`${psStyles}`;\n\nconst StyledScrollWrapper = styled.div`\n  position: relative;\n`;\n\nexport interface PerfectScrollbarProps {\n  options?: PerfectScrollbarType.Options;\n  className?: string;\n  updateFn?: (fn) => void;\n}\n\nexport class PerfectScrollbar extends React.Component<\n  React.PropsWithChildren<PerfectScrollbarProps>\n> {\n  private _container: HTMLElement;\n  private inst: PerfectScrollbarType;\n\n  componentDidMount() {\n    const offset = (this._container.parentElement && this._container.parentElement.scrollTop) || 0;\n    this.inst = new PerfectScrollbarConstructor(this._container, this.props.options || {});\n    if (this._container.scrollTo) {\n      this._container.scrollTo(0, offset);\n    }\n  }\n\n  componentDidUpdate() {\n    this.inst.update();\n  }\n\n  componentWillUnmount() {\n    this.inst.destroy();\n  }\n\n  handleRef = ref => {\n    this._container = ref;\n  };\n\n  render() {\n    const { children, className, updateFn } = this.props;\n\n    if (updateFn) {\n      updateFn(this.componentDidUpdate.bind(this));\n    }\n\n    return (\n      <>\n        {psStyles && <PSStyling />}\n        <StyledScrollWrapper className={`scrollbar-container ${className}`} ref={this.handleRef}>\n          {children}\n        </StyledScrollWrapper>\n      </>\n    );\n  }\n}\n\nexport function PerfectScrollbarWrap(\n  props: PerfectScrollbarProps & { children: JSX.Element[] | JSX.Element },\n) {\n  return (\n    <OptionsContext.Consumer>\n      {options =>\n        !options.nativeScrollbars ? (\n          <PerfectScrollbar {...props}>{props.children}</PerfectScrollbar>\n        ) : (\n          <div\n            style={{\n              overflow: 'auto',\n              overscrollBehavior: 'contain',\n              msOverflowStyle: '-ms-autohiding-scrollbar',\n            }}\n          >\n            {props.children}\n          </div>\n        )\n      }\n    </OptionsContext.Consumer>\n  );\n}\n","import * as React from 'react';\nimport styled from '../../styled-components';\nimport { ArrowIconProps, DropdownProps, DropdownOption } from './types';\n\nconst ArrowSvg = ({ className, style }: ArrowIconProps): JSX.Element => (\n  <svg\n    className={className}\n    style={style}\n    xmlns=\"http://www.w3.org/2000/svg\"\n    width=\"16\"\n    height=\"16\"\n    viewBox=\"0 0 24 24\"\n    fill=\"none\"\n    stroke=\"currentColor\"\n    strokeWidth=\"2\"\n    strokeLinecap=\"round\"\n    strokeLinejoin=\"round\"\n  >\n    <polyline points=\"6 9 12 15 18 9\" />\n  </svg>\n);\n\nconst ArrowIcon = styled(ArrowSvg)`\n  position: absolute;\n  pointer-events: none;\n  z-index: 1;\n  top: 50%;\n  -webkit-transform: translateY(-50%);\n  -ms-transform: translateY(-50%);\n  transform: translateY(-50%);\n  right: 8px;\n  margin: auto;\n  text-align: center;\n  polyline {\n    color: ${props => props.variant === 'dark' && 'white'};\n  }\n`;\n\nconst DropdownComponent = (props: DropdownProps): JSX.Element => {\n  const { options, onChange, placeholder, value = '', variant, className } = props;\n\n  const handleOnChange = event => {\n    const { selectedIndex } = event.target;\n    const index = placeholder ? selectedIndex - 1 : selectedIndex;\n    onChange(options[index]);\n  };\n\n  return (\n    <div className={className}>\n      <ArrowIcon variant={variant} />\n      <select onChange={handleOnChange} value={value} className=\"dropdown-select\">\n        {placeholder && (\n          <option disabled hidden value={placeholder}>\n            {placeholder}\n          </option>\n        )}\n        {options.map(({ idx, value, title }: DropdownOption, index) => (\n          <option key={idx || value + index} value={value}>\n            {title || value}\n          </option>\n        ))}\n      </select>\n      <label>{value}</label>\n    </div>\n  );\n};\n\nexport const Dropdown = React.memo<DropdownProps>(DropdownComponent);\n","import styled from 'styled-components';\n\nimport { Dropdown as DropdownComponent } from './Dropdown';\n\nexport const Dropdown = styled(DropdownComponent)<{\n  fullWidth?: boolean;\n}>`\n  label {\n    box-sizing: border-box;\n    min-width: 100px;\n    outline: none;\n    display: inline-block;\n    font-family: ${props => props.theme.typography.headings.fontFamily};\n    color: ${({ theme }) => theme.colors.text.primary};\n    vertical-align: bottom;\n    width: ${({ fullWidth }) => (fullWidth ? '100%' : 'auto')};\n    text-transform: none;\n    padding: 0 22px 0 4px;\n\n    font-size: 0.929em;\n    line-height: 1.5em;\n    font-family: inherit;\n    text-overflow: ellipsis;\n    overflow: hidden;\n    white-space: nowrap;\n  }\n  .dropdown-select {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    border: none;\n    appearance: none;\n    cursor: pointer;\n\n    color: ${({ theme }) => theme.colors.text.primary};\n    line-height: inherit;\n    font-family: inherit;\n  }\n  box-sizing: border-box;\n  min-width: 100px;\n  outline: none;\n  display: inline-block;\n  border-radius: 2px;\n  border: 1px solid rgba(38, 50, 56, 0.5);\n  vertical-align: bottom;\n  padding: 2px 0px 2px 6px;\n  position: relative;\n  width: auto;\n  background: white;\n  color: #263238;\n  font-family: ${props => props.theme.typography.headings.fontFamily};\n  font-size: 0.929em;\n  line-height: 1.5em;\n  cursor: pointer;\n  transition: border 0.25s ease, color 0.25s ease, box-shadow 0.25s ease;\n\n  &:hover,\n  &:focus-within {\n    border: 1px solid ${props => props.theme.colors.primary.main};\n    color: ${props => props.theme.colors.primary.main};\n    box-shadow: 0px 0px 0px 1px ${props => props.theme.colors.primary.main};\n  }\n`;\n\nexport const SimpleDropdown = styled(Dropdown)`\n  margin-left: 10px;\n  text-transform: none;\n  font-size: 0.969em;\n\n  font-size: 1em;\n  border: none;\n  padding: 0 1.2em 0 0;\n  background: transparent;\n\n  &:hover,\n  &:focus-within {\n    border: none;\n    box-shadow: none;\n    label {\n      color: ${props => props.theme.colors.primary.main};\n      text-shadow: 0px 0px 0px ${props => props.theme.colors.primary.main};\n    }\n  }\n`;\n\nexport const MimeLabel = styled.span`\n  margin-left: 10px;\n  text-transform: none;\n  font-size: 0.929em;\n  color: black;\n`;\n","import * as React from 'react';\nimport { StyledComponent } from 'styled-components';\n\nimport { DropdownProps, MimeLabel, SimpleDropdown } from '../../common-elements/Dropdown';\n\nexport interface DropdownOrLabelProps extends DropdownProps {\n  Label?: StyledComponent<any, any, Record<string, any>, never>;\n  Dropdown?: StyledComponent<\n    React.NamedExoticComponent<DropdownProps>,\n    any,\n    {\n      fullWidth?: boolean | undefined;\n    },\n    never\n  >;\n}\n\nexport function DropdownOrLabel(props: DropdownOrLabelProps): JSX.Element {\n  const { Label = MimeLabel, Dropdown = SimpleDropdown } = props;\n  if (props.options.length === 1) {\n    return <Label>{props.options[0].value}</Label>;\n  }\n  return <Dropdown {...props} />;\n}\n",null,"import { headerCommonMixin, linkifyMixin } from '../../common-elements';\nimport { PrismDiv } from '../../common-elements/PrismDiv';\nimport styled, { css, extensionsHook, ResolvedThemeInterface } from '../../styled-components';\n\nimport { StyledComponent } from 'styled-components';\n\nexport const linksCss = css`\n  a {\n    text-decoration: ${props => props.theme.typography.links.textDecoration};\n    color: ${props => props.theme.typography.links.color};\n\n    &:visited {\n      color: ${props => props.theme.typography.links.visited};\n    }\n\n    &:hover {\n      color: ${props => props.theme.typography.links.hover};\n      text-decoration: ${props => props.theme.typography.links.hoverTextDecoration};\n    }\n  }\n`;\n\nexport const StyledMarkdownBlock = styled(\n  PrismDiv as StyledComponent<\n    'div',\n    ResolvedThemeInterface,\n    { $compact?: boolean; $inline?: boolean }\n  >,\n)`\n  font-family: ${props => props.theme.typography.fontFamily};\n  font-weight: ${props => props.theme.typography.fontWeightRegular};\n  line-height: ${props => props.theme.typography.lineHeight};\n\n  p {\n    &:last-child {\n      margin-bottom: 0;\n    }\n  }\n\n  ${({ $compact }) =>\n    $compact &&\n    `\n    p:first-child {\n      margin-top: 0;\n    }\n    p:last-child {\n      margin-bottom: 0;\n    }\n  `}\n\n  ${({ $inline }) =>\n    $inline &&\n    ` p {\n    display: inline-block;\n  }`}\n\n  h1 {\n    ${headerCommonMixin(1)};\n    color: ${props => props.theme.colors.primary.main};\n    margin-top: 0;\n  }\n\n  h2 {\n    ${headerCommonMixin(2)};\n    color: ${props => props.theme.colors.text.primary};\n  }\n\n  code {\n    color: ${({ theme }) => theme.typography.code.color};\n    background-color: ${({ theme }) => theme.typography.code.backgroundColor};\n\n    font-family: ${props => props.theme.typography.code.fontFamily};\n    border-radius: 2px;\n    border: 1px solid rgba(38, 50, 56, 0.1);\n    padding: 0 ${({ theme }) => theme.spacing.unit}px;\n    font-size: ${props => props.theme.typography.code.fontSize};\n    font-weight: ${({ theme }) => theme.typography.code.fontWeight};\n\n    word-break: break-word;\n  }\n\n  pre {\n    font-family: ${props => props.theme.typography.code.fontFamily};\n    white-space: ${({ theme }) => (theme.typography.code.wrap ? 'pre-wrap' : 'pre')};\n    background-color: ${({ theme }) => theme.codeBlock.backgroundColor};\n    color: white;\n    padding: ${props => props.theme.spacing.unit * 4}px;\n    overflow-x: auto;\n    line-height: normal;\n    border-radius: 0;\n    border: 1px solid rgba(38, 50, 56, 0.1);\n\n    code {\n      background-color: transparent;\n      color: white;\n      padding: 0;\n\n      &:before,\n      &:after {\n        content: none;\n      }\n    }\n  }\n\n  blockquote {\n    margin: 0;\n    margin-bottom: 1em;\n    padding: 0 15px;\n    color: #777;\n    border-left: 4px solid #ddd;\n  }\n\n  img {\n    max-width: 100%;\n    box-sizing: content-box;\n  }\n\n  ul,\n  ol {\n    padding-left: 2em;\n    margin: 0;\n    margin-bottom: 1em;\n\n    ul,\n    ol {\n      margin-bottom: 0;\n      margin-top: 0;\n    }\n  }\n\n  table {\n    display: block;\n    width: 100%;\n    overflow: auto;\n    word-break: normal;\n    word-break: keep-all;\n    border-collapse: collapse;\n    border-spacing: 0;\n    margin-top: 1.5em;\n    margin-bottom: 1.5em;\n  }\n\n  table tr {\n    background-color: #fff;\n    border-top: 1px solid #ccc;\n\n    &:nth-child(2n) {\n      background-color: ${({ theme }) => theme.schema.nestedBackground};\n    }\n  }\n\n  table th,\n  table td {\n    padding: 6px 13px;\n    border: 1px solid #ddd;\n  }\n\n  table th {\n    text-align: left;\n    font-weight: bold;\n  }\n\n  ${linkifyMixin('.share-link')};\n\n  ${linksCss}\n\n  ${extensionsHook('Markdown')};\n`;\n","import * as DOMPurify from 'dompurify';\nimport * as React from 'react';\n\nimport { OptionsConsumer } from '../OptionsProvider';\nimport { StylingMarkdownProps } from './Markdown';\nimport { StyledMarkdownBlock } from './styled.elements';\nimport styled from 'styled-components';\n\n// Workaround for DOMPurify type issues (https://github.com/cure53/DOMPurify/issues/1034)\nconst dompurify = DOMPurify['default'] as DOMPurify.DOMPurify;\n\nconst StyledMarkdownSpan = styled(StyledMarkdownBlock)`\n  display: inline;\n`;\n\nconst sanitize = (sanitize, html) => (sanitize ? dompurify.sanitize(html) : html);\n\nexport function SanitizedMarkdownHTML({\n  inline,\n  compact,\n  ...rest\n}: StylingMarkdownProps & { html: string; className?: string; 'data-role'?: string }) {\n  const Wrap = inline ? StyledMarkdownSpan : StyledMarkdownBlock;\n\n  return (\n    <OptionsConsumer>\n      {options => (\n        <Wrap\n          className={'redoc-markdown ' + (rest.className || '')}\n          dangerouslySetInnerHTML={{\n            __html: sanitize(options.sanitize, rest.html),\n          }}\n          data-role={rest['data-role']}\n          {...rest}\n          $inline={inline}\n          $compact={compact}\n        />\n      )}\n    </OptionsConsumer>\n  );\n}\n","import * as React from 'react';\n\nimport { MarkdownRenderer } from '../../services';\nimport { SanitizedMarkdownHTML } from './SanitizedMdBlock';\n\nexport interface StylingMarkdownProps {\n  compact?: boolean;\n  inline?: boolean;\n}\n\nexport interface BaseMarkdownProps {\n  sanitize?: boolean;\n  source: string;\n}\n\nexport type MarkdownProps = BaseMarkdownProps &\n  StylingMarkdownProps & {\n    source: string;\n    className?: string;\n    'data-role'?: string;\n  };\n\nexport class Markdown extends React.Component<MarkdownProps> {\n  render() {\n    const { source, inline, compact, className, 'data-role': dataRole } = this.props;\n    const renderer = new MarkdownRenderer();\n    return (\n      <SanitizedMarkdownHTML\n        html={renderer.renderMd(source)}\n        inline={inline}\n        compact={compact}\n        className={className}\n        data-role={dataRole}\n      />\n    );\n  }\n}\n","import * as React from 'react';\n\nimport styled from '../styled-components';\n\nconst Wrapper = styled.div`\n  position: relative;\n`;\n\nconst Tip = styled.div`\n  position: absolute;\n  min-width: 80px;\n  max-width: 500px;\n  background: #fff;\n  bottom: 100%;\n  left: 50%;\n  margin-bottom: 10px;\n  transform: translateX(-50%);\n\n  border-radius: 4px;\n  padding: 0.3em 0.6em;\n  text-align: center;\n  box-shadow: 0px 0px 5px 0px rgba(204, 204, 204, 1);\n`;\n\nconst Content = styled.div`\n  background: #fff;\n  color: #000;\n  display: inline;\n  font-size: 0.85em;\n  white-space: nowrap;\n`;\n\nconst Arrow = styled.div`\n  position: absolute;\n  width: 0;\n  height: 0;\n  bottom: -5px;\n  left: 50%;\n  margin-left: -5px;\n  border-left: solid transparent 5px;\n  border-right: solid transparent 5px;\n  border-top: solid #fff 5px;\n`;\n\nconst Gap = styled.div`\n  position: absolute;\n  width: 100%;\n  height: 20px;\n  bottom: -20px;\n`;\n\nexport interface TooltipProps extends React.PropsWithChildren<any> {\n  open: boolean;\n  title: string;\n}\n\nexport class Tooltip extends React.Component<TooltipProps> {\n  render() {\n    const { open, title, children } = this.props;\n    return (\n      <Wrapper>\n        {children}\n        {open && (\n          <Tip>\n            <Content>{title}</Content>\n            <Arrow />\n            <Gap />\n          </Tip>\n        )}\n      </Wrapper>\n    );\n  }\n}\n","const isSupported =\n  typeof document !== 'undefined' &&\n  document.queryCommandSupported &&\n  document.queryCommandSupported('copy');\n\nexport class ClipboardService {\n  static isSupported(): boolean {\n    return isSupported;\n  }\n\n  static selectElement(element: any): void {\n    let range;\n    let selection;\n    if ((document.body as any).createTextRange) {\n      range = (document.body as any).createTextRange();\n      range.moveToElementText(element);\n      range.select();\n    } else if (document.createRange && window.getSelection) {\n      selection = window.getSelection();\n      range = document.createRange();\n      range.selectNodeContents(element);\n      selection.removeAllRanges();\n      selection.addRange(range);\n    }\n  }\n\n  static deselect(): void {\n    if ((document as any).selection) {\n      (document as any).selection.empty();\n    } else if (window.getSelection) {\n      const selection = window.getSelection();\n      if (selection) {\n        selection.removeAllRanges();\n      }\n    }\n  }\n\n  static copySelected(): boolean {\n    let result;\n    try {\n      result = document.execCommand('copy');\n    } catch (err) {\n      result = false;\n    }\n    return result;\n  }\n\n  static copyElement(element: any): boolean {\n    ClipboardService.selectElement(element);\n    const res = ClipboardService.copySelected();\n    if (res) {\n      ClipboardService.deselect();\n    }\n    return res;\n  }\n\n  static copyCustom(text: string): boolean {\n    const textArea = document.createElement('textarea');\n    textArea.style.position = 'fixed';\n    textArea.style.top = '0';\n    textArea.style.left = '0';\n\n    // Ensure it has a small width and height. Setting to 1px / 1em\n    // doesn't work as this gives a negative w/h on some browsers.\n    textArea.style.width = '2em';\n    textArea.style.height = '2em';\n\n    // We don't need padding, reducing the size if it does flash render.\n    textArea.style.padding = '0';\n\n    // Clean up any borders.\n    textArea.style.border = 'none';\n    textArea.style.outline = 'none';\n    textArea.style.boxShadow = 'none';\n\n    // Avoid flash of white box if rendered for any reason.\n    textArea.style.background = 'transparent';\n\n    textArea.value = text;\n\n    document.body.appendChild(textArea);\n\n    textArea.select();\n\n    const res = ClipboardService.copySelected();\n\n    document.body.removeChild(textArea);\n    return res;\n  }\n}\n","import * as React from 'react';\nimport { Tooltip } from '../common-elements/Tooltip';\n\nimport { ClipboardService } from '../services/ClipboardService';\n\nexport interface CopyButtonWrapperProps {\n  data: any;\n  children: (props: { renderCopyButton: () => React.ReactNode }) => React.ReactNode;\n}\n\nexport const CopyButtonWrapper = (\n  props: CopyButtonWrapperProps & { tooltipShown?: boolean },\n): JSX.Element => {\n  const [tooltipShown, setTooltipShown] = React.useState(false);\n\n  const copy = () => {\n    const content =\n      typeof props.data === 'string' ? props.data : JSON.stringify(props.data, null, 2);\n    ClipboardService.copyCustom(content);\n    showTooltip();\n  };\n\n  const renderCopyButton = () => {\n    return (\n      <button onClick={copy}>\n        <Tooltip\n          title={ClipboardService.isSupported() ? 'Copied' : 'Not supported in your browser'}\n          open={tooltipShown}\n        >\n          Copy\n        </Tooltip>\n      </button>\n    );\n  };\n\n  const showTooltip = () => {\n    setTooltipShown(true);\n\n    setTimeout(() => {\n      setTooltipShown(false);\n    }, 1500);\n  };\n  return props.children({ renderCopyButton: renderCopyButton }) as JSX.Element;\n};\n","let level = 1;\n\nexport function jsonToHTML(json, maxExpandLevel) {\n  level = 1;\n  let output = '';\n  output += '<div class=\"redoc-json\">';\n  output += '<code>';\n  output += valueToHTML(json, maxExpandLevel);\n  output += '</code>';\n  output += '</div>';\n  return output;\n}\n\nfunction htmlEncode(t) {\n  return t !== undefined\n    ? t\n        .toString()\n        .replace(/&/g, '&amp;')\n        .replace(/\"/g, '&quot;')\n        .replace(/</g, '&lt;')\n        .replace(/>/g, '&gt;')\n    : '';\n}\n\nfunction stringifyStringLiteral(str: string) {\n  return JSON.stringify(str).slice(1, -1);\n}\n\nfunction decorateWithSpan(value, className) {\n  return '<span class=\"' + className + '\">' + htmlEncode(value) + '</span>';\n}\n\nfunction punctuation(val) {\n  return '<span class=\"token punctuation\">' + val + '</span>';\n}\n\nfunction valueToHTML(value, maxExpandLevel: number) {\n  const valueType = typeof value;\n  let output = '';\n  if (value === undefined || value === null) {\n    output += decorateWithSpan('null', 'token keyword');\n  } else if (value && value.constructor === Array) {\n    level++;\n    output += arrayToHTML(value, maxExpandLevel);\n    level--;\n  } else if (value && value.constructor === Date) {\n    output += decorateWithSpan('\"' + value.toISOString() + '\"', 'token string');\n  } else if (valueType === 'object') {\n    level++;\n    output += objectToHTML(value, maxExpandLevel);\n    level--;\n  } else if (valueType === 'number') {\n    output += decorateWithSpan(value, 'token number');\n  } else if (valueType === 'string') {\n    if (/^(http|https):\\/\\/[^\\s]+$/.test(value)) {\n      output +=\n        decorateWithSpan('\"', 'token string') +\n        '<a href=\"' +\n        encodeURI(value) +\n        '\">' +\n        htmlEncode(stringifyStringLiteral(value)) +\n        '</a>' +\n        decorateWithSpan('\"', 'token string');\n    } else {\n      output += decorateWithSpan('\"' + stringifyStringLiteral(value) + '\"', 'token string');\n    }\n  } else if (valueType === 'boolean') {\n    output += decorateWithSpan(value, 'token boolean');\n  }\n\n  return output;\n}\n\nfunction arrayToHTML(json, maxExpandLevel: number) {\n  const collapsed = level > maxExpandLevel ? 'collapsed' : '';\n  let output = `<button class=\"collapser\" aria-label=\"${\n    level > maxExpandLevel + 1 ? 'expand' : 'collapse'\n  }\"></button>${punctuation('[')}<span class=\"ellipsis\"></span><ul class=\"array collapsible\">`;\n  let hasContents = false;\n  const length = json.length;\n  for (let i = 0; i < length; i++) {\n    hasContents = true;\n    output += '<li><div class=\"hoverable ' + collapsed + '\">';\n    output += valueToHTML(json[i], maxExpandLevel);\n    if (i < length - 1) {\n      output += ',';\n    }\n    output += '</div></li>';\n  }\n  output += `</ul>${punctuation(']')}`;\n  if (!hasContents) {\n    output = punctuation('[ ]');\n  }\n  return output;\n}\n\nfunction objectToHTML(json, maxExpandLevel: number) {\n  const collapsed = level > maxExpandLevel ? 'collapsed' : '';\n  const keys = Object.keys(json);\n  const length = keys.length;\n  let output = `<button class=\"collapser\" aria-label=\"${\n    level > maxExpandLevel + 1 ? 'expand' : 'collapse'\n  }\"></button>${punctuation('{')}<span class=\"ellipsis\"></span><ul class=\"obj collapsible\">`;\n  let hasContents = false;\n  for (let i = 0; i < length; i++) {\n    const key = keys[i];\n    hasContents = true;\n    output += '<li><div class=\"hoverable ' + collapsed + '\">';\n    output += '<span class=\"property token string\">\"' + htmlEncode(key) + '\"</span>: ';\n    output += valueToHTML(json[key], maxExpandLevel);\n    if (i < length - 1) {\n      output += punctuation(',');\n    }\n    output += '</div></li>';\n  }\n  output += `</ul>${punctuation('}')}`;\n  if (!hasContents) {\n    output = punctuation('{ }');\n  }\n  return output;\n}\n","import { css } from '../../styled-components';\n\nexport const jsonStyles = css`\n  .redoc-json code > .collapser {\n    display: none;\n    pointer-events: none;\n  }\n\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  font-size: ${props => props.theme.typography.code.fontSize};\n\n  white-space: ${({ theme }) => (theme.typography.code.wrap ? 'pre-wrap' : 'pre')};\n  contain: content;\n  overflow-x: auto;\n\n  .callback-function {\n    color: gray;\n  }\n\n  .collapser:after {\n    content: '-';\n    cursor: pointer;\n  }\n\n  .collapsed > .collapser:after {\n    content: '+';\n    cursor: pointer;\n  }\n\n  .ellipsis:after {\n    content: ' … ';\n  }\n\n  .collapsible {\n    margin-left: 2em;\n  }\n\n  .hoverable {\n    padding-top: 1px;\n    padding-bottom: 1px;\n    padding-left: 2px;\n    padding-right: 2px;\n    border-radius: 2px;\n  }\n\n  .hovered {\n    background-color: rgba(235, 238, 249, 1);\n  }\n\n  .collapser {\n    background-color: transparent;\n    border: 0;\n    color: #fff;\n    font-family: ${props => props.theme.typography.code.fontFamily};\n    font-size: ${props => props.theme.typography.code.fontSize};\n    padding-right: 6px;\n    padding-left: 6px;\n    padding-top: 0;\n    padding-bottom: 0;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    width: 15px;\n    height: 15px;\n    position: absolute;\n    top: 4px;\n    left: -1.5em;\n    cursor: default;\n    user-select: none;\n    -webkit-user-select: none;\n    padding: 2px;\n    &:focus {\n      outline-color: #fff;\n      outline-style: dotted;\n      outline-width: 1px;\n    }\n  }\n\n  ul {\n    list-style-type: none;\n    padding: 0px;\n    margin: 0px 0px 0px 26px;\n  }\n\n  li {\n    position: relative;\n    display: block;\n  }\n\n  .hoverable {\n    display: inline-block;\n  }\n\n  .selected {\n    outline-style: solid;\n    outline-width: 1px;\n    outline-style: dotted;\n  }\n\n  .collapsed > .collapsible {\n    display: none;\n  }\n\n  .ellipsis {\n    display: none;\n  }\n\n  .collapsed > .ellipsis {\n    display: inherit;\n  }\n`;\n","import * as React from 'react';\nimport styled from '../../styled-components';\n\nimport { SampleControls } from '../../common-elements';\nimport { CopyButtonWrapper } from '../../common-elements/CopyButtonWrapper';\nimport { PrismDiv } from '../../common-elements/PrismDiv';\nimport { jsonToHTML } from '../../utils/jsonToHtml';\nimport { OptionsContext } from '../OptionsProvider';\nimport { jsonStyles } from './style';\n\nexport interface JsonProps {\n  data: any;\n  className?: string;\n}\n\nconst JsonViewerWrap = styled.div`\n  &:hover > ${SampleControls} {\n    opacity: 1;\n  }\n`;\n\nconst Json = (props: JsonProps) => {\n  const [node, setNode] = React.useState<HTMLDivElement>();\n\n  const renderInner = ({ renderCopyButton }) => {\n    const showFoldingButtons =\n      props.data &&\n      Object.values(props.data).some(value => typeof value === 'object' && value !== null);\n\n    return (\n      <JsonViewerWrap>\n        <SampleControls>\n          {renderCopyButton()}\n          {showFoldingButtons && (\n            <>\n              <button onClick={expandAll}> Expand all </button>\n              <button onClick={collapseAll}> Collapse all </button>\n            </>\n          )}\n        </SampleControls>\n        <OptionsContext.Consumer>\n          {options => (\n            <PrismDiv\n              tabIndex={0}\n              className={props.className}\n              // tslint:disable-next-line\n              ref={node => setNode(node!)}\n              dangerouslySetInnerHTML={{\n                __html: jsonToHTML(props.data, options.jsonSamplesExpandLevel),\n              }}\n            />\n          )}\n        </OptionsContext.Consumer>\n      </JsonViewerWrap>\n    );\n  };\n\n  const expandAll = () => {\n    const elements = node?.getElementsByClassName('collapsible');\n    for (const collapsed of Array.prototype.slice.call(elements)) {\n      const parentNode = collapsed.parentNode as Element;\n      parentNode.classList.remove('collapsed');\n      parentNode.querySelector('.collapser')!.setAttribute('aria-label', 'collapse');\n    }\n  };\n\n  const collapseAll = () => {\n    const elements = node?.getElementsByClassName('collapsible');\n    // skip first item to avoid collapsing whole object/array\n    const elementsArr = Array.prototype.slice.call(elements, 1);\n\n    for (const expanded of elementsArr) {\n      const parentNode = expanded.parentNode as Element;\n      parentNode.classList.add('collapsed');\n      parentNode.querySelector('.collapser')!.setAttribute('aria-label', 'expand');\n    }\n  };\n\n  const collapseElement = (target: HTMLElement) => {\n    let collapsed;\n    if (target.className === 'collapser') {\n      collapsed = target.parentElement!.getElementsByClassName('collapsible')[0];\n      if (collapsed.parentElement.classList.contains('collapsed')) {\n        collapsed.parentElement.classList.remove('collapsed');\n        target.setAttribute('aria-label', 'collapse');\n      } else {\n        collapsed.parentElement.classList.add('collapsed');\n        target.setAttribute('aria-label', 'expand');\n      }\n    }\n  };\n\n  const clickListener = React.useCallback((event: MouseEvent) => {\n    collapseElement(event.target as HTMLElement);\n  }, []);\n\n  const focusListener = React.useCallback((event: KeyboardEvent) => {\n    if (event.key === 'Enter') {\n      collapseElement(event.target as HTMLElement);\n    }\n  }, []);\n\n  React.useEffect(() => {\n    node?.addEventListener('click', clickListener);\n    node?.addEventListener('focus', focusListener);\n    return () => {\n      node?.removeEventListener('click', clickListener);\n      node?.removeEventListener('focus', focusListener);\n    };\n  }, [clickListener, focusListener, node]);\n\n  return <CopyButtonWrapper data={props.data}>{renderInner}</CopyButtonWrapper>;\n};\n\nexport const JsonViewer = styled(Json)`\n  ${jsonStyles};\n`;\n","import * as React from 'react';\nimport { highlight } from '../../utils';\n\nimport { SampleControls, SampleControlsWrap, StyledPre } from '../../common-elements';\nimport { CopyButtonWrapper } from '../../common-elements/CopyButtonWrapper';\n\nexport interface SourceCodeProps {\n  source: string;\n  lang: string;\n}\n\nexport const SourceCode = (props: SourceCodeProps) => {\n  const { source, lang } = props;\n  return <StyledPre dangerouslySetInnerHTML={{ __html: highlight(source, lang) }} />;\n};\n\nexport const SourceCodeWithCopy = (props: SourceCodeProps) => {\n  const { source, lang } = props;\n  return (\n    <CopyButtonWrapper data={source}>\n      {({ renderCopyButton }) => (\n        <SampleControlsWrap>\n          <SampleControls>{renderCopyButton()}</SampleControls>\n          <SourceCode lang={lang} source={source} />\n        </SampleControlsWrap>\n      )}\n    </CopyButtonWrapper>\n  );\n};\n","import * as React from 'react';\n\nimport { isJsonLike, langFromMime } from '../../utils/openapi';\nimport { JsonViewer } from '../JsonViewer/JsonViewer';\nimport { SourceCodeWithCopy } from '../SourceCode/SourceCode';\n\nexport interface ExampleValueProps {\n  value: any;\n  mimeType: string;\n}\n\nexport function ExampleValue({ value, mimeType }: ExampleValueProps) {\n  if (isJsonLike(mimeType)) {\n    return <JsonViewer data={value} />;\n  } else {\n    if (typeof value === 'object') {\n      // just in case example was cached as json but used as non-json\n      value = JSON.stringify(value, null, 2);\n    }\n    return <SourceCodeWithCopy lang={langFromMime(mimeType)} source={value} />;\n  }\n}\n","import * as React from 'react';\n\nimport { StyledPre } from '../../common-elements/samples';\nimport { ExampleModel } from '../../services/models';\nimport { ExampleValue } from './ExampleValue';\nimport { useExternalExample } from './exernalExampleHook';\n\nexport interface ExampleProps {\n  example: ExampleModel;\n  mimeType: string;\n}\n\nexport function Example({ example, mimeType }: ExampleProps) {\n  if (example.value === undefined && example.externalValueUrl) {\n    return <ExternalExample example={example} mimeType={mimeType} />;\n  } else {\n    return <ExampleValue value={example.value} mimeType={mimeType} />;\n  }\n}\n\nexport function ExternalExample({ example, mimeType }: ExampleProps) {\n  const value = useExternalExample(example, mimeType);\n\n  if (value === undefined) {\n    return <span>Loading...</span>;\n  }\n\n  if (value instanceof Error) {\n    return (\n      <StyledPre>\n        Error loading external example: <br />\n        <a\n          className={'token string'}\n          href={example.externalValueUrl}\n          target=\"_blank\"\n          rel=\"noopener noreferrer\"\n        >\n          {example.externalValueUrl}\n        </a>\n      </StyledPre>\n    );\n  }\n\n  return <ExampleValue value={value} mimeType={mimeType} />;\n}\n","import { useEffect, useRef, useState } from 'react';\nimport { ExampleModel } from '../../services/models/Example';\n\nexport function useExternalExample(example: ExampleModel, mimeType: string) {\n  const [, setIsLoading] = useState(true); // to trigger component reload\n\n  const value = useRef<any>(undefined);\n  const prevRef = useRef<ExampleModel | undefined>(undefined);\n\n  if (prevRef.current !== example) {\n    value.current = undefined;\n  }\n\n  prevRef.current = example;\n\n  useEffect(() => {\n    const load = async () => {\n      setIsLoading(true);\n      try {\n        value.current = await example.getExternalValue(mimeType);\n      } catch (e) {\n        value.current = e;\n      }\n      setIsLoading(false);\n    };\n\n    load();\n  }, [example, mimeType]);\n\n  return value.current;\n}\n","import { transparentize } from 'polished';\nimport styled from '../../styled-components';\nimport { Dropdown } from '../../common-elements/Dropdown';\n\nexport const MimeLabel = styled.div`\n  padding: 0.9em;\n  background-color: ${({ theme }) => transparentize(0.6, theme.rightPanel.backgroundColor)};\n  margin: 0 0 10px 0;\n  display: block;\n  font-family: ${({ theme }) => theme.typography.headings.fontFamily};\n  font-size: 0.929em;\n  line-height: 1.5em;\n`;\n\nexport const DropdownLabel = styled.span`\n  font-family: ${({ theme }) => theme.typography.headings.fontFamily};\n  font-size: 12px;\n  position: absolute;\n  z-index: 1;\n  top: -11px;\n  left: 12px;\n  font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n  color: ${({ theme }) => transparentize(0.3, theme.rightPanel.textColor)};\n`;\n\nexport const DropdownWrapper = styled.div`\n  position: relative;\n`;\n\nexport const InvertedSimpleDropdown = styled(Dropdown)`\n  label {\n    color: ${({ theme }) => theme.rightPanel.textColor};\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n    font-size: 1em;\n    text-transform: none;\n    border: none;\n  }\n  margin: 0 0 10px 0;\n  display: block;\n  background-color: ${({ theme }) => transparentize(0.6, theme.rightPanel.backgroundColor)};\n  border: none;\n  padding: 0.9em 1.6em 0.9em 0.9em;\n  box-shadow: none;\n  &:hover,\n  &:focus-within {\n    border: none;\n    box-shadow: none;\n    background-color: ${({ theme }) => transparentize(0.3, theme.rightPanel.backgroundColor)};\n  }\n`;\n\nexport const NoSampleLabel = styled.div`\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  font-size: 12px;\n  color: #ee807f;\n`;\n","import * as React from 'react';\n\nimport styled from '../../styled-components';\n\nimport { DropdownOption, DropdownProps } from '../../common-elements';\nimport { MediaTypeModel } from '../../services/models';\nimport { Markdown } from '../Markdown/Markdown';\nimport { Example } from './Example';\nimport { DropdownLabel, DropdownWrapper, NoSampleLabel } from './styled.elements';\n\nexport interface PayloadSamplesProps {\n  mediaType: MediaTypeModel;\n  renderDropdown: (props: DropdownProps) => JSX.Element;\n}\n\ninterface MediaTypeSamplesState {\n  activeIdx: number;\n}\n\nexport class MediaTypeSamples extends React.Component<PayloadSamplesProps, MediaTypeSamplesState> {\n  state = {\n    activeIdx: 0,\n  };\n  switchMedia = ({ idx }: DropdownOption) => {\n    if (idx !== undefined) {\n      this.setState({\n        activeIdx: idx,\n      });\n    }\n  };\n  render() {\n    const { activeIdx } = this.state;\n    const examples = this.props.mediaType.examples || {};\n    const mimeType = this.props.mediaType.name;\n\n    const noSample = <NoSampleLabel>No sample</NoSampleLabel>;\n\n    const examplesNames = Object.keys(examples);\n    if (examplesNames.length === 0) {\n      return noSample;\n    }\n\n    if (examplesNames.length > 1) {\n      const options = examplesNames.map((name, idx) => {\n        return {\n          value: examples[name].summary || name,\n          idx,\n        };\n      });\n\n      const example = examples[examplesNames[activeIdx]];\n      const description = example.description;\n\n      return (\n        <SamplesWrapper>\n          <DropdownWrapper>\n            <DropdownLabel>Example</DropdownLabel>\n            {this.props.renderDropdown({\n              value: options[activeIdx].value,\n              options,\n              onChange: this.switchMedia,\n              ariaLabel: 'Example',\n            })}\n          </DropdownWrapper>\n          <div>\n            {description && <Markdown source={description} />}\n            <Example example={example} mimeType={mimeType} />\n          </div>\n        </SamplesWrapper>\n      );\n    } else {\n      const example = examples[examplesNames[0]];\n      return (\n        <SamplesWrapper>\n          {example.description && <Markdown source={example.description} />}\n          <Example example={example} mimeType={mimeType} />\n        </SamplesWrapper>\n      );\n    }\n  }\n}\n\nconst SamplesWrapper = styled.div`\n  margin-top: 15px;\n`;\n",null,"import { transparentize } from 'polished';\n\nimport styled, { css, extensionsHook } from '../styled-components';\nimport { PropertyNameCell } from './fields-layout';\nimport { deprecatedCss } from './mixins';\nimport { ShelfIcon } from './shelfs';\n\nexport const ClickablePropertyNameCell = styled(PropertyNameCell)`\n  &.deprecated {\n    span.property-name {\n      ${deprecatedCss}\n    }\n  }\n\n  button {\n    background-color: transparent;\n    border: 0;\n    outline: 0;\n    font-size: 13px;\n    font-family: ${props => props.theme.typography.code.fontFamily};\n    cursor: pointer;\n    padding: 0;\n    color: ${props => props.theme.colors.text.primary};\n    &:focus {\n      font-weight: ${({ theme }) => theme.typography.fontWeightBold};\n    }\n    ${({ kind }) =>\n      kind === 'patternProperties' &&\n      css`\n        display: inline-flex;\n        margin-right: 20px;\n\n        > span.property-name {\n          white-space: break-spaces;\n          text-align: left;\n\n          ::before,\n          ::after {\n            content: '/';\n            filter: opacity(0.2);\n          }\n        }\n\n        > svg {\n          align-self: center;\n        }\n      `}\n  }\n  ${ShelfIcon} {\n    height: ${({ theme }) => theme.schema.arrow.size};\n    width: ${({ theme }) => theme.schema.arrow.size};\n    polygon {\n      fill: ${({ theme }) => theme.schema.arrow.color};\n    }\n  }\n`;\n\nexport const FieldLabel = styled.span`\n  vertical-align: middle;\n  font-size: ${({ theme }) => theme.typography.code.fontSize};\n  line-height: 20px;\n`;\n\nexport const TypePrefix = styled(FieldLabel)`\n  color: ${props => transparentize(0.1, props.theme.schema.typeNameColor)};\n`;\n\nexport const TypeName = styled(FieldLabel)`\n  color: ${props => props.theme.schema.typeNameColor};\n`;\n\nexport const TypeTitle = styled(FieldLabel)`\n  color: ${props => props.theme.schema.typeTitleColor};\n  word-break: break-word;\n`;\n\nexport const TypeFormat = TypeName;\n\nexport const RequiredLabel = styled(FieldLabel).attrs({\n  as: 'div',\n})`\n  color: ${props => props.theme.schema.requireLabelColor};\n  font-size: ${props => props.theme.schema.labelsTextSize};\n  font-weight: normal;\n  margin-left: 20px;\n  line-height: 1;\n`;\n\nexport const PropertyLabel = styled(RequiredLabel)`\n  color: ${props => props.theme.colors.primary.light};\n`;\n\nexport const RecursiveLabel = styled(FieldLabel)`\n  color: ${({ theme }) => theme.colors.warning.main};\n  font-size: 13px;\n`;\n\nexport const PatternLabel = styled(FieldLabel)`\n  color: #0e7c86;\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  font-size: 12px;\n  &::before,\n  &::after {\n    content: ' ';\n  }\n`;\n\nexport const ExampleValue = styled(FieldLabel)`\n  border-radius: 2px;\n  word-break: break-word;\n  ${({ theme }) => `\n    background-color: ${transparentize(0.95, theme.colors.text.primary)};\n    color: ${transparentize(0.1, theme.colors.text.primary)};\n\n    padding: 0 ${theme.spacing.unit}px;\n    border: 1px solid ${transparentize(0.9, theme.colors.text.primary)};\n    font-family: ${theme.typography.code.fontFamily};\n}`};\n  & + & {\n    margin-left: 0;\n  }\n  ${extensionsHook('ExampleValue')};\n`;\n\nexport const ExtensionValue = styled(ExampleValue)``;\n\nexport const ConstraintItem = styled(FieldLabel)`\n  border-radius: 2px;\n  ${({ theme }) => `\n    background-color: ${transparentize(0.95, theme.colors.primary.light)};\n    color: ${transparentize(0.1, theme.colors.primary.main)};\n\n    margin: 0 ${theme.spacing.unit}px;\n    padding: 0 ${theme.spacing.unit}px;\n    border: 1px solid ${transparentize(0.9, theme.colors.primary.main)};\n}`};\n  & + & {\n    margin-left: 0;\n  }\n  ${extensionsHook('ConstraintItem')};\n`;\n\nexport const ToggleButton = styled.button`\n  background-color: transparent;\n  border: 0;\n  color: ${({ theme }) => theme.colors.text.secondary};\n  margin-left: ${({ theme }) => theme.spacing.unit}px;\n  border-radius: 2px;\n  cursor: pointer;\n  outline-color: ${({ theme }) => theme.colors.text.secondary};\n  font-size: 12px;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport styled from '../../styled-components';\nimport { OpenAPIExternalDocumentation } from '../../types';\nimport { linksCss } from '../Markdown/styled.elements';\n\nconst LinkWrap = styled.div<{ $compact?: boolean }>`\n  ${linksCss};\n  ${({ $compact }) => (!$compact ? 'margin: 1em 0' : '')}\n`;\n\n@observer\nexport class ExternalDocumentation extends React.Component<{\n  externalDocs: OpenAPIExternalDocumentation;\n  compact?: boolean;\n}> {\n  render() {\n    const { externalDocs } = this.props;\n    if (!externalDocs || !externalDocs.url) {\n      return null;\n    }\n\n    return (\n      <LinkWrap $compact={this.props.compact}>\n        <a href={externalDocs.url}>{externalDocs.description || externalDocs.url}</a>\n      </LinkWrap>\n    );\n  }\n}\n","import * as React from 'react';\nimport { ExampleValue, FieldLabel } from '../../common-elements/fields';\n\nimport { l } from '../../services/Labels';\nimport { OptionsContext } from '../OptionsProvider';\nimport styled from '../../styled-components';\nimport { RedocRawOptions } from '../../services/RedocNormalizedOptions';\nimport { StyledMarkdownBlock } from '../Markdown/styled.elements';\nimport { Markdown } from '../Markdown/Markdown';\n\nexport interface EnumValuesProps {\n  values?: string[] | { [name: string]: string };\n  type: string | string[];\n}\n\nexport interface EnumValuesState {\n  collapsed: boolean;\n}\n\nconst DescriptionEnumsBlock = styled(StyledMarkdownBlock)`\n  table {\n    margin-bottom: 0.2em;\n  }\n`;\n\nexport class EnumValues extends React.PureComponent<EnumValuesProps, EnumValuesState> {\n  constructor(props: EnumValuesProps) {\n    super(props);\n    this.toggle = this.toggle.bind(this);\n  }\n  state: EnumValuesState = {\n    collapsed: true,\n  };\n\n  static contextType = OptionsContext;\n\n  private toggle() {\n    this.setState({ collapsed: !this.state.collapsed });\n  }\n\n  render() {\n    const { values, type } = this.props;\n    const { collapsed } = this.state;\n    const isDescriptionEnum = !Array.isArray(values);\n    const enums =\n      (Array.isArray(values) && values) ||\n      Object.entries(values || {}).map(([value, description]) => ({\n        value,\n        description,\n      }));\n\n    // TODO: provide context interface in more elegant way\n    const { enumSkipQuotes, maxDisplayedEnumValues } = this.context as RedocRawOptions;\n\n    if (!enums.length) {\n      return null;\n    }\n\n    const displayedItems =\n      this.state.collapsed && maxDisplayedEnumValues\n        ? enums.slice(0, maxDisplayedEnumValues)\n        : enums;\n\n    const showToggleButton = maxDisplayedEnumValues ? enums.length > maxDisplayedEnumValues : false;\n\n    const toggleButtonText = maxDisplayedEnumValues\n      ? collapsed\n        ? `… ${enums.length - maxDisplayedEnumValues} more`\n        : 'Hide'\n      : '';\n\n    return (\n      <div>\n        {isDescriptionEnum ? (\n          <>\n            <DescriptionEnumsBlock>\n              <table>\n                <thead>\n                  <tr>\n                    <th>\n                      <FieldLabel>\n                        {type === 'array' ? l('enumArray') : ''}{' '}\n                        {enums.length === 1 ? l('enumSingleValue') : l('enum')}\n                      </FieldLabel>{' '}\n                    </th>\n                    <th>\n                      <strong>Description</strong>\n                    </th>\n                  </tr>\n                </thead>\n                <tbody>\n                  {(displayedItems as { value: string; description: string }[]).map(\n                    ({ description, value }) => {\n                      return (\n                        <tr key={value}>\n                          <td>{value}</td>\n                          <td>\n                            <Markdown source={description} compact inline />\n                          </td>\n                        </tr>\n                      );\n                    },\n                  )}\n                </tbody>\n              </table>\n            </DescriptionEnumsBlock>\n            {showToggleButton ? (\n              <ToggleButton onClick={this.toggle}>{toggleButtonText}</ToggleButton>\n            ) : null}\n          </>\n        ) : (\n          <>\n            <FieldLabel>\n              {type === 'array' ? l('enumArray') : ''}{' '}\n              {values.length === 1 ? l('enumSingleValue') : l('enum')}:\n            </FieldLabel>{' '}\n            {displayedItems.map((value, idx) => {\n              const exampleValue = enumSkipQuotes ? String(value) : JSON.stringify(value);\n              return (\n                <React.Fragment key={idx}>\n                  <ExampleValue>{exampleValue}</ExampleValue>{' '}\n                </React.Fragment>\n              );\n            })}\n            {showToggleButton ? (\n              <ToggleButton onClick={this.toggle}>{toggleButtonText}</ToggleButton>\n            ) : null}\n          </>\n        )}\n      </div>\n    );\n  }\n}\n\nconst ToggleButton = styled.span`\n  color: ${props => props.theme.colors.primary.main};\n  vertical-align: middle;\n  font-size: 13px;\n  line-height: 20px;\n  padding: 0 5px;\n  cursor: pointer;\n`;\n","import * as React from 'react';\n\nimport { ExtensionValue, FieldLabel } from '../../common-elements/fields';\n\nimport styled from '../../styled-components';\n\nimport { OptionsContext } from '../OptionsProvider';\n\nimport { StyledMarkdownBlock } from '../Markdown/styled.elements';\n\nconst Extension = styled(StyledMarkdownBlock)`\n  margin: 2px 0;\n`;\n\nexport interface ExtensionsProps {\n  extensions: {\n    [k: string]: any;\n  };\n}\n\nexport class Extensions extends React.PureComponent<ExtensionsProps> {\n  render() {\n    const exts = this.props.extensions;\n    return (\n      <OptionsContext.Consumer>\n        {options => (\n          <>\n            {options.showExtensions &&\n              Object.keys(exts).map(key => (\n                <Extension key={key}>\n                  <FieldLabel> {key.substring(2)}: </FieldLabel>{' '}\n                  <ExtensionValue>\n                    {typeof exts[key] === 'string' ? exts[key] : JSON.stringify(exts[key])}\n                  </ExtensionValue>\n                </Extension>\n              ))}\n          </>\n        )}\n      </OptionsContext.Consumer>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { FieldLabel, ExampleValue } from '../../common-elements/fields';\nimport { getSerializedValue, isArray } from '../../utils';\n\nimport { l } from '../../services/Labels';\nimport { FieldModel } from '../../services';\nimport styled from '../../styled-components';\n\nexport function Examples({ field }: { field: FieldModel }) {\n  if (!field.examples) {\n    return null;\n  }\n\n  return (\n    <>\n      <FieldLabel> {l('examples')}: </FieldLabel>\n      {isArray(field.examples) ? (\n        field.examples.map((example, idx) => {\n          const value = getSerializedValue(field, example);\n          const stringifyValue = field.in ? String(value) : JSON.stringify(value);\n          return (\n            <React.Fragment key={idx}>\n              <ExampleValue>{stringifyValue}</ExampleValue>{' '}\n            </React.Fragment>\n          );\n        })\n      ) : (\n        <ExamplesList>\n          {Object.values(field.examples).map((example, idx) => (\n            <li key={idx + example.value}>\n              <ExampleValue>{getSerializedValue(field, example.value)}</ExampleValue> -{' '}\n              {example.summary || example.description}\n            </li>\n          ))}\n        </ExamplesList>\n      )}\n    </>\n  );\n}\n\nconst ExamplesList = styled.ul`\n  margin-top: 1em;\n  list-style-position: outside;\n`;\n","import * as React from 'react';\nimport { ConstraintItem } from '../../common-elements/fields';\n\nexport interface ConstraintsViewProps {\n  constraints: string[];\n}\n\nexport class ConstraintsView extends React.PureComponent<ConstraintsViewProps> {\n  render() {\n    if (this.props.constraints.length === 0) {\n      return null;\n    }\n    return (\n      <span>\n        {' '}\n        {this.props.constraints.map(constraint => (\n          <ConstraintItem key={constraint}> {constraint} </ConstraintItem>\n        ))}\n      </span>\n    );\n  }\n}\n","import * as React from 'react';\nimport { ExampleValue, FieldLabel } from '../../common-elements/fields';\n\nexport interface FieldDetailProps {\n  value?: any;\n  label: string;\n  raw?: boolean;\n}\n\nfunction FieldDetailComponent({ value, label, raw }: FieldDetailProps) {\n  if (value === undefined) {\n    return null;\n  }\n\n  const stringifyValue = raw ? String(value) : JSON.stringify(value);\n\n  return (\n    <div>\n      <FieldLabel> {label} </FieldLabel> <ExampleValue>{stringifyValue}</ExampleValue>\n    </div>\n  );\n}\n\nexport const FieldDetail = React.memo<FieldDetailProps>(FieldDetailComponent);\n","import * as React from 'react';\nimport { PatternLabel, ToggleButton } from '../../common-elements/fields';\nimport { OptionsContext } from '../OptionsProvider';\nimport { SchemaModel } from '../../services';\n\nconst MAX_PATTERN_LENGTH = 45;\n\nexport function Pattern(props: { schema: SchemaModel }) {\n  const pattern = props.schema.pattern;\n  const { hideSchemaPattern } = React.useContext(OptionsContext);\n  const [isPatternShown, setIsPatternShown] = React.useState(false);\n  const togglePattern = React.useCallback(\n    () => setIsPatternShown(!isPatternShown),\n    [isPatternShown],\n  );\n\n  if (!pattern || hideSchemaPattern) return null;\n\n  return (\n    <>\n      <PatternLabel>\n        {isPatternShown || pattern.length < MAX_PATTERN_LENGTH\n          ? pattern\n          : `${pattern.substr(0, MAX_PATTERN_LENGTH)}...`}\n      </PatternLabel>\n      {pattern.length > MAX_PATTERN_LENGTH && (\n        <ToggleButton onClick={togglePattern}>\n          {isPatternShown ? 'Hide pattern' : 'Show pattern'}\n        </ToggleButton>\n      )}\n    </>\n  );\n}\n","import * as React from 'react';\nimport { TypeFormat, TypePrefix } from '../../common-elements/fields';\nimport { ConstraintsView } from './FieldConstraints';\nimport { Pattern } from './Pattern';\nimport { SchemaModel } from '../../services';\nimport styled from '../../styled-components';\nimport { OptionsContext } from '../OptionsProvider';\n\nexport function ArrayItemDetails({ schema }: { schema: SchemaModel }) {\n  const { hideSchemaPattern } = React.useContext(OptionsContext);\n  if (\n    !schema ||\n    ((!schema?.pattern || hideSchemaPattern) &&\n      !schema.items &&\n      !schema.displayFormat &&\n      !schema.constraints?.length) // return null for cases where all constraints are empty\n  ) {\n    return null;\n  }\n\n  return (\n    <Wrapper>\n      [ items\n      {schema.displayFormat && <TypeFormat> &lt;{schema.displayFormat} &gt;</TypeFormat>}\n      <ConstraintsView constraints={schema.constraints} />\n      <Pattern schema={schema} />\n      {schema.items && <ArrayItemDetails schema={schema.items} />} ]\n    </Wrapper>\n  );\n}\n\nconst Wrapper = styled(TypePrefix)`\n  margin: 0 5px;\n  vertical-align: text-top;\n`;\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\n\nimport {\n  RecursiveLabel,\n  TypeFormat,\n  TypeName,\n  TypePrefix,\n  TypeTitle,\n} from '../../common-elements/fields';\nimport { getSerializedValue, isArray, isObject } from '../../utils';\nimport { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';\nimport { Markdown } from '../Markdown/Markdown';\nimport { EnumValues } from './EnumValues';\nimport { Extensions } from './Extensions';\nimport { FieldProps } from './Field';\nimport { Examples } from './Examples';\nimport { ConstraintsView } from './FieldConstraints';\nimport { FieldDetail } from './FieldDetail';\n\nimport { Badge } from '../../common-elements/';\n\nimport { l } from '../../services/Labels';\nimport { OptionsContext } from '../OptionsProvider';\nimport { Pattern } from './Pattern';\nimport { ArrayItemDetails } from './ArrayItemDetails';\n\nexport const FieldDetailsComponent = observer((props: FieldProps) => {\n  const { enumSkipQuotes, hideSchemaTitles } = React.useContext(OptionsContext);\n\n  const { showExamples, field, renderDiscriminatorSwitch } = props;\n  const { schema, description, deprecated, extensions, in: _in, const: _const } = field;\n  const isArrayType =\n    schema.type === 'array' || (isArray(schema.type) && schema.type.includes('array'));\n\n  const rawDefault = enumSkipQuotes || _in === 'header'; // having quotes around header field default values is confusing and inappropriate\n\n  const renderedExamples = React.useMemo<JSX.Element | null>(() => {\n    if (showExamples && (field.example !== undefined || field.examples !== undefined)) {\n      if (field.examples !== undefined) {\n        return <Examples field={field} />;\n      } else {\n        return (\n          <FieldDetail\n            label={l('example') + ':'}\n            value={getSerializedValue(field, field.example)}\n            raw={Boolean(field.in)}\n          />\n        );\n      }\n    }\n\n    return null;\n  }, [field, showExamples]);\n  const defaultValue =\n    isObject(schema.default) && field.in\n      ? getSerializedValue(field, schema.default).replace(`${field.name}=`, '')\n      : schema.default;\n\n  return (\n    <div>\n      <div>\n        <TypePrefix>{schema.typePrefix}</TypePrefix>\n        <TypeName>{schema.displayType}</TypeName>\n        {schema.displayFormat && (\n          <TypeFormat>\n            {' '}\n            &lt;\n            {schema.displayFormat}\n            &gt;{' '}\n          </TypeFormat>\n        )}\n        {schema.contentEncoding && (\n          <TypeFormat>\n            {' '}\n            &lt;\n            {schema.contentEncoding}\n            &gt;{' '}\n          </TypeFormat>\n        )}\n        {schema.contentMediaType && (\n          <TypeFormat>\n            {' '}\n            &lt;\n            {schema.contentMediaType}\n            &gt;{' '}\n          </TypeFormat>\n        )}\n        {schema.title && !hideSchemaTitles && <TypeTitle> ({schema.title}) </TypeTitle>}\n        <ConstraintsView constraints={schema.constraints} />\n        <Pattern schema={schema} />\n        {schema.isCircular && <RecursiveLabel> {l('recursive')} </RecursiveLabel>}\n        {isArrayType && schema.items && <ArrayItemDetails schema={schema.items} />}\n      </div>\n      {deprecated && (\n        <div>\n          <Badge type=\"warning\"> {l('deprecated')} </Badge>\n        </div>\n      )}\n      <FieldDetail raw={rawDefault} label={l('default') + ':'} value={defaultValue} />\n      {!renderDiscriminatorSwitch && (\n        <EnumValues type={schema.type} values={schema['x-enumDescriptions'] || schema.enum} />\n      )}{' '}\n      {renderedExamples}\n      <Extensions extensions={{ ...extensions, ...schema.extensions }} />\n      <div>\n        <Markdown compact={true} source={description} />\n      </div>\n      {schema.externalDocs && (\n        <ExternalDocumentation externalDocs={schema.externalDocs} compact={true} />\n      )}\n      {(renderDiscriminatorSwitch && renderDiscriminatorSwitch(props)) || null}\n      {(_const && <FieldDetail label={l('const') + ':'} value={_const} />) || null}\n    </div>\n  );\n});\n\nexport const FieldDetails = React.memo<FieldProps>(FieldDetailsComponent);\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n  ClickablePropertyNameCell,\n  PropertyLabel,\n  RequiredLabel,\n} from '../../common-elements/fields';\nimport { FieldDetails } from './FieldDetails';\nimport {\n  InnerPropertiesWrap,\n  PropertyBullet,\n  PropertyCellWithInner,\n  PropertyDetailsCell,\n  PropertyNameCell,\n} from '../../common-elements/fields-layout';\nimport { ShelfIcon } from '../../common-elements/';\nimport { Schema } from '../Schema/Schema';\n\nimport type { SchemaOptions } from '../Schema/Schema';\nimport type { FieldModel } from '../../services/models';\nimport { OptionsContext } from '../OptionsProvider';\nimport { RedocNormalizedOptions } from '../../services/RedocNormalizedOptions';\n\nexport interface FieldProps extends SchemaOptions {\n  className?: string;\n  isLast?: boolean;\n  showExamples?: boolean;\n\n  field: FieldModel;\n  expandByDefault?: boolean;\n  fieldParentsName?: string[];\n  renderDiscriminatorSwitch?: (opts: FieldProps) => JSX.Element;\n}\n\n@observer\nexport class Field extends React.Component<FieldProps> {\n  static contextType = OptionsContext;\n  context: RedocNormalizedOptions;\n\n  toggle = () => {\n    if (this.props.field.expanded === undefined && this.props.expandByDefault) {\n      this.props.field.collapse();\n    } else {\n      this.props.field.toggle();\n    }\n  };\n\n  handleKeyPress = e => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      this.toggle();\n    }\n  };\n\n  render() {\n    const { hidePropertiesPrefix } = this.context;\n    const { className = '', field, isLast, expandByDefault, fieldParentsName = [] } = this.props;\n    const { name, deprecated, required, kind } = field;\n    const withSubSchema = !field.schema.isPrimitive && !field.schema.isCircular;\n\n    const expanded = field.expanded === undefined ? expandByDefault : field.expanded;\n    const labels = (\n      <>\n        {kind === 'additionalProperties' && <PropertyLabel>additional property</PropertyLabel>}\n        {kind === 'patternProperties' && <PropertyLabel>pattern property</PropertyLabel>}\n        {required && <RequiredLabel>required</RequiredLabel>}\n      </>\n    );\n\n    const paramName = withSubSchema ? (\n      <ClickablePropertyNameCell\n        className={deprecated ? 'deprecated' : ''}\n        kind={kind}\n        title={name}\n      >\n        <PropertyBullet />\n        <button\n          onClick={this.toggle}\n          onKeyPress={this.handleKeyPress}\n          aria-label={`expand ${name}`}\n        >\n          {!hidePropertiesPrefix &&\n            fieldParentsName.map(\n              name => name + '.\\u200B', // zero-width space, a special character is used for correct line breaking\n            )}\n          <span className=\"property-name\">{name}</span>\n          <ShelfIcon direction={expanded ? 'down' : 'right'} />\n        </button>\n        {labels}\n      </ClickablePropertyNameCell>\n    ) : (\n      <PropertyNameCell className={deprecated ? 'deprecated' : undefined} kind={kind} title={name}>\n        <PropertyBullet />\n        {!hidePropertiesPrefix &&\n          fieldParentsName.map(\n            name => name + '.\\u200B', // zero-width space, a special character is used for correct line breaking\n          )}\n        <span className=\"property-name\">{name}</span>\n        {labels}\n      </PropertyNameCell>\n    );\n\n    return (\n      <>\n        <tr className={isLast ? 'last ' + className : className}>\n          {paramName}\n          <PropertyDetailsCell>\n            <FieldDetails {...this.props} />\n          </PropertyDetailsCell>\n        </tr>\n        {expanded && withSubSchema && (\n          <tr key={field.name + 'inner'}>\n            <PropertyCellWithInner colSpan={2}>\n              <InnerPropertiesWrap>\n                <Schema\n                  schema={field.schema}\n                  fieldParentsName={[...(fieldParentsName || []), field.name]}\n                  skipReadOnly={this.props.skipReadOnly}\n                  skipWriteOnly={this.props.skipWriteOnly}\n                  showTitle={this.props.showTitle}\n                  level={this.props.level}\n                />\n              </InnerPropertiesWrap>\n            </PropertyCellWithInner>\n          </tr>\n        )}\n      </>\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { DropdownOption, Dropdown } from '../../common-elements/Dropdown';\nimport { SchemaModel } from '../../services/models';\n\n@observer\nexport class DiscriminatorDropdown extends React.Component<{\n  parent: SchemaModel;\n  enumValues: string[];\n}> {\n  sortOptions(options: DropdownOption[], enumValues: string[]): void {\n    if (enumValues.length === 0) {\n      return;\n    }\n\n    const enumOrder = {};\n\n    enumValues.forEach((enumItem, idx) => {\n      enumOrder[enumItem] = idx;\n    });\n\n    options.sort((a, b) => {\n      return enumOrder[a.value] > enumOrder[b.value] ? 1 : -1;\n    });\n  }\n\n  render() {\n    const { parent, enumValues } = this.props;\n    if (parent.oneOf === undefined) {\n      return null;\n    }\n\n    const options = parent.oneOf.map((subSchema, idx) => {\n      return {\n        value: subSchema.title,\n        idx,\n      };\n    });\n\n    const activeValue = options[parent.activeOneOf].value;\n\n    this.sortOptions(options, enumValues);\n\n    return (\n      <Dropdown\n        value={activeValue}\n        options={options}\n        onChange={this.changeActiveChild}\n        ariaLabel=\"Example\"\n      />\n    );\n  }\n\n  changeActiveChild = (option: DropdownOption) => {\n    if (option.idx !== undefined) {\n      this.props.parent.activateOneOf(option.idx);\n    }\n  };\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { SchemaModel } from '../../services/models';\n\nimport { PropertiesTable, PropertiesTableCaption } from '../../common-elements/fields-layout';\nimport { Field } from '../Fields/Field';\nimport { DiscriminatorDropdown } from './DiscriminatorDropdown';\nimport { SchemaProps } from './Schema';\n\nimport { mapWithLast } from '../../utils';\nimport { OptionsContext } from '../OptionsProvider';\n\nexport interface ObjectSchemaProps extends SchemaProps {\n  discriminator?: {\n    fieldName: string;\n    parentSchema: SchemaModel;\n  };\n  fieldParentsName?: string[];\n}\n\nexport const ObjectSchema = observer(\n  ({\n    schema: { fields = [], title },\n    showTitle,\n    discriminator,\n    skipReadOnly,\n    skipWriteOnly,\n    level,\n    fieldParentsName,\n  }: ObjectSchemaProps) => {\n    const { expandSingleSchemaField, showObjectSchemaExamples, schemasExpansionLevel } =\n      React.useContext(OptionsContext);\n\n    const filteredFields = React.useMemo(\n      () =>\n        skipReadOnly || skipWriteOnly\n          ? fields.filter(\n              item =>\n                !(\n                  (skipReadOnly && item.schema.readOnly) ||\n                  (skipWriteOnly && item.schema.writeOnly)\n                ),\n            )\n          : fields,\n      [skipReadOnly, skipWriteOnly, fields],\n    );\n\n    const expandByDefault =\n      (expandSingleSchemaField && filteredFields.length === 1) || schemasExpansionLevel >= level!;\n\n    return (\n      <PropertiesTable>\n        {showTitle && <PropertiesTableCaption>{title}</PropertiesTableCaption>}\n        <tbody>\n          {mapWithLast(filteredFields, (field, isLast) => {\n            return (\n              <Field\n                key={field.name}\n                isLast={isLast}\n                field={field}\n                expandByDefault={expandByDefault}\n                fieldParentsName={Number(level) > 1 ? fieldParentsName : []}\n                renderDiscriminatorSwitch={\n                  discriminator?.fieldName === field.name\n                    ? () => (\n                        <DiscriminatorDropdown\n                          parent={discriminator!.parentSchema}\n                          enumValues={field.schema.enum}\n                        />\n                      )\n                    : undefined\n                }\n                className={field.expanded ? 'expanded' : undefined}\n                showExamples={showObjectSchemaExamples}\n                skipReadOnly={skipReadOnly}\n                skipWriteOnly={skipWriteOnly}\n                showTitle={showTitle}\n                level={level}\n              />\n            );\n          })}\n        </tbody>\n      </PropertiesTable>\n    );\n  },\n);\n","import * as React from 'react';\n\nimport { Schema, SchemaProps } from './Schema';\n\nimport { ArrayClosingLabel, ArrayOpenningLabel } from '../../common-elements';\nimport styled from '../../styled-components';\nimport { humanizeConstraints } from '../../utils';\nimport { TypeName } from '../../common-elements/fields';\nimport { ObjectSchema } from './ObjectSchema';\n\nconst PaddedSchema = styled.div`\n  padding-left: ${({ theme }) => theme.spacing.unit * 2}px;\n`;\n\nexport class ArraySchema extends React.PureComponent<SchemaProps> {\n  render() {\n    const schema = this.props.schema;\n    const itemsSchema = schema.items;\n    const fieldParentsName = this.props.fieldParentsName;\n\n    const minMaxItems =\n      schema.minItems === undefined && schema.maxItems === undefined\n        ? ''\n        : `(${humanizeConstraints(schema)})`;\n\n    const updatedParentsArray = fieldParentsName\n      ? [...fieldParentsName.slice(0, -1), fieldParentsName[fieldParentsName.length - 1] + '[]']\n      : fieldParentsName;\n    if (schema.fields) {\n      return (\n        <ObjectSchema\n          {...(this.props as any)}\n          level={this.props.level}\n          fieldParentsName={updatedParentsArray}\n        />\n      );\n    }\n    if (schema.displayType && !itemsSchema && !minMaxItems.length) {\n      return (\n        <div>\n          <TypeName>{schema.displayType}</TypeName>\n        </div>\n      );\n    }\n\n    return (\n      <div>\n        <ArrayOpenningLabel> Array {minMaxItems}</ArrayOpenningLabel>\n        <PaddedSchema>\n          <Schema {...this.props} schema={itemsSchema} fieldParentsName={updatedParentsArray} />\n        </PaddedSchema>\n        <ArrayClosingLabel />\n      </div>\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport {\n  OneOfButton as StyledOneOfButton,\n  OneOfLabel,\n  OneOfList,\n} from '../../common-elements/schema';\nimport { Badge } from '../../common-elements/shelfs';\nimport { SchemaModel } from '../../services/models';\nimport { ConstraintsView } from '../Fields/FieldConstraints';\nimport { Schema, SchemaProps } from './Schema';\n\nexport interface OneOfButtonProps {\n  subSchema: SchemaModel;\n  idx: number;\n  schema: SchemaModel;\n}\n\n@observer\nexport class OneOfButton extends React.Component<OneOfButtonProps> {\n  render() {\n    const { idx, schema, subSchema } = this.props;\n    return (\n      <StyledOneOfButton\n        $deprecated={subSchema.deprecated}\n        $active={idx === schema.activeOneOf}\n        onClick={this.activateOneOf}\n      >\n        {subSchema.title || subSchema.typePrefix + subSchema.displayType}\n      </StyledOneOfButton>\n    );\n  }\n\n  activateOneOf = () => {\n    this.props.schema.activateOneOf(this.props.idx);\n  };\n}\n\n@observer\nexport class OneOfSchema extends React.Component<SchemaProps> {\n  render() {\n    const {\n      schema: { oneOf },\n      schema,\n    } = this.props;\n\n    if (oneOf === undefined) {\n      return null;\n    }\n    const activeSchema = oneOf[schema.activeOneOf];\n\n    return (\n      <div>\n        <OneOfLabel> {schema.oneOfType} </OneOfLabel>\n        <OneOfList>\n          {oneOf.map((subSchema, idx) => (\n            <OneOfButton key={subSchema.pointer} schema={schema} subSchema={subSchema} idx={idx} />\n          ))}\n        </OneOfList>\n        <div>\n          {oneOf[schema.activeOneOf].deprecated && <Badge type=\"warning\">Deprecated</Badge>}\n        </div>\n        <ConstraintsView constraints={activeSchema.constraints} />\n        <Schema {...this.props} schema={activeSchema} />\n      </div>\n    );\n  }\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\n\nimport { RecursiveLabel, TypeName, TypeTitle } from '../../common-elements/fields';\nimport { l } from '../../services/Labels';\nimport type { SchemaProps } from '.';\n\nexport const RecursiveSchema = observer(({ schema }: SchemaProps) => {\n  return (\n    <div>\n      <TypeName>{schema.displayType}</TypeName>\n      {schema.title && <TypeTitle> {schema.title} </TypeTitle>}\n      <RecursiveLabel> {l('recursive')} </RecursiveLabel>\n    </div>\n  );\n});\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { FieldDetails } from '../Fields/FieldDetails';\n\nimport { FieldModel, SchemaModel } from '../../services/models';\n\nimport { ArraySchema } from './ArraySchema';\nimport { ObjectSchema } from './ObjectSchema';\nimport { OneOfSchema } from './OneOfSchema';\nimport { RecursiveSchema } from './RecursiveSchema';\n\nimport { isArray } from '../../utils/helpers';\n\nexport interface SchemaOptions {\n  showTitle?: boolean;\n  skipReadOnly?: boolean;\n  skipWriteOnly?: boolean;\n  level?: number;\n}\n\nexport interface SchemaProps extends SchemaOptions {\n  schema: SchemaModel;\n  fieldParentsName?: string[];\n}\n\n@observer\nexport class Schema extends React.Component<Partial<SchemaProps>> {\n  render() {\n    const { schema, ...rest } = this.props;\n    const level = (rest.level || 0) + 1;\n\n    if (!schema) {\n      return <em> Schema not provided </em>;\n    }\n    const { type, oneOf, discriminatorProp, isCircular } = schema;\n\n    if (isCircular) {\n      return <RecursiveSchema schema={schema} />;\n    }\n\n    if (discriminatorProp !== undefined) {\n      if (!oneOf || !oneOf.length) {\n        console.warn(\n          `Looks like you are using discriminator wrong: you don't have any definition inherited from the ${schema.title}`,\n        );\n        return null;\n      }\n      const activeSchema = oneOf[schema.activeOneOf];\n      return activeSchema.isCircular ? (\n        <RecursiveSchema schema={activeSchema} />\n      ) : (\n        <ObjectSchema\n          {...rest}\n          level={level}\n          schema={activeSchema}\n          discriminator={{\n            fieldName: discriminatorProp,\n            parentSchema: schema,\n          }}\n        />\n      );\n    }\n\n    if (oneOf !== undefined) {\n      return <OneOfSchema schema={schema} {...rest} />;\n    }\n\n    const types = isArray(type) ? type : [type];\n    if (types.includes('object')) {\n      if (schema.fields?.length) {\n        return <ObjectSchema {...(this.props as any)} level={level} />;\n      }\n    } else if (types.includes('array')) {\n      return <ArraySchema {...(this.props as any)} level={level} />;\n    }\n\n    // TODO: maybe adjust FieldDetails to accept schema\n    const field = {\n      schema,\n      name: '',\n      required: false,\n      description: schema.description,\n      externalDocs: schema.externalDocs,\n      deprecated: false,\n      toggle: () => null,\n      expanded: false,\n    } as any as FieldModel; // cast needed for hot-loader to not fail\n\n    return (\n      <div>\n        <FieldDetails field={field} />\n      </div>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { DarkRightPanel, MiddlePanel, MimeLabel, Row, Section } from '../../common-elements';\nimport { MediaTypeModel, OpenAPIParser, RedocNormalizedOptions } from '../../services';\nimport styled from '../../styled-components';\nimport { OpenAPIMediaType } from '../../types';\nimport { DropdownOrLabel } from '../DropdownOrLabel/DropdownOrLabel';\nimport { MediaTypeSamples } from '../PayloadSamples/MediaTypeSamples';\nimport { InvertedSimpleDropdown } from '../PayloadSamples/styled.elements';\nimport { Schema } from '../Schema';\n\nexport interface ObjectDescriptionProps {\n  schemaRef: string;\n  exampleRef?: string;\n  showReadOnly?: boolean;\n  showWriteOnly?: boolean;\n  showExample?: boolean;\n  parser: OpenAPIParser;\n  options: RedocNormalizedOptions;\n}\n\nexport class SchemaDefinition extends React.PureComponent<ObjectDescriptionProps> {\n  private static getMediaType(schemaRef: string, exampleRef?: string): OpenAPIMediaType {\n    if (!schemaRef) {\n      return {};\n    }\n\n    const info: OpenAPIMediaType = {\n      schema: { $ref: schemaRef },\n    };\n\n    if (exampleRef) {\n      info.examples = { example: { $ref: exampleRef } };\n    }\n\n    return info;\n  }\n\n  private _mediaModel: MediaTypeModel;\n\n  private get mediaModel() {\n    const { parser, schemaRef, exampleRef, options } = this.props;\n    if (!this._mediaModel) {\n      this._mediaModel = new MediaTypeModel(\n        parser,\n        'json',\n        false,\n        SchemaDefinition.getMediaType(schemaRef, exampleRef),\n        options,\n      );\n    }\n\n    return this._mediaModel;\n  }\n\n  render() {\n    const { showReadOnly = true, showWriteOnly = false, showExample = true } = this.props;\n    return (\n      <Section>\n        <Row>\n          <MiddlePanel>\n            <Schema\n              skipWriteOnly={!showWriteOnly}\n              skipReadOnly={!showReadOnly}\n              schema={this.mediaModel.schema}\n            />\n          </MiddlePanel>\n          {showExample && (\n            <DarkRightPanel>\n              <MediaSamplesWrap>\n                <MediaTypeSamples\n                  renderDropdown={this.renderDropdown}\n                  mediaType={this.mediaModel}\n                />\n              </MediaSamplesWrap>\n            </DarkRightPanel>\n          )}\n        </Row>\n      </Section>\n    );\n  }\n\n  private renderDropdown = props => {\n    return (\n      <DropdownOrLabel\n        Label={MimeLabel}\n        Dropdown={InvertedSimpleDropdown}\n        {...props}\n        variant=\"dark\"\n      />\n    );\n  };\n}\n\nconst MediaSamplesWrap = styled.div`\n  background: ${({ theme }) => theme.codeBlock.backgroundColor};\n  & > div,\n  & > pre {\n    padding: ${props => props.theme.spacing.unit * 4}px;\n    margin: 0;\n  }\n\n  & > div > pre {\n    padding: 0;\n  }\n`;\n","import styled from 'styled-components';\nimport { linksCss } from '../Markdown/styled.elements';\nimport { media } from '../../styled-components';\nimport { UnderlinedHeader } from '../../common-elements';\n\nexport const Header = styled.div`\n  background-color: #e4e7eb;\n`;\n\nexport const ScopeNameList = styled.ul`\n  display: inline;\n  list-style: none;\n  padding: 0;\n\n  li {\n    display: inherit;\n\n    &:after {\n      content: ',';\n    }\n    &:last-child:after {\n      content: none;\n    }\n  }\n`;\n\nexport const ScopeName = styled.code`\n  font-size: ${props => props.theme.typography.code.fontSize};\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  margin: 0 3px;\n  padding: 0.2em;\n  display: inline-block;\n  line-height: 1;\n\n  &:after {\n    content: ',';\n    font-weight: normal;\n  }\n\n  &:last-child:after {\n    content: none;\n  }\n`;\n\nexport const SecurityRequirementAndWrap = styled.span`\n  &:after {\n    content: ' and ';\n    font-weight: normal;\n  }\n\n  &:last-child:after {\n    content: none;\n  }\n\n  ${linksCss};\n`;\n\nexport const SecurityRequirementOrWrap = styled.span<{ $expanded?: boolean }>`\n  ${p => !p.$expanded && `white-space: nowrap;`}\n  &:after {\n    content: ' or ';\n    ${p => p.$expanded && `content: ' or \\\\a';`}\n    white-space: pre;\n  }\n\n  &:last-child:after,\n  &:only-child:after {\n    content: none;\n  }\n\n  ${linksCss};\n`;\n\nexport const AuthHeaderColumn = styled.div`\n  flex: 1 1 auto;\n  cursor: pointer;\n`;\n\nexport const SecuritiesColumn = styled.div<{ $expanded?: boolean }>`\n  width: ${props => props.theme.schema.defaultDetailsWidth};\n  text-overflow: ellipsis;\n  border-radius: 4px;\n  overflow: hidden;\n  ${p =>\n    p.$expanded &&\n    `background: ${p.theme.colors.gray['100']};\n     padding: 8px 9.6px;\n     margin: 20px 0;\n     width: 100%;\n    `};\n  ${media.lessThan('small')`\n    margin-top: 10px;\n  `}\n`;\n\nexport const AuthHeader = styled(UnderlinedHeader)`\n  display: inline-block;\n  margin: 0;\n`;\n\nexport const Wrap = styled.div<{ $expanded?: boolean }>`\n  width: 100%;\n  display: flex;\n  margin: 1em 0;\n  flex-direction: ${p => (p.$expanded ? 'column' : 'row')};\n  ${media.lessThan('small')`\n    flex-direction: column;\n  `}\n`;\n\nexport const SecurityRow = styled.div`\n  margin: 0.5em 0;\n`;\n\nexport const SecurityDetailsStyle = styled.div`\n  border-bottom: 1px solid ${({ theme }) => theme.colors.border.dark};\n  margin-bottom: 1.5em;\n  padding-bottom: 0.7em;\n\n  h5 {\n    line-height: 1em;\n    margin: 0 0 0.6em;\n    font-size: ${({ theme }) => theme.typography.fontSize};\n  }\n\n  .redoc-markdown p:first-child {\n    display: inline;\n  }\n`;\n","import * as React from 'react';\nimport styled from 'styled-components';\n\nconst TOLERANCE_PX = 20;\n\ninterface SeeMoreProps {\n  children?: React.ReactNode;\n  height: string;\n}\n\nexport function SeeMore({ children, height }: SeeMoreProps): JSX.Element {\n  const ref = React.createRef() as React.RefObject<HTMLDivElement>;\n  const [showMore, setShowMore] = React.useState(false);\n  const [showLink, setShowLink] = React.useState(false);\n\n  React.useEffect(() => {\n    if (ref.current && ref.current.clientHeight + TOLERANCE_PX < ref.current.scrollHeight) {\n      setShowLink(true);\n    }\n  }, [ref]);\n\n  const onClickMore = () => {\n    setShowMore(!showMore);\n  };\n\n  return (\n    <>\n      <Container\n        ref={ref}\n        className={showMore ? '' : 'container'}\n        style={{ height: showMore ? 'auto' : height }}\n      >\n        {children}\n      </Container>\n      <ButtonContainer $dimmed={!showMore}>\n        {showLink && (\n          <ButtonLinkStyled onClick={onClickMore}>\n            {showMore ? 'See less' : 'See more'}\n          </ButtonLinkStyled>\n        )}\n      </ButtonContainer>\n    </>\n  );\n}\n\nconst Container = styled.div`\n  overflow-y: hidden;\n`;\n\nconst ButtonContainer = styled.div<{ $dimmed?: boolean }>`\n  text-align: center;\n  line-height: 1.5em;\n  ${({ $dimmed }) =>\n    $dimmed &&\n    `background-image: linear-gradient(to bottom, transparent,rgb(255 255 255));\n     position: relative;\n     top: -0.5em;\n     padding-top: 0.5em;\n     background-position-y: -1em;\n    `}\n`;\n\nconst ButtonLinkStyled = styled.a`\n  cursor: pointer;\n`;\n","import * as React from 'react';\nimport { OpenAPISecurityScheme } from '../../types';\nimport { SecurityRow } from './styled.elements';\nimport { SeeMore } from '../SeeMore/SeeMore';\nimport { Markdown } from '../Markdown/Markdown';\n\nexport interface OAuthFlowProps {\n  type: string;\n  flow: OpenAPISecurityScheme['flows'][keyof OpenAPISecurityScheme['flows']];\n  RequiredScopes?: JSX.Element;\n}\n\nexport function OAuthFlowComponent(props: OAuthFlowProps) {\n  const { type, flow, RequiredScopes } = props;\n  const scopesNames = Object.keys(flow?.scopes || {});\n\n  return (\n    <>\n      <SecurityRow>\n        <b>Flow type: </b>\n        <code>{type} </code>\n      </SecurityRow>\n      {(type === 'implicit' || type === 'authorizationCode') && (\n        <SecurityRow>\n          <strong> Authorization URL: </strong>\n          <code>\n            <a target=\"_blank\" rel=\"noopener noreferrer\" href={(flow as any).authorizationUrl}>\n              {(flow as any).authorizationUrl}\n            </a>\n          </code>\n        </SecurityRow>\n      )}\n      {(type === 'password' || type === 'clientCredentials' || type === 'authorizationCode') && (\n        <SecurityRow>\n          <b> Token URL: </b>\n          <code>{(flow as any).tokenUrl}</code>\n        </SecurityRow>\n      )}\n      {flow!.refreshUrl && (\n        <SecurityRow>\n          <strong> Refresh URL: </strong>\n          <code>{flow!.refreshUrl}</code>\n        </SecurityRow>\n      )}\n      {!!scopesNames.length && (\n        <>\n          {RequiredScopes || null}\n          <SecurityRow>\n            <b> Scopes: </b>\n          </SecurityRow>\n          <SeeMore height=\"4em\">\n            <ul>\n              {scopesNames.map(scope => (\n                <li key={scope}>\n                  <code>{scope}</code> -{' '}\n                  <Markdown\n                    className={'redoc-markdown'}\n                    inline={true}\n                    source={flow!.scopes[scope] || ''}\n                  />\n                </li>\n              ))}\n            </ul>\n          </SeeMore>\n        </>\n      )}\n    </>\n  );\n}\n\nexport const OAuthFlow = React.memo<OAuthFlowProps>(OAuthFlowComponent);\n","import * as React from 'react';\nimport { SecuritySchemeModel } from '../../services';\nimport { titleize } from '../../utils';\nimport { StyledMarkdownBlock } from '../Markdown/styled.elements';\nimport { SecurityRow } from './styled.elements';\nimport { OAuthFlow } from './OAuthFlow';\n\ninterface SecuritySchemaProps {\n  RequiredScopes?: JSX.Element;\n  scheme: SecuritySchemeModel;\n}\nexport function SecurityDetails(props: SecuritySchemaProps) {\n  const { RequiredScopes, scheme } = props;\n\n  return (\n    <StyledMarkdownBlock>\n      {scheme.apiKey ? (\n        <>\n          <SecurityRow>\n            <b>{titleize(scheme.apiKey.in || '')} parameter name: </b>\n            <code>{scheme.apiKey.name}</code>\n          </SecurityRow>\n          {RequiredScopes}\n        </>\n      ) : scheme.http ? (\n        <>\n          <SecurityRow>\n            <b>HTTP Authorization Scheme: </b>\n            <code>{scheme.http.scheme}</code>\n          </SecurityRow>\n          <SecurityRow>\n            {scheme.http.scheme === 'bearer' && scheme.http.bearerFormat && (\n              <>\n                <b>Bearer format: </b>\n                <code>{scheme.http.bearerFormat}</code>\n              </>\n            )}\n          </SecurityRow>\n          {RequiredScopes}\n        </>\n      ) : scheme.openId ? (\n        <>\n          <SecurityRow>\n            <b>Connect URL: </b>\n            <code>\n              <a target=\"_blank\" rel=\"noopener noreferrer\" href={scheme.openId.connectUrl}>\n                {scheme.openId.connectUrl}\n              </a>\n            </code>\n          </SecurityRow>\n          {RequiredScopes}\n        </>\n      ) : scheme.flows ? (\n        Object.keys(scheme.flows).map(type => (\n          <OAuthFlow\n            key={type}\n            type={type}\n            RequiredScopes={RequiredScopes}\n            flow={scheme.flows[type]}\n          />\n        ))\n      ) : null}\n    </StyledMarkdownBlock>\n  );\n}\n","import * as React from 'react';\n\nimport { SecuritySchemesModel } from '../../services';\nimport { H2, Row, ShareLink, MiddlePanel, Section } from '../../common-elements';\nimport { Markdown } from '../Markdown/Markdown';\nimport { SecurityDetails } from '../SecurityRequirement/SecurityDetails';\nimport { SecurityDetailsStyle, SecurityRow } from '../SecurityRequirement/styled.elements';\n\nexport const AUTH_TYPES = {\n  oauth2: 'OAuth2',\n  apiKey: 'API Key',\n  http: 'HTTP',\n  openIdConnect: 'OpenID Connect',\n};\n\nexport interface SecurityDefsProps {\n  securitySchemes: SecuritySchemesModel;\n}\n\nexport class SecurityDefs extends React.PureComponent<SecurityDefsProps> {\n  render() {\n    return this.props.securitySchemes.schemes.map(scheme => (\n      <Section id={scheme.sectionId} key={scheme.id}>\n        <Row>\n          <MiddlePanel>\n            <H2>\n              <ShareLink to={scheme.sectionId} />\n              {scheme.displayName}\n            </H2>\n            <Markdown source={scheme.description || ''} />\n            <SecurityDetailsStyle>\n              <SecurityRow>\n                <b>Security Scheme Type: </b>\n                <span>{AUTH_TYPES[scheme.type] || scheme.type}</span>\n              </SecurityRow>\n              <SecurityDetails scheme={scheme} />\n            </SecurityDetailsStyle>\n          </MiddlePanel>\n        </Row>\n      </Section>\n    ));\n  }\n}\n","import { Lambda, observe } from 'mobx';\n\nimport type { OpenAPISpec } from '../types';\nimport { loadAndBundleSpec } from '../utils/loadAndBundleSpec';\nimport { history } from './HistoryService';\nimport { MarkerService } from './MarkerService';\nimport { MenuStore } from './MenuStore';\nimport { SpecStore } from './models';\nimport { RedocNormalizedOptions } from './RedocNormalizedOptions';\nimport type { RedocRawOptions } from './RedocNormalizedOptions';\nimport { ScrollService } from './ScrollService';\nimport { SearchStore } from './SearchStore';\n\nimport { SchemaDefinition } from '../components/SchemaDefinition/SchemaDefinition';\nimport { SecurityDefs } from '../components/SecuritySchemes/SecuritySchemes';\nimport {\n  SCHEMA_DEFINITION_JSX_NAME,\n  SECURITY_DEFINITIONS_JSX_NAME,\n  OLD_SECURITY_DEFINITIONS_JSX_NAME,\n} from '../utils/openapi';\n\nimport { IS_BROWSER } from '../utils';\nimport type { StoreState } from './types';\n\nexport async function createStore(\n  spec: object,\n  specUrl: string | undefined,\n  options: RedocRawOptions = {},\n) {\n  const resolvedSpec = await loadAndBundleSpec(spec || specUrl);\n  return new AppStore(resolvedSpec, specUrl, options);\n}\n\nexport class AppStore {\n  /**\n   * deserialize store\n   * **SUPER HACKY AND NOT OPTIMAL IMPLEMENTATION**\n   */\n  // TODO:\n  static fromJS(state: StoreState): AppStore {\n    const inst = new AppStore(state.spec.data, state.spec.url, state.options, false);\n    inst.menu.activeItemIdx = state.menu.activeItemIdx || 0;\n    inst.menu.activate(inst.menu.flatItems[inst.menu.activeItemIdx]);\n    if (!inst.options.disableSearch) {\n      inst.search!.load(state.searchIndex);\n    }\n    return inst;\n  }\n\n  menu: MenuStore;\n  spec: SpecStore;\n  rawOptions: RedocRawOptions;\n  options: RedocNormalizedOptions;\n  search?: SearchStore<string>;\n  marker = new MarkerService();\n\n  private scroll: ScrollService;\n  private disposer: Lambda | null = null;\n\n  constructor(\n    spec: OpenAPISpec,\n    specUrl?: string,\n    options: RedocRawOptions = {},\n    createSearchIndex: boolean = true,\n  ) {\n    this.rawOptions = options;\n    this.options = new RedocNormalizedOptions(options, DEFAULT_OPTIONS);\n    this.scroll = new ScrollService(this.options);\n\n    // update position statically based on hash (in case of SSR)\n    MenuStore.updateOnHistory(history.currentId, this.scroll);\n\n    this.spec = new SpecStore(spec, specUrl, this.options);\n    this.menu = new MenuStore(this.spec, this.scroll, history);\n\n    if (!this.options.disableSearch) {\n      this.search = new SearchStore();\n      if (createSearchIndex) {\n        this.search.indexItems(this.menu.items);\n      }\n\n      this.disposer = observe(this.menu, 'activeItemIdx', change => {\n        this.updateMarkOnMenu(change.newValue as number);\n      });\n    }\n  }\n\n  onDidMount() {\n    this.menu.updateOnHistory();\n    this.updateMarkOnMenu(this.menu.activeItemIdx);\n  }\n\n  dispose() {\n    this.scroll.dispose();\n    this.menu.dispose();\n    if (this.search) {\n      this.search.dispose();\n    }\n    if (this.disposer != null) {\n      this.disposer();\n    }\n  }\n\n  /**\n   * serializes store\n   * **SUPER HACKY AND NOT OPTIMAL IMPLEMENTATION**\n   */\n  // TODO: improve\n  async toJS(): Promise<StoreState> {\n    return {\n      menu: {\n        activeItemIdx: this.menu.activeItemIdx,\n      },\n      spec: {\n        url: this.spec.parser.specUrl,\n        data: this.spec.parser.spec,\n      },\n      searchIndex: this.search ? await this.search.toJS() : undefined,\n      options: this.rawOptions,\n    };\n  }\n\n  private updateMarkOnMenu(idx: number) {\n    const start = Math.max(0, idx);\n    const end = Math.min(this.menu.flatItems.length, start + 5);\n\n    const elements: Element[] = [];\n    for (let i = start; i < end; i++) {\n      const elem = this.menu.getElementAt(i);\n      if (!elem) {\n        continue;\n      }\n      elements.push(elem);\n    }\n\n    if (idx === -1 && IS_BROWSER) {\n      const $description = document.querySelector('[data-role=\"redoc-description\"]');\n      const $summary = document.querySelector('[data-role=\"redoc-summary\"]');\n\n      if ($description) elements.push($description);\n      if ($summary) elements.push($summary);\n    }\n\n    this.marker.addOnly(elements);\n    this.marker.mark();\n  }\n}\n\nconst DEFAULT_OPTIONS: RedocRawOptions = {\n  allowedMdComponents: {\n    [SECURITY_DEFINITIONS_JSX_NAME]: {\n      component: SecurityDefs,\n      propsSelector: (store: AppStore) => ({\n        securitySchemes: store.spec.securitySchemes,\n      }),\n    },\n    [OLD_SECURITY_DEFINITIONS_JSX_NAME]: {\n      component: SecurityDefs,\n      propsSelector: (store: AppStore) => ({\n        securitySchemes: store.spec.securitySchemes,\n      }),\n    },\n    [SCHEMA_DEFINITION_JSX_NAME]: {\n      component: SchemaDefinition,\n      propsSelector: (store: AppStore) => ({\n        parser: store.spec.parser,\n        options: store.options,\n      }),\n    },\n  },\n};\n","import { H1, MiddlePanel } from '../../common-elements';\nimport styled, { extensionsHook } from '../../styled-components';\n\nconst delimiterWidth = 15;\n\nexport const ApiInfoWrap = MiddlePanel;\n\nexport const ApiHeader = styled(H1)`\n  margin-top: 0;\n  margin-bottom: 0.5em;\n\n  ${extensionsHook('ApiHeader')};\n`;\n\nexport const DownloadButton = styled.a`\n  border: 1px solid ${props => props.theme.colors.primary.main};\n  color: ${props => props.theme.colors.primary.main};\n  font-weight: normal;\n  margin-left: 0.5em;\n  padding: 4px 8px 4px;\n  display: inline-block;\n  text-decoration: none;\n  cursor: pointer;\n\n  ${extensionsHook('DownloadButton')};\n`;\n\nexport const InfoSpan = styled.span`\n  &::before {\n    content: '|';\n    display: inline-block;\n    opacity: 0.5;\n    width: ${delimiterWidth}px;\n    text-align: center;\n  }\n\n  &:last-child::after {\n    display: none;\n  }\n`;\n\nexport const InfoSpanBoxWrap = styled.div`\n  overflow: hidden;\n`;\n\nexport const InfoSpanBox = styled.div`\n  display: flex;\n  flex-wrap: wrap;\n  // hide separator on new lines: idea from https://stackoverflow.com/a/31732902/1749888\n  margin-left: -${delimiterWidth}px;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { AppStore } from '../../services/AppStore';\n\nimport { MiddlePanel, Row, Section } from '../../common-elements/';\nimport { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';\nimport { Markdown } from '../Markdown/Markdown';\nimport { StyledMarkdownBlock } from '../Markdown/styled.elements';\nimport {\n  ApiHeader,\n  DownloadButton,\n  InfoSpan,\n  InfoSpanBox,\n  InfoSpanBoxWrap,\n} from './styled.elements';\nimport { l } from '../../services/Labels';\n\nexport interface ApiInfoProps {\n  store: AppStore;\n}\n\n@observer\nexport class ApiInfo extends React.Component<ApiInfoProps> {\n  render() {\n    const { store } = this.props;\n    const { info, externalDocs } = store.spec;\n    const hideDownloadButtons = store.options.hideDownloadButtons;\n\n    const downloadUrls = info.downloadUrls;\n    const downloadFileName = info.downloadFileName;\n    const license =\n      (info.license && (\n        <InfoSpan>\n          License:{' '}\n          {info.license.identifier ? (\n            info.license.identifier\n          ) : (\n            <a href={info.license.url}>{info.license.name}</a>\n          )}\n        </InfoSpan>\n      )) ||\n      null;\n\n    const website =\n      (info.contact && info.contact.url && (\n        <InfoSpan>\n          URL: <a href={info.contact.url}>{info.contact.url}</a>\n        </InfoSpan>\n      )) ||\n      null;\n\n    const email =\n      (info.contact && info.contact.email && (\n        <InfoSpan>\n          {info.contact.name || 'E-mail'}:{' '}\n          <a href={'mailto:' + info.contact.email}>{info.contact.email}</a>\n        </InfoSpan>\n      )) ||\n      null;\n\n    const terms =\n      (info.termsOfService && (\n        <InfoSpan>\n          <a href={info.termsOfService}>Terms of Service</a>\n        </InfoSpan>\n      )) ||\n      null;\n\n    const version = (info.version && <span>({info.version})</span>) || null;\n\n    return (\n      <Section>\n        <Row>\n          <MiddlePanel className=\"api-info\">\n            <ApiHeader>\n              {info.title} {version}\n            </ApiHeader>\n            {!hideDownloadButtons && (\n              <p>\n                {l('downloadSpecification')}:\n                {downloadUrls?.map(({ title, url }) => {\n                  return (\n                    <DownloadButton\n                      download={downloadFileName || true}\n                      target=\"_blank\"\n                      href={url}\n                      rel=\"noreferrer\"\n                      key={url}\n                    >\n                      {title}\n                    </DownloadButton>\n                  );\n                })}\n              </p>\n            )}\n            <StyledMarkdownBlock>\n              {((info.license || info.contact || info.termsOfService) && (\n                <InfoSpanBoxWrap>\n                  <InfoSpanBox>\n                    {email} {website} {license} {terms}\n                  </InfoSpanBox>\n                </InfoSpanBoxWrap>\n              )) ||\n                null}\n            </StyledMarkdownBlock>\n            <Markdown source={store.spec.info.summary} data-role=\"redoc-summary\" />\n            <Markdown source={store.spec.info.description} data-role=\"redoc-description\" />\n            {externalDocs && <ExternalDocumentation externalDocs={externalDocs} />}\n          </MiddlePanel>\n        </Row>\n      </Section>\n    );\n  }\n}\n","import * as React from 'react';\nimport styled from '../../styled-components';\n\nexport const LogoImgEl = styled.img`\n  max-height: ${props => props.theme.logo.maxHeight};\n  max-width: ${props => props.theme.logo.maxWidth};\n  padding: ${props => props.theme.logo.gutter};\n  width: 100%;\n  display: block;\n`;\n\nexport const LogoWrap = styled.div`\n  text-align: center;\n`;\n\nconst Link = styled.a`\n  display: inline-block;\n`;\n\n// eslint-disable-next-line react/display-name\nexport const LinkWrap = url => Component => <Link href={url}>{Component}</Link>;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { OpenAPIInfo } from '../../types';\nimport { LinkWrap, LogoImgEl, LogoWrap } from './styled.elements';\n\n@observer\nexport class ApiLogo extends React.Component<{ info: OpenAPIInfo }> {\n  render() {\n    const { info } = this.props;\n    const logoInfo = info['x-logo'];\n    if (!logoInfo || !logoInfo.url) {\n      return null;\n    }\n\n    const logoHref = logoInfo.href || (info.contact && info.contact.url);\n\n    // Use the english word logo if no alt text is provided\n    const altText = logoInfo.altText ? logoInfo.altText : 'logo';\n\n    const logo = <LogoImgEl src={logoInfo.url} alt={altText} />;\n    return (\n      <LogoWrap style={{ backgroundColor: logoInfo.backgroundColor }}>\n        {logoHref ? LinkWrap(logoHref)(logo) : logo}\n      </LogoWrap>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { AppStore, MarkdownRenderer, RedocNormalizedOptions } from '../../services';\nimport { BaseMarkdownProps } from './Markdown';\nimport { SanitizedMarkdownHTML } from './SanitizedMdBlock';\n\nimport { OptionsConsumer } from '../OptionsProvider';\nimport { StoreConsumer } from '../StoreBuilder';\n\nexport interface AdvancedMarkdownProps extends BaseMarkdownProps {\n  htmlWrap?: (part: JSX.Element) => JSX.Element;\n  parentId?: string;\n}\n\nexport class AdvancedMarkdown extends React.Component<AdvancedMarkdownProps> {\n  render() {\n    return (\n      <OptionsConsumer>\n        {options => (\n          <StoreConsumer>{store => this.renderWithOptionsAndStore(options, store)}</StoreConsumer>\n        )}\n      </OptionsConsumer>\n    );\n  }\n\n  renderWithOptionsAndStore(options: RedocNormalizedOptions, store?: AppStore) {\n    const { source, htmlWrap = i => i } = this.props;\n    if (!store) {\n      throw new Error('When using components in markdown, store prop must be provided');\n    }\n\n    const renderer = new MarkdownRenderer(options, this.props.parentId);\n    const parts = renderer.renderMdWithComponents(source);\n\n    if (!parts.length) {\n      return null;\n    }\n\n    return parts.map((part, idx) => {\n      if (typeof part === 'string') {\n        return React.cloneElement(\n          htmlWrap(<SanitizedMarkdownHTML html={part} inline={false} compact={false} />),\n          { key: idx },\n        );\n      }\n      const PartComponent = part.component as React.FunctionComponent;\n      return <PartComponent key={idx} {...{ ...part.props, ...part.propsSelector(store) }} />;\n    });\n  }\n}\n",null,"import * as classnames from 'classnames';\nimport { darken } from 'polished';\n\nimport { deprecatedCss, ShelfIcon } from '../../common-elements';\nimport styled, { css, media, ResolvedThemeInterface } from '../../styled-components';\n\nexport const OperationBadge = styled.span.attrs((props: { type: string; color?: string }) => ({\n  className: `operation-type ${props.type}`,\n}))<{ type: string; color?: string }>`\n  width: 9ex;\n  display: inline-block;\n  height: ${props => props.theme.typography.code.fontSize};\n  line-height: ${props => props.theme.typography.code.fontSize};\n  background-color: ${props => props.color || '#333'};\n  border-radius: 3px;\n  background-repeat: no-repeat;\n  background-position: 6px 4px;\n  font-size: 7px;\n  font-family: Verdana, sans-serif; // web-safe\n  color: white;\n  text-transform: uppercase;\n  text-align: center;\n  font-weight: bold;\n  vertical-align: middle;\n  margin-right: 6px;\n  margin-top: 2px;\n\n  &.get {\n    background-color: ${({ theme }) => theme.colors.http.get};\n  }\n\n  &.post {\n    background-color: ${({ theme }) => theme.colors.http.post};\n  }\n\n  &.put {\n    background-color: ${({ theme }) => theme.colors.http.put};\n  }\n\n  &.options {\n    background-color: ${({ theme }) => theme.colors.http.options};\n  }\n\n  &.patch {\n    background-color: ${({ theme }) => theme.colors.http.patch};\n  }\n\n  &.delete {\n    background-color: ${({ theme }) => theme.colors.http.delete};\n  }\n\n  &.basic {\n    background-color: ${({ theme }) => theme.colors.http.basic};\n  }\n\n  &.link {\n    background-color: ${({ theme }) => theme.colors.http.link};\n  }\n\n  &.head {\n    background-color: ${({ theme }) => theme.colors.http.head};\n  }\n\n  &.hook {\n    background-color: ${({ theme }) => theme.colors.primary.main};\n  }\n\n  &.schema {\n    background-color: ${({ theme }) => theme.colors.http.basic};\n  }\n`;\n\nfunction menuItemActive(\n  depth,\n  { theme }: { theme: ResolvedThemeInterface },\n  option: string,\n): string {\n  if (depth > 1) {\n    return theme.sidebar.level1Items[option];\n  } else if (depth === 1) {\n    return theme.sidebar.groupItems[option];\n  } else {\n    return '';\n  }\n}\n\nexport const MenuItemUl = styled.ul<{ $expanded: boolean }>`\n  margin: 0;\n  padding: 0;\n\n  &:first-child {\n    padding-bottom: 32px;\n  }\n\n  & & {\n    font-size: 0.929em;\n  }\n\n  ${props => (props.$expanded ? '' : 'display: none;')};\n`;\n\nexport const MenuItemLi = styled.li<{ depth: number }>`\n  list-style: none inside none;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  padding: 0;\n  ${props => (props.depth === 0 ? 'margin-top: 15px' : '')};\n`;\n\nexport const menuItemDepth = {\n  0: css`\n    opacity: 0.7;\n    text-transform: ${({ theme }) => theme.sidebar.groupItems.textTransform};\n    font-size: 0.8em;\n    padding-bottom: 0;\n    cursor: default;\n  `,\n  1: css`\n    font-size: 0.929em;\n    text-transform: ${({ theme }) => theme.sidebar.level1Items.textTransform};\n  `,\n};\n\nexport interface MenuItemLabelType {\n  $depth: number;\n  $active: boolean;\n  $deprecated?: boolean;\n  $type?: string;\n}\n\nexport const MenuItemLabel = styled.label.attrs((props: MenuItemLabelType) => ({\n  className: classnames('-depth' + props.$depth, {\n    active: props.$active,\n  }),\n}))<MenuItemLabelType>`\n  cursor: pointer;\n  color: ${props =>\n    props.$active\n      ? menuItemActive(props.$depth, props, 'activeTextColor')\n      : props.theme.sidebar.textColor};\n  margin: 0;\n  padding: 12.5px ${props => props.theme.spacing.unit * 4}px;\n  ${({ $depth, $type, theme }) =>\n    ($type === 'section' && $depth > 1 && 'padding-left: ' + theme.spacing.unit * 8 + 'px;') || ''}\n  display: flex;\n  justify-content: space-between;\n  font-family: ${props => props.theme.typography.headings.fontFamily};\n  ${props => menuItemDepth[props.$depth]};\n  background-color: ${props =>\n    props.$active\n      ? menuItemActive(props.$depth, props, 'activeBackgroundColor')\n      : props.theme.sidebar.backgroundColor};\n\n  ${props => (props.$deprecated && deprecatedCss) || ''};\n\n  &:hover {\n    color: ${props => menuItemActive(props.$depth, props, 'activeTextColor')};\n    background-color: ${props => menuItemActive(props.$depth, props, 'activeBackgroundColor')};\n  }\n\n  ${ShelfIcon} {\n    height: ${({ theme }) => theme.sidebar.arrow.size};\n    width: ${({ theme }) => theme.sidebar.arrow.size};\n    polygon {\n      fill: ${({ theme }) => theme.sidebar.arrow.color};\n    }\n  }\n`;\n\nexport const MenuItemTitle = styled.span<{ width?: string }>`\n  display: inline-block;\n  vertical-align: middle;\n  width: ${props => (props.width ? props.width : 'auto')};\n  overflow: hidden;\n  text-overflow: ellipsis;\n`;\n\nexport const RedocAttribution = styled.div`\n  ${({ theme }) => css`\n    font-size: 0.8em;\n    margin-top: ${theme.spacing.unit * 2}px;\n    text-align: center;\n    position: fixed;\n    width: ${theme.sidebar.width};\n    bottom: 0;\n    background: ${theme.sidebar.backgroundColor};\n\n    a,\n    a:visited,\n    a:hover {\n      color: ${theme.sidebar.textColor} !important;\n      padding: ${theme.spacing.unit}px 0;\n      border-top: 1px solid ${darken(0.1, theme.sidebar.backgroundColor)};\n      text-decoration: none;\n      display: flex;\n      align-items: center;\n      justify-content: center;\n    }\n  `};\n  img {\n    width: 15px;\n    margin-right: 5px;\n  }\n\n  ${media.lessThan('small')`\n    width: 100%;\n  `};\n`;\n","import * as React from 'react';\n\nimport { darken } from 'polished';\nimport { ShelfIcon } from '../../common-elements';\nimport { OperationBadge } from '../SideMenu/styled.elements';\nimport { shortenHTTPVerb } from '../../utils/openapi';\nimport styled from '../../styled-components';\nimport { Badge } from '../../common-elements/';\nimport { l } from '../../services/Labels';\n\nexport interface CallbackTitleProps {\n  name: string;\n  opened?: boolean;\n  httpVerb: string;\n  deprecated?: boolean;\n  className?: string;\n  onClick?: () => void;\n}\n\nexport const CallbackTitle = (props: CallbackTitleProps) => {\n  const { name, opened, className, onClick, httpVerb, deprecated } = props;\n\n  return (\n    <CallbackTitleWrapper className={className} onClick={onClick || undefined}>\n      <OperationBadgeStyled type={httpVerb}>{shortenHTTPVerb(httpVerb)}</OperationBadgeStyled>\n      <ShelfIcon size={'1.5em'} direction={opened ? 'down' : 'right'} float={'left'} />\n      <CallbackName $deprecated={deprecated}>{name}</CallbackName>\n      {deprecated ? <Badge type=\"warning\"> {l('deprecated')} </Badge> : null}\n    </CallbackTitleWrapper>\n  );\n};\n\nconst CallbackTitleWrapper = styled.button`\n  border: 0;\n  width: 100%;\n  text-align: left;\n  & > * {\n    vertical-align: middle;\n  }\n\n  ${ShelfIcon} {\n    polygon {\n      fill: ${({ theme }) => darken(theme.colors.tonalOffset, theme.colors.gray[100])};\n    }\n  }\n`;\n\nconst CallbackName = styled.span<{ $deprecated?: boolean }>`\n  text-decoration: ${props => (props.$deprecated ? 'line-through' : 'none')};\n  margin-right: 8px;\n`;\n\nconst OperationBadgeStyled = styled(OperationBadge)`\n  margin: 0 5px 0 0;\n`;\n","import styled from '../../styled-components';\nimport { CallbackTitle } from './CallbackTitle';\nimport { darken } from 'polished';\n\nexport const StyledCallbackTitle = styled(CallbackTitle)`\n  padding: 10px;\n  border-radius: 2px;\n  margin-bottom: 4px;\n  line-height: 1.5em;\n  background-color: ${({ theme }) => theme.colors.gray[100]};\n  cursor: pointer;\n  outline-color: ${({ theme }) => darken(theme.colors.tonalOffset, theme.colors.gray[100])};\n`;\n\nexport const CallbackDetailsWrap = styled.div`\n  padding: 10px 25px;\n  background-color: ${({ theme }) => theme.colors.gray[50]};\n  margin-bottom: 5px;\n  margin-top: 5px;\n`;\n","import * as React from 'react';\n\nimport { ClipboardService } from '../../services';\n\nexport class SelectOnClick extends React.PureComponent<React.PropsWithChildren<any>> {\n  private child: HTMLDivElement | null;\n  selectElement = () => {\n    ClipboardService.selectElement(this.child);\n  };\n\n  render() {\n    const { children } = this.props;\n    return (\n      <div\n        ref={el => (this.child = el)}\n        onClick={this.selectElement}\n        onFocus={this.selectElement}\n        tabIndex={0}\n        role=\"button\"\n      >\n        {children}\n      </div>\n    );\n  }\n}\n","import styled from '../../styled-components';\n\nexport const OperationEndpointWrap = styled.div`\n  cursor: pointer;\n  position: relative;\n  margin-bottom: 5px;\n`;\n\nexport const ServerRelativeURL = styled.span`\n  font-family: ${props => props.theme.typography.code.fontFamily};\n  margin-left: 10px;\n  flex: 1;\n  overflow-x: hidden;\n  text-overflow: ellipsis;\n`;\n\nexport const EndpointInfo = styled.button<{ $expanded?: boolean; $inverted?: boolean }>`\n  outline: 0;\n  color: inherit;\n  width: 100%;\n  text-align: left;\n  cursor: pointer;\n  padding: 10px 30px 10px ${props => (props.$inverted ? '10px' : '20px')};\n  border-radius: ${props => (props.$inverted ? '0' : '4px 4px 0 0')};\n  background-color: ${props =>\n    props.$inverted ? 'transparent' : props.theme.codeBlock.backgroundColor};\n  display: flex;\n  white-space: nowrap;\n  align-items: center;\n  border: ${props => (props.$inverted ? '0' : '1px solid transparent')};\n  border-bottom: ${props => (props.$inverted ? '1px solid #ccc' : '0')};\n  transition: border-color 0.25s ease;\n\n  ${props =>\n    (props.$expanded && !props.$inverted && `border-color: ${props.theme.colors.border.dark};`) ||\n    ''}\n\n  .${ServerRelativeURL} {\n    color: ${props => (props.$inverted ? props.theme.colors.text.primary : '#ffffff')};\n  }\n  &:focus {\n    box-shadow: inset 0 2px 2px rgba(0, 0, 0, 0.45), 0 2px 0 rgba(128, 128, 128, 0.25);\n  }\n`;\n\nexport const HttpVerb = styled.span.attrs((props: { type: string; $compact?: boolean }) => ({\n  className: `http-verb ${props.type}`,\n}))<{ type: string; $compact?: boolean }>`\n  font-size: ${props => (props.$compact ? '0.8em' : '0.929em')};\n  line-height: ${props => (props.$compact ? '18px' : '20px')};\n  background-color: ${props => props.theme.colors.http[props.type] || '#999999'};\n  color: #ffffff;\n  padding: ${props => (props.$compact ? '2px 8px' : '3px 10px')};\n  text-transform: uppercase;\n  font-family: ${props => props.theme.typography.headings.fontFamily};\n  margin: 0;\n`;\n\nexport const ServersOverlay = styled.div<{ $expanded: boolean }>`\n  position: absolute;\n  width: 100%;\n  z-index: 100;\n  background: ${props => props.theme.rightPanel.servers.overlay.backgroundColor};\n  color: ${props => props.theme.rightPanel.servers.overlay.textColor};\n  box-sizing: border-box;\n  box-shadow: 0 0 6px rgba(0, 0, 0, 0.33);\n  overflow: hidden;\n  border-bottom-left-radius: 4px;\n  border-bottom-right-radius: 4px;\n  transition: all 0.25s ease;\n  visibility: hidden;\n  ${props => (props.$expanded ? 'visibility: visible;' : 'transform: translateY(-50%) scaleY(0);')}\n`;\n\nexport const ServerItem = styled.div`\n  padding: 10px;\n`;\n\nexport const ServerUrl = styled.div`\n  padding: 5px;\n  border: 1px solid #ccc;\n  background: ${props => props.theme.rightPanel.servers.url.backgroundColor};\n  word-break: break-all;\n  color: ${props => props.theme.colors.primary.main};\n  > span {\n    color: ${props => props.theme.colors.text.primary};\n  }\n`;\n","import * as React from 'react';\nimport { ShelfIcon } from '../../common-elements';\nimport { OperationModel } from '../../services';\nimport { Markdown } from '../Markdown/Markdown';\nimport { OptionsContext } from '../OptionsProvider';\nimport { SelectOnClick } from '../SelectOnClick/SelectOnClick';\n\nimport { expandDefaultServerVariables, getBasePath } from '../../utils';\nimport {\n  EndpointInfo,\n  HttpVerb,\n  OperationEndpointWrap,\n  ServerItem,\n  ServerRelativeURL,\n  ServersOverlay,\n  ServerUrl,\n} from './styled.elements';\n\nexport interface EndpointProps {\n  operation: OperationModel;\n\n  hideHostname?: boolean;\n  inverted?: boolean;\n  compact?: boolean;\n}\n\nexport interface EndpointState {\n  expanded: boolean;\n}\n\nexport class Endpoint extends React.Component<EndpointProps, EndpointState> {\n  constructor(props) {\n    super(props);\n    this.state = {\n      expanded: false,\n    };\n  }\n\n  toggle = () => {\n    this.setState({ expanded: !this.state.expanded });\n  };\n\n  render() {\n    const { operation, inverted, hideHostname } = this.props;\n    const { expanded } = this.state;\n\n    // TODO: highlight server variables, e.g. https://{user}.test.com\n    return (\n      <OptionsContext.Consumer>\n        {options => (\n          <OperationEndpointWrap>\n            <EndpointInfo onClick={this.toggle} $expanded={expanded} $inverted={inverted}>\n              <HttpVerb type={operation.httpVerb} $compact={this.props.compact}>\n                {operation.httpVerb}\n              </HttpVerb>\n              <ServerRelativeURL>{operation.path}</ServerRelativeURL>\n              <ShelfIcon\n                float={'right'}\n                color={inverted ? 'black' : 'white'}\n                size={'20px'}\n                direction={expanded ? 'up' : 'down'}\n                style={{ marginRight: '-25px' }}\n              />\n            </EndpointInfo>\n            <ServersOverlay $expanded={expanded} aria-hidden={!expanded}>\n              {operation.servers.map(server => {\n                const normalizedUrl = options.expandDefaultServerVariables\n                  ? expandDefaultServerVariables(server.url, server.variables)\n                  : server.url;\n                const basePath = getBasePath(normalizedUrl);\n                return (\n                  <ServerItem key={normalizedUrl}>\n                    <Markdown source={server.description || ''} compact={true} />\n                    <SelectOnClick>\n                      <ServerUrl>\n                        <span>\n                          {hideHostname || options.hideHostname\n                            ? basePath === '/'\n                              ? ''\n                              : basePath\n                            : normalizedUrl}\n                        </span>\n                        {operation.path}\n                      </ServerUrl>\n                    </SelectOnClick>\n                  </ServerItem>\n                );\n              })}\n            </ServersOverlay>\n          </OperationEndpointWrap>\n        )}\n      </OptionsContext.Consumer>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { UnderlinedHeader } from '../../common-elements';\nimport { PropertiesTable } from '../../common-elements/fields-layout';\n\nimport { FieldModel } from '../../services/models';\nimport { Field } from '../Fields/Field';\n\nimport { mapWithLast } from '../../utils';\n\nexport interface ParametersGroupProps {\n  place: string;\n  parameters: FieldModel[];\n}\n\nexport class ParametersGroup extends React.PureComponent<ParametersGroupProps, any> {\n  render() {\n    const { place, parameters } = this.props;\n    if (!parameters || !parameters.length) {\n      return null;\n    }\n\n    return (\n      <div key={place}>\n        <UnderlinedHeader>{place} Parameters</UnderlinedHeader>\n        <PropertiesTable>\n          <tbody>\n            {mapWithLast(parameters, (field, isLast) => (\n              <Field key={field.name} isLast={isLast} field={field} showExamples={true} />\n            ))}\n          </tbody>\n        </PropertiesTable>\n      </div>\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { DropdownOption, DropdownProps } from '../../common-elements/Dropdown';\nimport { MediaContentModel, MediaTypeModel, SchemaModel } from '../../services/models';\nimport { DropdownLabel, DropdownWrapper } from '../PayloadSamples/styled.elements';\n\nexport interface MediaTypeChildProps {\n  schema: SchemaModel;\n  mime?: string;\n}\n\nexport interface MediaTypesSwitchProps {\n  content?: MediaContentModel;\n  withLabel?: boolean;\n\n  renderDropdown: (props: DropdownProps) => JSX.Element;\n  children: (activeMime: MediaTypeModel) => JSX.Element;\n}\n\n@observer\nexport class MediaTypesSwitch extends React.Component<MediaTypesSwitchProps> {\n  switchMedia = ({ idx }: DropdownOption) => {\n    if (this.props.content && idx !== undefined) {\n      this.props.content.activate(idx);\n    }\n  };\n\n  render() {\n    const { content } = this.props;\n    if (!content || !content.mediaTypes || !content.mediaTypes.length) {\n      return null;\n    }\n    const activeMimeIdx = content.activeMimeIdx;\n\n    const options = content.mediaTypes.map((mime, idx) => {\n      return {\n        value: mime.name,\n        idx,\n      };\n    });\n\n    const Wrapper = ({ children }) =>\n      this.props.withLabel ? (\n        <DropdownWrapper>\n          <DropdownLabel>Content type</DropdownLabel>\n          {children}\n        </DropdownWrapper>\n      ) : (\n        children\n      );\n\n    return (\n      <>\n        <Wrapper>\n          {this.props.renderDropdown({\n            value: options[activeMimeIdx].value,\n            options,\n            onChange: this.switchMedia,\n            ariaLabel: 'Content type',\n          })}\n        </Wrapper>\n        {this.props.children(content.active)}\n      </>\n    );\n  }\n}\n","import * as React from 'react';\nimport { DropdownOrLabel, DropdownOrLabelProps } from '../DropdownOrLabel/DropdownOrLabel';\nimport { ParametersGroup } from './ParametersGroup';\n\nimport { UnderlinedHeader } from '../../common-elements';\n\nimport { MediaContentModel } from '../../services';\nimport { FieldModel, RequestBodyModel } from '../../services/models';\nimport { MediaTypesSwitch } from '../MediaTypeSwitch/MediaTypesSwitch';\nimport { Schema } from '../Schema';\n\nimport { Markdown } from '../Markdown/Markdown';\nimport { ConstraintsView } from '../Fields/FieldConstraints';\nimport { RequiredLabel } from '../../common-elements/fields';\nimport styled from '../../styled-components';\n\nfunction safePush(obj, prop, item) {\n  if (!obj[prop]) {\n    obj[prop] = [];\n  }\n  obj[prop].push(item);\n}\n\nexport interface ParametersProps {\n  parameters?: FieldModel[];\n  body?: RequestBodyModel;\n}\n\nconst PARAM_PLACES = ['path', 'query', 'cookie', 'header'];\n\nexport class Parameters extends React.PureComponent<ParametersProps> {\n  orderParams(params: FieldModel[]): Record<string, FieldModel[]> {\n    const res = {};\n    params.forEach(param => {\n      safePush(res, param.in, param);\n    });\n    return res;\n  }\n\n  render() {\n    const { body, parameters = [] } = this.props;\n    if (body === undefined && parameters === undefined) {\n      return null;\n    }\n\n    const paramsMap = this.orderParams(parameters);\n\n    const paramsPlaces = parameters.length > 0 ? PARAM_PLACES : [];\n\n    const bodyContent = body && body.content;\n\n    const bodyDescription = body && body.description;\n\n    const bodyRequired = body && body.required;\n\n    return (\n      <>\n        {paramsPlaces.map(place => (\n          <ParametersGroup key={place} place={place} parameters={paramsMap[place]} />\n        ))}\n        {bodyContent && (\n          <BodyContent\n            content={bodyContent}\n            description={bodyDescription}\n            bodyRequired={bodyRequired}\n          />\n        )}\n      </>\n    );\n  }\n}\n\nfunction DropdownWithinHeader({\n  bodyRequired,\n  ...props\n}: DropdownOrLabelProps & { bodyRequired?: boolean }) {\n  const isRequired = typeof bodyRequired === 'boolean' && !!bodyRequired;\n  const isOptional = typeof bodyRequired === 'boolean' && !bodyRequired;\n\n  return (\n    <UnderlinedHeader key=\"header\">\n      Request Body schema: <DropdownOrLabel {...props} />\n      {isRequired && <RequiredBody>required</RequiredBody>}\n      {isOptional && <OptionalBody>optional</OptionalBody>}\n    </UnderlinedHeader>\n  );\n}\n\nexport function BodyContent(props: {\n  content: MediaContentModel;\n  description?: string;\n  bodyRequired?: boolean;\n}): JSX.Element {\n  const { content, description, bodyRequired } = props;\n  const { isRequestType } = content;\n  return (\n    <MediaTypesSwitch\n      content={content}\n      renderDropdown={props => <DropdownWithinHeader bodyRequired={bodyRequired} {...props} />}\n    >\n      {({ schema }) => {\n        return (\n          <>\n            {description !== undefined && <Markdown source={description} />}\n            {schema?.type === 'object' && (\n              <ConstraintsView constraints={schema?.constraints || []} />\n            )}\n            <Schema\n              skipReadOnly={isRequestType}\n              skipWriteOnly={!isRequestType}\n              key=\"schema\"\n              schema={schema}\n            />\n          </>\n        );\n      }}\n    </MediaTypesSwitch>\n  );\n}\n\nconst commonStyles = `\n  text-transform: lowercase;\n  margin-left: 0;\n  line-height: 1.5em;\n`;\n\nconst RequiredBody = styled(RequiredLabel)`\n  ${commonStyles}\n`;\n\nconst OptionalBody = styled('div')`\n  ${commonStyles}\n  color: ${({ theme }) => theme.colors.text.secondary};\n  font-size: ${props => props.theme.schema.labelsTextSize};\n`;\n","import * as React from 'react';\n\nimport { Code } from './styled.elements';\nimport { ShelfIcon } from '../../common-elements';\nimport { Markdown } from '../Markdown/Markdown';\n\nexport interface ResponseTitleProps {\n  code: string;\n  title: string;\n  type: string;\n  empty?: boolean;\n  opened?: boolean;\n  className?: string;\n  onClick?: () => void;\n}\n\nfunction ResponseTitleComponent({\n  title,\n  type,\n  empty,\n  code,\n  opened,\n  className,\n  onClick,\n}: ResponseTitleProps): React.ReactElement {\n  return (\n    <button\n      className={className}\n      onClick={(!empty && onClick) || undefined}\n      aria-expanded={opened}\n      disabled={empty}\n    >\n      {!empty && (\n        <ShelfIcon\n          size={'1.5em'}\n          color={type}\n          direction={opened ? 'down' : 'right'}\n          float={'left'}\n        />\n      )}\n      <Code>{code} </Code>\n      <Markdown compact={true} inline={true} source={title} />\n    </button>\n  );\n}\n\nexport const ResponseTitle = React.memo<ResponseTitleProps>(ResponseTitleComponent);\n","import { UnderlinedHeader } from '../../common-elements';\nimport styled from '../../styled-components';\nimport { ResponseTitle } from './ResponseTitle';\n\nexport const StyledResponseTitle = styled(ResponseTitle)`\n  display: block;\n  border: 0;\n  width: 100%;\n  text-align: left;\n  padding: 10px;\n  border-radius: 2px;\n  margin-bottom: 4px;\n  line-height: 1.5em;\n  cursor: pointer;\n\n  color: ${props => props.theme.colors.responses[props.type].color};\n  background-color: ${props => props.theme.colors.responses[props.type].backgroundColor};\n  &:focus {\n    outline: auto ${props => props.theme.colors.responses[props.type].color};\n  }\n  ${props =>\n    (props.empty &&\n      `\ncursor: default;\n&::before {\n  content: \"—\";\n  font-weight: bold;\n  width: 1.5em;\n  text-align: center;\n  display: inline-block;\n  vertical-align: top;\n}\n&:focus {\n  outline: 0;\n}\n`) ||\n    ''};\n`;\n\nexport const ResponseDetailsWrap = styled.div`\n  padding: 10px;\n`;\n\nexport const HeadersCaption = styled(UnderlinedHeader).attrs({\n  as: 'caption',\n})`\n  text-align: left;\n  margin-top: 1em;\n  caption-side: top;\n`;\n\nexport const Code = styled.strong`\n  vertical-align: top;\n`;\n","import * as React from 'react';\nimport { PropertiesTable } from '../../common-elements/fields-layout';\n\nimport { FieldModel } from '../../services/models';\nimport { mapWithLast } from '../../utils';\nimport { Field } from '../Fields/Field';\nimport { HeadersCaption } from './styled.elements';\n\nexport interface ResponseHeadersProps {\n  headers?: FieldModel[];\n}\n\nexport class ResponseHeaders extends React.PureComponent<ResponseHeadersProps> {\n  render() {\n    const { headers } = this.props;\n    if (headers === undefined || headers.length === 0) {\n      return null;\n    }\n    return (\n      <PropertiesTable>\n        <HeadersCaption> Response Headers </HeadersCaption>\n        <tbody>\n          {mapWithLast(headers, (header, isLast) => (\n            <Field isLast={isLast} key={header.name} field={header} showExamples={true} />\n          ))}\n        </tbody>\n      </PropertiesTable>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { ResponseModel } from '../../services/models';\n\nimport { UnderlinedHeader } from '../../common-elements';\nimport { DropdownOrLabel } from '../DropdownOrLabel/DropdownOrLabel';\nimport { MediaTypesSwitch } from '../MediaTypeSwitch/MediaTypesSwitch';\nimport { Schema } from '../Schema';\n\nimport { Extensions } from '../Fields/Extensions';\nimport { Markdown } from '../Markdown/Markdown';\nimport { ResponseHeaders } from './ResponseHeaders';\nimport { ConstraintsView } from '../Fields/FieldConstraints';\n\nexport class ResponseDetails extends React.PureComponent<{ response: ResponseModel }> {\n  render() {\n    const { description, extensions, headers, content } = this.props.response;\n    return (\n      <>\n        {description && <Markdown source={description} />}\n        <Extensions extensions={extensions} />\n        <ResponseHeaders headers={headers} />\n        <MediaTypesSwitch content={content} renderDropdown={this.renderDropdown}>\n          {({ schema }) => {\n            return (\n              <>\n                {schema?.type === 'object' && (\n                  <ConstraintsView constraints={schema?.constraints || []} />\n                )}\n                <Schema skipWriteOnly={true} key=\"schema\" schema={schema} />\n              </>\n            );\n          }}\n        </MediaTypesSwitch>\n      </>\n    );\n  }\n\n  private renderDropdown = props => {\n    return (\n      <UnderlinedHeader key=\"header\">\n        Response Schema: <DropdownOrLabel {...props} />\n      </UnderlinedHeader>\n    );\n  };\n}\n","import * as React from 'react';\nimport { observer } from 'mobx-react';\n\nimport type { ResponseModel, MediaTypeModel } from '../../services/models';\nimport { ResponseDetails } from './ResponseDetails';\nimport { ResponseDetailsWrap, StyledResponseTitle } from './styled.elements';\n\nexport interface ResponseViewProps {\n  response: ResponseModel;\n}\n\nexport const ResponseView = observer(({ response }: ResponseViewProps): React.ReactElement => {\n  const { extensions, headers, type, summary, description, code, expanded, content } = response;\n\n  const mimes = React.useMemo<MediaTypeModel[]>(\n    () =>\n      content === undefined ? [] : content.mediaTypes.filter(mime => mime.schema !== undefined),\n    [content],\n  );\n\n  const empty = React.useMemo<boolean>(\n    () =>\n      (!extensions || Object.keys(extensions).length === 0) &&\n      headers.length === 0 &&\n      mimes.length === 0 &&\n      !description,\n    [extensions, headers, mimes, description],\n  );\n\n  return (\n    <div>\n      <StyledResponseTitle\n        onClick={() => response.toggle()}\n        type={type}\n        empty={empty}\n        title={summary || ''}\n        code={code}\n        opened={expanded}\n      />\n      {expanded && !empty && (\n        <ResponseDetailsWrap>\n          <ResponseDetails response={response} />\n        </ResponseDetailsWrap>\n      )}\n    </div>\n  );\n});\n","import * as React from 'react';\nimport { l } from '../../services/Labels';\nimport { ResponseModel } from '../../services/models';\nimport styled from '../../styled-components';\nimport { ResponseView } from './Response';\n\nconst ResponsesHeader = styled.h3`\n  font-size: 1.3em;\n  padding: 0.2em 0;\n  margin: 3em 0 1.1em;\n  color: ${({ theme }) => theme.colors.text.primary};\n  font-weight: normal;\n`;\n\nexport interface ResponseListProps {\n  responses: ResponseModel[];\n  isCallback?: boolean;\n}\n\nexport class ResponsesList extends React.PureComponent<ResponseListProps> {\n  render() {\n    const { responses, isCallback } = this.props;\n\n    if (!responses || responses.length === 0) {\n      return null;\n    }\n\n    return (\n      <div>\n        <ResponsesHeader>{isCallback ? l('callbackResponses') : l('responses')}</ResponsesHeader>\n        {responses.map(response => {\n          return <ResponseView key={response.code} response={response} />;\n        })}\n      </div>\n    );\n  }\n}\n","import { SecurityRequirementModel } from '../../services/models/SecurityRequirement';\nimport {\n  ScopeName,\n  SecurityRequirementAndWrap,\n  SecurityRequirementOrWrap,\n} from './styled.elements';\nimport * as React from 'react';\nimport { AUTH_TYPES } from '../SecuritySchemes/SecuritySchemes';\n\nexport interface SecurityRequirementProps {\n  security: SecurityRequirementModel;\n  showSecuritySchemeType?: boolean;\n  expanded: boolean;\n}\n\nexport function SecurityHeader(props: SecurityRequirementProps) {\n  const { security, showSecuritySchemeType, expanded } = props;\n\n  const grouping = security.schemes.length > 1;\n  if (security.schemes.length === 0)\n    return <SecurityRequirementOrWrap $expanded={expanded}>None</SecurityRequirementOrWrap>;\n  return (\n    <SecurityRequirementOrWrap $expanded={expanded}>\n      {grouping && '('}\n      {security.schemes.map(scheme => {\n        return (\n          <SecurityRequirementAndWrap key={scheme.id}>\n            {showSecuritySchemeType && `${AUTH_TYPES[scheme.type] || scheme.type}: `}\n            <i>{scheme.displayName}</i>\n            {expanded && scheme.scopes.length\n              ? [\n                  ' (',\n                  scheme.scopes.map<React.ReactNode>(scope => (\n                    <ScopeName key={scope}>{scope}</ScopeName>\n                  )),\n                  ') ',\n                ]\n              : null}\n          </SecurityRequirementAndWrap>\n        );\n      })}\n      {grouping && ') '}\n    </SecurityRequirementOrWrap>\n  );\n}\n","import * as React from 'react';\n\nexport const RequiredScopesRow = ({ scopes }: { scopes: string[] }): JSX.Element | null => {\n  if (!scopes.length) return null;\n\n  return (\n    <div>\n      <b>Required scopes: </b>\n      {scopes.map((scope, idx) => {\n        return (\n          <React.Fragment key={idx}>\n            <code>{scope}</code>{' '}\n          </React.Fragment>\n        );\n      })}\n    </div>\n  );\n};\n","import * as React from 'react';\nimport { useState } from 'react';\nimport { SecurityRequirementModel } from '../../services/models/SecurityRequirement';\nimport {\n  AuthHeader,\n  AuthHeaderColumn,\n  SecuritiesColumn,\n  SecurityDetailsStyle,\n  Wrap,\n} from './styled.elements';\nimport { useStore } from '../StoreBuilder';\nimport { SecurityHeader } from './SecurityHeader';\nimport { RequiredScopesRow } from './RequiredScopesRow';\nimport { AUTH_TYPES } from '../SecuritySchemes/SecuritySchemes';\nimport { Markdown } from '../Markdown/Markdown';\nimport { SecurityDetails } from './SecurityDetails';\nimport { ShelfIcon } from '../../common-elements';\n\nexport interface SecurityRequirementsProps {\n  securities: SecurityRequirementModel[];\n}\n\nexport function SecurityRequirements(props: SecurityRequirementsProps) {\n  const store = useStore();\n  const showSecuritySchemeType = store?.options.showSecuritySchemeType;\n  const [expanded, setExpanded] = useState(false);\n\n  const { securities } = props;\n\n  if (!securities?.length || store?.options.hideSecuritySection) {\n    return null;\n  }\n\n  const operationSecuritySchemes = store?.spec.securitySchemes.schemes.filter(({ id }) => {\n    return securities.find(security => security.schemes.find(scheme => scheme.id === id));\n  });\n\n  return (\n    <>\n      <Wrap $expanded={expanded}>\n        <AuthHeaderColumn onClick={() => setExpanded(!expanded)}>\n          <AuthHeader>Authorizations:</AuthHeader>\n          <ShelfIcon size={'1.3em'} direction={expanded ? 'down' : 'right'} />\n        </AuthHeaderColumn>\n        <SecuritiesColumn $expanded={expanded}>\n          {securities.map((security, idx) => (\n            <SecurityHeader\n              key={idx}\n              expanded={expanded}\n              showSecuritySchemeType={showSecuritySchemeType}\n              security={security}\n            />\n          ))}\n        </SecuritiesColumn>\n      </Wrap>\n      {expanded &&\n        !!operationSecuritySchemes?.length &&\n        operationSecuritySchemes.map((scheme, idx) => (\n          <SecurityDetailsStyle key={idx}>\n            <h5>\n              <LockIcon /> {AUTH_TYPES[scheme.type] || scheme.type}: {scheme.id}\n            </h5>\n            <Markdown source={scheme.description || ''} />\n            <SecurityDetails\n              key={scheme.id}\n              scheme={scheme}\n              RequiredScopes={\n                <RequiredScopesRow scopes={getRequiredScopes(scheme.id, securities)} />\n              }\n            />\n          </SecurityDetailsStyle>\n        ))}\n    </>\n  );\n}\n\nconst LockIcon = () => (\n  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" width=\"11\" height=\"11\">\n    <path\n      fill=\"currentColor\"\n      d=\"M18 10V6A6 6 0 0 0 6 6v4H3v14h18V10h-3zM8 6c0-2.206 1.794-4 4-4s4 1.794 4 4v4H8V6zm11 16H5V12h14v10z\"\n    />\n  </svg>\n);\n\nfunction getRequiredScopes(id: string, securities: SecurityRequirementModel[]): string[] {\n  const allScopes: string[] = [];\n  let securitiesLength = securities.length;\n\n  while (securitiesLength--) {\n    const security = securities[securitiesLength];\n    let schemesLength = security.schemes.length;\n    while (schemesLength--) {\n      const scheme = security.schemes[schemesLength];\n      if (scheme.id === id && Array.isArray(scheme.scopes)) {\n        allScopes.push(...scheme.scopes);\n      }\n    }\n  }\n\n  return Array.from(new Set(allScopes));\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OperationModel } from '../../services/models';\nimport styled from '../../styled-components';\nimport { Endpoint } from '../Endpoint/Endpoint';\nimport { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';\nimport { Extensions } from '../Fields/Extensions';\nimport { Markdown } from '../Markdown/Markdown';\nimport { Parameters } from '../Parameters/Parameters';\nimport { ResponsesList } from '../Responses/ResponsesList';\nimport { SecurityRequirements } from '../SecurityRequirement/SecurityRequirement';\nimport { CallbackDetailsWrap } from './styled.elements';\n\nexport interface CallbackDetailsProps {\n  operation: OperationModel;\n}\n\n@observer\nexport class CallbackDetails extends React.Component<CallbackDetailsProps> {\n  render() {\n    const { operation } = this.props;\n    const { description, externalDocs } = operation;\n    const hasDescription = !!(description || externalDocs);\n\n    return (\n      <CallbackDetailsWrap>\n        {hasDescription && (\n          <Description>\n            {description !== undefined && <Markdown source={description} />}\n            {externalDocs && <ExternalDocumentation externalDocs={externalDocs} />}\n          </Description>\n        )}\n        <Endpoint operation={this.props.operation} inverted={true} compact={true} />\n        <Extensions extensions={operation.extensions} />\n        <SecurityRequirements securities={operation.security} />\n        <Parameters parameters={operation.parameters} body={operation.requestBody} />\n        <ResponsesList responses={operation.responses} isCallback={operation.isCallback} />\n      </CallbackDetailsWrap>\n    );\n  }\n}\n\nconst Description = styled.div`\n  margin-bottom: ${({ theme }) => theme.spacing.unit * 3}px;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OperationModel } from '../../services/models';\nimport { StyledCallbackTitle } from './styled.elements';\nimport { CallbackDetails } from './CallbackDetails';\n\n@observer\nexport class CallbackOperation extends React.Component<{ callbackOperation: OperationModel }> {\n  toggle = () => {\n    this.props.callbackOperation.toggle();\n  };\n\n  render() {\n    const { name, expanded, httpVerb, deprecated } = this.props.callbackOperation;\n\n    return (\n      <>\n        <StyledCallbackTitle\n          onClick={this.toggle}\n          name={name}\n          opened={expanded}\n          httpVerb={httpVerb}\n          deprecated={deprecated}\n        />\n        {expanded && <CallbackDetails operation={this.props.callbackOperation} />}\n      </>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport { CallbackModel } from '../../services/models';\nimport styled from '../../styled-components';\nimport { CallbackOperation } from './CallbackOperation';\n\nexport interface CallbacksListProps {\n  callbacks: CallbackModel[];\n}\n\nexport class CallbacksList extends React.PureComponent<CallbacksListProps> {\n  render() {\n    const { callbacks } = this.props;\n\n    if (!callbacks || callbacks.length === 0) {\n      return null;\n    }\n\n    return (\n      <div>\n        <CallbacksHeader> Callbacks </CallbacksHeader>\n        {callbacks.map(callback => {\n          return callback.operations.map((operation, index) => {\n            return (\n              <CallbackOperation key={`${callback.name}_${index}`} callbackOperation={operation} />\n            );\n          });\n        })}\n      </div>\n    );\n  }\n}\n\nconst CallbacksHeader = styled.h3`\n  font-size: 1.3em;\n  padding: 0.2em 0;\n  margin: 3em 0 1.1em;\n  color: ${({ theme }) => theme.colors.text.primary};\n  font-weight: normal;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { DropdownProps, DropdownOption } from '../../common-elements/Dropdown';\nimport { DropdownLabel, DropdownWrapper } from '../PayloadSamples/styled.elements';\n\nexport interface GenericChildrenSwitcherProps<T> {\n  items?: T[];\n  options: DropdownOption[];\n  label?: string;\n  renderDropdown: (props: DropdownProps) => JSX.Element;\n  children: (activeItem: T) => JSX.Element;\n}\n\nexport interface GenericChildrenSwitcherState {\n  activeItemIdx: number;\n}\n/**\n * TODO: Refactor this component:\n * Implement rendering dropdown/label directly in this component\n * Accept as a parameter mapper-function for building dropdown option labels\n */\n@observer\nexport class GenericChildrenSwitcher<T> extends React.Component<\n  GenericChildrenSwitcherProps<T>,\n  GenericChildrenSwitcherState\n> {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activeItemIdx: 0,\n    };\n  }\n\n  switchItem = ({ idx }: DropdownOption) => {\n    if (this.props.items && idx !== undefined) {\n      this.setState({\n        activeItemIdx: idx,\n      });\n    }\n  };\n\n  render() {\n    const { items } = this.props;\n\n    if (!items || !items.length) {\n      return null;\n    }\n\n    const Wrapper = ({ children }) =>\n      this.props.label ? (\n        <DropdownWrapper>\n          <DropdownLabel>{this.props.label}</DropdownLabel>\n          {children}\n        </DropdownWrapper>\n      ) : (\n        children\n      );\n\n    return (\n      <>\n        <Wrapper>\n          {this.props.renderDropdown({\n            value: this.props.options[this.state.activeItemIdx].value,\n            options: this.props.options,\n            onChange: this.switchItem,\n            ariaLabel: this.props.label || 'Callback',\n          })}\n        </Wrapper>\n\n        {this.props.children(items[this.state.activeItemIdx])}\n      </>\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { MediaTypeSamples } from './MediaTypeSamples';\n\nimport { MediaContentModel } from '../../services/models';\nimport { DropdownOrLabel } from '../DropdownOrLabel/DropdownOrLabel';\nimport { MediaTypesSwitch } from '../MediaTypeSwitch/MediaTypesSwitch';\nimport { InvertedSimpleDropdown, MimeLabel } from './styled.elements';\n\nexport interface PayloadSamplesProps {\n  content: MediaContentModel;\n}\n\n@observer\nexport class PayloadSamples extends React.Component<PayloadSamplesProps> {\n  render() {\n    const mimeContent = this.props.content;\n    if (mimeContent === undefined) {\n      return null;\n    }\n\n    return (\n      <MediaTypesSwitch content={mimeContent} renderDropdown={this.renderDropdown} withLabel={true}>\n        {mediaType => (\n          <MediaTypeSamples\n            key=\"samples\"\n            mediaType={mediaType}\n            renderDropdown={this.renderDropdown}\n          />\n        )}\n      </MediaTypesSwitch>\n    );\n  }\n\n  private renderDropdown = props => {\n    return (\n      <DropdownOrLabel\n        Label={MimeLabel}\n        Dropdown={InvertedSimpleDropdown}\n        {...props}\n        variant=\"dark\"\n      />\n    );\n  };\n}\n","import * as React from 'react';\n\nimport styled from '../../styled-components';\nimport { DropdownProps } from '../../common-elements';\nimport { PayloadSamples } from '../PayloadSamples/PayloadSamples';\nimport { OperationModel } from '../../services/models';\nimport { XPayloadSample } from '../../services/models/Operation';\nimport { isPayloadSample } from '../../services';\n\nexport interface PayloadSampleProps {\n  callback: OperationModel;\n  renderDropdown: (props: DropdownProps) => JSX.Element;\n}\n\nexport class CallbackPayloadSample extends React.Component<PayloadSampleProps> {\n  render() {\n    const payloadSample = this.props.callback.codeSamples.find(sample =>\n      isPayloadSample(sample),\n    ) as XPayloadSample | undefined;\n\n    if (!payloadSample) {\n      return null;\n    }\n\n    return (\n      <PayloadSampleWrapper>\n        <PayloadSamples content={payloadSample.requestBodyContent} />\n      </PayloadSampleWrapper>\n    );\n  }\n}\n\nexport const PayloadSampleWrapper = styled.div`\n  margin-top: 15px;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport styled from '../../styled-components';\nimport { RightPanelHeader } from '../../common-elements';\nimport { RedocNormalizedOptions } from '../../services';\nimport { CallbackModel } from '../../services/models';\nimport { OptionsContext } from '../OptionsProvider';\nimport { GenericChildrenSwitcher } from '../GenericChildrenSwitcher/GenericChildrenSwitcher';\nimport { DropdownOrLabel } from '../DropdownOrLabel/DropdownOrLabel';\nimport { InvertedSimpleDropdown, MimeLabel } from '../PayloadSamples/styled.elements';\nimport { CallbackPayloadSample } from './CallbackReqSamples';\n\nexport interface CallbackSamplesProps {\n  callbacks: CallbackModel[];\n}\n\n@observer\nexport class CallbackSamples extends React.Component<CallbackSamplesProps> {\n  static contextType = OptionsContext;\n  context: RedocNormalizedOptions;\n\n  private renderDropdown = props => {\n    return (\n      <DropdownOrLabel\n        Label={MimeLabel}\n        Dropdown={InvertedSimpleDropdown}\n        {...props}\n        variant=\"dark\"\n      />\n    );\n  };\n\n  render() {\n    const { callbacks } = this.props;\n\n    if (!callbacks || callbacks.length === 0) {\n      return null;\n    }\n\n    const operations = callbacks\n      .map(callback => callback.operations.map(operation => operation))\n      .reduce((a, b) => a.concat(b), []);\n\n    const hasSamples = operations.some(operation => operation.codeSamples.length > 0);\n\n    if (!hasSamples) {\n      return null;\n    }\n\n    const dropdownOptions = operations.map((callback, idx) => {\n      return {\n        value: `${callback.httpVerb.toUpperCase()}: ${callback.name}`,\n        idx,\n      };\n    });\n\n    return (\n      <div>\n        <RightPanelHeader> Callback payload samples </RightPanelHeader>\n\n        <SamplesWrapper>\n          <GenericChildrenSwitcher\n            items={operations}\n            renderDropdown={this.renderDropdown}\n            label={'Callback'}\n            options={dropdownOptions}\n          >\n            {callback => (\n              <CallbackPayloadSample\n                key=\"callbackPayloadSample\"\n                callback={callback}\n                renderDropdown={this.renderDropdown}\n              />\n            )}\n          </GenericChildrenSwitcher>\n        </SamplesWrapper>\n      </div>\n    );\n  }\n}\n\nexport const SamplesWrapper = styled.div`\n  background: ${({ theme }) => theme.codeBlock.backgroundColor};\n  padding: ${props => props.theme.spacing.unit * 4}px;\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\nimport { isPayloadSample, OperationModel, RedocNormalizedOptions } from '../../services';\nimport { PayloadSamples } from '../PayloadSamples/PayloadSamples';\nimport { SourceCodeWithCopy } from '../SourceCode/SourceCode';\n\nimport { RightPanelHeader, Tab, TabList, TabPanel, Tabs } from '../../common-elements';\nimport { OptionsContext } from '../OptionsProvider';\nimport { l } from '../../services/Labels';\n\nexport interface RequestSamplesProps {\n  operation: OperationModel;\n}\n\n@observer\nexport class RequestSamples extends React.Component<RequestSamplesProps> {\n  static contextType = OptionsContext;\n  context: RedocNormalizedOptions;\n  operation: OperationModel;\n\n  render() {\n    const { operation } = this.props;\n    const samples = operation.codeSamples;\n\n    const hasSamples = samples.length > 0;\n    const hideTabList = samples.length === 1 ? this.context.hideSingleRequestSampleTab : false;\n    return (\n      (hasSamples && (\n        <div>\n          <RightPanelHeader> {l('requestSamples')} </RightPanelHeader>\n\n          <Tabs defaultIndex={0}>\n            <TabList hidden={hideTabList}>\n              {samples.map(sample => (\n                <Tab key={sample.lang + '_' + (sample.label || '')}>\n                  {sample.label !== undefined ? sample.label : sample.lang}\n                </Tab>\n              ))}\n            </TabList>\n            {samples.map(sample => (\n              <TabPanel key={sample.lang + '_' + (sample.label || '')}>\n                {isPayloadSample(sample) ? (\n                  <div>\n                    <PayloadSamples content={sample.requestBodyContent} />\n                  </div>\n                ) : (\n                  <SourceCodeWithCopy lang={sample.lang} source={sample.source} />\n                )}\n              </TabPanel>\n            ))}\n          </Tabs>\n        </div>\n      )) ||\n      null\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OperationModel } from '../../services/models';\n\nimport { RightPanelHeader, Tab, TabList, TabPanel, Tabs } from '../../common-elements';\nimport { PayloadSamples } from '../PayloadSamples/PayloadSamples';\nimport { l } from '../../services/Labels';\n\nexport interface ResponseSamplesProps {\n  operation: OperationModel;\n}\n\n@observer\nexport class ResponseSamples extends React.Component<ResponseSamplesProps> {\n  operation: OperationModel;\n\n  render() {\n    const { operation } = this.props;\n    const responses = operation.responses.filter(response => {\n      return response.content && response.content.hasSample;\n    });\n\n    return (\n      (responses.length > 0 && (\n        <div>\n          <RightPanelHeader> {l('responseSamples')} </RightPanelHeader>\n\n          <Tabs defaultIndex={0}>\n            <TabList>\n              {responses.map(response => (\n                <Tab className={'tab-' + response.type} key={response.code}>\n                  {response.code}\n                </Tab>\n              ))}\n            </TabList>\n            {responses.map(response => (\n              <TabPanel key={response.code}>\n                <div>\n                  <PayloadSamples content={response.content!} />\n                </div>\n              </TabPanel>\n            ))}\n          </Tabs>\n        </div>\n      )) ||\n      null\n    );\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { Badge, DarkRightPanel, H2, MiddlePanel, Row } from '../../common-elements';\nimport { ShareLink } from '../../common-elements/linkify';\nimport { OperationModel } from '../../services/models';\nimport styled from '../../styled-components';\nimport { CallbacksList } from '../Callbacks';\nimport { CallbackSamples } from '../CallbackSamples/CallbackSamples';\nimport { Endpoint } from '../Endpoint/Endpoint';\nimport { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';\nimport { Extensions } from '../Fields/Extensions';\nimport { Markdown } from '../Markdown/Markdown';\nimport { OptionsContext } from '../OptionsProvider';\nimport { Parameters } from '../Parameters/Parameters';\nimport { RequestSamples } from '../RequestSamples/RequestSamples';\nimport { ResponsesList } from '../Responses/ResponsesList';\nimport { ResponseSamples } from '../ResponseSamples/ResponseSamples';\nimport { SecurityRequirements } from '../SecurityRequirement/SecurityRequirement';\nimport { SECTION_ATTR } from '../../services';\n\nconst Description = styled.div`\n  margin-bottom: ${({ theme }) => theme.spacing.unit * 6}px;\n`;\n\nexport interface OperationProps {\n  operation: OperationModel;\n}\n\nexport const Operation = observer(({ operation }: OperationProps): JSX.Element => {\n  const {\n    name: summary,\n    description,\n    deprecated,\n    externalDocs,\n    isWebhook,\n    httpVerb,\n    badges,\n  } = operation;\n  const hasDescription = !!(description || externalDocs);\n  const { showWebhookVerb } = React.useContext(OptionsContext);\n  const badgesBefore = badges.filter(({ position }) => position === 'before');\n  const badgesAfter = badges.filter(({ position }) => position === 'after');\n\n  return (\n    <OptionsContext.Consumer>\n      {options => (\n        <Row {...{ [SECTION_ATTR]: operation.operationHash }} id={operation.operationHash}>\n          <MiddlePanel>\n            <H2>\n              <ShareLink to={operation.id} />\n              {badgesBefore.map(({ name, color }) => (\n                <Badge type=\"primary\" key={name} color={color}>\n                  {name}\n                </Badge>\n              ))}\n              {summary} {deprecated && <Badge type=\"warning\"> Deprecated </Badge>}\n              {isWebhook && (\n                <Badge type=\"primary\">\n                  {' '}\n                  Webhook {showWebhookVerb && httpVerb && '| ' + httpVerb.toUpperCase()}\n                </Badge>\n              )}\n              {badgesAfter.map(({ name, color }) => (\n                <Badge type=\"primary\" key={name} color={color}>\n                  {name}\n                </Badge>\n              ))}\n            </H2>\n            {options.pathInMiddlePanel && !isWebhook && (\n              <Endpoint operation={operation} inverted={true} />\n            )}\n            {hasDescription && (\n              <Description>\n                {description !== undefined && <Markdown source={description} />}\n                {externalDocs && <ExternalDocumentation externalDocs={externalDocs} />}\n              </Description>\n            )}\n            <Extensions extensions={operation.extensions} />\n            <SecurityRequirements securities={operation.security} />\n            <Parameters parameters={operation.parameters} body={operation.requestBody} />\n            <ResponsesList responses={operation.responses} />\n            <CallbacksList callbacks={operation.callbacks} />\n          </MiddlePanel>\n          <DarkRightPanel>\n            {!options.pathInMiddlePanel && !isWebhook && <Endpoint operation={operation} />}\n            <RequestSamples operation={operation} />\n            <ResponseSamples operation={operation} />\n            <CallbackSamples callbacks={operation.callbacks} />\n          </DarkRightPanel>\n        </Row>\n      )}\n    </OptionsContext.Consumer>\n  );\n});\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ExternalDocumentation } from '../ExternalDocumentation/ExternalDocumentation';\nimport { AdvancedMarkdown } from '../Markdown/AdvancedMarkdown';\nimport { H2, H3, MiddlePanel, Row, Section, ShareLink } from '../../common-elements';\nimport type { ContentItemModel } from '../../services';\nimport type { GroupModel, OperationModel } from '../../services/models';\nimport { Operation } from '../Operation/Operation';\n\n@observer\nexport class ContentItems extends React.Component<{\n  items: ContentItemModel[];\n}> {\n  render() {\n    const items = this.props.items;\n    if (items.length === 0) {\n      return null;\n    }\n    return items.map(item => {\n      return <ContentItem key={item.id} item={item} />;\n    });\n  }\n}\n\nexport interface ContentItemProps {\n  item: ContentItemModel;\n}\n\n@observer\nexport class ContentItem extends React.Component<ContentItemProps> {\n  render() {\n    const item = this.props.item;\n    let content;\n    const { type } = item;\n    switch (type) {\n      case 'group':\n        content = null;\n        break;\n      case 'tag':\n      case 'section':\n        content = <SectionItem {...this.props} />;\n        break;\n      case 'operation':\n        content = <OperationItem item={item as any} />;\n        break;\n      default:\n        content = <SectionItem {...this.props} />;\n    }\n\n    return (\n      <>\n        {content && (\n          <Section id={item.id} $underlined={item.type === 'operation'}>\n            {content}\n          </Section>\n        )}\n        {item.items && <ContentItems items={item.items} />}\n      </>\n    );\n  }\n}\n\nconst middlePanelWrap = component => <MiddlePanel $compact={true}>{component}</MiddlePanel>;\n\n@observer\nexport class SectionItem extends React.Component<ContentItemProps> {\n  render() {\n    const { name, description, externalDocs, level } = this.props.item as GroupModel;\n\n    const Header = level === 2 ? H3 : H2;\n    return (\n      <>\n        <Row>\n          <MiddlePanel $compact={false}>\n            <Header>\n              <ShareLink to={this.props.item.id} />\n              {name}\n            </Header>\n          </MiddlePanel>\n        </Row>\n        <AdvancedMarkdown\n          parentId={this.props.item.id}\n          source={description || ''}\n          htmlWrap={middlePanelWrap}\n        />\n        {externalDocs && (\n          <Row>\n            <MiddlePanel>\n              <ExternalDocumentation externalDocs={externalDocs} />\n            </MiddlePanel>\n          </Row>\n        )}\n      </>\n    );\n  }\n}\n\n@observer\nexport class OperationItem extends React.Component<{\n  item: OperationModel;\n}> {\n  render() {\n    return <Operation operation={this.props.item} />;\n  }\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ShelfIcon } from '../../common-elements/shelfs';\nimport type { IMenuItem } from '../../services';\nimport { OperationModel } from '../../services';\nimport { l } from '../../services/Labels';\nimport { scrollIntoViewIfNeeded } from '../../utils';\nimport { shortenHTTPVerb } from '../../utils/openapi';\nimport { OptionsContext } from '../OptionsProvider';\nimport { MenuItems } from './MenuItems';\nimport { MenuItemLabel, MenuItemLi, MenuItemTitle, OperationBadge } from './styled.elements';\n\nexport interface MenuItemProps {\n  item: IMenuItem;\n  onActivate?: (item: IMenuItem) => void;\n  withoutChildren?: boolean;\n  children?: React.ReactChild;\n}\n\n@observer\nexport class MenuItem extends React.Component<MenuItemProps> {\n  ref = React.createRef<HTMLLabelElement>();\n\n  activate = (evt: React.MouseEvent<HTMLElement>) => {\n    this.props.onActivate!(this.props.item);\n    evt.stopPropagation();\n  };\n\n  componentDidMount() {\n    this.scrollIntoViewIfActive();\n  }\n\n  componentDidUpdate() {\n    this.scrollIntoViewIfActive();\n  }\n\n  scrollIntoViewIfActive() {\n    if (this.props.item.active && this.ref.current) {\n      scrollIntoViewIfNeeded(this.ref.current);\n    }\n  }\n\n  render() {\n    const { item, withoutChildren } = this.props;\n    return (\n      <MenuItemLi\n        tabIndex={0}\n        onClick={this.activate}\n        onKeyDown={evt => {\n          // Space or Enter key will activate the menu item\n          if (evt.key === 'Enter' || evt.key === ' ') {\n            this.props.onActivate!(this.props.item);\n            evt.stopPropagation();\n          }\n        }}\n        depth={item.depth}\n        data-item-id={item.id}\n        role=\"menuitem\"\n        aria-label={item.sidebarLabel}\n        aria-expanded={item.expanded}\n      >\n        {item.type === 'operation' ? (\n          <OperationMenuItemContent {...this.props} item={item as OperationModel} />\n        ) : (\n          <MenuItemLabel $depth={item.depth} $active={item.active} $type={item.type} ref={this.ref}>\n            {item.type === 'schema' && <OperationBadge type=\"schema\">schema</OperationBadge>}\n            <MenuItemTitle width=\"calc(100% - 38px)\" title={item.sidebarLabel}>\n              {item.sidebarLabel}\n              {this.props.children}\n            </MenuItemTitle>\n            {(item.depth > 0 && item.items.length > 0 && (\n              <ShelfIcon float={'right'} direction={item.expanded ? 'down' : 'right'} />\n            )) ||\n              null}\n          </MenuItemLabel>\n        )}\n        {!withoutChildren && item.items && item.items.length > 0 && (\n          <MenuItems\n            expanded={item.expanded}\n            items={item.items}\n            onActivate={this.props.onActivate}\n          />\n        )}\n      </MenuItemLi>\n    );\n  }\n}\n\nexport interface OperationMenuItemContentProps {\n  item: OperationModel;\n  children?: React.ReactChild;\n}\n\nexport const OperationMenuItemContent = observer((props: OperationMenuItemContentProps) => {\n  const { item } = props;\n  const ref = React.createRef<HTMLLabelElement>();\n  const { showWebhookVerb } = React.useContext(OptionsContext);\n\n  React.useEffect(() => {\n    if (props.item.active && ref.current) {\n      scrollIntoViewIfNeeded(ref.current);\n    }\n  }, [props.item.active, ref]);\n\n  return (\n    <MenuItemLabel\n      $depth={item.depth}\n      $active={item.active}\n      $deprecated={item.deprecated}\n      ref={ref}\n    >\n      {item.badges &&\n        item.badges?.map(({ name, color }) => (\n          <OperationBadge type=\"badge\" color={color} key={name}>\n            {name}\n          </OperationBadge>\n        ))}\n      {item.isWebhook ? (\n        <OperationBadge type=\"hook\">\n          {showWebhookVerb ? item.httpVerb : l('webhook')}\n        </OperationBadge>\n      ) : (\n        <OperationBadge type={item.httpVerb}>{shortenHTTPVerb(item.httpVerb)}</OperationBadge>\n      )}\n      <MenuItemTitle tabIndex={0} width=\"calc(100% - 38px)\">\n        {item.sidebarLabel}\n        {props.children}\n      </MenuItemTitle>\n    </MenuItemLabel>\n  );\n});\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport type { IMenuItem } from '../../services';\n\nimport { MenuItem } from './MenuItem';\nimport { MenuItemUl } from './styled.elements';\n\nexport interface MenuItemsProps {\n  items: IMenuItem[];\n  expanded?: boolean;\n  onActivate?: (item: IMenuItem) => void;\n  style?: React.CSSProperties;\n  root?: boolean;\n\n  className?: string;\n}\n\n@observer\nexport class MenuItems extends React.Component<MenuItemsProps> {\n  render() {\n    const { items, root, className } = this.props;\n    const expanded = this.props.expanded == null ? true : this.props.expanded;\n    return (\n      <MenuItemUl\n        className={className}\n        style={this.props.style}\n        $expanded={expanded}\n        {...(root ? { role: 'menu' } : {})}\n      >\n        {items.map((item, idx) => (\n          <MenuItem key={idx} item={item} onActivate={this.props.onActivate} />\n        ))}\n      </MenuItemUl>\n    );\n  }\n}\n","import { useEffect, useState } from 'react';\nimport * as React from 'react';\n\nexport default function RedoclyLogo(): JSX.Element | null {\n  const [isDisplay, setDisplay] = useState(false);\n\n  useEffect(() => {\n    setDisplay(true);\n  }, []);\n\n  return isDisplay ? (\n    <img\n      alt={'redocly logo'}\n      onError={() => setDisplay(false)}\n      src={'https://cdn.redoc.ly/redoc/logo-mini.svg'}\n    />\n  ) : null;\n}\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { MenuStore } from '../../services';\nimport type { IMenuItem } from '../../services';\nimport { OptionsContext } from '../OptionsProvider';\nimport { MenuItems } from './MenuItems';\n\nimport { PerfectScrollbarWrap } from '../../common-elements/perfect-scrollbar';\nimport { RedocAttribution } from './styled.elements';\nimport RedoclyLogo from './Logo';\n\n@observer\nexport class SideMenu extends React.Component<{ menu: MenuStore; className?: string }> {\n  static contextType = OptionsContext;\n  declare context: React.ContextType<typeof OptionsContext>;\n  private _updateScroll?: () => void;\n\n  render() {\n    const store = this.props.menu;\n    return (\n      <PerfectScrollbarWrap\n        updateFn={this.saveScrollUpdate}\n        className={this.props.className}\n        options={{\n          wheelPropagation: false,\n        }}\n      >\n        <MenuItems items={store.items} onActivate={this.activate} root={true} />\n        <RedocAttribution>\n          <a target=\"_blank\" rel=\"noopener noreferrer\" href=\"https://redocly.com/redoc/\">\n            <RedoclyLogo />\n            API docs by Redocly\n          </a>\n        </RedocAttribution>\n      </PerfectScrollbarWrap>\n    );\n  }\n\n  activate = (item: IMenuItem) => {\n    if (item && item.active && this.context.menuToggle) {\n      return item.expanded ? item.collapse() : item.expand();\n    }\n    this.props.menu.activateAndScroll(item, true);\n    setTimeout(() => {\n      if (this._updateScroll) {\n        this._updateScroll();\n      }\n    });\n  };\n\n  private saveScrollUpdate = upd => {\n    this._updateScroll = upd;\n  };\n}\n","import * as React from 'react';\n\nimport styled from '../../styled-components';\n\nexport const AnimatedChevronButton = ({ open }: { open: boolean }) => {\n  const iconOffset = open ? 8 : -4;\n\n  return (\n    <ChevronContainer>\n      <ChevronSvg\n        size={15}\n        style={{\n          transform: `translate(2px, ${iconOffset}px) rotate(180deg)`,\n          transition: 'transform 0.2s ease',\n        }}\n      />\n      <ChevronSvg\n        size={15}\n        style={{\n          transform: `translate(2px, ${0 - iconOffset}px)`,\n          transition: 'transform 0.2s ease',\n        }}\n      />\n    </ChevronContainer>\n  );\n};\n\n// adapted from reactjs.org\nconst ChevronSvg = ({ size = 10, className = '', style }) => (\n  <svg\n    className={className}\n    style={style || {}}\n    viewBox=\"0 0 926.23699 573.74994\"\n    version=\"1.1\"\n    x=\"0px\"\n    y=\"0px\"\n    width={size}\n    height={size}\n  >\n    <g transform=\"translate(904.92214,-879.1482)\">\n      <path\n        d={`\n          m -673.67664,1221.6502 -231.2455,-231.24803 55.6165,\n          -55.627 c 30.5891,-30.59485 56.1806,-55.627 56.8701,-55.627 0.6894,\n          0 79.8637,78.60862 175.9427,174.68583 l 174.6892,174.6858 174.6892,\n          -174.6858 c 96.079,-96.07721 175.253196,-174.68583 175.942696,\n          -174.68583 0.6895,0 26.281,25.03215 56.8701,\n          55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864\n          -231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688,\n          -104.0616 -231.873,-231.248 z\n        `}\n        fill=\"currentColor\"\n      />\n    </g>\n  </svg>\n);\n\nconst ChevronContainer = styled.div`\n  user-select: none;\n  width: 20px;\n  height: 20px;\n  align-self: center;\n  display: flex;\n  flex-direction: column;\n  color: ${props => props.theme.colors.primary.main};\n`;\n","import { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { MenuStore } from '../../services/MenuStore';\nimport { RedocNormalizedOptions, RedocRawOptions } from '../../services/RedocNormalizedOptions';\nimport styled, { media } from '../../styled-components';\nimport { IS_BROWSER } from '../../utils/index';\nimport { OptionsContext } from '../OptionsProvider';\nimport { AnimatedChevronButton } from './ChevronSvg';\n\nlet Stickyfill;\nif (IS_BROWSER) {\n  Stickyfill = require('stickyfill');\n}\n\nexport interface StickySidebarProps {\n  className?: string;\n  scrollYOffset?: RedocRawOptions['scrollYOffset']; // passed directly or via context\n  menu: MenuStore;\n}\n\nexport interface StickySidebarState {\n  offsetTop?: string;\n}\n\nconst stickyfill = Stickyfill && Stickyfill();\n\nconst StyledStickySidebar = styled.div<{ $open?: boolean }>`\n  width: ${props => props.theme.sidebar.width};\n  background-color: ${props => props.theme.sidebar.backgroundColor};\n  overflow: hidden;\n  display: flex;\n  flex-direction: column;\n\n  backface-visibility: hidden;\n  /* contain: strict; TODO: breaks layout since Chrome 80*/\n\n  height: 100vh;\n  position: sticky;\n  position: -webkit-sticky;\n  top: 0;\n\n  ${media.lessThan('small')`\n    position: fixed;\n    z-index: 20;\n    width: 100%;\n    background: ${({ theme }) => theme.sidebar.backgroundColor};\n    display: ${props => (props.$open ? 'flex' : 'none')};\n  `};\n\n  @media print {\n    display: none;\n  }\n`;\n\nconst FloatingButton = styled.div`\n  outline: none;\n  user-select: none;\n  background-color: ${({ theme }) => theme.fab.backgroundColor};\n  color: ${props => props.theme.colors.primary.main};\n  display: none;\n  cursor: pointer;\n  position: fixed;\n  right: 20px;\n  z-index: 100;\n  border-radius: 50%;\n  box-shadow: 0 0 20px rgba(0, 0, 0, 0.3);\n  ${media.lessThan('small')`\n    display: flex;\n  `};\n\n  bottom: 44px;\n\n  width: 60px;\n  height: 60px;\n  padding: 0 20px;\n  svg {\n    color: ${({ theme }) => theme.fab.color};\n  }\n\n  @media print {\n    display: none;\n  }\n`;\n\n@observer\nexport class StickyResponsiveSidebar extends React.Component<\n  React.PropsWithChildren<StickySidebarProps>,\n  StickySidebarState\n> {\n  static contextType = OptionsContext;\n  context!: React.ContextType<typeof OptionsContext>;\n  state: StickySidebarState = { offsetTop: '0px' };\n\n  stickyElement: Element;\n\n  componentDidMount() {\n    if (stickyfill) {\n      stickyfill.add(this.stickyElement);\n    }\n\n    // rerender when hydrating from SSR\n    // see https://github.com/facebook/react/issues/8017#issuecomment-256351955\n    this.setState({\n      offsetTop: this.getScrollYOffset(this.context),\n    });\n  }\n\n  componentWillUnmount() {\n    if (stickyfill) {\n      stickyfill.remove(this.stickyElement);\n    }\n  }\n\n  getScrollYOffset(options: RedocNormalizedOptions) {\n    let top;\n    if (this.props.scrollYOffset !== undefined) {\n      top = RedocNormalizedOptions.normalizeScrollYOffset(this.props.scrollYOffset)();\n    } else {\n      top = options.scrollYOffset();\n    }\n    return top + 'px';\n  }\n\n  render() {\n    const open = this.props.menu.sideBarOpened;\n\n    const top = this.state.offsetTop;\n\n    return (\n      <>\n        <StyledStickySidebar\n          $open={open}\n          className={this.props.className}\n          style={{\n            top,\n            height: `calc(100vh - ${top})`,\n          }}\n          // tslint:disable-next-line\n          ref={el => {\n            this.stickyElement = el as any;\n          }}\n        >\n          {this.props.children}\n        </StyledStickySidebar>\n        {!this.context.hideFab && (\n          <FloatingButton onClick={this.toggleNavMenu}>\n            <AnimatedChevronButton open={open} />\n          </FloatingButton>\n        )}\n      </>\n    );\n  }\n\n  private toggleNavMenu = () => {\n    this.props.menu.toggleSidebar();\n  };\n}\n","import styled, { media } from '../../styled-components';\n\nexport const RedocWrap = styled.div`\n  ${({ theme }) => `\n  font-family: ${theme.typography.fontFamily};\n  font-size: ${theme.typography.fontSize};\n  font-weight: ${theme.typography.fontWeightRegular};\n  line-height: ${theme.typography.lineHeight};\n  color: ${theme.colors.text.primary};\n  display: flex;\n  position: relative;\n  text-align: left;\n\n  -webkit-font-smoothing: ${theme.typography.smoothing};\n  font-smoothing: ${theme.typography.smoothing};\n  ${(theme.typography.optimizeSpeed && 'text-rendering: optimizeSpeed !important') || ''};\n\n  tap-highlight-color: rgba(0, 0, 0, 0);\n  text-size-adjust: 100%;\n\n  * {\n    box-sizing: border-box;\n    -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  }\n`};\n`;\n\nexport const ApiContentWrap = styled.div`\n  z-index: 1;\n  position: relative;\n  overflow: hidden;\n  width: calc(100% - ${props => props.theme.sidebar.width});\n  ${media.lessThan('small', true)`\n    width: 100%;\n  `};\n\n  contain: layout;\n`;\n\nexport const BackgroundStub = styled.div`\n  background: ${({ theme }) => theme.rightPanel.backgroundColor};\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  width: ${({ theme }) => {\n    if (theme.rightPanel.width.endsWith('%')) {\n      const percents = parseInt(theme.rightPanel.width, 10);\n      return `calc((100% - ${theme.sidebar.width}) * ${percents / 100})`;\n    } else {\n      return theme.rightPanel.width;\n    }\n  }};\n  ${media.lessThan('medium', true)`\n    display: none;\n  `};\n`;\n","import * as React from 'react';\n\nimport { darken, getLuminance, lighten } from 'polished';\nimport styled from '../../styled-components';\nimport { MenuItemLabel } from '../SideMenu/styled.elements';\n\nexport const SearchWrap = styled.div`\n  padding: 5px 0;\n`;\n\nexport const SearchInput = styled.input.attrs(() => ({\n  className: 'search-input',\n}))`\n  width: calc(100% - ${props => props.theme.spacing.unit * 8}px);\n  box-sizing: border-box;\n  margin: 0 ${props => props.theme.spacing.unit * 4}px;\n  padding: 5px ${props => props.theme.spacing.unit * 2}px 5px\n    ${props => props.theme.spacing.unit * 4}px;\n  border: 0;\n  border-bottom: 1px solid\n    ${({ theme }) =>\n      (getLuminance(theme.sidebar.backgroundColor) > 0.5 ? darken : lighten)(\n        0.1,\n        theme.sidebar.backgroundColor,\n      )};\n  font-family: ${({ theme }) => theme.typography.fontFamily};\n  font-weight: bold;\n  font-size: 13px;\n  color: ${props => props.theme.sidebar.textColor};\n  background-color: transparent;\n  outline: none;\n`;\n\nexport const SearchIcon = styled((props: { className?: string }) => (\n  <svg\n    className={props.className}\n    version=\"1.1\"\n    viewBox=\"0 0 1000 1000\"\n    x=\"0px\"\n    xmlns=\"http://www.w3.org/2000/svg\"\n    y=\"0px\"\n  >\n    <path d=\"M968.2,849.4L667.3,549c83.9-136.5,66.7-317.4-51.7-435.6C477.1-25,252.5-25,113.9,113.4c-138.5,138.3-138.5,362.6,0,501C219.2,730.1,413.2,743,547.6,666.5l301.9,301.4c43.6,43.6,76.9,14.9,104.2-12.4C981,928.3,1011.8,893,968.2,849.4z M524.5,522c-88.9,88.7-233,88.7-321.8,0c-88.9-88.7-88.9-232.6,0-321.3c88.9-88.7,233-88.7,321.8,0C613.4,289.4,613.4,433.3,524.5,522z\" />\n  </svg>\n)).attrs({\n  className: 'search-icon',\n})`\n  position: absolute;\n  left: ${props => props.theme.spacing.unit * 4}px;\n  height: 1.8em;\n  width: 0.9em;\n\n  path {\n    fill: ${props => props.theme.sidebar.textColor};\n  }\n`;\n\nexport const SearchResultsBox = styled.div`\n  padding: ${props => props.theme.spacing.unit}px 0;\n  background-color: ${({ theme }) => darken(0.05, theme.sidebar.backgroundColor)}};\n  color: ${props => props.theme.sidebar.textColor};\n  min-height: 150px;\n  max-height: 250px;\n  border-top: ${({ theme }) => darken(0.1, theme.sidebar.backgroundColor)}};\n  border-bottom: ${({ theme }) => darken(0.1, theme.sidebar.backgroundColor)}};\n  margin-top: 10px;\n  line-height: 1.4;\n  font-size: 0.9em;\n  \n  li {\n    background-color: inherit;\n  }\n\n  ${MenuItemLabel} {\n    padding-top: 6px;\n    padding-bottom: 6px;\n\n    &:hover,\n    &.active {\n      background-color: ${({ theme }) => darken(0.1, theme.sidebar.backgroundColor)};\n    }\n\n    > svg {\n      display: none;\n    }\n  }\n`;\n\nexport const ClearIcon = styled.i`\n  position: absolute;\n  display: inline-block;\n  width: ${props => props.theme.spacing.unit * 2}px;\n  text-align: center;\n  right: ${props => props.theme.spacing.unit * 4}px;\n  line-height: 2em;\n  vertical-align: middle;\n  margin-right: 2px;\n  cursor: pointer;\n  font-style: normal;\n  color: '#666';\n`;\n","import * as React from 'react';\n\nimport type { IMenuItem, SearchResult } from '../../services/types';\nimport type { SearchStore } from '../../services/SearchStore';\nimport type { MarkerService } from '../../services/MarkerService';\n\nimport { MenuItem } from '../SideMenu/MenuItem';\nimport { OptionsContext } from '../OptionsProvider';\nimport { bind, debounce } from 'decko';\nimport { PerfectScrollbarWrap } from '../../common-elements/perfect-scrollbar';\nimport {\n  ClearIcon,\n  SearchIcon,\n  SearchInput,\n  SearchResultsBox,\n  SearchWrap,\n} from './styled.elements';\nimport { l } from '../../services/Labels';\n\nexport interface SearchBoxProps {\n  search: SearchStore<string>;\n  marker: MarkerService;\n  getItemById: (id: string) => IMenuItem | undefined;\n  onActivate: (item: IMenuItem) => void;\n\n  className?: string;\n}\n\nexport interface SearchBoxState {\n  results: SearchResult[];\n  noResults: boolean;\n  term: string;\n  activeItemIdx: number;\n}\n\nexport class SearchBox extends React.PureComponent<SearchBoxProps, SearchBoxState> {\n  activeItemRef: MenuItem | null = null;\n\n  static contextType = OptionsContext;\n  declare context: React.ContextType<typeof OptionsContext>;\n\n  constructor(props) {\n    super(props);\n    this.state = {\n      results: [],\n      noResults: false,\n      term: '',\n      activeItemIdx: -1,\n    };\n  }\n\n  clearResults(term: string) {\n    this.setState({\n      results: [],\n      noResults: false,\n      term,\n    });\n    this.props.marker.unmark();\n  }\n\n  clear = () => {\n    this.setState({\n      results: [],\n      noResults: false,\n      term: '',\n      activeItemIdx: -1,\n    });\n    this.props.marker.unmark();\n  };\n\n  handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n    if (event.keyCode === 27) {\n      // ESQ\n      this.clear();\n    }\n    if (event.keyCode === 40) {\n      // Arrow down\n      this.setState({\n        activeItemIdx: Math.min(this.state.activeItemIdx + 1, this.state.results.length - 1),\n      });\n      event.preventDefault();\n    }\n    if (event.keyCode === 38) {\n      // Arrow up\n      this.setState({\n        activeItemIdx: Math.max(0, this.state.activeItemIdx - 1),\n      });\n      event.preventDefault();\n    }\n    if (event.keyCode === 13) {\n      // enter\n      const activeResult = this.state.results[this.state.activeItemIdx];\n      if (activeResult) {\n        const item = this.props.getItemById(activeResult.meta);\n        if (item) {\n          this.props.onActivate(item);\n        }\n      }\n    }\n  };\n\n  setResults(results: SearchResult[], term: string) {\n    this.setState({\n      results,\n      noResults: results.length === 0,\n    });\n    this.props.marker.mark(term);\n  }\n\n  @bind\n  @debounce(400)\n  searchCallback(searchTerm: string) {\n    this.props.search.search(searchTerm).then(res => {\n      this.setResults(res, searchTerm);\n    });\n  }\n\n  search = (event: React.ChangeEvent<HTMLInputElement>) => {\n    const { minCharacterLengthToInitSearch } = this.context;\n    const q = event.target.value;\n    if (q.length < minCharacterLengthToInitSearch) {\n      this.clearResults(q);\n      return;\n    }\n\n    this.setState(\n      {\n        term: q,\n      },\n      () => this.searchCallback(this.state.term),\n    );\n  };\n\n  render() {\n    const { activeItemIdx } = this.state;\n    const results = this.state.results\n      .filter(res => this.props.getItemById(res.meta))\n      .map(res => ({\n        item: this.props.getItemById(res.meta)!,\n        score: res.score,\n      }))\n      .sort((a, b) => b.score - a.score);\n\n    return (\n      <SearchWrap role=\"search\">\n        {this.state.term && <ClearIcon onClick={this.clear}>×</ClearIcon>}\n        <SearchIcon />\n        <SearchInput\n          value={this.state.term}\n          onKeyDown={this.handleKeyDown}\n          placeholder=\"Search...\"\n          aria-label=\"Search\"\n          type=\"text\"\n          onChange={this.search}\n        />\n        {results.length > 0 && (\n          <PerfectScrollbarWrap\n            options={{\n              wheelPropagation: false,\n            }}\n          >\n            <SearchResultsBox data-role=\"search:results\">\n              {results.map((res, idx) => (\n                <MenuItem\n                  item={Object.create(res.item, {\n                    active: {\n                      value: idx === activeItemIdx,\n                    },\n                  })}\n                  onActivate={this.props.onActivate}\n                  withoutChildren={true}\n                  key={res.item.id}\n                  data-role=\"search:result\"\n                />\n              ))}\n            </SearchResultsBox>\n          </PerfectScrollbarWrap>\n        )}\n        {this.state.term && this.state.noResults ? (\n          <SearchResultsBox data-role=\"search:results\">{l('noResultsFound')}</SearchResultsBox>\n        ) : null}\n      </SearchWrap>\n    );\n  }\n}\n","import * as PropTypes from 'prop-types';\nimport * as React from 'react';\n\nimport { ThemeProvider } from '../../styled-components';\nimport { OptionsProvider } from '../OptionsProvider';\n\nimport { AppStore } from '../../services';\nimport { ApiInfo } from '../ApiInfo/';\nimport { ApiLogo } from '../ApiLogo/ApiLogo';\nimport { ContentItems } from '../ContentItems/ContentItems';\nimport { SideMenu } from '../SideMenu/SideMenu';\nimport { StickyResponsiveSidebar } from '../StickySidebar/StickyResponsiveSidebar';\nimport { ApiContentWrap, BackgroundStub, RedocWrap } from './styled.elements';\n\nimport { SearchBox } from '../SearchBox/SearchBox';\nimport { StoreProvider } from '../StoreBuilder';\n\nexport interface RedocProps {\n  store: AppStore;\n}\n\nexport class Redoc extends React.Component<RedocProps> {\n  static propTypes = {\n    store: PropTypes.instanceOf(AppStore).isRequired,\n  };\n\n  componentDidMount() {\n    this.props.store.onDidMount();\n  }\n\n  componentWillUnmount() {\n    this.props.store.dispose();\n  }\n\n  render() {\n    const {\n      store: { spec, menu, options, search, marker },\n    } = this.props;\n    const store = this.props.store;\n    return (\n      <ThemeProvider theme={options.theme}>\n        <StoreProvider value={store}>\n          <OptionsProvider value={options}>\n            <RedocWrap className=\"redoc-wrap\">\n              <StickyResponsiveSidebar menu={menu} className=\"menu-content\">\n                <ApiLogo info={spec.info} />\n                {(!options.disableSearch && (\n                  <SearchBox\n                    search={search!}\n                    marker={marker}\n                    getItemById={menu.getItemById}\n                    onActivate={menu.activateAndScroll}\n                  />\n                )) ||\n                  null}\n                <SideMenu menu={menu} />\n              </StickyResponsiveSidebar>\n              <ApiContentWrap className=\"api-content\">\n                <ApiInfo store={store} />\n                <ContentItems items={menu.items as any} />\n              </ApiContentWrap>\n              <BackgroundStub />\n            </RedocWrap>\n          </OptionsProvider>\n        </StoreProvider>\n      </ThemeProvider>\n    );\n  }\n}\n","import * as React from 'react';\n\nimport {\n  argValueToBoolean,\n  RedocNormalizedOptions,\n  RedocRawOptions,\n} from '../services/RedocNormalizedOptions';\nimport { ErrorBoundary } from './ErrorBoundary';\nimport { Loading } from './Loading/Loading';\nimport { Redoc } from './Redoc/Redoc';\nimport { StoreBuilder } from './StoreBuilder';\n\nexport interface RedocStandaloneProps {\n  spec?: object;\n  specUrl?: string;\n  options?: RedocRawOptions;\n  onLoaded?: (e?: Error) => any;\n}\n\ndeclare let __webpack_nonce__: string;\n\nexport const RedocStandalone = function (props: RedocStandaloneProps) {\n  const { spec, specUrl, options = {}, onLoaded } = props;\n  const hideLoading = argValueToBoolean(options.hideLoading, false);\n\n  const normalizedOpts = new RedocNormalizedOptions(options);\n\n  if (normalizedOpts.nonce !== undefined) {\n    try {\n      // eslint-disable-next-line  @typescript-eslint/no-unused-vars\n      __webpack_nonce__ = normalizedOpts.nonce;\n    } catch {} // If we have exception, Webpack was not used to run this.\n  }\n\n  return (\n    <ErrorBoundary>\n      <StoreBuilder\n        spec={spec ? { ...spec } : undefined}\n        specUrl={specUrl}\n        options={options}\n        onLoaded={onLoaded}\n      >\n        {({ loading, store }) =>\n          !loading ? (\n            <Redoc store={store!} />\n          ) : hideLoading ? null : (\n            <Loading color={normalizedOpts.theme.colors.primary.main} />\n          )\n        }\n      </StoreBuilder>\n    </ErrorBoundary>\n  );\n};\n"]}