Skip to content

Commit 485387a

Browse files
committed
perf(logging): improve formatting of debug log messages for better readability
1 parent 273573d commit 485387a

3 files changed

Lines changed: 65 additions & 17 deletions

File tree

src/core/package-detector.ts

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ export class PackageDetector {
4646
this.showProgress('🔍 Scanning repository for package.json files...')
4747
const tScan = Date.now()
4848
const allPackageJsonFiles = this.findPackageJsonFilesWithTimeout(30000) // 30 second timeout
49-
debugLog.perf('PackageDetector', `file scan (${allPackageJsonFiles.length} files)`, tScan, { files: allPackageJsonFiles })
49+
debugLog.perf('PackageDetector', `file scan (${allPackageJsonFiles.length} files)`, tScan, {
50+
files: allPackageJsonFiles,
51+
})
5052
this.showProgress(
5153
`🔍 Found ${allPackageJsonFiles.length} package.json file${allPackageJsonFiles.length === 1 ? '' : 's'}`
5254
)
@@ -91,7 +93,10 @@ export class PackageDetector {
9193
this.showProgress(`🔍 Skipped ${ignoredCount} ignored package(s)`)
9294
}
9395
const packageNames = Array.from(uniquePackageNames)
94-
debugLog.info('PackageDetector', `${packageNames.length} unique packages to check, ${ignoredCount} ignored`)
96+
debugLog.info(
97+
'PackageDetector',
98+
`${packageNames.length} unique packages to check, ${ignoredCount} ignored`
99+
)
95100

96101
// Step 4: Fetch all package data in one call per package
97102
// Create a map of package names to their current versions for major version optimization
@@ -120,7 +125,11 @@ export class PackageDetector {
120125
this.showProgress(`🌐 Checking versions... (${completed}/${total} packages)`)
121126
}
122127
)
123-
debugLog.perf('PackageDetector', `registry fetch (${allPackageData.size}/${packageNames.length} resolved)`, tFetch)
128+
debugLog.perf(
129+
'PackageDetector',
130+
`registry fetch (${allPackageData.size}/${packageNames.length} resolved)`,
131+
tFetch
132+
)
124133

125134
const loggedOutdated = new Set<string>()
126135
const loggedNoData = new Set<string>()
@@ -156,7 +165,10 @@ export class PackageDetector {
156165
const outdatedKey = `${dep.name}@${dep.version}`
157166
if (!loggedOutdated.has(outdatedKey)) {
158167
loggedOutdated.add(outdatedKey)
159-
debugLog.info('PackageDetector', `outdated: ${dep.name} ${dep.version} → range:${closestMinorVersion ?? '-'} latest:${latestVersion}`)
168+
debugLog.info(
169+
'PackageDetector',
170+
`outdated: ${dep.name} ${dep.version} → range:${closestMinorVersion ?? '-'} latest:${latestVersion}`
171+
)
160172
}
161173
}
162174

@@ -197,7 +209,11 @@ export class PackageDetector {
197209
}
198210

