/** * disk-backup-finder.ts * Copyright (C) 2021 Sanar * * @author Edgard Leal * @module disk-backup-finder.ts */ import fs from 'fs'; import Backup from '../../backup-definition/backup'; import BackupFinder from '../backup-finder'; import BackupReader from '../backup-reader'; import { resolvePath } from './disk-manager'; function allFiles(): Promise { return new Promise((resolve, reject) => { fs.readdir(resolvePath('/db/'), {}, (error: any, files: string[]) => { if (error) { reject(error); } else { resolve(files .filter((f: string): boolean => f.endsWith('.json')) .map((f: string): string => resolvePath(`/db/${f}`))); } }); }); } /** * Find a list of backups on disk * @author edgardleal@gmail.com * @since 04.03.21 */ export default class DiskBackupFinder implements BackupFinder { // eslint-disable-next-line no-useless-constructor constructor( private reader: BackupReader, // eslint-disable-next-line no-empty-function ) {} async find(filter: Partial): Promise { const list = await allFiles(); const result: Backup[] = []; for (let i = 0; i < list.length; i += 1) { const file = list[i]; const backup = await this.reader.read(file); if (backup && (!filter.name || backup.name.indexOf(filter.name))) { backup.lastBackup = backup.lastBackup ? new Date(backup.lastBackup!) : new Date(1); result.push(backup!); } } return result; } }