4.1 KiB
AGENTS.md — JSON DevTools
Statická jednostránková aplikácia (vanilla ES6+, HTML/CSS/JS). Bez frameworkov,
bez npm, bez build procesu, bez backendu, bez CDN. Bez CI, package.json ani
lint konfigurácie — repozitár je hotový, nič sa nekompiluje.
ZákAZ KONTROL V PREHLIADAČOCH
V prehliadačoch sa nesú overovanie aplikácie – používateľ to robí sám.
Neotváraj Chrome/Chromium ani iný prehliadač, neautomatizuj ich, nescreenshotuj
cez prehliadač. Trvalé používateľské nariadenie, zapísané aj v globálnej pamäti
~/.config/opencode/AGENTS.md.
Povolené: statická kontrola (node --check), testy logiky v Node.js, curl/python.
Nepridávaj do repozitára testy ani nástroje založené na prehliadači.
Štruktúra
src/index.html src/style.css src/app.js # aplikácia – musia zostať v jednej zložke
tests/logic.test.js # Node testy (bez prehliadača)
docs/ # screenshoty pre README
src/index.htmlnačítavastyle.cssaapp.jsrelatívnou cestou → všetky tri súbory musia zostať vsrc/. Presun do rootu rozbije načítanie aj testy.- Aplikácia sa otvára ako
src/index.html(relatívne cesty), nie cez root. - Repo hostuje Gitea, nie GitHub — nepridávaj GitHub Actions/Pages šablóny.
Príkazy
node --check src/app.js # rýchla syntax kontrola
node tests/logic.test.js # testy logiky – 93 assertov, exit 1 pri chybe
python -m http.server 8080 --directory src # lokálne spustenie (voliteľné)
Nie je čo npm installovať ani buildovať – po úprave src/*.js|css|html stačí
reload stránky.
Ako funguje tests/logic.test.js
src/app.jssa načíta dovmsandboxu s ručným DOM stubom (žiadne jsdom). Aplikácia sa musí vedieť načítať bez reálneho DOM.- Stub vracia nový generický element pri každom
querySelector()→ DOM interakcie (tlačidlá, eventy, fokus) sa v Node testoch neoverujú. Overuj logiku cezwindow.JSONDevTools, nie cez DOM. src/app.jsmusí na konci exportovaťwindow.JSONDevTools(objekt s modulmiUtils, Toast, Theme, Splitter, Highlighter, Doc, Formatter, FileIO, Tree, Diff, Api, History, App) — bez neho testy skončí chybou.- Testy čítajú
../src/app.jsa../src/index.html→ pri presunu súborov treba upraviť cesty vtests/logic.test.js. - Pomocníci:
ok(name, cond, extra),eq(name, a, b),deepEq(...),section(t). - Testy obsahujú aj statické kontroly konzistencie: každé
$('#id')vapp.jsmusí existovať vindex.html, každé<button id>musí mať handler,idv HTML nesmie byť duplicitné. Novéidv HTML pridaj aj doapp.js, inak test zfailuje.
Architektúra src/app.js
Jeden IIFE, vnútri moduly: Utils, LS, Toast, Theme, Splitter,
Highlighter, Doc, Formatter, FileIO, Tree, Diff, Api, History,
App. Bez tried, bez DI – moduly sú plain objekty.
Nároky, ktoré treba rešpektovať:
Docje zdieľaný stav medzi Formatter a Tree – oba textareas sú synchro cezDoc.set(text, origin). Nový JSON pohľad pripoj cezDoc.onChange(), nie vlastnou kopírou textu.localStoragelen cezUtils.store(prefixjsondevtools.*). Wrapper zachytáva prekročenie kvóty a vyhodí toast – nepristupuj klocalStoragepriamo.- Bezpečnostná invariant: do historie sa nikdy nesmie uložiť
Authorization,CookieaniX-Api-Key– prechádza to cezsanitizeHeaders()vApi. Tokeny žijú iba v pamäti stránky. - CSS motívy sú CSS custom properties v
html[data-theme="dark"|"light"]– nové farby pridávaj ako premenné, nie ako hardcoded hodnoty. - UI texty v slovenčine, JSON hodnoty v angličtine.
Ostatné
- Screenshoty v
docs/sú v README vložené relatívnou cestou (docs/...) – pri presúvaní ich treba aktualizovať aj vREADME.md. src/index.html?theme=light|darkprepne motív len pre dané načítanie – uloženú preferenciu vlocalStorageneprepíše (prepíše ju až prepínač v hlavičke).