@@ -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
118121SwaggerUI . System = System
0 commit comments