diff --git a/flavors/swagger-ui-react/index.jsx b/flavors/swagger-ui-react/index.jsx index 7c9b50d8..71ea3249 100644 --- a/flavors/swagger-ui-react/index.jsx +++ b/flavors/swagger-ui-react/index.jsx @@ -7,41 +7,35 @@ import React, { useEffect, useCallback, useState } from "react" import PropTypes from "prop-types" import SwaggerUIConstructor from "#swagger-ui" +const { config } = SwaggerUIConstructor + const SwaggerUI = ({ - spec = SwaggerUIConstructor.defaultOptions.spec, - url = SwaggerUIConstructor.defaultOptions.url, - layout = SwaggerUIConstructor.defaultOptions.layout, - requestInterceptor = SwaggerUIConstructor.defaultOptions.requestInterceptor, - responseInterceptor = SwaggerUIConstructor.defaultOptions.responseInterceptor, - supportedSubmitMethods = SwaggerUIConstructor.defaultOptions - .supportedSubmitMethods, - queryConfigEnabled = SwaggerUIConstructor.defaultOptions.queryConfigEnabled, - plugins = SwaggerUIConstructor.defaultOptions.plugins, - displayOperationId = SwaggerUIConstructor.defaultOptions.displayOperationId, - showMutatedRequest = SwaggerUIConstructor.defaultOptions.showMutatedRequest, - docExpansion = SwaggerUIConstructor.defaultOptions.docExpansion, - defaultModelExpandDepth = SwaggerUIConstructor.defaultOptions - .defaultModelExpandDepth, - defaultModelsExpandDepth = SwaggerUIConstructor.defaultOptions - .defaultModelsExpandDepth, - defaultModelRendering = SwaggerUIConstructor.defaultOptions - .defaultModelRendering, - presets = SwaggerUIConstructor.defaultOptions.presets, - deepLinking = SwaggerUIConstructor.defaultOptions.deepLinking, - showExtensions = SwaggerUIConstructor.defaultOptions.showExtensions, - showCommonExtensions = SwaggerUIConstructor.defaultOptions - .showCommonExtensions, - filter = SwaggerUIConstructor.defaultOptions.filter, - requestSnippetsEnabled = SwaggerUIConstructor.defaultOptions - .requestSnippetsEnabled, - requestSnippets = SwaggerUIConstructor.defaultOptions.requestSnippets, - tryItOutEnabled = SwaggerUIConstructor.defaultOptions.tryItOutEnabled, - displayRequestDuration = SwaggerUIConstructor.defaultOptions - .displayRequestDuration, - withCredentials = SwaggerUIConstructor.defaultOptions.withCredentials, - persistAuthorization = SwaggerUIConstructor.defaultOptions - .persistAuthorization, - oauth2RedirectUrl = SwaggerUIConstructor.defaultOptions.oauth2RedirectUrl, + spec = config.defaults.spec, + url = config.defaults.url, + layout = config.defaults.layout, + requestInterceptor = config.defaults.requestInterceptor, + responseInterceptor = config.defaults.responseInterceptor, + supportedSubmitMethods = config.defaults.supportedSubmitMethods, + queryConfigEnabled = config.defaults.queryConfigEnabled, + plugins = config.defaults.plugins, + displayOperationId = config.defaults.displayOperationId, + showMutatedRequest = config.defaults.showMutatedRequest, + docExpansion = config.defaults.docExpansion, + defaultModelExpandDepth = config.defaults.defaultModelExpandDepth, + defaultModelsExpandDepth = config.defaults.defaultModelsExpandDepth, + defaultModelRendering = config.defaults.defaultModelRendering, + presets = config.defaults.presets, + deepLinking = config.defaults.deepLinking, + showExtensions = config.defaults.showExtensions, + showCommonExtensions = config.defaults.showCommonExtensions, + filter = config.defaults.filter, + requestSnippetsEnabled = config.defaults.requestSnippetsEnabled, + requestSnippets = config.defaults.requestSnippets, + tryItOutEnabled = config.defaults.tryItOutEnabled, + displayRequestDuration = config.defaults.displayRequestDuration, + withCredentials = config.defaults.withCredentials, + persistAuthorization = config.defaults.persistAuthorization, + oauth2RedirectUrl = config.defaults.oauth2RedirectUrl, onComplete = null, }) => { const [system, setSystem] = useState(null) @@ -158,10 +152,9 @@ SwaggerUI.propTypes = { withCredentials: PropTypes.bool, oauth2RedirectUrl: PropTypes.string, } - SwaggerUI.System = SwaggerUIConstructor.System SwaggerUI.presets = SwaggerUIConstructor.presets SwaggerUI.plugins = SwaggerUIConstructor.plugins -SwaggerUI.defaultOptions = SwaggerUIConstructor.defaultOptions +SwaggerUI.config = SwaggerUIConstructor.config export default SwaggerUI diff --git a/src/core/config/index.js b/src/core/config/index.js index 3cc73167..bb3058ae 100644 --- a/src/core/config/index.js +++ b/src/core/config/index.js @@ -10,3 +10,4 @@ export { default as optionsFromRuntime } from "./sources/runtime" export { default as defaultOptions } from "./defaults" export { default as mergeOptions } from "./merge" export { default as typeCastOptions } from "./type-cast" +export { default as typeCastMappings } from "./type-cast/mappings" diff --git a/src/core/config/type-cast/index.js b/src/core/config/type-cast/index.js index 608e0312..5bd45b0c 100644 --- a/src/core/config/type-cast/index.js +++ b/src/core/config/type-cast/index.js @@ -5,10 +5,10 @@ import has from "lodash/has" import get from "lodash/get" import set from "lodash/fp/set" -import typeCasters from "./mappings" +import mappings from "./mappings" const typeCast = (options) => { - return Object.entries(typeCasters).reduce( + return Object.entries(mappings).reduce( (acc, [optionPath, { typeCaster, defaultValue }]) => { if (has(acc, optionPath)) { const uncasted = get(acc, optionPath) diff --git a/src/core/config/type-cast/mappings.js b/src/core/config/type-cast/mappings.js index 8ece1d2f..7ec9b132 100644 --- a/src/core/config/type-cast/mappings.js +++ b/src/core/config/type-cast/mappings.js @@ -14,7 +14,7 @@ import syntaxHighlightTypeCaster from "./type-casters/syntax-highlight" import undefinedStringTypeCaster from "./type-casters/undefined-string" import defaultOptions from "../defaults" -const typeCasters = { +const mappings = { configUrl: { typeCaster: nullableStringTypeCaster }, deepLinking: { typeCaster: booleanTypeCaster, @@ -112,4 +112,4 @@ const typeCasters = { }, } -export default typeCasters +export default mappings diff --git a/src/core/index.js b/src/core/index.js index 647f3ebc..70657fd5 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -41,14 +41,16 @@ import { mergeOptions, inlinePluginOptionsFactorization, storeOptionsFactorization, + typeCastOptions, + typeCastMappings, } from "./config" -export default function SwaggerUI(userOptions) { +function SwaggerUI(userOptions) { const queryOptions = optionsFromQuery()(userOptions) const runtimeOptions = optionsFromRuntime()() - let mergedOptions = mergeOptions( + let mergedOptions = SwaggerUI.config.merge( {}, - defaultOptions, + SwaggerUI.config.defaults, runtimeOptions, userOptions, queryOptions @@ -66,9 +68,9 @@ export default function SwaggerUI(userOptions) { (urlOptions) => { const urlOptionsFailedToFetch = urlOptions === null - mergedOptions = mergeOptions( + mergedOptions = SwaggerUI.config.merge( {}, - defaultOptions, + SwaggerUI.config.defaults, runtimeOptions, systemOptions, userOptions, @@ -121,7 +123,12 @@ export default function SwaggerUI(userOptions) { SwaggerUI.System = System -SwaggerUI.defaultOptions = defaultOptions +SwaggerUI.config = { + defaults: defaultOptions, + merge: mergeOptions, + typeCast: typeCastOptions, + typeCastMappings, +} SwaggerUI.presets = { base: BasePreset, @@ -155,3 +162,5 @@ SwaggerUI.plugins = { Versions: VersionsPlugin, SafeRender: SafeRenderPlugin, } + +export default SwaggerUI