Skip to content

Commit 17d50a6

Browse files
authored
feat(config): expose config and make it overridable (#9862)
1 parent 351191b commit 17d50a6

File tree

5 files changed

+49
-46
lines changed

5 files changed

+49
-46
lines changed

flavors/swagger-ui-react/index.jsx

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,41 +7,35 @@ import React, { useEffect, useCallback, useState } from "react"
77
import PropTypes from "prop-types"
88
import SwaggerUIConstructor from "#swagger-ui"
99

10+
const { config } = SwaggerUIConstructor
11+
1012
const SwaggerUI = ({
11-
spec = SwaggerUIConstructor.defaultOptions.spec,
12-
url = SwaggerUIConstructor.defaultOptions.url,
13-
layout = SwaggerUIConstructor.defaultOptions.layout,
14-
requestInterceptor = SwaggerUIConstructor.defaultOptions.requestInterceptor,
15-
responseInterceptor = SwaggerUIConstructor.defaultOptions.responseInterceptor,
16-
supportedSubmitMethods = SwaggerUIConstructor.defaultOptions
17-
.supportedSubmitMethods,
18-
queryConfigEnabled = SwaggerUIConstructor.defaultOptions.queryConfigEnabled,
19-
plugins = SwaggerUIConstructor.defaultOptions.plugins,
20-
displayOperationId = SwaggerUIConstructor.defaultOptions.displayOperationId,
21-
showMutatedRequest = SwaggerUIConstructor.defaultOptions.showMutatedRequest,
22-
docExpansion = SwaggerUIConstructor.defaultOptions.docExpansion,
23-
defaultModelExpandDepth = SwaggerUIConstructor.defaultOptions
24-
.defaultModelExpandDepth,
25-
defaultModelsExpandDepth = SwaggerUIConstructor.defaultOptions
26-
.defaultModelsExpandDepth,
27-
defaultModelRendering = SwaggerUIConstructor.defaultOptions
28-
.defaultModelRendering,
29-
presets = SwaggerUIConstructor.defaultOptions.presets,
30-
deepLinking = SwaggerUIConstructor.defaultOptions.deepLinking,
31-
showExtensions = SwaggerUIConstructor.defaultOptions.showExtensions,
32-
showCommonExtensions = SwaggerUIConstructor.defaultOptions
33-
.showCommonExtensions,
34-
filter = SwaggerUIConstructor.defaultOptions.filter,
35-
requestSnippetsEnabled = SwaggerUIConstructor.defaultOptions
36-
.requestSnippetsEnabled,
37-
requestSnippets = SwaggerUIConstructor.defaultOptions.requestSnippets,
38-
tryItOutEnabled = SwaggerUIConstructor.defaultOptions.tryItOutEnabled,
39-
displayRequestDuration = SwaggerUIConstructor.defaultOptions
40-
.displayRequestDuration,
41-
withCredentials = SwaggerUIConstructor.defaultOptions.withCredentials,
42-
persistAuthorization = SwaggerUIConstructor.defaultOptions
43-
.persistAuthorization,
44-
oauth2RedirectUrl = SwaggerUIConstructor.defaultOptions.oauth2RedirectUrl,
13+
spec = config.defaults.spec,
14+
url = config.defaults.url,
15+
layout = config.defaults.layout,
16+
requestInterceptor = config.defaults.requestInterceptor,
17+
responseInterceptor = config.defaults.responseInterceptor,
18+
supportedSubmitMethods = config.defaults.supportedSubmitMethods,
19+
queryConfigEnabled = config.defaults.queryConfigEnabled,
20+
plugins = config.defaults.plugins,
21+
displayOperationId = config.defaults.displayOperationId,
22+
showMutatedRequest = config.defaults.showMutatedRequest,
23+
docExpansion = config.defaults.docExpansion,
24+
defaultModelExpandDepth = config.defaults.defaultModelExpandDepth,
25+
defaultModelsExpandDepth = config.defaults.defaultModelsExpandDepth,
26+
defaultModelRendering = config.defaults.defaultModelRendering,
27+
presets = config.defaults.presets,
28+
deepLinking = config.defaults.deepLinking,
29+
showExtensions = config.defaults.showExtensions,
30+
showCommonExtensions = config.defaults.showCommonExtensions,
31+
filter = config.defaults.filter,
32+
requestSnippetsEnabled = config.defaults.requestSnippetsEnabled,
33+
requestSnippets = config.defaults.requestSnippets,
34+
tryItOutEnabled = config.defaults.tryItOutEnabled,
35+
displayRequestDuration = config.defaults.displayRequestDuration,
36+
withCredentials = config.defaults.withCredentials,
37+
persistAuthorization = config.defaults.persistAuthorization,
38+
oauth2RedirectUrl = config.defaults.oauth2RedirectUrl,
4539
onComplete = null,
4640
}) => {
4741
const [system, setSystem] = useState(null)
@@ -158,10 +152,9 @@ SwaggerUI.propTypes = {
158152
withCredentials: PropTypes.bool,
159153
oauth2RedirectUrl: PropTypes.string,
160154
}
161-
162155
SwaggerUI.System = SwaggerUIConstructor.System
163156
SwaggerUI.presets = SwaggerUIConstructor.presets
164157
SwaggerUI.plugins = SwaggerUIConstructor.plugins
165-
SwaggerUI.defaultOptions = SwaggerUIConstructor.defaultOptions
158+
SwaggerUI.config = SwaggerUIConstructor.config
166159

167160
export default SwaggerUI

src/core/config/index.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,4 @@ export { default as optionsFromRuntime } from "./sources/runtime"
1010
export { default as defaultOptions } from "./defaults"
1111
export { default as mergeOptions } from "./merge"
1212
export { default as typeCastOptions } from "./type-cast"
13+
export { default as typeCastMappings } from "./type-cast/mappings"

src/core/config/type-cast/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ import has from "lodash/has"
55
import get from "lodash/get"
66
import set from "lodash/fp/set"
77

8-
import typeCasters from "./mappings"
8+
import mappings from "./mappings"
99

1010
const typeCast = (options) => {
11-
return Object.entries(typeCasters).reduce(
11+
return Object.entries(mappings).reduce(
1212
(acc, [optionPath, { typeCaster, defaultValue }]) => {
1313
if (has(acc, optionPath)) {
1414
const uncasted = get(acc, optionPath)

src/core/config/type-cast/mappings.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import syntaxHighlightTypeCaster from "./type-casters/syntax-highlight"
1414
import undefinedStringTypeCaster from "./type-casters/undefined-string"
1515
import defaultOptions from "../defaults"
1616

17-
const typeCasters = {
17+
const mappings = {
1818
configUrl: { typeCaster: nullableStringTypeCaster },
1919
deepLinking: {
2020
typeCaster: booleanTypeCaster,
@@ -112,4 +112,4 @@ const typeCasters = {
112112
},
113113
}
114114

115-
export default typeCasters
115+
export default mappings

src/core/index.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,14 +41,16 @@ import {
4141
mergeOptions,
4242
inlinePluginOptionsFactorization,
4343
storeOptionsFactorization,
44+
typeCastOptions,
45+
typeCastMappings,
4446
} from "./config"
4547

46-
export default function SwaggerUI(userOptions) {
48+
function SwaggerUI(userOptions) {
4749
const queryOptions = optionsFromQuery()(userOptions)
4850
const runtimeOptions = optionsFromRuntime()()
49-
let mergedOptions = mergeOptions(
51+
let mergedOptions = SwaggerUI.config.merge(
5052
{},
51-
defaultOptions,
53+
SwaggerUI.config.defaults,
5254
runtimeOptions,
5355
userOptions,
5456
queryOptions
@@ -66,9 +68,9 @@ export default function SwaggerUI(userOptions) {
6668
(urlOptions) => {
6769
const urlOptionsFailedToFetch = urlOptions === null
6870

69-
mergedOptions = mergeOptions(
71+
mergedOptions = SwaggerUI.config.merge(
7072
{},
71-
defaultOptions,
73+
SwaggerUI.config.defaults,
7274
runtimeOptions,
7375
systemOptions,
7476
userOptions,
@@ -121,7 +123,12 @@ export default function SwaggerUI(userOptions) {
121123

122124
SwaggerUI.System = System
123125

124-
SwaggerUI.defaultOptions = defaultOptions
126+
SwaggerUI.config = {
127+
defaults: defaultOptions,
128+
merge: mergeOptions,
129+
typeCast: typeCastOptions,
130+
typeCastMappings,
131+
}
125132

126133
SwaggerUI.presets = {
127134
base: BasePreset,
@@ -155,3 +162,5 @@ SwaggerUI.plugins = {
155162
Versions: VersionsPlugin,
156163
SafeRender: SafeRenderPlugin,
157164
}
165+
166+
export default SwaggerUI

0 commit comments

Comments
 (0)