199211
const outdatedCount = packages.filter((p) => p.isOutdated).length
200-
debugLog.perf('PackageDetector', `total scan complete (${outdatedCount} outdated of ${packages.length} deps)`, t0)
212+
debugLog.perf(
213+
'PackageDetector',
214+
`total scan complete (${outdatedCount} outdated of ${packages.length} deps)`,
215+
t0
216+
)
201217
return packages
202218
} catch (error) {
203219
this.showProgress('❌ Failed to check packages\n')

src/services/jsdelivr-registry.ts

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ const toPositiveInteger = (value: number): number | null => {
3333
const RETRY_TIMEOUTS = (() => {
3434
const configured = Array.from(
3535
new Set(
36-
JSDELIVR_RETRY_TIMEOUTS.map(toPositiveInteger).filter((value): value is number => value !== null)
36+
JSDELIVR_RETRY_TIMEOUTS.map(toPositiveInteger).filter(
37+
(value): value is number => value !== null
38+
)
3739
)
3840
).sort((a, b) => a - b)
3941
return configured.length > 0 ? configured : [DEFAULT_JSDELIVR_RETRY_TIMEOUT_MS]
@@ -87,7 +89,9 @@ const getHeaderValue = (headers: ResponseHeaders, name: string): string | null =
8789
return direct.find((value) => typeof value === 'string') ?? null
8890
}
8991

90-
const headerEntry = Object.entries(headers).find(([headerName]) => headerName.toLowerCase() === name)
92+
const headerEntry = Object.entries(headers).find(
93+
([headerName]) => headerName.toLowerCase() === name
94+
)
9195
if (!headerEntry) {
9296
return null
9397
}
@@ -285,28 +289,42 @@ async function fetchPackageJsonFromJsdelivr(
285289
await consumeBodySafely(body)
286290
if (isRetryableStatus(statusCode) && attempt < RETRY_TIMEOUTS.length - 1) {
287291
const delay = getRetryDelay(attempt, headers as ResponseHeaders)
288-
debugLog.warn('jsdelivr', `${packageName}@${versionTag} HTTP ${statusCode}, retry ${attempt + 1} in ${delay}ms`)
292+
debugLog.warn(
293+
'jsdelivr',
294+
`${packageName}@${versionTag} HTTP ${statusCode}, retry ${attempt + 1} in ${delay}ms`
295+
)
289296
if (delay > 0) {
290297
await sleep(delay)
291298
}
292299
continue
293300
}
294-
debugLog.warn('jsdelivr', `${packageName}@${versionTag} HTTP ${statusCode}, no more retries`)
301+
debugLog.warn(
302+
'jsdelivr',
303+
`${packageName}@${versionTag} HTTP ${statusCode}, no more retries`
304+
)
295305
return null
296306
}
297307

298308
const text = await body.text()
299309
const data = JSON.parse(text) as { version?: unknown }
300310
const version = typeof data.version === 'string' ? data.version.trim() : ''
301-
debugLog.perf('jsdelivr', `fetch ${packageName}@${versionTag}${version || 'no version'}`, tReq)
311+
debugLog.perf(
312+
'jsdelivr',
313+
`fetch ${packageName}@${versionTag}${version || 'no version'}`,
314+
tReq
315+
)
302316
return version ? { version } : null
303317
} catch (error) {
304318
if (
305319
(isTimeoutError(error) || isTransientNetworkError(error)) &&
306320
attempt < RETRY_TIMEOUTS.length - 1
307321
) {
308322
const delay = getRetryDelay(attempt)
309-
debugLog.warn('jsdelivr', `${packageName}@${versionTag} transient error on attempt ${attempt + 1}, retry in ${delay}ms`, error)
323+
debugLog.warn(
324+
'jsdelivr',
325+
`${packageName}@${versionTag} transient error on attempt ${attempt + 1}, retry in ${delay}ms`,
326+
error
327+
)
310328
if (delay > 0) {
311329
await sleep(delay)
312330
}
@@ -319,7 +337,11 @@ async function fetchPackageJsonFromJsdelivr(
319337
`jsDelivr fetch failed for ${packageName}@${versionTag} on attempt ${attempt + 1}/${RETRY_TIMEOUTS.length}`,
320338
error
321339
)
322-
debugLog.error('jsdelivr', `unexpected error for ${packageName}@${versionTag} attempt ${attempt + 1}`, error)
340+
debugLog.error(
341+
'jsdelivr',
342+
`unexpected error for ${packageName}@${versionTag} attempt ${attempt + 1}`,
343+
error
344+
)
323345
} else {
324346
debugLog.warn('jsdelivr', `${packageName}@${versionTag} exhausted retries`, error)
325347
}
@@ -430,7 +452,11 @@ export async function getAllPackageDataFromJsdelivr(
430452

431453
if (result) {
432454
packageCache.set(packageName, result)
433-
debugLog.perf('jsdelivr', `npm fallback resolved ${packageName}${result.latestVersion}`, tFallback)
455+
debugLog.perf(
456+
'jsdelivr',
457+
`npm fallback resolved ${packageName}${result.latestVersion}`,
458+
tFallback
459+
)
434460
} else {
435461
debugLog.warn('jsdelivr', `npm fallback returned no data for ${packageName}`)
436462
}
@@ -518,7 +544,10 @@ export async function getAllPackageDataFromJsdelivr(
518544
addToBatch(packageName, result)
519545
}
520546
} catch (error) {
521-
console.error(`Failed to resolve package data for ${packageName}; continuing with others.`, error)
547+
console.error(
548+
`Failed to resolve package data for ${packageName}; continuing with others.`,
549+
error
550+
)
522551
} finally {
523552
completedCount++
524553
emitProgress(packageName, completedCount, total)

src/utils/debug-logger.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,12 @@ function write(level: LogLevel, context: string, message: string, extra?: unknow
7474
}
7575

7676
export const debugLog = {
77-
info: (context: string, message: string, extra?: unknown) => write('INFO', context, message, extra),
78-
warn: (context: string, message: string, extra?: unknown) => write('WARN', context, message, extra),
79-
error: (context: string, message: string, extra?: unknown) => write('ERROR', context, message, extra),
77+
info: (context: string, message: string, extra?: unknown) =>
78+
write('INFO', context, message, extra),
79+
warn: (context: string, message: string, extra?: unknown) =>
80+
write('WARN', context, message, extra),
81+
error: (context: string, message: string, extra?: unknown) =>
82+
write('ERROR', context, message, extra),
8083

8184
/** Log elapsed time since a start timestamp obtained via Date.now() */
8285
perf: (context: string, label: string, startMs: number, extra?: unknown) => {

0 commit comments

Comments
 (0)