feat(config): expose config and make it overridable (#9862)
This commit is contained in:
@@ -7,41 +7,35 @@ import React, { useEffect, useCallback, useState } from "react"
|
|||||||
import PropTypes from "prop-types"
|
import PropTypes from "prop-types"
|
||||||
import SwaggerUIConstructor from "#swagger-ui"
|
import SwaggerUIConstructor from "#swagger-ui"
|
||||||
|
|
||||||
|
const { config } = SwaggerUIConstructor
|
||||||
|
|
||||||
const SwaggerUI = ({
|
const SwaggerUI = ({
|
||||||
spec = SwaggerUIConstructor.defaultOptions.spec,
|
spec = config.defaults.spec,
|
||||||
url = SwaggerUIConstructor.defaultOptions.url,
|
url = config.defaults.url,
|
||||||
layout = SwaggerUIConstructor.defaultOptions.layout,
|
layout = config.defaults.layout,
|
||||||
requestInterceptor = SwaggerUIConstructor.defaultOptions.requestInterceptor,
|
requestInterceptor = config.defaults.requestInterceptor,
|
||||||
responseInterceptor = SwaggerUIConstructor.defaultOptions.responseInterceptor,
|
responseInterceptor = config.defaults.responseInterceptor,
|
||||||
supportedSubmitMethods = SwaggerUIConstructor.defaultOptions
|
supportedSubmitMethods = config.defaults.supportedSubmitMethods,
|
||||||
.supportedSubmitMethods,
|
queryConfigEnabled = config.defaults.queryConfigEnabled,
|
||||||
queryConfigEnabled = SwaggerUIConstructor.defaultOptions.queryConfigEnabled,
|
plugins = config.defaults.plugins,
|
||||||
plugins = SwaggerUIConstructor.defaultOptions.plugins,
|
displayOperationId = config.defaults.displayOperationId,
|
||||||
displayOperationId = SwaggerUIConstructor.defaultOptions.displayOperationId,
|
showMutatedRequest = config.defaults.showMutatedRequest,
|
||||||
showMutatedRequest = SwaggerUIConstructor.defaultOptions.showMutatedRequest,
|
docExpansion = config.defaults.docExpansion,
|
||||||
docExpansion = SwaggerUIConstructor.defaultOptions.docExpansion,
|
defaultModelExpandDepth = config.defaults.defaultModelExpandDepth,
|
||||||
defaultModelExpandDepth = SwaggerUIConstructor.defaultOptions
|
defaultModelsExpandDepth = config.defaults.defaultModelsExpandDepth,
|
||||||
.defaultModelExpandDepth,
|
defaultModelRendering = config.defaults.defaultModelRendering,
|
||||||
defaultModelsExpandDepth = SwaggerUIConstructor.defaultOptions
|
presets = config.defaults.presets,
|
||||||
.defaultModelsExpandDepth,
|
deepLinking = config.defaults.deepLinking,
|
||||||
defaultModelRendering = SwaggerUIConstructor.defaultOptions
|
showExtensions = config.defaults.showExtensions,
|
||||||
.defaultModelRendering,
|
showCommonExtensions = config.defaults.showCommonExtensions,
|
||||||
presets = SwaggerUIConstructor.defaultOptions.presets,
|
filter = config.defaults.filter,
|
||||||
deepLinking = SwaggerUIConstructor.defaultOptions.deepLinking,
|
requestSnippetsEnabled = config.defaults.requestSnippetsEnabled,
|
||||||
showExtensions = SwaggerUIConstructor.defaultOptions.showExtensions,
|
requestSnippets = config.defaults.requestSnippets,
|
||||||
showCommonExtensions = SwaggerUIConstructor.defaultOptions
|
tryItOutEnabled = config.defaults.tryItOutEnabled,
|
||||||
.showCommonExtensions,
|
displayRequestDuration = config.defaults.displayRequestDuration,
|
||||||
filter = SwaggerUIConstructor.defaultOptions.filter,
|
withCredentials = config.defaults.withCredentials,
|
||||||
requestSnippetsEnabled = SwaggerUIConstructor.defaultOptions
|
persistAuthorization = config.defaults.persistAuthorization,
|
||||||
.requestSnippetsEnabled,
|
oauth2RedirectUrl = config.defaults.oauth2RedirectUrl,
|
||||||
requestSnippets = SwaggerUIConstructor.defaultOptions.requestSnippets,
|
|
||||||
tryItOutEnabled = SwaggerUIConstructor.defaultOptions.tryItOutEnabled,
|
|
||||||
displayRequestDuration = SwaggerUIConstructor.defaultOptions
|
|
||||||
.displayRequestDuration,
|
|
||||||
withCredentials = SwaggerUIConstructor.defaultOptions.withCredentials,
|
|
||||||
persistAuthorization = SwaggerUIConstructor.defaultOptions
|
|
||||||
.persistAuthorization,
|
|
||||||
oauth2RedirectUrl = SwaggerUIConstructor.defaultOptions.oauth2RedirectUrl,
|
|
||||||
onComplete = null,
|
onComplete = null,
|
||||||
}) => {
|
}) => {
|
||||||
const [system, setSystem] = useState(null)
|
const [system, setSystem] = useState(null)
|
||||||
@@ -158,10 +152,9 @@ SwaggerUI.propTypes = {
|
|||||||
withCredentials: PropTypes.bool,
|
withCredentials: PropTypes.bool,
|
||||||
oauth2RedirectUrl: PropTypes.string,
|
oauth2RedirectUrl: PropTypes.string,
|
||||||
}
|
}
|
||||||
|
|
||||||
SwaggerUI.System = SwaggerUIConstructor.System
|
SwaggerUI.System = SwaggerUIConstructor.System
|
||||||
SwaggerUI.presets = SwaggerUIConstructor.presets
|
SwaggerUI.presets = SwaggerUIConstructor.presets
|
||||||
SwaggerUI.plugins = SwaggerUIConstructor.plugins
|
SwaggerUI.plugins = SwaggerUIConstructor.plugins
|
||||||
SwaggerUI.defaultOptions = SwaggerUIConstructor.defaultOptions
|
SwaggerUI.config = SwaggerUIConstructor.config
|
||||||
|
|
||||||
export default SwaggerUI
|
export default SwaggerUI
|
||||||
|
|||||||
@@ -10,3 +10,4 @@ export { default as optionsFromRuntime } from "./sources/runtime"
|
|||||||
export { default as defaultOptions } from "./defaults"
|
export { default as defaultOptions } from "./defaults"
|
||||||
export { default as mergeOptions } from "./merge"
|
export { default as mergeOptions } from "./merge"
|
||||||
export { default as typeCastOptions } from "./type-cast"
|
export { default as typeCastOptions } from "./type-cast"
|
||||||
|
export { default as typeCastMappings } from "./type-cast/mappings"
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ import has from "lodash/has"
|
|||||||
import get from "lodash/get"
|
import get from "lodash/get"
|
||||||
import set from "lodash/fp/set"
|
import set from "lodash/fp/set"
|
||||||
|
|
||||||
import typeCasters from "./mappings"
|
import mappings from "./mappings"
|
||||||
|
|
||||||
const typeCast = (options) => {
|
const typeCast = (options) => {
|
||||||
return Object.entries(typeCasters).reduce(
|
return Object.entries(mappings).reduce(
|
||||||
(acc, [optionPath, { typeCaster, defaultValue }]) => {
|
(acc, [optionPath, { typeCaster, defaultValue }]) => {
|
||||||
if (has(acc, optionPath)) {
|
if (has(acc, optionPath)) {
|
||||||
const uncasted = get(acc, optionPath)
|
const uncasted = get(acc, optionPath)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import syntaxHighlightTypeCaster from "./type-casters/syntax-highlight"
|
|||||||
import undefinedStringTypeCaster from "./type-casters/undefined-string"
|
import undefinedStringTypeCaster from "./type-casters/undefined-string"
|
||||||
import defaultOptions from "../defaults"
|
import defaultOptions from "../defaults"
|
||||||
|
|
||||||
const typeCasters = {
|
const mappings = {
|
||||||
configUrl: { typeCaster: nullableStringTypeCaster },
|
configUrl: { typeCaster: nullableStringTypeCaster },
|
||||||
deepLinking: {
|
deepLinking: {
|
||||||
typeCaster: booleanTypeCaster,
|
typeCaster: booleanTypeCaster,
|
||||||
@@ -112,4 +112,4 @@ const typeCasters = {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export default typeCasters
|
export default mappings
|
||||||
|
|||||||
@@ -41,14 +41,16 @@ import {
|
|||||||
mergeOptions,
|
mergeOptions,
|
||||||
inlinePluginOptionsFactorization,
|
inlinePluginOptionsFactorization,
|
||||||
storeOptionsFactorization,
|
storeOptionsFactorization,
|
||||||
|
typeCastOptions,
|
||||||
|
typeCastMappings,
|
||||||
} from "./config"
|
} from "./config"
|
||||||
|
|
||||||
export default function SwaggerUI(userOptions) {
|
function SwaggerUI(userOptions) {
|
||||||
const queryOptions = optionsFromQuery()(userOptions)
|
const queryOptions = optionsFromQuery()(userOptions)
|
||||||
const runtimeOptions = optionsFromRuntime()()
|
const runtimeOptions = optionsFromRuntime()()
|
||||||
let mergedOptions = mergeOptions(
|
let mergedOptions = SwaggerUI.config.merge(
|
||||||
{},
|
{},
|
||||||
defaultOptions,
|
SwaggerUI.config.defaults,
|
||||||
runtimeOptions,
|
runtimeOptions,
|
||||||
userOptions,
|
userOptions,
|
||||||
queryOptions
|
queryOptions
|
||||||
@@ -66,9 +68,9 @@ export default function SwaggerUI(userOptions) {
|
|||||||
(urlOptions) => {
|
(urlOptions) => {
|
||||||
const urlOptionsFailedToFetch = urlOptions === null
|
const urlOptionsFailedToFetch = urlOptions === null
|
||||||
|
|
||||||
mergedOptions = mergeOptions(
|
mergedOptions = SwaggerUI.config.merge(
|
||||||
{},
|
{},
|
||||||
defaultOptions,
|
SwaggerUI.config.defaults,
|
||||||
runtimeOptions,
|
runtimeOptions,
|
||||||
systemOptions,
|
systemOptions,
|
||||||
userOptions,
|
userOptions,
|
||||||
@@ -121,7 +123,12 @@ export default function SwaggerUI(userOptions) {
|
|||||||
|
|
||||||
SwaggerUI.System = System
|
SwaggerUI.System = System
|
||||||
|
|
||||||
SwaggerUI.defaultOptions = defaultOptions
|
SwaggerUI.config = {
|
||||||
|
defaults: defaultOptions,
|
||||||
|
merge: mergeOptions,
|
||||||
|
typeCast: typeCastOptions,
|
||||||
|
typeCastMappings,
|
||||||
|
}
|
||||||
|
|
||||||
SwaggerUI.presets = {
|
SwaggerUI.presets = {
|
||||||
base: BasePreset,
|
base: BasePreset,
|
||||||
@@ -155,3 +162,5 @@ SwaggerUI.plugins = {
|
|||||||
Versions: VersionsPlugin,
|
Versions: VersionsPlugin,
|
||||||
SafeRender: SafeRenderPlugin,
|
SafeRender: SafeRenderPlugin,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export default SwaggerUI
|
||||||
|
|||||||
Reference in New Issue
Block a user