# multi-form-app example

Bemutatja: form-coverage + viewport-audit + CWV-diag egy app-ban, egy bootstrap
scripten keresztül.

## Felépítés

```
multi-form-app/
├── README.md
├── bootstrap.ts            ← egyetlen Node-script ami mind a 3 generatort futtatja
├── settings/
│   ├── login-form.json
│   └── profile-form.json
├── viewport-config.json
├── cwv-config.json
└── e2e/tests/generated/
    ├── login-form.spec.ts
    ├── profile-form.spec.ts
    ├── viewport-audit.spec.ts
    └── cwv-diag.spec.ts
```

## bootstrap.ts (programmatic API minta)

```typescript
import { DyE2E_FormSuite_Generator } from '@futdevpro/dynamo-e2e/generators';
import { DyE2E_ViewportSuite_Generator } from '@futdevpro/dynamo-e2e/generators';
import { DyE2E_CWVSuite_Generator } from '@futdevpro/dynamo-e2e/cwv';
import * as fs from 'fs';
import * as path from 'path';

const SETTINGS_DIR: string = path.join(__dirname, 'settings');
const OUT_DIR: string = path.join(__dirname, 'e2e/tests/generated');
fs.mkdirSync(OUT_DIR, { recursive: true });

// 1) Form-coverage per Settings POJO
for (const file of fs.readdirSync(SETTINGS_DIR)) {
  const cfg = JSON.parse(fs.readFileSync(path.join(SETTINGS_DIR, file), 'utf-8'));
  const spec = DyE2E_FormSuite_Generator.emit(cfg);
  const baseName: string = file.replace(/\.json$/, '');
  fs.writeFileSync(path.join(OUT_DIR, `${baseName}.spec.ts`), spec);
}

// 2) Viewport audit
const vCfg = JSON.parse(fs.readFileSync(path.join(__dirname, 'viewport-config.json'), 'utf-8'));
fs.writeFileSync(path.join(OUT_DIR, 'viewport-audit.spec.ts'), DyE2E_ViewportSuite_Generator.emit(vCfg));

// 3) CWV diagnostics
const cwvCfg = JSON.parse(fs.readFileSync(path.join(__dirname, 'cwv-config.json'), 'utf-8'));
fs.writeFileSync(path.join(OUT_DIR, 'cwv-diag.spec.ts'), DyE2E_CWVSuite_Generator.emit(cwvCfg));

console.log('[bootstrap] generated', fs.readdirSync(OUT_DIR).length, 'spec files');
```

## Futtatás

```bash
ts-node bootstrap.ts
npx playwright test
```

A teljes generation `<1s` még 5-form + 7-viewport + 5-route konfiguráción is.
