@@ -23,12 +23,18 @@ function httpsGetJson(url: string): Promise<unknown> {
2323 let data = '' ;
2424 res . on ( 'data' , ( c ) => ( data += c ) ) ;
2525 res . on ( 'end' , ( ) => {
26- try { resolve ( JSON . parse ( data ) ) ; }
27- catch { reject ( new Error ( 'JSON parse error' ) ) ; }
26+ try {
27+ resolve ( JSON . parse ( data ) ) ;
28+ } catch {
29+ reject ( new Error ( 'JSON parse error' ) ) ;
30+ }
2831 } ) ;
2932 } ) ;
3033 req . on ( 'error' , reject ) ;
31- req . setTimeout ( 10000 , ( ) => { req . destroy ( ) ; reject ( new Error ( 'Timeout' ) ) ; } ) ;
34+ req . setTimeout ( 10000 , ( ) => {
35+ req . destroy ( ) ;
36+ reject ( new Error ( 'Timeout' ) ) ;
37+ } ) ;
3238 } ) ;
3339}
3440
@@ -80,7 +86,11 @@ export function setActiveTheme(themeId: string): ThemeDefinition {
8086 return getActiveTheme ( ) ;
8187}
8288
83- export async function fetchRemoteThemes ( ) : Promise < { ok : boolean ; themes ?: ThemeDefinition [ ] ; error ?: string } > {
89+ export async function fetchRemoteThemes ( ) : Promise < {
90+ ok : boolean ;
91+ themes ?: ThemeDefinition [ ] ;
92+ error ?: string ;
93+ } > {
8494 try {
8595 const listing = await httpsGetJson ( contentsUrl ( THEME_GITHUB_PATH ) ) ;
8696 if ( ! Array . isArray ( listing ) ) return { ok : false , error : 'Themes folder not found' } ;
@@ -89,24 +99,30 @@ export async function fetchRemoteThemes(): Promise<{ ok: boolean; themes?: Theme
8999 try {
90100 const theme = ( await httpsGetJson ( rawUrl ( THEME_GITHUB_PATH , f . name ) ) ) as ThemeDefinition ;
91101 if ( theme . id && theme . name && theme . colors ) themes . push ( theme ) ;
92- } catch { /* skip */ }
102+ } catch {
103+ /* skip */
104+ }
93105 }
94106 return { ok : true , themes } ;
95107 } catch ( e ) {
96108 return { ok : false , error : String ( e ) } ;
97109 }
98110}
99111
100- export async function checkThemeUpdate ( themeId : string ) : Promise < { hasUpdate : boolean ; remoteVersion : number ; localVersion : number } > {
112+ export async function checkThemeUpdate (
113+ themeId : string
114+ ) : Promise < { hasUpdate : boolean ; remoteVersion : number ; localVersion : number } > {
101115 const state = loadThemeState ( ) ;
102116 const local = state . themes . find ( ( t ) => t . id === themeId ) ;
103117 if ( ! local ) return { hasUpdate : false , remoteVersion : 0 , localVersion : 0 } ;
104118
105119 const result = await fetchRemoteThemes ( ) ;
106- if ( ! result . ok || ! result . themes ) return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
120+ if ( ! result . ok || ! result . themes )
121+ return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
107122
108123 const remote = result . themes . find ( ( t ) => t . id === themeId ) ;
109- if ( ! remote ) return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
124+ if ( ! remote )
125+ return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
110126
111127 return {
112128 hasUpdate : remote . version > local . version ,
@@ -177,33 +193,45 @@ export function setActiveLanguage(langId: string): LanguageDefinition {
177193 return getActiveLanguage ( ) ;
178194}
179195
180- export async function fetchRemoteLanguages ( ) : Promise < { ok : boolean ; languages ?: LanguageDefinition [ ] ; error ?: string } > {
196+ export async function fetchRemoteLanguages ( ) : Promise < {
197+ ok : boolean ;
198+ languages ?: LanguageDefinition [ ] ;
199+ error ?: string ;
200+ } > {
181201 try {
182202 const listing = await httpsGetJson ( contentsUrl ( GITHUB_CONFIG . languagesPath ) ) ;
183203 if ( ! Array . isArray ( listing ) ) return { ok : false , error : 'Languages folder not found' } ;
184204 const languages : LanguageDefinition [ ] = [ ] ;
185205 for ( const f of ( listing as Array < { name : string } > ) . filter ( ( f ) => f . name . endsWith ( '.json' ) ) ) {
186206 try {
187- const lang = ( await httpsGetJson ( rawUrl ( GITHUB_CONFIG . languagesPath , f . name ) ) ) as LanguageDefinition ;
207+ const lang = ( await httpsGetJson (
208+ rawUrl ( GITHUB_CONFIG . languagesPath , f . name )
209+ ) ) as LanguageDefinition ;
188210 if ( lang . id && lang . name && lang . strings ) languages . push ( lang ) ;
189- } catch { /* skip */ }
211+ } catch {
212+ /* skip */
213+ }
190214 }
191215 return { ok : true , languages } ;
192216 } catch ( e ) {
193217 return { ok : false , error : String ( e ) } ;
194218 }
195219}
196220
197- export async function checkLanguageUpdate ( langId : string ) : Promise < { hasUpdate : boolean ; remoteVersion : number ; localVersion : number } > {
221+ export async function checkLanguageUpdate (
222+ langId : string
223+ ) : Promise < { hasUpdate : boolean ; remoteVersion : number ; localVersion : number } > {
198224 const state = loadLanguageState ( ) ;
199225 const local = state . languages . find ( ( l ) => l . id === langId ) ;
200226 if ( ! local ) return { hasUpdate : false , remoteVersion : 0 , localVersion : 0 } ;
201227
202228 const result = await fetchRemoteLanguages ( ) ;
203- if ( ! result . ok || ! result . languages ) return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
229+ if ( ! result . ok || ! result . languages )
230+ return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
204231
205232 const remote = result . languages . find ( ( l ) => l . id === langId ) ;
206- if ( ! remote ) return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
233+ if ( ! remote )
234+ return { hasUpdate : false , remoteVersion : local . version , localVersion : local . version } ;
207235
208236 return {
209237 hasUpdate : remote . version > local . version ,
@@ -212,7 +240,9 @@ export async function checkLanguageUpdate(langId: string): Promise<{ hasUpdate:
212240 } ;
213241}
214242
215- export async function applyLanguageUpdate ( langId : string ) : Promise < { ok : boolean ; error ?: string } > {
243+ export async function applyLanguageUpdate (
244+ langId : string
245+ ) : Promise < { ok : boolean ; error ?: string } > {
216246 const result = await fetchRemoteLanguages ( ) ;
217247 if ( ! result . ok || ! result . languages ) return { ok : false , error : result . error ?? 'Fetch failed' } ;
218248
@@ -244,14 +274,17 @@ function projectRoot(): string {
244274export function loadLocalDevThemes ( ) : ThemeDefinition [ ] {
245275 const dir = path . join ( projectRoot ( ) , 'themes' ) ;
246276 if ( ! fs . existsSync ( dir ) ) return [ ] ;
247- return fs . readdirSync ( dir )
277+ return fs
278+ . readdirSync ( dir )
248279 . filter ( ( f ) => f . endsWith ( '.json' ) )
249280 . map ( ( f ) => {
250281 try {
251282 const raw = fs . readFileSync ( path . join ( dir , f ) , 'utf8' ) ;
252283 const theme = JSON . parse ( raw ) as ThemeDefinition ;
253284 if ( theme . id && theme . name && theme . colors ) return theme ;
254- } catch { /* skip */ }
285+ } catch {
286+ /* skip */
287+ }
255288 return null ;
256289 } )
257290 . filter ( ( t ) : t is ThemeDefinition => t !== null ) ;
@@ -260,14 +293,17 @@ export function loadLocalDevThemes(): ThemeDefinition[] {
260293export function loadLocalDevLanguages ( ) : LanguageDefinition [ ] {
261294 const dir = path . join ( projectRoot ( ) , 'languages' ) ;
262295 if ( ! fs . existsSync ( dir ) ) return [ ] ;
263- return fs . readdirSync ( dir )
296+ return fs
297+ . readdirSync ( dir )
264298 . filter ( ( f ) => f . endsWith ( '.json' ) )
265299 . map ( ( f ) => {
266300 try {
267301 const raw = fs . readFileSync ( path . join ( dir , f ) , 'utf8' ) ;
268302 const lang = JSON . parse ( raw ) as LanguageDefinition ;
269303 if ( lang . id && lang . name && lang . strings ) return lang ;
270- } catch { /* skip */ }
304+ } catch {
305+ /* skip */
306+ }
271307 return null ;
272308 } )
273309 . filter ( ( l ) : l is LanguageDefinition => l !== null ) ;
@@ -286,4 +322,3 @@ export function syncLocalDevAssets(): { themes: number; languages: number } {
286322 }
287323 return { themes : tc , languages : lc } ;
288324}
289-
0 commit comments