34 lines
1007 B
TypeScript
34 lines
1007 B
TypeScript
import { Account } from './account.model';
|
|
import { AccountVisitor } from './visitor.interface';
|
|
|
|
export class CsvExportVisitor implements AccountVisitor {
|
|
private rows: string[] = [];
|
|
|
|
constructor() {
|
|
// Add CSV header
|
|
this.rows.push('Service,Login,Password,Notes,UpdatedAt');
|
|
}
|
|
|
|
visitAccount(account: Account): void {
|
|
const data = account.decryptedData || {};
|
|
const service = this.escapeCsv(account.serviceName);
|
|
const login = this.escapeCsv(data['login'] || '');
|
|
const password = this.escapeCsv(data['password'] || '');
|
|
const notes = this.escapeCsv(data['notes'] || '');
|
|
const updatedAt = account.updatedAt.toISOString();
|
|
|
|
this.rows.push(`${service},${login},${password},${notes},${updatedAt}`);
|
|
}
|
|
|
|
getCsv(): string {
|
|
return this.rows.join('\n');
|
|
}
|
|
|
|
private escapeCsv(value: string): string {
|
|
if (value.includes(',') || value.includes('"') || value.includes('\n')) {
|
|
return `"${value.replace(/"/g, '""')}"`;
|
|
}
|
|
return value;
|
|
}
|
|
}
|