Skip to content

Commit fe6c1b8

Browse files
committed
refactor(config): use conventional naming
1 parent a56643f commit fe6c1b8

File tree

4 files changed

+66
-58
lines changed

4 files changed

+66
-58
lines changed

src/core/config/factorization/store.js renamed to src/core/config/factorization/system.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*/
44
import deepExtend from "deep-extend"
55

6-
const storeFactorization = (options) => {
6+
const systemFactorization = (options) => {
77
const state = deepExtend(
88
{
99
layout: {
@@ -42,4 +42,4 @@ const storeFactorization = (options) => {
4242
}
4343
}
4444

45-
export default storeFactorization
45+
export default systemFactorization

src/core/config/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* @prettier
33
*/
44
export { default as inlinePluginOptionsFactorization } from "./factorization/inline-plugin"
5-
export { default as storeOptionsFactorization } from "./factorization/store"
5+
export { default as systemOptionsFactorization } from "./factorization/system"
66
export { default as optionsFromQuery } from "./sources/query"
77
export { default as optionsFromURL } from "./sources/url"
88
export { default as optionsFromRuntime } from "./sources/runtime"

src/core/config/sources/url.js

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,24 @@
22
* @prettier
33
* Receives options from a remote URL.
44
*/
5+
const makeDeferred = () => {
6+
const deferred = {}
7+
deferred.promise = new Promise((resolve, reject) => {
8+
deferred.resolve = resolve
9+
deferred.reject = reject
10+
})
11+
return deferred
12+
}
513

614
const optionsFromURL =
715
({ url, system }) =>
816
async (options) => {
917
if (!url) return {}
1018
if (typeof system.configsActions?.getConfigByUrl !== "function") return {}
11-
let resolve
12-
const deferred = new Promise((res) => {
13-
resolve = res
14-
})
19+
const deferred = makeDeferred()
1520
const callback = (fetchedOptions) => {
1621
// receives null on remote URL fetch failure
17-
resolve(fetchedOptions)
22+
deferred.resolve(fetchedOptions)
1823
}
1924

2025
system.configsActions.getConfigByUrl(
@@ -27,7 +32,7 @@ const optionsFromURL =
2732
callback
2833
)
2934

30-
return deferred
35+
return deferred.promise
3136
}
3237

3338
export default optionsFromURL

src/core/index.js

Lines changed: 52 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ import {
3939
optionsFromRuntime,
4040
mergeOptions,
4141
inlinePluginOptionsFactorization,
42-
storeOptionsFactorization,
42+
systemOptionsFactorization,
4343
typeCastOptions,
4444
typeCastMappings,
4545
} from "./config"
@@ -54,65 +54,68 @@ function SwaggerUI(userOptions) {
5454
userOptions,
5555
queryOptions
5656
)
57-
const storeOptions = storeOptionsFactorization(mergedOptions)
57+
const storeOptions = systemOptionsFactorization(mergedOptions)
5858
const InlinePlugin = inlinePluginOptionsFactorization(mergedOptions)
5959

60-
const store = new System(storeOptions)
61-
store.register([mergedOptions.plugins, InlinePlugin])
62-
const system = store.getSystem()
60+
const system = new System(storeOptions)
61+
system.register([mergedOptions.plugins, InlinePlugin])
6362

64-
optionsFromURL({ url: mergedOptions.configUrl, system })(mergedOptions).then(
65-
(urlOptions) => {
66-
const urlOptionsFailedToFetch = urlOptions === null
63+
const boundSystem = system.getSystem()
6764

68-
mergedOptions = SwaggerUI.config.merge(
69-
{},
70-
mergedOptions,
71-
urlOptions,
72-
queryOptions
73-
)
74-
store.setConfigs(mergedOptions)
75-
system.configsActions.loaded()
65+
optionsFromURL({ url: mergedOptions.configUrl, system: boundSystem })(
66+
mergedOptions
67+
).then((urlOptions) => {
68+
const urlOptionsFailedToFetch = urlOptions === null
7669

77-
if (!urlOptionsFailedToFetch) {
78-
if (
79-
!queryOptions.url &&
80-
typeof mergedOptions.spec === "object" &&
81-
Object.keys(mergedOptions.spec).length > 0
82-
) {
83-
system.specActions.updateUrl("")
84-
system.specActions.updateLoadingStatus("success")
85-
system.specActions.updateSpec(JSON.stringify(mergedOptions.spec))
86-
} else if (
87-
typeof system.specActions.download === "function" &&
88-
mergedOptions.url &&
89-
!mergedOptions.urls
90-
) {
91-
system.specActions.updateUrl(mergedOptions.url)
92-
system.specActions.download(mergedOptions.url)
93-
}
94-
}
70+
mergedOptions = SwaggerUI.config.merge(
71+
{},
72+
mergedOptions,
73+
urlOptions,
74+
queryOptions
75+
)
76+
system.setConfigs(mergedOptions)
77+
boundSystem.configsActions.loaded()
9578

96-
if (mergedOptions.domNode) {
97-
system.render(mergedOptions.domNode, "App")
98-
} else if (mergedOptions.dom_id) {
99-
let domNode = document.querySelector(mergedOptions.dom_id)
100-
system.render(domNode, "App")
79+
if (!urlOptionsFailedToFetch) {
80+
if (
81+
!queryOptions.url &&
82+
typeof mergedOptions.spec === "object" &&
83+
Object.keys(mergedOptions.spec).length > 0
84+
) {
85+
boundSystem.specActions.updateUrl("")
86+
boundSystem.specActions.updateLoadingStatus("success")
87+
boundSystem.specActions.updateSpec(JSON.stringify(mergedOptions.spec))
10188
} else if (
102-
mergedOptions.dom_id === null ||
103-
mergedOptions.domNode === null
89+
typeof boundSystem.specActions.download === "function" &&
90+
mergedOptions.url &&
91+
!mergedOptions.urls
10492
) {
105-
// do nothing
106-
// this is useful for testing that does not need to do any rendering
107-
} else {
108-
console.error(
109-
"Skipped rendering: no `dom_id` or `domNode` was specified"
110-
)
93+
boundSystem.specActions.updateUrl(mergedOptions.url)
94+
boundSystem.specActions.download(mergedOptions.url)
11195
}
11296
}
113-
)
11497

115-
return system
98+
if (mergedOptions.domNode) {
99+
boundSystem.render(mergedOptions.domNode, "App")
100+
} else if (mergedOptions.dom_id) {
101+
const domNode = document.querySelector(mergedOptions.dom_id)
102+
boundSystem.render(domNode, "App")
103+
} else if (
104+
mergedOptions.dom_id === null ||
105+
mergedOptions.domNode === null
106+
) {
107+
/**
108+
* noop
109+
*
110+
* SwaggerUI instance can be created without any rendering involved.
111+
* This is also useful for lazy rendering or testing.
112+
*/
113+
} else {
114+
console.error("Skipped rendering: no `dom_id` or `domNode` was specified")
115+
}
116+
})
117+
118+
return boundSystem
116119
}
117120

118121
SwaggerUI.System = System

0 commit comments

Comments
 (0)