Fix script paths and move assets to public/ folder for Vite build compatibility

This commit is contained in:
Marcos
2026-03-22 20:45:20 -03:00
parent 304504b758
commit 57ba9d1c5f
155 changed files with 10614 additions and 26 deletions

View File

@@ -0,0 +1,69 @@
/**
* Teste completo de Backup e Log
* Executar no console: runBackupAndLogTest()
*/
(function(){
async function run(){
const results = [];
const add = (ok, msg) => { results.push({ ok, msg }); console.log(`${ok ? '✅' : '❌'} ${msg}`); };
try {
if (!window.backupManager || !window.dataManager) {
add(false, 'Managers não encontrados (backupManager/dataManager)');
return { results };
}
console.group('🔧 Teste: Backup e Log');
// Estado inicial
const beforeBackups = window.backupManager.getBackups();
console.log('Backups existentes:', beforeBackups.length);
// 1) Criar backup manual
const newBackup = await window.backupManager.createBackup('Backup manual - Teste');
add(typeof newBackup.timestamp === 'number', 'timestamp numérico no backup criado');
add(new Date(newBackup.createdAt).toString() !== 'Invalid Date', 'data válida no backup criado');
add(typeof newBackup.sizeBytes === 'number' && newBackup.sizeBytes > 0, 'sizeBytes válido no backup criado');
add(typeof newBackup.size === 'string' && /B|KB|MB|GB/.test(newBackup.size), 'size formatado no backup criado');
// 2) Listagem sem "Invalid Date" ou "undefined"
const list = window.backupManager.getBackups();
const invalids = list.filter(b => {
const d = Number(b.createdAt ?? b.timestamp);
return isNaN(d) || new Date(d).toString() === 'Invalid Date' || b.size == null || b.sizeBytes == null;
});
add(invalids.length === 0, 'lista de backups sem "Invalid Date"/"undefined"');
// 3) Restauração (escuta evento)
let restoredEvent = false;
const handler = () => { restoredEvent = true; };
document.addEventListener('backupRestored', handler, { once: true });
await window.backupManager.restoreBackup(newBackup.id);
add(restoredEvent === true, 'evento de restauração disparado');
// 4) Remoção do backup criado
window.backupManager.removeBackup(newBackup.id);
const afterRemoval = window.backupManager.getBackups();
add(!afterRemoval.find(b => b.id === newBackup.id), 'backup de teste removido com sucesso');
// 5) Atualização de logs (metadata)
const metaBefore = window.dataManager.getMetadata();
await window.dataManager.updateAllData();
const metaAfter = window.dataManager.getMetadata();
add(metaAfter && metaBefore && metaAfter.lastUpdate > metaBefore.lastUpdate, 'log: lastUpdate atualizado');
add(metaAfter && (metaAfter.successCount + metaAfter.errorCount === metaAfter.totalTypes), 'log: contagem consistente');
console.groupEnd();
return {
results,
backups: window.backupManager.getBackups(),
metadata: window.dataManager.getMetadata()
};
} catch (err) {
add(false, `Erro no teste: ${err.message}`);
return { results, error: err };
}
}
window.runBackupAndLogTest = run;
})();

View File

