Ir al contenido

Estado: Clase State

La clase State es el núcleo de la máquina de estados de Testform. Gestiona la deserialización, validación criptográfica, control de concurrencia y persistencia de testform.state.


Firma y Constructor

import { State } from '@fromeroc9/testform@beta';
const state = new State(
dir: string,
customStatePath?: string,
customBackupPath?: string,
disableBackend?: boolean,
backendConfigRaw?: string | string[],
explicitBackendConfig?: any
);

Métodos Principales

Método Retorno Descripción
hasState() Promise<boolean> Verifica si el archivo de estado existe en el backend actual.
init() Promise<void> Carga y valida el esquema del estado desde el backend.
acquireLock(enabled, timeout) Promise<void> Adquiere el bloqueo distribuido antes de una mutación.
releaseLock() Promise<void> Libera el bloqueo al finalizar la transacción.
getState() Readonly<IState> Devuelve una copia de sólo lectura del estado en memoria.
getResources(type?) StateResource[] Lista los recursos registrados, opcionalmente filtrados por tipo.
getResource(identity, type?) StateResource | undefined Busca un recurso específico por su identidad (@tc-101).
getOutputs() Record<string, StateOutput> Retorna el diccionario de salidas exportadas.
save() Promise<void> Incrementa el serial, limpia campos redundantes y persiste el estado.
replaceState(newState) void Sustituye el estado completo (usado en migraciones).
clean() { beforeBytes, afterBytes, resourcesCleaned } Optimiza y comprime atributos innecesarios.

Ejemplo de Uso Programático

import { State } from '@fromeroc9/testform@beta';
async function auditRepositoryState(projectDir: string) {
const stateManager = new State(projectDir);
// 1. Verificar existencia y cargar estado
if (!await stateManager.hasState()) {
console.log('No se encontró archivo de estado.');
return;
}
await stateManager.init();
// 2. Inspeccionar metadatos globales
const state = stateManager.getState();
console.log(`Linaje: ${state.lineage}`);
console.log(`Serial actual: ${state.serial}`);
console.log(`Última sincronización: ${state.lastSync}`);
// 3. Consultar casos de prueba reconciliados
const testcases = stateManager.getResources('testcase');
console.log(`Casos de prueba gestionados: ${testcases.length}`);
for (const tc of testcases) {
console.log(` - [${tc.identity}] Issue #${tc.attributes.issueNumber}: ${tc.attributes.title}`);
}
}
auditRepositoryState(process.cwd());