diff --git a/src/tools/server/images/abstract-icons-repository.ts b/src/tools/server/images/abstract-icons-repository.ts index e6cef53a8..13afd2bb5 100644 --- a/src/tools/server/images/abstract-icons-repository.ts +++ b/src/tools/server/images/abstract-icons-repository.ts @@ -1,10 +1,13 @@ +import Consola from 'consola'; + export abstract class AbstractIconRepository { - constructor(readonly copyright?: string) {} + protected constructor(readonly copyright?: string) {} async fetch(): Promise { try { return await this.fetchInternally(); } catch (err) { + Consola.error(`Failed to fetch icons from repository '${this.name}': ${err}`); return { success: false, count: 0, @@ -15,6 +18,8 @@ export abstract class AbstractIconRepository { } } protected abstract fetchInternally(): Promise; + + protected abstract name: string; } export type NormalizedIconRepositoryResult = { diff --git a/src/tools/server/images/github-icons-repository.ts b/src/tools/server/images/github-icons-repository.ts index 080195cfd..5eee806bd 100644 --- a/src/tools/server/images/github-icons-repository.ts +++ b/src/tools/server/images/github-icons-repository.ts @@ -51,6 +51,8 @@ export class GitHubIconsRepository extends AbstractIconRepository { copyright: this.copyright, }; } + + protected name: string = "GitHub"; } type GitHubRepositoryUrl = { diff --git a/src/tools/server/images/jsdelivr-icons-repository.ts b/src/tools/server/images/jsdelivr-icons-repository.ts index da9b353a0..c94a0b446 100644 --- a/src/tools/server/images/jsdelivr-icons-repository.ts +++ b/src/tools/server/images/jsdelivr-icons-repository.ts @@ -46,6 +46,8 @@ export class JsdelivrIconsRepository extends AbstractIconRepository { copyright: this.copyright, }; } + + protected name: string = "JsDelivr"; } type JsdelivrRepositoryUrl = { diff --git a/src/tools/server/images/local-icons-repository.ts b/src/tools/server/images/local-icons-repository.ts index e7f7826c9..709b68dfe 100644 --- a/src/tools/server/images/local-icons-repository.ts +++ b/src/tools/server/images/local-icons-repository.ts @@ -1,6 +1,13 @@ import fs from 'fs'; -import { AbstractIconRepository, NormalizedIcon, NormalizedIconRepositoryResult } from './abstract-icons-repository'; +import { + AbstractIconRepository, + NormalizedIcon, + NormalizedIconRepositoryResult, +} from './abstract-icons-repository'; +import Consola from 'consola'; + +const iconsDirectory = './public/icons'; export class LocalIconsRepository extends AbstractIconRepository { constructor() { @@ -8,7 +15,8 @@ export class LocalIconsRepository extends AbstractIconRepository { } protected async fetchInternally(): Promise { - if (!fs.existsSync('./public/icons')) { + if (!fs.existsSync(iconsDirectory)) { + Consola.info('Local icons repository directory does not exist'); return { count: 0, entries: [], @@ -18,24 +26,30 @@ export class LocalIconsRepository extends AbstractIconRepository { }; } - const files = fs.readdirSync('./public/icons'); + const files = fs.readdirSync(iconsDirectory); + Consola.info(`Local icons repository directory exists and contains ${files.length} icons`); const normalizedEntries = files .filter((file) => ['.png', '.svg', '.jpeg', '.jpg'].some((x) => file.endsWith(x))) .map( - (file): NormalizedIcon => ({ - name: file, - url: `./icons/${file}`, - size: 0, - }) + (file): NormalizedIcon => { + const stats = fs.statSync(`${iconsDirectory}/${file}`); + return { + name: file, + url: `/icons/${file}`, + size: stats.size, + }; + } ); return { entries: normalizedEntries, count: normalizedEntries.length, success: true, - name: 'Local', + name: this.name, copyright: this.copyright, }; } + + protected name: string = "Local"; } diff --git a/src/tools/server/images/unpkg-icons-repository.ts b/src/tools/server/images/unpkg-icons-repository.ts index 7838d52eb..d3dcb257f 100644 --- a/src/tools/server/images/unpkg-icons-repository.ts +++ b/src/tools/server/images/unpkg-icons-repository.ts @@ -35,6 +35,8 @@ export class UnpkgIconsRepository extends AbstractIconRepository { copyright: this.copyright, }; } + + protected name: string = "UnPkg"; } type UnpkgResponse = {