@@ -2,10 +2,9 @@
|
||||
|
||||
### How to configure
|
||||
|
||||
Swagger UI accepts configuration parameters in four locations.
|
||||
Swagger UI accepts configuration parameters in three locations.
|
||||
|
||||
From lowest to highest precedence:
|
||||
- The `swagger-config.yaml` in the project root directory, if it exists, is baked into the application
|
||||
- configuration object passed as an argument to Swagger UI (`SwaggerUI({ ... })`)
|
||||
- configuration document fetched from a specified `configUrl`
|
||||
- configuration items passed as key/value pairs in the URL query string
|
||||
|
||||
@@ -53,8 +53,6 @@ const SwaggerUI = ({
|
||||
plugins,
|
||||
spec,
|
||||
url,
|
||||
dom_id: null,
|
||||
domNode: null,
|
||||
layout,
|
||||
defaultModelsExpandDepth,
|
||||
defaultModelRendering,
|
||||
|
||||
@@ -5,7 +5,6 @@ export { default as inlinePluginOptionsFactorization } from "./factorization/inl
|
||||
export { default as storeOptionsFactorization } from "./factorization/store"
|
||||
export { default as optionsFromQuery } from "./sources/query"
|
||||
export { default as optionsFromURL } from "./sources/url"
|
||||
export { default as optionsFromSystem } from "./sources/system"
|
||||
export { default as optionsFromRuntime } from "./sources/runtime"
|
||||
export { default as defaultOptions } from "./defaults"
|
||||
export { default as mergeOptions } from "./merge"
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
/**
|
||||
* @prettier
|
||||
*
|
||||
* Receives options from a System.
|
||||
* These options are baked-in to the System during the compile time.
|
||||
*/
|
||||
|
||||
const optionsFromSystem =
|
||||
({ system }) =>
|
||||
() => {
|
||||
if (typeof system.specSelectors?.getLocalConfig !== "function") return {}
|
||||
|
||||
return system.specSelectors.getLocalConfig()
|
||||
}
|
||||
|
||||
export default optionsFromSystem
|
||||
@@ -7,7 +7,7 @@ const optionsFromURL =
|
||||
({ url, system }) =>
|
||||
async (options) => {
|
||||
if (!url) return {}
|
||||
if (typeof system.specActions?.getConfigByUrl !== "function") return {}
|
||||
if (typeof system.configsActions?.getConfigByUrl !== "function") return {}
|
||||
let resolve
|
||||
const deferred = new Promise((res) => {
|
||||
resolve = res
|
||||
@@ -17,7 +17,7 @@ const optionsFromURL =
|
||||
resolve(fetchedOptions)
|
||||
}
|
||||
|
||||
system.specActions.getConfigByUrl(
|
||||
system.configsActions.getConfigByUrl(
|
||||
{
|
||||
url,
|
||||
loadRemoteConfig: true,
|
||||
|
||||
@@ -36,7 +36,6 @@ import {
|
||||
defaultOptions,
|
||||
optionsFromQuery,
|
||||
optionsFromURL,
|
||||
optionsFromSystem,
|
||||
optionsFromRuntime,
|
||||
mergeOptions,
|
||||
inlinePluginOptionsFactorization,
|
||||
@@ -62,18 +61,13 @@ function SwaggerUI(userOptions) {
|
||||
store.register([mergedOptions.plugins, InlinePlugin])
|
||||
const system = store.getSystem()
|
||||
|
||||
const systemOptions = optionsFromSystem({ system })(mergedOptions)
|
||||
|
||||
optionsFromURL({ url: mergedOptions.configUrl, system })(mergedOptions).then(
|
||||
(urlOptions) => {
|
||||
const urlOptionsFailedToFetch = urlOptions === null
|
||||
|
||||
mergedOptions = SwaggerUI.config.merge(
|
||||
{},
|
||||
SwaggerUI.config.defaults,
|
||||
runtimeOptions,
|
||||
systemOptions,
|
||||
userOptions,
|
||||
mergedOptions,
|
||||
urlOptions,
|
||||
queryOptions
|
||||
)
|
||||
|
||||
@@ -1,3 +1,8 @@
|
||||
/**
|
||||
* @prettier
|
||||
*/
|
||||
import { parseConfig } from "./fn"
|
||||
|
||||
export const UPDATE_CONFIGS = "configs_update"
|
||||
export const TOGGLE_CONFIGS = "configs_toggle"
|
||||
|
||||
@@ -6,7 +11,7 @@ export function update(configName, configValue) {
|
||||
return {
|
||||
type: UPDATE_CONFIGS,
|
||||
payload: {
|
||||
[configName]: configValue
|
||||
[configName]: configValue,
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -19,8 +24,35 @@ export function toggle(configName) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Hook
|
||||
export const loaded = () => () => {
|
||||
// noop
|
||||
}
|
||||
|
||||
export const downloadConfig = (req) => (system) => {
|
||||
const {
|
||||
fn: { fetch },
|
||||
} = system
|
||||
|
||||
return fetch(req)
|
||||
}
|
||||
|
||||
export const getConfigByUrl = (req, cb) => (system) => {
|
||||
const { specActions, configsActions } = system
|
||||
|
||||
if (req) {
|
||||
return configsActions.downloadConfig(req).then(next, next)
|
||||
}
|
||||
|
||||
function next(res) {
|
||||
if (res instanceof Error || res.status >= 400) {
|
||||
specActions.updateLoadingStatus("failedConfig")
|
||||
specActions.updateLoadingStatus("failedConfig")
|
||||
specActions.updateUrl("")
|
||||
console.error(res.statusText + " " + req.url)
|
||||
cb(null)
|
||||
} else {
|
||||
cb(parseConfig(res.text, system))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import YAML from "js-yaml"
|
||||
|
||||
export const parseYamlConfig = (yaml, system) => {
|
||||
export const parseConfig = (yaml, system) => {
|
||||
try {
|
||||
return YAML.load(yaml)
|
||||
} catch(e) {
|
||||
@@ -1,25 +1,11 @@
|
||||
import yamlConfig from "root/swagger-config.yaml"
|
||||
import { parseYamlConfig } from "./helpers"
|
||||
import * as actions from "./actions"
|
||||
import * as specActions from "./spec-actions"
|
||||
import * as selectors from "./selectors"
|
||||
import reducers from "./reducers"
|
||||
|
||||
const specSelectors = {
|
||||
getLocalConfig: () => {
|
||||
return parseYamlConfig(yamlConfig)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default function configsPlugin() {
|
||||
|
||||
return {
|
||||
statePlugins: {
|
||||
spec: {
|
||||
actions: specActions,
|
||||
selectors: specSelectors,
|
||||
},
|
||||
configs: {
|
||||
reducers,
|
||||
actions,
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
import { parseYamlConfig } from "./helpers"
|
||||
|
||||
export const downloadConfig = (req) => (system) => {
|
||||
const {fn: { fetch }} = system
|
||||
|
||||
return fetch(req)
|
||||
}
|
||||
|
||||
export const getConfigByUrl = (req, cb)=> ({ specActions }) => {
|
||||
if (req) {
|
||||
return specActions.downloadConfig(req).then(next, next)
|
||||
}
|
||||
|
||||
function next(res) {
|
||||
if (res instanceof Error || res.status >= 400) {
|
||||
specActions.updateLoadingStatus("failedConfig")
|
||||
specActions.updateLoadingStatus("failedConfig")
|
||||
specActions.updateUrl("")
|
||||
console.error(res.statusText + " " + req.url)
|
||||
cb(null)
|
||||
} else {
|
||||
cb(parseYamlConfig(res.text))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
---
|
||||
url: "https://petstore.swagger.io/v2/swagger.json"
|
||||
dom_id: "#swagger-ui"
|
||||
validatorUrl: "https://validator.swagger.io/validator"
|
||||
@@ -1,4 +1,4 @@
|
||||
import { downloadConfig } from "core/plugins/configs/spec-actions"
|
||||
import { downloadConfig } from "core/plugins/configs/actions"
|
||||
|
||||
describe("configs plugin - actions", () => {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user