@@ -0,0 +1,185 @@
/**
* Teste Simples de Persistência - Executável no navegador
* Testa funcionalidades básicas do AdminConfigManager
*/
// Função principal de teste
async function testarPersistenciaSimples() {
console.log('🧪 Iniciando teste simples de persistência...');
try {
// Testar AdminConfigManager
if (typeof AdminConfigManager === 'undefined') {
throw new Error('AdminConfigManager não está disponível');
}
console.log('✅ AdminConfigManager disponível');
// Criar instância
const manager = new AdminConfigManager();
console.log('✅ Instância criada');
// Testar configuração padrão
const config = manager.getConfig();
console.log('✅ Configuração padrão obtida:', config);
// Testar salvamento
manager.updateConfig('app.name', 'Aço Calc Pro - Teste');
manager.updateConfig('theme.name', 'dark');
console.log('✅ Configurações atualizadas');
// Testar recuperação
const configAtualizada = manager.getConfig();
console.log('✅ Configuração recuperada:', configAtualizada);
// Verificar se as mudanças foram aplicadas
const nomeAtualizado = configAtualizada.app.name === 'Aço Calc Pro - Teste';
const temaAtualizado = configAtualizada.theme.name === 'dark';
console.log(`✅ Nome atualizado: ${nomeAtualizado}`);
console.log(`✅ Tema atualizado: ${temaAtualizado}`);
// Testar localStorage
const localStorageKey = manager.configKey;
const localStorageData = localStorage.getItem(localStorageKey);
console.log('✅ Dados no localStorage:', localStorageData ? 'Presentes' : 'Ausentes');
if (localStorageData) {
const parsedData = JSON.parse(localStorageData);
console.log('✅ Versão dos dados:', parsedData.version);
}
// Testar ToastManager se disponível
if (typeof ToastManager !== 'undefined') {
window.toastManager = new ToastManager();
console.log('✅ ToastManager inicializado');
if (nomeAtualizado && temaAtualizado) {
window.toastManager.success('🧪 Teste de persistência: SUCESSO!');
} else {
window.toastManager.warning('🧪 Teste de persistência: Parcial');
}
}
// Testar BackupManager se disponível
if (typeof BackupManager !== 'undefined') {
const backupManager = new BackupManager();
console.log('✅ BackupManager disponível');
// Criar backup de teste
const backup = await backupManager.createBackup();
console.log('✅ Backup criado:', backup.id);
// Listar backups
const backups = backupManager.getBackups();
console.log('✅ Backups disponíveis:', backups.length);
}
console.log('🎉 Teste simples concluído com sucesso!');
// Retornar resultado para uso externo
return {
success: nomeAtualizado && temaAtualizado,
details: {
nomeAtualizado,
temaAtualizado,
localStoragePresente: !!localStorageData
}
};
} catch (error) {
console.error('❌ Erro no teste:', error);
if (typeof ToastManager !== 'undefined' && window.toastManager) {
window.toastManager.error('❌ Erro no teste: ' + error.message);
}
return {
success: false,
error: error.message
};
}
}
// Função para testar persistência após reload
function testarReload() {
console.log('🔄 Preparando teste de reload...');
if (typeof AdminConfigManager !== 'undefined') {
const manager = new AdminConfigManager();
// Salvar configuração de teste
manager.updateConfig('app.name', 'Aço Calc Pro - Teste Reload');
manager.updateConfig('test.timestamp', new Date().toISOString());
console.log('✅ Configurações de teste salvas');
console.log('🔄 Recarregando em 3 segundos...');
if (window.toastManager) {
window.toastManager.info('🔄 Recarregando página para testar persistência...');
}
setTimeout(() => {
location.reload();
}, 3000);
} else {
console.log('⚠️ Verificando persistência após reload...');
// Verificar se as configurações persistiram
const manager = new AdminConfigManager();
const config = manager.getConfig();
if (config.app.name === 'Aço Calc Pro - Teste Reload') {
console.log('✅ Persistência após reload: SUCESSO!');
if (window.toastManager) {
window.toastManager.success('✅ Configurações persistiram após reload!');
}
} else {
console.log('❌ Persistência após reload: FALHA');
console.log('Config atual:', config.app.name);
if (window.toastManager) {
window.toastManager.error('❌ Configurações não persistiram após reload');
}
}
}
}
// Função para limpar testes
function limparTestes() {
console.log('🧹 Limpando testes...');
if (typeof AdminConfigManager !== 'undefined') {
const manager = new AdminConfigManager();
manager.resetConfig();
console.log('✅ Configurações resetadas');
}
if (typeof BackupManager !== 'undefined') {
const backupManager = new BackupManager();
backupManager.clearBackups();
console.log('✅ Backups limpos');
}
if (window.toastManager) {
window.toastManager.success('🧹 Testes limpos com sucesso!');
}
console.log('✅ Testes limpos');
}
// Disponibilizar funções globalmente
window.testarPersistenciaSimples = testarPersistenciaSimples;
window.testarReload = testarReload;
window.limparTestes = limparTestes;
// Auto-executar teste quando a página carregar
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => {
setTimeout(testarPersistenciaSimples, 2000);
});
} else {
setTimeout(testarPersistenciaSimples, 2000);
}
console.log('🧪 Sistema de teste simples de persistência carregado');

View File

