@@ -57,7 +57,14 @@ export class FilePersistenceAdapter {
5757 }
5858
5959 const data = await this . readFile ( this . metadataFile ) ;
60- const metadata = JSON . parse ( data ) as SyncMetadata [ ] ;
60+ let metadata : SyncMetadata [ ] ;
61+ try {
62+ metadata = JSON . parse ( data ) as SyncMetadata [ ] ;
63+ } catch ( parseError ) {
64+ const message = parseError instanceof Error ? parseError . message : String ( parseError ) ;
65+ this . logger . error ( `Failed to parse metadata JSON: ${ message } ` ) ;
66+ throw new Error ( `Corrupted metadata file: ${ message } ` ) ;
67+ }
6168
6269 this . logger . info ( `Loaded ${ metadata . length } metadata entries from persistence` ) ;
6370 return metadata ;
@@ -321,7 +328,12 @@ export class FilePersistenceAdapter {
321328 }
322329
323330 const data = await this . readFile ( this . metadataFile ) ;
324- return JSON . parse ( data ) as SyncMetadata [ ] ;
331+ try {
332+ return JSON . parse ( data ) as SyncMetadata [ ] ;
333+ } catch ( parseError ) {
334+ const message = parseError instanceof Error ? parseError . message : String ( parseError ) ;
335+ throw new Error ( `Failed to parse metadata file: ${ message } ` ) ;
336+ }
325337 }
326338
327339 /**
@@ -358,7 +370,14 @@ export class FilePersistenceAdapter {
358370 try {
359371 const backupPath = path . join ( this . options . cacheDirectory , backupFile ) ;
360372 const data = await this . readFile ( backupPath ) ;
361- const metadata = JSON . parse ( data ) as SyncMetadata [ ] ;
373+ let metadata : SyncMetadata [ ] ;
374+ try {
375+ metadata = JSON . parse ( data ) as SyncMetadata [ ] ;
376+ } catch ( parseError ) {
377+ const message = parseError instanceof Error ? parseError . message : String ( parseError ) ;
378+ this . logger . warn ( `Failed to parse backup ${ backupFile } : ${ message } ` ) ;
379+ continue ; // Try next backup
380+ }
362381
363382 this . logger . info ( `Recovered ${ metadata . length } metadata entries from backup: ${ backupFile } ` ) ;
364383 return metadata ;
0 commit comments