@@ -10,12 +10,22 @@ export default (api: IApi) => {
1010 key : 'openAPI' ,
1111 config : {
1212 schema ( joi ) {
13- return joi . object ( {
14- requestLibPath : joi . string ( ) ,
15- schemaPath : joi . string ( ) ,
16- mock : joi . boolean ( ) ,
17- projectName : joi . string ( ) ,
18- } ) ;
13+ return joi . alternatives (
14+ joi . array ( ) . items (
15+ joi . object ( {
16+ requestLibPath : joi . string ( ) ,
17+ schemaPath : joi . string ( ) ,
18+ mock : joi . boolean ( ) ,
19+ projectName : joi . string ( ) ,
20+ } ) ,
21+ ) ,
22+ joi . object ( {
23+ requestLibPath : joi . string ( ) ,
24+ schemaPath : joi . string ( ) ,
25+ mock : joi . boolean ( ) ,
26+ projectName : joi . string ( ) ,
27+ } ) ,
28+ ) ;
1929 } ,
2030 } ,
2131 enableBy : api . EnableBy . config ,
@@ -38,21 +48,43 @@ export default (api: IApi) => {
3848 } ) ;
3949
4050 api . onGenerateFiles ( ( ) => {
51+ const openAPIConfig = api . config . openAPI ;
4152 api . writeTmpFile ( {
4253 path : join ( 'plugin-openapi' , 'openapi.tsx' ) ,
4354 content : `
55+ import { useState } from "react";
4456import SwaggerUI from "swagger-ui-react";
4557import "swagger-ui-react/swagger-ui.css";
4658
47- const App = () => (
48- <div
49- style={{
50- padding: 24,
51- }}
52- >
53- <SwaggerUI url="/umi-plugins_openapi.json" />
54- </div>
55- );
59+ const App = () => {
60+ const [value, setValue] = useState("openapi");
61+ return (
62+ <div
63+ style={{
64+ padding: 24,
65+ }}
66+ >
67+ <select
68+ style={{
69+ position: "fixed",
70+ right: "16px",
71+ top: "8px",
72+ }}
73+ onChange={(e) => setValue(e.target.value)}
74+ >
75+ ${ [ openAPIConfig ]
76+ . flat ( 1 )
77+ . map ( ( item ) => {
78+ return `<option value="${ item . projectName || 'openapi' } ">${
79+ item . projectName || 'openapi'
80+ } </option>`;
81+ } )
82+ . join ( '\n' ) }
83+ </select>
84+ <SwaggerUI url={\`/umi-plugins_$\{value}.json\`} />
85+ </div>
86+ );
87+ };
5688export default App;
5789` ,
5890 } ) ;
@@ -72,42 +104,58 @@ export default App;
72104 } ) ;
73105 }
74106
107+ const genOpenAPIFiles = async ( openAPIConfig : any ) => {
108+ const openAPIJson = await getSchema ( openAPIConfig . schemaPath ) ;
109+ writeFileSync (
110+ join (
111+ openAPIFilesPath ,
112+ `umi-plugins_${ openAPIConfig . projectName || 'openapi' } .json` ,
113+ ) ,
114+ JSON . stringify ( openAPIJson , null , 2 ) ,
115+ ) ;
116+ } ;
75117 api . onDevCompileDone ( async ( ) => {
76118 try {
77119 const openAPIConfig = api . config . openAPI ;
78- const openAPIJson = await getSchema ( openAPIConfig . schemaPath ) ;
79- writeFileSync (
80- join ( openAPIFilesPath , 'umi-plugins_openapi.json' ) ,
81- JSON . stringify ( openAPIJson , null , 2 ) ,
82- ) ;
120+ if ( Array . isArray ( openAPIConfig ) ) {
121+ openAPIConfig . map ( ( item ) => genOpenAPIFiles ( item ) ) ;
122+ return ;
123+ }
124+ genOpenAPIFiles ( openAPIConfig ) ;
83125 } catch ( error ) {
84126 console . error ( error ) ;
85127 }
86128 } ) ;
129+ const genAllFiles = async ( openAPIConfig : any ) => {
130+ const pageConfig = require ( join ( api . cwd , 'package.json' ) ) ;
131+ const mockFolder = openAPIConfig . mock ? join ( api . cwd , 'mock' ) : undefined ;
132+ const serversFolder = join ( api . cwd , 'src' , 'services' ) ;
133+ // 如果mock 文件不存在,创建一下
134+ if ( mockFolder && ! existsSync ( mockFolder ) ) {
135+ mkdirSync ( mockFolder ) ;
136+ }
137+ // 如果mock 文件不存在,创建一下
138+ if ( serversFolder && ! existsSync ( serversFolder ) ) {
139+ mkdirSync ( serversFolder ) ;
140+ }
87141
142+ await generateService ( {
143+ projectName : pageConfig . name . split ( '/' ) . pop ( ) ,
144+ ...openAPIConfig ,
145+ serversPath : serversFolder ,
146+ mockFolder,
147+ } ) ;
148+ api . logger . info ( '[openAPI]: execution complete' ) ;
149+ } ;
88150 api . registerCommand ( {
89151 name : 'openapi' ,
90152 fn : async ( ) => {
91153 const openAPIConfig = api . config . openAPI ;
92- const pageConfig = require ( join ( api . cwd , 'package.json' ) ) ;
93- const mockFolder = openAPIConfig . mock ? join ( api . cwd , 'mock' ) : undefined ;
94- const serversFolder = join ( api . cwd , 'src' , 'services' ) ;
95- // 如果mock 文件不存在,创建一下
96- if ( mockFolder && ! existsSync ( mockFolder ) ) {
97- mkdirSync ( mockFolder ) ;
154+ if ( Array . isArray ( openAPIConfig ) ) {
155+ openAPIConfig . map ( ( item ) => genAllFiles ( item ) ) ;
156+ return ;
98157 }
99- // 如果mock 文件不存在,创建一下
100- if ( serversFolder && ! existsSync ( serversFolder ) ) {
101- mkdirSync ( serversFolder ) ;
102- }
103-
104- await generateService ( {
105- projectName : pageConfig . name . split ( '/' ) . pop ( ) ,
106- ...openAPIConfig ,
107- serversPath : serversFolder ,
108- mockFolder,
109- } ) ;
110- api . logger . info ( '[openAPI]: execution complete' ) ;
158+ genAllFiles ( openAPIConfig ) ;
111159 } ,
112160 } ) ;
113161} ;
0 commit comments