@@ -0,0 +1,310 @@
/**
* Script de Teste para Sistema de Persistência
* Testa as funcionalidades do AdminConfigManager e BackupManager
*/
class PersistenceTest {
constructor() {
this.tests = [];
this.results = [];
}
/**
* Executa todos os testes de persistência
*/
async runAllTests() {
console.log('🧪 Iniciando testes de persistência...');
// Aguardar carregamento dos módulos
await this.waitForModules();
// Executar testes
await this.testConfigPersistence();
await this.testBackupSystem();
await this.testThemePersistence();
await this.testResetFunctionality();
// Mostrar resultados
this.showResults();
console.log('✅ Testes de persistência concluídos!');
}
/**
* Aguarda os módulos necessários estarem carregados
*/
async waitForModules() {
console.log('⏳ Aguardando módulos...');
let attempts = 0;
const maxAttempts = 50; // 5 segundos
while (attempts < maxAttempts) {
// Verificar instâncias globais inicializadas pelos módulos
if (window.adminConfigManager && window.backupManager && window.toastManager) {
console.log('✅ Módulos (instâncias) carregados');
return;
}
// Como fallback, se as classes existirem mas instâncias ainda não, tentar inicializar
if (!window.adminConfigManager && typeof AdminConfigManager !== 'undefined') {
try { window.adminConfigManager = new AdminConfigManager(); } catch(e) {}
}
if (!window.backupManager && typeof BackupManager !== 'undefined') {
try { window.backupManager = new BackupManager(); } catch(e) {}
}
if (!window.toastManager && typeof ToastManager !== 'undefined') {
try { window.toastManager = new ToastManager(); } catch(e) {}
}
await new Promise(resolve => setTimeout(resolve, 100));
attempts++;
}
throw new Error('❌ Módulos não carregados após 5 segundos');
}
/**
* Testa persistência de configurações
*/
async testConfigPersistence() {
console.log('📝 Testando persistência de configurações...');
try {
// Criar instância do config manager
const configManager = new AdminConfigManager();
// Testar configuração inicial
const initialConfig = configManager.getConfig();
this.addResult('Config inicial', !!initialConfig, 'Configuração inicial carregada');
// Testar salvamento de configuração
configManager.updateConfig('app.name', 'Aço Calc Pro - Teste');
configManager.updateConfig('app.version', '2.0.0');
configManager.updateConfig('theme.name', 'light');
// Recarregar e verificar se persistiu
const configManager2 = new AdminConfigManager();
const config2 = configManager2.getConfig();
this.addResult('Salvamento app.name', config2.app.name === 'Aço Calc Pro - Teste', 'Nome da aplicação persistido');
this.addResult('Salvamento app.version', config2.app.version === '2.0.0', 'Versão persistida');
this.addResult('Salvamento theme.name', config2.theme.name === 'light', 'Tema persistido');
console.log('✅ Testes de persistência de configurações concluídos');
} catch (error) {
this.addResult('Config Persistence', false, `Erro: ${error.message}`);
console.error('❌ Erro nos testes de configuração:', error);
}
}
/**
* Testa sistema de backup
*/
async testBackupSystem() {
console.log('💾 Testando sistema de backup...');
try {
const backupManager = new BackupManager();
// Testar criação de backup
const backup = await backupManager.createBackup();
this.addResult('Criação backup', !!backup.id, 'Backup criado com ID');
// Testar listagem de backups
const backups = backupManager.getBackups();
this.addResult('Listagem backups', backups.length > 0, `${backups.length} backup(s) encontrado(s)`);
// Testar recuperação de backup específico (via lista)
const specificBackup = backups.find(b => b.timestamp === backup.timestamp);
this.addResult('Recuperação backup', !!specificBackup, 'Backup recuperado por timestamp');
// Testar remoção de backup (usar timestamp)
backupManager.removeBackup(backup.timestamp);
const backupsAfterRemove = backupManager.getBackups();
this.addResult('Remoção backup', backupsAfterRemove.length === backups.length - 1, 'Backup removido com sucesso');
console.log('✅ Testes de backup concluídos');
} catch (error) {
this.addResult('Backup System', false, `Erro: ${error.message}`);
console.error('❌ Erro nos testes de backup:', error);
}
}
/**
* Testa persistência de tema
*/
async testThemePersistence() {
console.log('🎨 Testando persistência de tema...');
try {
const configManager = new AdminConfigManager();
// Testar diferentes temas
const themes = ['dark', 'light', 'auto'];
for (const theme of themes) {
configManager.updateConfig('theme.name', theme);
// Recarregar e verificar
const configManager2 = new AdminConfigManager();
const config2 = configManager2.getConfig();
this.addResult(`Tema ${theme}`, config2.theme.name === theme, `Tema ${theme} persistido`);
}
console.log('✅ Testes de tema concluídos');
} catch (error) {
this.addResult('Theme Persistence', false, `Erro: ${error.message}`);
console.error('❌ Erro nos testes de tema:', error);
}
}
/**
* Testa funcionalidade de reset
*/
async testResetFunctionality() {
console.log('🔄 Testando funcionalidade de reset...');
try {
const configManager = new AdminConfigManager();
// Modificar configurações
configManager.updateConfig('app.name', 'Nome Modificado');
configManager.updateConfig('app.version', '9.9.9');
// Resetar
configManager.resetConfig();
// Verificar se voltou ao padrão
const config = configManager.getConfig();
// Estrutura padrão usa chaves top-level: appName e version
const isDefaultName = config.appName === 'AÇO CALC PRO';
const isDefaultVersion = config.version === '1.0.0';
this.addResult('Reset app.name', isDefaultName, 'Nome resetado para padrão');
this.addResult('Reset app.version', isDefaultVersion, 'Versão resetada para padrão');
console.log('✅ Testes de reset concluídos');
} catch (error) {
this.addResult('Reset Functionality', false, `Erro: ${error.message}`);
console.error('❌ Erro nos testes de reset:', error);
}
}
/**
* Adiciona resultado de teste
*/
addResult(testName, success, message) {
this.results.push({
name: testName,
success: success,
message: message,
timestamp: new Date().toISOString()
});
const status = success ? '✅' : '❌';
console.log(`${status} ${testName}: ${message}`);
}
/**
* Mostra resultados dos testes
*/
showResults() {
const totalTests = this.results.length;
const passedTests = this.results.filter(r => r.success).length;
const failedTests = totalTests - passedTests;
console.log('\n📊 RESUMO DOS TESTES:');
console.log(`Total de testes: ${totalTests}`);
console.log(`✅ Passou: ${passedTests}`);
console.log(`❌ Falhou: ${failedTests}`);
console.log(`Taxa de sucesso: ${((passedTests / totalTests) * 100).toFixed(1)}%`);
// Mostrar falhas em detalhes
if (failedTests > 0) {
console.log('\n📋 FALHAS DETALHADAS:');
this.results.filter(r => !r.success).forEach(result => {
console.log(`${result.name}: ${result.message}`);
});
}
// Testar se o ToastManager está disponível para mostrar resultado
if (window.toastManager) {
const successRate = (passedTests / totalTests) * 100;
if (successRate === 100) {
window.toastManager.success(`🧪 Todos os testes de persistência passaram! (${passedTests}/${totalTests})`);
} else if (successRate >= 80) {
window.toastManager.warning(`🧪 ${passedTests}/${totalTests} testes passaram (${successRate.toFixed(1)}%)`);
} else {
window.toastManager.error(`🧪 Apenas ${passedTests}/${totalTests} testes passaram (${successRate.toFixed(1)}%)`);
}
}
}
}
// Função para testar persistência após reload
function testarPersistenciaAposReload() {
console.log('🔄 Testando persistência após reload da página...');
// Salvar configuração de teste
if (window.adminConfigManager) {
window.adminConfigManager.updateConfig('app.name', 'Aço Calc Pro - Teste Reload');
window.adminConfigManager.updateConfig('theme.name', 'light');
console.log('✅ Configurações de teste salvas');
console.log('🔄 Recarregando página em 2 segundos...');
setTimeout(() => {
location.reload();
}, 2000);
} else {
// Verificar se as configurações persistiram após reload
if (window.adminConfigManager) {
const config = window.adminConfigManager.getConfig();
if (config.app.name === 'Aço Calc Pro - Teste Reload') {
console.log('✅ Persistência após reload: SUCESSO!');
if (window.toastManager) {
window.toastManager.success('✅ Configurações persistiram após reload!');
}
} else {
console.log('❌ Persistência após reload: FALHA');
if (window.toastManager) {
window.toastManager.error('❌ Configurações não persistiram após reload');
}
}
}
}
}
// Auto-executar testes quando os módulos estiverem prontos
if (typeof window !== 'undefined') {
window.addEventListener('load', async () => {
console.log('🧪 Sistema de testes de persistência carregado');
// Aguardar um pouco para garantir que tudo está carregado
setTimeout(async () => {
try {
const tester = new PersistenceTest();
await tester.runAllTests();
} catch (error) {
console.error('❌ Erro ao executar testes:', error);
}
}, 1000);
});
}
// Disponibilizar funções globalmente para testes manuais
window.testarPersistencia = () => {
const tester = new PersistenceTest();
tester.runAllTests();
};
window.testarPersistenciaAposReload = testarPersistenciaAposReload;
console.log('🧪 Sistema de testes de persistência inicializado');

