Files
swagger-ui/src/core/index.js
2024-04-15 11:55:20 +02:00

126 lines
4.4 KiB
JavaScript

import System from "./system"
// presets
import BasePreset from "./presets/base"
import ApisPreset from "./presets/apis"
// plugins
import AuthPlugin from "./plugins/auth/"
import ConfigsPlugin from "./plugins/configs"
import DeepLinkingPlugin from "./plugins/deep-linking"
import ErrPlugin from "./plugins/err"
import FilterPlugin from "./plugins/filter"
import IconsPlugin from "./plugins/icons"
import JSONSchema5Plugin from "./plugins/json-schema-5"
import JSONSchema202012Plugin from "./plugins/json-schema-2020-12"
import JSONSchema202012SamplesPlugin from "./plugins/json-schema-2020-12-samples"
import LayoutPlugin from "./plugins/layout"
import LogsPlugin from "./plugins/logs"
import OpenAPI30Plugin from "./plugins/oas3"
import OpenAPI31Plugin from "./plugins/oas3"
import OnCompletePlugin from "./plugins/on-complete"
import RequestSnippetsPlugin from "./plugins/request-snippets"
import JSONSchema5SamplesPlugin from "./plugins/json-schema-5-samples"
import SpecPlugin from "./plugins/spec"
import SwaggerClientPlugin from "./plugins/swagger-client"
import UtilPlugin from "./plugins/util"
import ViewPlugin from "./plugins/view"
import ViewLegacyPlugin from "core/plugins/view-legacy"
import DownloadUrlPlugin from "./plugins/download-url"
import SyntaxHighlightingPlugin from "core/plugins/syntax-highlighting"
import VersionsPlugin from "core/plugins/versions"
import SafeRenderPlugin from "./plugins/safe-render"
import {
defaultOptions,
optionsFromQuery,
optionsFromURL,
optionsFromSystem,
mergeOptions,
inlinePluginOptionsFactorization,
storeOptionsFactorization
} from "./config"
export default function SwaggerUI(userOptions) {
const queryOptions = optionsFromQuery()(userOptions)
let mergedOptions = mergeOptions({}, defaultOptions, userOptions, queryOptions)
const storeOptions = storeOptionsFactorization(mergedOptions)
const InlinePlugin = inlinePluginOptionsFactorization(mergedOptions)
const store = new System(storeOptions)
store.register([mergedOptions.plugins, InlinePlugin])
const system = store.getSystem()
const configURL = queryOptions.config ?? mergedOptions.configUrl
const systemOptions = optionsFromSystem({ system })(mergedOptions)
optionsFromURL({ url: configURL, system })(mergedOptions)
.then((urlOptions) => {
const urlOptionsFailedToFetch = urlOptions === null
mergedOptions = mergeOptions({}, systemOptions, mergedOptions, urlOptions, queryOptions)
store.setConfigs(mergedOptions)
system.configsActions.loaded()
if (!urlOptionsFailedToFetch) {
if (!queryOptions.url && typeof mergedOptions.spec === "object" && Object.keys(mergedOptions.spec).length > 0) {
system.specActions.updateUrl("")
system.specActions.updateLoadingStatus("success")
system.specActions.updateSpec(JSON.stringify(mergedOptions.spec))
} else if (typeof system.specActions.download === "function" && mergedOptions.url && !mergedOptions.urls) {
system.specActions.updateUrl(mergedOptions.url)
system.specActions.download(mergedOptions.url)
}
}
if (mergedOptions.domNode) {
system.render(mergedOptions.domNode, "App")
} else if(mergedOptions.dom_id) {
let domNode = document.querySelector(mergedOptions.dom_id)
system.render(domNode, "App")
} else if(mergedOptions.dom_id === null || mergedOptions.domNode === null) {
// do nothing
// this is useful for testing that does not need to do any rendering
} else {
console.error("Skipped rendering: no `dom_id` or `domNode` was specified")
}
})
return system
}
SwaggerUI.System = System
SwaggerUI.presets = {
base: BasePreset,
apis: ApisPreset,
}
SwaggerUI.plugins = {
Auth: AuthPlugin,
Configs: ConfigsPlugin,
DeepLining: DeepLinkingPlugin,
Err: ErrPlugin,
Filter: FilterPlugin,
Icons: IconsPlugin,
JSONSchema5: JSONSchema5Plugin,
JSONSchema5Samples: JSONSchema5SamplesPlugin,
JSONSchema202012: JSONSchema202012Plugin,
JSONSchema202012Samples: JSONSchema202012SamplesPlugin,
Layout: LayoutPlugin,
Logs: LogsPlugin,
OpenAPI30: OpenAPI30Plugin,
OpenAPI31: OpenAPI31Plugin,
OnComplete: OnCompletePlugin,
RequestSnippets: RequestSnippetsPlugin,
Spec: SpecPlugin,
SwaggerClient: SwaggerClientPlugin,
Util: UtilPlugin,
View: ViewPlugin,
ViewLegacy: ViewLegacyPlugin,
DownloadUrl: DownloadUrlPlugin,
SyntaxHighlighting: SyntaxHighlightingPlugin,
Versions: VersionsPlugin,
SafeRender: SafeRenderPlugin,
}