@@ -2,28 +2,11 @@ import fs from 'fs'
22import path from 'path'
33import { fileURLToPath } from 'url'
44import toml from 'toml'
5+ import { VALID_TAGS , VALID_DATABASES , ValidTag , ValidDatabase } from './constants.js'
56
67const __filename = fileURLToPath ( import . meta. url )
78const __dirname = path . dirname ( __filename )
89
9- const VALID_TAGS = [
10- "ai" ,
11- "mcp" ,
12- "agent" ,
13- "rag" ,
14- "permission" ,
15- "sso" ,
16- "rbac" ,
17- "auth" ,
18- "ldap" ,
19- "storage" ,
20- "notification" ,
21- "task" ,
22- "other" ,
23- ] as const
24-
25- const VALID_DATABASES = [ 'mysql' , 'postgresql' ] as const
26-
2710const DEFAULT_ICON = 'https://wu-clan.github.io/picx-images-hosting/logo/fba.svg'
2811
2912interface PluginTomlPlugin {
@@ -32,8 +15,8 @@ interface PluginTomlPlugin {
3215 version : string
3316 description : string
3417 author : string
35- tags ?: string [ ]
36- database ?: string [ ]
18+ tags ?: ValidTag [ ]
19+ database ?: ValidDatabase [ ]
3720}
3821
3922interface PluginToml {
@@ -139,15 +122,24 @@ function generatePluginData(pluginsDir: string, gitmodulesPath: string): PluginD
139122 }
140123
141124 const rawPlugin = pluginConfig . plugin
142- let database : string [ ] | undefined
125+
126+ // 验证并过滤 tags
127+ let tags : ValidTag [ ] | undefined
128+ if ( rawPlugin . tags && Array . isArray ( rawPlugin . tags ) ) {
129+ const filtered = rawPlugin . tags
130+ . map ( tag => tag . toLowerCase ( ) )
131+ . filter ( ( tag ) : tag is ValidTag => VALID_TAGS . includes ( tag as ValidTag ) )
132+ if ( filtered . length > 0 ) {
133+ tags = [ ...new Set ( filtered ) ]
134+ }
135+ }
136+
137+ // 验证并过滤 database
138+ let database : ValidDatabase [ ] | undefined
143139 if ( rawPlugin . database && Array . isArray ( rawPlugin . database ) ) {
144140 const filtered = rawPlugin . database
145- . map ( db => {
146- const lower = db . toLowerCase ( )
147- if ( lower === 'pgsql' ) return 'postgresql'
148- return lower
149- } )
150- . filter ( db => VALID_DATABASES . includes ( db as any ) )
141+ . map ( db => db . toLowerCase ( ) as ValidDatabase )
142+ . filter ( ( db ) : db is ValidDatabase => VALID_DATABASES . includes ( db ) )
151143 if ( filtered . length > 0 ) {
152144 database = [ ...new Set ( filtered ) ]
153145 }
@@ -159,7 +151,7 @@ function generatePluginData(pluginsDir: string, gitmodulesPath: string): PluginD
159151 version : rawPlugin . version ,
160152 description : rawPlugin . description ,
161153 author : rawPlugin . author ,
162- ...( rawPlugin . tags && { tags : rawPlugin . tags } ) ,
154+ ...( tags && { tags } ) ,
163155 ...( database && { database } ) ,
164156 }
165157
@@ -174,15 +166,19 @@ function generatePluginData(pluginsDir: string, gitmodulesPath: string): PluginD
174166
175167function generateTypeScriptCode ( pluginDataList : PluginData [ ] ) : string {
176168 return `export const validTags = ${ JSON . stringify ( VALID_TAGS , null , 2 ) } as const
169+ export const validDatabases = ${ JSON . stringify ( VALID_DATABASES , null , 2 ) } as const
170+
171+ export type ValidTag = typeof validTags[number]
172+ export type ValidDatabase = typeof validDatabases[number]
177173
178174export interface PluginTomlPlugin {
179175 icon: string
180176 summary: string
181177 version: string
182178 description: string
183179 author: string
184- tags?: string []
185- database?: string []
180+ tags?: ValidTag []
181+ database?: ValidDatabase []
186182}
187183
188184export interface GitModule {
@@ -218,7 +214,7 @@ function main() {
218214
219215 fs . writeFileSync (
220216 path . join ( baseDir , 'plugins-data.json' ) ,
221- JSON . stringify ( { validTags : VALID_TAGS , pluginDataList } , null , 2 ) ,
217+ JSON . stringify ( { validTags : VALID_TAGS , validDatabases : VALID_DATABASES , pluginDataList } , null , 2 ) ,
222218 'utf-8'
223219 )
224220
0 commit comments