View File

@@ -0,0 +1,81 @@
/**
* Teste Manual de Disponibilidade de Módulos
* Verifica se os módulos de persistência estão disponíveis globalmente
*/
console.log('🔍 Teste Manual de Disponibilidade Iniciado');
// Verificar disponibilidade dos módulos
function verificarDisponibilidade() {
const resultados = {
AdminConfigManager: typeof AdminConfigManager !== 'undefined',
BackupManager: typeof BackupManager !== 'undefined',
ToastManager: typeof ToastManager !== 'undefined',
adminConfigManager: typeof window.adminConfigManager !== 'undefined',
backupManager: typeof window.backupManager !== 'undefined',
toastManager: typeof window.toastManager !== 'undefined'
};
console.log('📊 Disponibilidade de Módulos:', resultados);
// Testar criação de instâncias
if (resultados.AdminConfigManager) {
try {
const tempConfig = new AdminConfigManager();
console.log('✅ AdminConfigManager pode ser instanciado');
console.log('📋 Config padrão:', tempConfig.getConfig());
} catch (error) {
console.error('❌ Erro ao instanciar AdminConfigManager:', error);
}
}
if (resultados.BackupManager) {
try {
const tempBackup = new BackupManager();
console.log('✅ BackupManager pode ser instanciado');
} catch (error) {
console.error('❌ Erro ao instanciar BackupManager:', error);
}
}
if (resultados.ToastManager) {
try {
const tempToast = new ToastManager();
console.log('✅ ToastManager pode ser instanciado');
} catch (error) {
console.error('❌ Erro ao instanciar ToastManager:', error);
}
}
return resultados;
}
// Executar após 2 segundos para garantir carregamento
setTimeout(() => {
console.log('⏱️ Executando teste de disponibilidade após 2s...');
const resultados = verificarDisponibilidade();
// Testar persistência básica
if (resultados.AdminConfigManager) {
try {
const configManager = new AdminConfigManager();
const config = configManager.getConfig();
config.appName = 'Teste Manual';
configManager.saveConfig(config);
const configSalva = configManager.getConfig();
console.log('✅ Teste de persistência básico:', configSalva.appName === 'Teste Manual' ? 'SUCESSO' : 'FALHA');
// Resetar
configManager.resetConfig();
console.log('🔄 Config resetada para padrão');
} catch (error) {
console.error('❌ Erro no teste de persistência:', error);
}
}
console.log('✅ Teste Manual de Disponibilidade Concluído');
}, 2000);
// Tornar função global para testes manuais
window.verificarDisponibilidade = verificarDisponibilidade;

