Sari la conținut

ADR-GDS-002 — Proiectul Angular exportat este self-contained

Acest conținut nu este încă disponibil în limba selectată.

  • Status: Acceptat (implementat)
  • Data: 2026-07-09
  • Context bloc: C (dezvoltare), aplicație GDS, export

Brieful cere ca exportul „Proiect Angular” (gds-mockup-project.zip) să conțină un package.json „cu @gstack/gds-core + gds-angular” și app.component.html cu componentele gds-*, ȘI (criteriu de acceptare AC-6) să compileze din prima (ng build verde, fără modificări).

Aceste două cerințe sunt în tensiune: pachetele @gstack/gds-* NU sunt publicate într-un registru npm, deci un npm install care le referă ar eșua → ng build ar pica.

Prioritizăm criteriul de acceptare AC-6 „compilează din prima”. Proiectul exportat este self-contained:

  • src/styles.css = token-urile GDS + accentul ales, inline (din gdsThemedCss), fără dependențe private.
  • src/app/app.component.ts randează mockup-ul via [innerHTML] + DomSanitizer.bypassSecurityTrustHtml(BODY), unde BODY = renderDocumentBody(doc) (exact HTML-ul din canvas). Se păstrează atributele de stil (înălțimi bare) pe care sanitizer-ul Angular altfel le-ar elimina.
  • package.json conține DOAR dependențe @angular/* publice → npm install + ng build garantat verzi.
  • README documentează cum se înlocuiește BODY cu componentele vii <gds-*> din @gstack/gds-angular după publicarea pachetelor.

bypassSecurityTrustHtml e sigur pentru fișierul generat pentru că întreg conținutul e escape-uit la sursă în render.ts (esc() pe fiecare interpolare de date de utilizator); BODY e serializat cu JSON.stringify în fișierul TS.

  • (+) AC-6 îndeplinit și verificat real: unzip → npm install → ng build = verde.
  • (+) Fișierul e portabil, fără acces la registrul privat.
  • (−) Abatere conștientă de la litera briefului (componente gds-* în export). Ridicarea la componente vii = follow-up, condiționat de publicarea @gstack/gds-* (ADR-GDS-001).
  • Verificat că package.json NU conține @gstack/ (test export-builders.spec).