Skip to content

Commit

Permalink
feat(config): expose config and make it overridable (#9862)
Browse files Browse the repository at this point in the history
  • Loading branch information
char0n committed Apr 22, 2024
1 parent 351191b commit 17d50a6
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 46 deletions.
65 changes: 29 additions & 36 deletions flavors/swagger-ui-react/index.jsx
Expand Up @@ -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)
Expand Down Expand Up @@ -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
1 change: 1 addition & 0 deletions src/core/config/index.js
Expand Up @@ -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"
4 changes: 2 additions & 2 deletions src/core/config/type-cast/index.js
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions src/core/config/type-cast/mappings.js
Expand Up @@ -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,
Expand Down Expand Up @@ -112,4 +112,4 @@ const typeCasters = {
},
}

export default typeCasters
export default mappings
21 changes: 15 additions & 6 deletions src/core/index.js
Expand Up @@ -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
Expand All @@ -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,
Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -155,3 +162,5 @@ SwaggerUI.plugins = {
Versions: VersionsPlugin,
SafeRender: SafeRenderPlugin,
}

export default SwaggerUI

0 comments on commit 17d50a6

Please sign in to comment.