View File

@@ -0,0 +1,176 @@
/**
* Verificador de Status do Sistema de Persistência
* Verifica se os módulos foram carregados corretamente
*/
(function verificarStatusPersistencia() {
console.log('🔍 Verificando status do sistema de persistência...');
// Verificar após um delay para garantir que tudo foi carregado
setTimeout(() => {
const status = {
AdminConfigManager: typeof AdminConfigManager !== 'undefined',
BackupManager: typeof BackupManager !== 'undefined',
ToastManager: typeof ToastManager !== 'undefined',
adminConfigManager: window.adminConfigManager !== null,
backupManager: window.backupManager !== null,
toastManager: window.toastManager !== null
};
console.log('📊 Status do Sistema de Persistência:');
console.table(status);
// Verificar localStorage
const localStorageKeys = Object.keys(localStorage).filter(key =>
key.includes('admin') || key.includes('backup') || key.includes('config')
);
console.log('📁 Chaves no localStorage:', localStorageKeys);
// Tentar criar instâncias se não existirem
if (typeof AdminConfigManager !== 'undefined' && !window.adminConfigManager) {
try {
window.adminConfigManager = new AdminConfigManager();
console.log('✅ AdminConfigManager inicializado manualmente');
} catch (error) {
console.error('❌ Erro ao inicializar AdminConfigManager:', error);
}
}
if (typeof BackupManager !== 'undefined' && !window.backupManager) {
try {
window.backupManager = new BackupManager();
console.log('✅ BackupManager inicializado manualmente');
} catch (error) {
console.error('❌ Erro ao inicializar BackupManager:', error);
}
}
if (typeof ToastManager !== 'undefined' && !window.toastManager) {
try {
window.toastManager = new ToastManager();
console.log('✅ ToastManager inicializado manualmente');
} catch (error) {
console.error('❌ Erro ao inicializar ToastManager:', error);
}
}
// Testar funcionalidade básica
if (window.adminConfigManager) {
try {
const config = window.adminConfigManager.getConfig();
console.log('✅ Configuração atual:', config);
// Testar salvamento
window.adminConfigManager.updateConfig('test.verification', new Date().toISOString());
console.log('✅ Teste de salvamento realizado');
} catch (error) {
console.error('❌ Erro ao testar AdminConfigManager:', error);
}
}
// Mostrar resumo
const totalModulos = Object.keys(status).length;
const modulosOk = Object.values(status).filter(v => v).length;
const percentual = (modulosOk / totalModulos * 100).toFixed(1);
console.log(`📈 Sistema de Persistência: ${modulosOk}/${totalModulos} módulos OK (${percentual}%)`);
if (window.toastManager) {
if (percentual === '100.0') {
window.toastManager.success('✅ Sistema de persistência totalmente operacional!');
} else if (percentual >= '66.7') {
window.toastManager.warning(`⚠️ Sistema de persistência parcial (${percentual}%)`);
} else {
window.toastManager.error(`❌ Sistema de persistência com problemas (${percentual}%)`);
}
}
}, 3000); // Aguardar 3 segundos para garantir carregamento
// Também verificar após 10 segundos (backup)
setTimeout(() => {
console.log('🔍 Verificação de backup do sistema de persistência:');
if (window.adminConfigManager) {
try {
const config = window.adminConfigManager.getConfig();
console.log('✅ Config após 10s:', {
appName: config.app.name,
theme: config.theme.name,
version: config.version
});
} catch (error) {
console.error('❌ AdminConfigManager ainda com problemas:', error);
}
} else {
console.error('❌ AdminConfigManager não disponível após 10s');
}
}, 10000);
})();
// Função para debug detalhado
window.debugPersistencia = function() {
console.group('🔍 Debug Detalhado do Sistema de Persistência');
// Verificar cada módulo
console.log('1. Verificando AdminConfigManager:');
console.log(' - Tipo:', typeof AdminConfigManager);
console.log(' - Disponível:', typeof AdminConfigManager !== 'undefined');
if (typeof AdminConfigManager !== 'undefined') {
try {
const tempManager = new AdminConfigManager();
console.log(' - Instância criada com sucesso');
console.log(' - Config padrão:', tempManager.getConfig());
// Testar localStorage
const key = tempManager.configKey;
const data = localStorage.getItem(key);
console.log(' - localStorage key:', key);
console.log(' - Dados no localStorage:', data ? 'Presentes' : 'Ausentes');
} catch (error) {
console.error(' - Erro ao criar instância:', error);
}
}
console.log('2. Verificando BackupManager:');
console.log(' - Tipo:', typeof BackupManager);
console.log(' - Disponível:', typeof BackupManager !== 'undefined');
console.log('3. Verificando ToastManager:');
console.log(' - Tipo:', typeof ToastManager);
console.log(' - Disponível:', typeof ToastManager !== 'undefined');
console.log('4. Verificando variáveis globais:');
console.log(' - window.adminConfigManager:', window.adminConfigManager);
console.log(' - window.backupManager:', window.backupManager);
console.log(' - window.toastManager:', window.toastManager);
console.log('5. Verificando localStorage:');
const relevantKeys = Object.keys(localStorage).filter(key =>
key.includes('admin') || key.includes('backup') || key.includes('config')
);
console.log(' - Chaves relevantes:', relevantKeys);
relevantKeys.forEach(key => {
try {
const data = JSON.parse(localStorage.getItem(key));
console.log(` - ${key}:`, {
type: typeof data,
hasVersion: !!data.version,
hasAppConfig: !!(data.app || data.application),
hasTheme: !!(data.theme || data.themes),
size: JSON.stringify(data).length
});
} catch (e) {
console.log(` - ${key}: (dados inválidos)`);
}
});
console.groupEnd();
};
console.log('🔍 Sistema de verificação de persistência carregado');