refactor: expand project corpus and update dependency and configuration files

This commit is contained in:
Lucas Rayan committed 2026-08-26 10:32:58 -03:00
1 parent e347a95dd6
commit f11058f5df
31 files changed
+28824 -715

No files matched your search

+7 -6
View File
@@ -1,7 +1,8 @@
chrome >= 90
firefox >= 90
edge >= 90
safari >= 15
ios_saf >= 15
and_chr >= 90
chrome >= 109
firefox >= 109
edge >= 109
safari >= 16.4
ios_saf >= 16.4
and_chr >= 109
not dead
+5 -5
View File
@@ -274,7 +274,7 @@ export default function DiagnosticoPage() {
{resultadoLog && (
<div className="mt-4 p-4 sm:p-5 rounded-2xl bg-amber-50 dark:bg-amber-950/30 border border-amber-200 dark:border-amber-900/50 transition-all">
<div className="flex items-start gap-3.5">
<div className="p-2 rounded-xl bg-amber-500 text-white shrink-0 mt-0.5 shadow-xs">
<div className="p-2 rounded-xl bg-amber-700 text-white shrink-0 mt-0.5 shadow-xs">
<ShieldAlert className="w-5 h-5" />
</div>
<div className="space-y-2 flex-1">
@@ -351,7 +351,7 @@ export default function DiagnosticoPage() {
onClick={() => setSintomaAtivo(ativo ? null : sintoma.id)}
className={`px-2.5 py-1 rounded-lg font-medium transition-all shrink-0 cursor-pointer border ${
ativo
? "bg-amber-600 text-white border-amber-600 shadow-xs font-bold"
? "bg-amber-700 text-white border-amber-700 shadow-xs font-bold"
: "bg-slate-100/80 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300 border-slate-200 dark:border-slate-750 hover:bg-amber-50 dark:hover:bg-amber-950/40 hover:border-amber-300 dark:hover:border-amber-800"
}`}
>
@@ -386,7 +386,7 @@ export default function DiagnosticoPage() {
onClick={() => setCategoriaAtiva("todos")}
className={`p-2.5 rounded-xl text-xs font-bold transition-all text-left flex flex-col justify-between gap-1 cursor-pointer border ${
categoriaAtiva === "todos"
? "bg-amber-600 text-white border-amber-600 shadow-sm ring-2 ring-amber-500/20"
? "bg-amber-700 text-white border-amber-700 shadow-sm ring-2 ring-amber-600/20"
: "bg-slate-50 dark:bg-slate-950/60 text-slate-700 dark:text-slate-300 border-slate-200 dark:border-slate-800 hover:border-amber-300 dark:hover:border-amber-700"
}`}
>
@@ -418,7 +418,7 @@ export default function DiagnosticoPage() {
onClick={() => setCategoriaAtiva(cat.id)}
className={`p-2.5 rounded-xl text-xs font-bold transition-all text-left flex flex-col justify-between gap-1 cursor-pointer border ${
ativa
? "bg-amber-600 text-white border-amber-600 shadow-sm ring-2 ring-amber-500/20"
? "bg-amber-700 text-white border-amber-700 shadow-sm ring-2 ring-amber-600/20"
: "bg-slate-50 dark:bg-slate-950/60 text-slate-700 dark:text-slate-300 border-slate-200 dark:border-slate-800 hover:border-amber-300 dark:hover:border-amber-700"
}`}
>
@@ -515,7 +515,7 @@ export default function DiagnosticoPage() {
<button
type="button"
onClick={limparTodosFiltros}
className="mt-4 px-4 py-2 bg-amber-600 text-white rounded-xl text-xs font-bold hover:bg-amber-700 cursor-pointer shadow-xs inline-flex items-center gap-1.5"
className="mt-4 px-4 py-2 bg-amber-700 text-white rounded-xl text-xs font-bold hover:bg-amber-800 cursor-pointer shadow-xs inline-flex items-center gap-1.5"
>
<RotateCcw className="w-3.5 h-3.5" />
<span>Limpar todos os filtros</span>
+1 -1
View File
@@ -112,7 +112,7 @@ export default function Frameworks() {
>
{framework.linguagem}
</span>
<span className="text-[9px] font-bold text-slate-400 dark:text-slate-500">
<span className="text-[9px] font-bold text-slate-600 dark:text-slate-350">
{framework.tipo}
</span>
</div>
+1 -1
View File
@@ -39,7 +39,7 @@
}
body {
@apply bg-slate-50 text-slate-900 transition-colors duration-300;
@apply bg-slate-50 text-slate-900;
}
/* next-themes aplica a classe .dark no <html>, não no <body>.
+1 -1
View File
@@ -107,7 +107,7 @@ export default function RootLayout({ children }) {
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd.siteESociedade()) }}
/>
</head>
<body className="font-sans antialiased bg-slate-50 text-slate-900 dark:bg-slate-950 dark:text-slate-50 transition-colors duration-300" suppressHydrationWarning>
<body className="font-sans antialiased bg-slate-50 text-slate-900 dark:bg-slate-950 dark:text-slate-50" suppressHydrationWarning>
<Providers>
{children}
</Providers>
+4 -2
View File
@@ -211,7 +211,7 @@ export default function Home() {
];
return (
<div className="bg-gradient-to-br from-slate-100 via-slate-50 to-purple-100/40 dark:from-slate-950 dark:via-slate-950 dark:to-slate-900 min-h-screen text-slate-900 dark:text-slate-100 transition-colors duration-300">
<div className="bg-gradient-to-br from-slate-100 via-slate-50 to-purple-100/40 dark:from-slate-950 dark:via-slate-950 dark:to-slate-900 min-h-screen text-slate-900 dark:text-slate-100">
<Header />
<main className="px-4 sm:px-6 pt-10 md:pt-16 pb-24 max-w-7xl mx-auto">
@@ -249,7 +249,7 @@ export default function Home() {
</Link>
<Link
className="group inline-flex items-center gap-2.5 bg-amber-600 hover:bg-amber-700 text-white px-7 py-3.5 rounded-xl font-bold text-sm shadow-md hover:-translate-y-0.5 transition-all duration-200 cursor-pointer active:scale-95"
className="group inline-flex items-center gap-2.5 bg-amber-700 hover:bg-amber-800 text-white px-7 py-3.5 rounded-xl font-bold text-sm shadow-md hover:-translate-y-0.5 transition-all duration-200 cursor-pointer active:scale-95"
href="/diagnostico"
>
<AlertTriangle className="w-4 h-4" />
@@ -372,6 +372,7 @@ export default function Home() {
<Link
key={chip.slug}
href={`/series/${chip.slug}`}
prefetch={false}
className="group bg-white dark:bg-slate-900/50 backdrop-blur-md p-6 rounded-2xl border border-slate-300 dark:border-slate-800/80 hover:border-purple-500 dark:hover:border-purple-400 shadow-xs hover:shadow-lg transition-all duration-300 flex flex-col justify-between"
>
<div>
@@ -442,6 +443,7 @@ export default function Home() {
<Link
key={err.title}
href="/diagnostico"
prefetch={false}
className="group bg-white dark:bg-slate-900/80 p-5 rounded-2xl border border-slate-200 dark:border-slate-800 hover:border-amber-400 dark:hover:border-amber-400 transition-all duration-200 flex flex-col justify-between"
>
<div>
+1 -1
View File
@@ -12,7 +12,7 @@ export default function Footer() {
}, []);
return (
<footer role="contentinfo" aria-label="Rodapé do site ESPDocs" className="bg-slate-50 dark:bg-slate-950 text-slate-600 dark:text-slate-400 mt-24 border-t border-slate-250/30 dark:border-slate-800/80 transition-all duration-300">
<footer role="contentinfo" aria-label="Rodapé do site ESPDocs" className="bg-slate-50 dark:bg-slate-950 text-slate-600 dark:text-slate-400 mt-24 border-t border-slate-250/30 dark:border-slate-800/80">
<div className="max-w-7xl mx-auto px-6 py-12 md:py-16">
<div className="grid grid-cols-1 md:grid-cols-3 gap-10 md:gap-16">
+1 -1
View File
@@ -96,7 +96,7 @@ export default function Header() {
];
return (
<header className="bg-white/90 dark:bg-slate-950/80 backdrop-blur-md py-3.5 px-4 md:px-8 shadow-xs border-b border-slate-200 dark:border-slate-800/60 sticky top-0 z-50 transition-colors duration-300">
<header className="bg-white/90 dark:bg-slate-950/80 backdrop-blur-md py-3.5 px-4 md:px-8 shadow-xs border-b border-slate-200 dark:border-slate-800/60 sticky top-0 z-50">
<div className="flex justify-between max-w-7xl mx-auto items-center gap-4 lg:gap-8">
{/* LOGO */}
<Link href="/" className="group shrink-0 flex items-center gap-2.5">
+1 -1
View File
@@ -4,7 +4,7 @@ import { ThemeProvider } from "next-themes";
export default function Providers({ children }) {
return (
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem={true}>
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem={true} disableTransitionOnChange>
{children}
</ThemeProvider>
);
+1
View File
@@ -17,6 +17,7 @@ const eslintConfig = [
".next/**",
"out/**",
"build/**",
"public/**",
"next-env.d.ts",
],
},
+24 -1
View File
@@ -80,5 +80,28 @@
"78": "RenderResult",
"79": "micropython.py",
"80": ".getSize",
"81": "start.config.js"
"81": "start.config.js",
"82": "UndisplayedFilter",
"83": "esp-zigbee.c",
"84": "Hook",
"85": "write_cb",
"86": "ContentParser",
"87": "componentRegistryData.js",
"88": "esp-now.c",
"89": "Following",
"90": "diagnosticoData.js",
"91": "eqStr",
"92": "Lists",
"93": "layout.jsx",
"94": "layout.jsx",
"95": "esp-iot-solution.c",
"96": "esp-sr.c",
"97": "layout.jsx",
"98": "layout.jsx",
"99": "page.jsx",
"100": "glossarioData.js",
"101": "rust-esp.rs",
"102": "consumeRaw$4",
"103": "dumpAtruleMapSyntax",
"104": "requireValidateSymbol"
}
@@ -0,0 +1,84 @@
{
"0": "paged.polyfill.js",
"1": "Layout",
"2": "AtPage",
"3": "Page",
"4": ".push",
"5": "dependencies",
"6": ".replace",
"7": ".indexOf",
"8": "Sheet",
"9": "peek",
"10": "Breaks",
"11": "Queue",
"12": "allocateCursor",
"13": "ESPDocs - Documentação ESP32 em Português",
"14": "isNameStart",
"15": "Diretrizes de tema: claro e escuro",
"16": "internalMatch",
"17": "Previewer",
"18": "auditar-temas.mjs",
"19": "layout.jsx",
"20": "buildGroupMatchGraph",
"21": "getCharCode",
"22": "page.jsx",
"23": "PinRestrictions.jsx",
"24": "eslint.config.mjs",
"25": "compilerOptions",
"26": "requireKeys",
"27": "outOfRange",
"28": "testNode",
"29": "page.jsx",
"30": "page.jsx",
"31": "page.jsx",
"32": "esp-matter.c",
"33": "seo.js",
"34": "consumeB$1",
"35": "processStructure",
"36": "generate$2",
"37": "getVendorPrefix",
"38": "layout.jsx",
"39": "layout.jsx",
"40": "page.jsx",
"41": "page.jsx",
"42": "page.jsx",
"43": "layout.jsx",
"44": "layout.jsx",
"45": "page.jsx",
"46": "Header.jsx",
"47": "esp-nn.c",
"48": "esp-who.c",
"49": "matchSyntax",
"50": "consumeNumber$5",
"51": "strcmp",
"52": "readSequence",
"53": "patchAtrules",
"54": "route.js",
"55": "page.jsx",
"56": "robots.js",
"57": "page.jsx",
"58": "sitemap.js",
"59": "CLAUDE.md",
"60": "BoardCard.jsx",
"61": "Footer.jsx",
"62": "Providers.jsx",
"63": "SeriesTabMenu.jsx",
"64": "next.config.mjs",
"65": "postcss.config.mjs",
"66": "esp-adf.c",
"67": "esp-dsp.c",
"68": "esp-idf.c",
"69": "consumeDeclaration",
"70": "consumeRaw$4",
"71": "createParseContext",
"72": "dumpAtruleMapSyntax",
"73": "isProtoString",
"74": "getWalkersFromStructure",
"75": "isDelim",
"76": "isSelectorValid",
"77": "OverflowContentError",
"78": "RenderResult",
"79": "micropython.py",
"80": ".getSize",
"81": "start.config.js"
}
+283
View File
@@ -0,0 +1,283 @@
# Graph Report - ESPDocs (2026-08-24)
## Corpus Check
- 59 files · ~675,087 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 833 nodes · 1499 edges · 82 communities (58 shown, 24 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 20 edges (avg confidence: 0.53)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d5303561`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- paged.polyfill.js
- Layout
- AtPage
- Page
- .push
- dependencies
- .replace
- .indexOf
- Sheet
- peek
- Breaks
- Queue
- allocateCursor
- ESPDocs - Documentação ESP32 em Português
- isNameStart
- Diretrizes de tema: claro e escuro
- internalMatch
- Previewer
- auditar-temas.mjs
- layout.jsx
- buildGroupMatchGraph
- getCharCode
- PinRestrictions.jsx
- eslint.config.mjs
- compilerOptions
- requireKeys
- outOfRange
- testNode
- page.jsx
- page.jsx
- esp-matter.c
- seo.js
- consumeB$1
- processStructure
- generate$2
- getVendorPrefix
- layout.jsx
- layout.jsx
- page.jsx
- page.jsx
- layout.jsx
- layout.jsx
- page.jsx
- esp-nn.c
- matchSyntax
- consumeNumber$5
- strcmp
- readSequence
- patchAtrules
- CLAUDE.md
- next.config.mjs
- postcss.config.mjs
- consumeDeclaration
- consumeRaw$4
- createParseContext
- dumpAtruleMapSyntax
- isProtoString
- getWalkersFromStructure
- isDelim
- isSelectorValid
- OverflowContentError
- RenderResult
## God Nodes (most connected - your core abstractions)
1. `AtPage` - 39 edges
2. `walk()` - 27 edges
3. `Layout` - 21 edges
4. `Page` - 18 edges
5. `Footnotes` - 18 edges
6. `Chunker` - 17 edges
7. `Counters` - 17 edges
8. `Sheet` - 16 edges
9. `createItem()` - 14 edges
10. `join()` - 14 edges
## Surprising Connections (you probably didn't know these)
- `nodeAfter()` --calls--> `nextSignificantNode()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 1 → community 10_
- `sourceFragment()` --calls--> `join()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 6 → community 4_
- `generateSequence()` --calls--> `join()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 36 → community 4_
- `peek()` --calls--> `scanString()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 7 → community 9_
- `readImplicitGroup()` --calls--> `regroupTerms()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 6 → community 9_
## Import Cycles
- None detected.
## Communities (82 total, 24 thin omitted)
### Community 0 - "paged.polyfill.js"
Cohesion: 0.02
Nodes (25): consumeRaw$4(), consumeRule(), dumpAtruleMapSyntax(), dumpMapSyntax(), NOTE: The order of the mappings is NOT guaranteed., TODO: should consume block content as Raw?, TODO: fall back to mutation observer?, TODO: not sure we should support this hack (+17 more)
### Community 1 - "Layout"
Cohesion: 0.06
Nodes (27): breakInsideAvoidParentNode(), BreakToken, child(), cloneNode(), displayedElementAfter(), elementAfter(), findElement(), findRef() (+19 more)
### Community 2 - "AtPage"
Cohesion: 0.05
Nodes (8): append(), AtPage, createItem(), CSSValueToString(), PageCounterIncrement, PositionFixed, PrintMedia, ScriptsFilter
### Community 3 - "Page"
Cohesion: 0.06
Nodes (14): CodeExample(), ConnectionsDiagram(), FILTER_CATEGORIES, type_colors, Chunker, dump(), forEachToken(), Page (+6 more)
### Community 4 - ".push"
Cohesion: 0.11
Nodes (12): collectWarning(), computeSourceURL(), Counters, createNodeStructureChecker(), isAbsolute(), join(), normalize(), prepareTokens$1() (+4 more)
### Community 5 - "dependencies"
Cohesion: 0.04
Nodes (46): @emotion/react, @emotion/styled, eslint, eslint-config-next, @eslint/eslintrc, framer-motion, googleapis, lucide-react (+38 more)
### Community 6 - ".replace"
Cohesion: 0.05
Nodes (21): attr(), calc(), cleanPseudoContent(), consumeFunction(), ContentParser, customIdent(), defer(), eqStr() (+13 more)
### Community 7 - ".indexOf"
Cohesion: 0.09
Nodes (12): ArraySet$1(), calculateSpecificity(), cleanSelector(), compareByGeneratedPositionsInflated(), generatedPositionAfter(), getArg(), MappingList$1(), relative() (+4 more)
### Community 8 - "Sheet"
Cohesion: 0.13
Nodes (7): Handler, Hook, invokeForType(), Lists, Sheet, validate(), walk()
### Community 9 - "peek"
Cohesion: 0.22
Nodes (18): charCode(), customPropertyName(), idSelector(), maybeMultiplied(), maybeToken(), parse$2(), peek(), readGroup() (+10 more)
### Community 10 - "Breaks"
Cohesion: 0.09
Nodes (15): Breaks, CommentsFilter, displayedElementBefore(), elementBefore(), filterTree(), getNodeWithNamedPage(), isAllWhitespace(), isIgnorable() (+7 more)
### Community 12 - "allocateCursor"
Cohesion: 0.21
Nodes (9): allocateCursor(), appendOrAssign(), appendOrAssignOrNull(), copy(), createTypeIterator(), deepAssign(), isObject$2(), mix$1() (+1 more)
### Community 13 - "ESPDocs - Documentação ESP32 em Português"
Cohesion: 0.13
Nodes (14): 👤 Autor, Configuração do Marketplace (Opcional), 🤝 Contribuindo, 🚀 Deploy on Vercel, ⚠️ Disclaimer, ESPDocs - Documentação ESP32 em Português, 📁 Estrutura do Projeto, Executar em Desenvolvimento (+6 more)
### Community 14 - "isNameStart"
Cohesion: 0.15
Nodes (13): isDigit$5(), isHexDigit$4(), isIdentifierStart$2(), isLetter(), isLowercaseLetter(), isName$2(), isNameStart(), isNewline$1() (+5 more)
### Community 15 - "Diretrizes de tema: claro e escuro"
Cohesion: 0.17
Nodes (11): 1. Só existem os tons declarados, 2. A regra da simetria, 3. Pares canônicos por papel, 4.1. Botão nunca inverte preto ↔ branco, 4.2. Painel de destaque acompanha o tema, 4.3. Separação de superfície no tema claro, 4. Exceção: superfícies escuras nos dois temas, 5. Cor de série vem do dado, não da classe (+3 more)
### Community 16 - "internalMatch"
Cohesion: 0.20
Nodes (11): areStringsEqualCaseInsensitive(), buildLoc(), fromLoc(), internalMatch(), isCommaContextEnd(), isCommaContextStart(), isContextEdgeDelim(), locateMismatch() (+3 more)
### Community 18 - "auditar-temas.mjs"
Cohesion: 0.48
Nodes (6): arquivos(), contraste(), coresFixasInline(), ESCALA, luminancia(), main()
### Community 19 - "layout.jsx"
Cohesion: 0.33
Nodes (4): inter, metadata, outfit, viewport
### Community 20 - "buildGroupMatchGraph"
Cohesion: 0.53
Nodes (6): buildGroupMatchGraph(), buildMatchGraph$1(), buildMultiplierMatchGraph(), createCondition(), isEnumCapatible(), isFunctionType()
### Community 21 - "getCharCode"
Cohesion: 0.53
Nodes (6): consumeBadUrlRemnants$1(), consumeEscaped$1(), consumeName$1(), getCharCode(), getNewlineLength$1(), tokenize$3()
### Community 23 - "PinRestrictions.jsx"
Cohesion: 0.60
Nodes (4): derivarGrupos(), GRUPOS, PinRestrictions(), rotuloDoPino()
### Community 24 - "eslint.config.mjs"
Cohesion: 0.40
Nodes (4): compat, __dirname, eslintConfig, __filename
### Community 25 - "compilerOptions"
Cohesion: 0.40
Nodes (4): compilerOptions, paths, @/*, ./*
### Community 26 - "requireKeys"
Cohesion: 0.40
Nodes (5): assign(), requireIsImplemented$1(), requireKeys(), requireShim$4(), requireShim$5()
### Community 27 - "outOfRange"
Cohesion: 0.40
Nodes (6): dimension(), integer(), isPostfixIeHack(), number(), outOfRange(), percentage()
### Community 28 - "testNode"
Cohesion: 0.40
Nodes (4): isKeyword(), isProperty(), isType(), testNode()
### Community 29 - "page.jsx"
Cohesion: 0.67
Nodes (3): categoryIcons, Comparacao(), valorDe()
### Community 31 - "page.jsx"
Cohesion: 0.67
Nodes (3): getOptionIcon(), iconMap, Seletor()
### Community 34 - "consumeB$1"
Cohesion: 0.50
Nodes (4): checkInteger$1(), consumeB$1(), isDelim$1(), skipSC()
### Community 36 - "generate$2"
Cohesion: 0.50
Nodes (4): generate$2(), generateMultiplier(), generateSequence(), generateTypeOpts()
### Community 37 - "getVendorPrefix"
Cohesion: 0.67
Nodes (4): getKeywordDescriptor(), getPropertyDescriptor(), getVendorPrefix(), isCustomProperty$1()
### Community 49 - "matchSyntax"
Cohesion: 0.67
Nodes (3): buildMatchResult(), matchSyntax(), valueHasVar()
### Community 50 - "consumeNumber$5"
Cohesion: 0.67
Nodes (3): cmpChar$5(), consumeNumber$5(), findDecimalNumberEnd()
### Community 51 - "strcmp"
Cohesion: 0.67
Nodes (3): compareByGeneratedPositionsDeflated(), compareByOriginalPositions(), strcmp()
### Community 52 - "readSequence"
Cohesion: 0.67
Nodes (3): consumeRaw(), parentheses(), readSequence()
### Community 53 - "patchAtrules"
Cohesion: 0.67
Nodes (3): patchAtrules(), patchDictionary(), unpackSyntaxes()
### Community 70 - "consumeRaw$4"
Cohesion: 0.29
Nodes (6): requireEs6Symbol(), requireIsArguments(), requireIsFunction(), requireIsImplemented(), requireIsString(), requireShim$1()
### Community 72 - "dumpAtruleMapSyntax"
Cohesion: 0.33
Nodes (5): pastaModulo, raiz, saida, servidor, TIPOS
## Knowledge Gaps
- **78 isolated node(s):** `metadata`, `metadata`, `categoryIcons`, `metadata`, `metadata` (+73 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **24 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `AtPage` connect `AtPage` to `paged.polyfill.js`, `Page`, `.push`?**
_High betweenness centrality (0.044) - this node is a cross-community bridge._
- **Why does `Page` connect `Page` to `paged.polyfill.js`, `.replace`?**
_High betweenness centrality (0.029) - this node is a cross-community bridge._
- **Why does `Chunker` connect `Page` to `paged.polyfill.js`?**
_High betweenness centrality (0.023) - this node is a cross-community bridge._
- **What connects `metadata`, `metadata`, `categoryIcons` to the rest of the system?**
_78 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `paged.polyfill.js` be split into smaller, more focused modules?**
_Cohesion score 0.022216913521261348 - nodes in this community are weakly interconnected._
- **Should `Layout` be split into smaller, more focused modules?**
_Cohesion score 0.056535504296698326 - nodes in this community are weakly interconnected._
- **Should `AtPage` be split into smaller, more focused modules?**
_Cohesion score 0.05427905427905428 - nodes in this community are weakly interconnected._
File diff suppressed because it is too large. Load diff
+477
View File
@@ -0,0 +1,477 @@
{
"app/api/placas/route.js": {
"mtime": 1787208875.1094453,
"ast_hash": "292fa5aae92458ae0098d7fa41ccba72",
"semantic_hash": ""
},
"app/catalogo/layout.jsx": {
"mtime": 1787492776.0956094,
"ast_hash": "f228a345868fa3e409f80133c29aa737",
"semantic_hash": ""
},
"app/catalogo/page.jsx": {
"mtime": 1787212450.0282295,
"ast_hash": "f1734aa31b6e84da295b6e2ee670b333",
"semantic_hash": ""
},
"app/comparacao/layout.jsx": {
"mtime": 1787492776.089609,
"ast_hash": "288273a48c04bbdc124c62848e9d7ca9",
"semantic_hash": ""
},
"app/comparacao/page.jsx": {
"mtime": 1787227734.6678472,
"ast_hash": "5e2c544715404ab174ce3d54c969f93b",
"semantic_hash": ""
},
"app/frameworks/[key]/page.jsx": {
"mtime": 1787492933.9300845,
"ast_hash": "a5ed16ece919880c8300d897424c49a2",
"semantic_hash": ""
},
"app/frameworks/page.jsx": {
"mtime": 1787493006.3313804,
"ast_hash": "f878cabb7d4a27e83262d95b769b8dc9",
"semantic_hash": ""
},
"app/glossario/page.jsx": {
"mtime": 1787493006.3354793,
"ast_hash": "6a02ace0ab551d91794fce1a0b19c753",
"semantic_hash": ""
},
"app/layout.jsx": {
"mtime": 1787499080.3362017,
"ast_hash": "78e4dcb798d3806a4a37071ecfc9ef0d",
"semantic_hash": ""
},
"app/page.jsx": {
"mtime": 1787212450.023114,
"ast_hash": "31690989ba2c2ed800f1fb7fb78a0ed8",
"semantic_hash": ""
},
"app/robots.js": {
"mtime": 1787492747.5210466,
"ast_hash": "75bc90966a10439d6485dd11454fccbd",
"semantic_hash": ""
},
"app/seletor/layout.jsx": {
"mtime": 1787492776.0926092,
"ast_hash": "73da1dea1a6b930897053dda83e27f4f",
"semantic_hash": ""
},
"app/seletor/page.jsx": {
"mtime": 1787227734.668592,
"ast_hash": "4ad52df27f6742b5a6302e694593164c",
"semantic_hash": ""
},
"app/series/[key]/page.jsx": {
"mtime": 1787493839.4458327,
"ast_hash": "ade633944e6605b43b3279859e5031c7",
"semantic_hash": ""
},
"app/series/layout.jsx": {
"mtime": 1787493098.9029381,
"ast_hash": "eb809632a02c5731c37fba793c2c6a4a",
"semantic_hash": ""
},
"app/series/page.jsx": {
"mtime": 1787227734.6664312,
"ast_hash": "a2271ce4a77e45d5e03feeec3196c496",
"semantic_hash": ""
},
"app/sitemap.js": {
"mtime": 1787492747.5170462,
"ast_hash": "906d69e855c533c8937646cfe386121e",
"semantic_hash": ""
},
"app/sobre/page.jsx": {
"mtime": 1787493098.9036343,
"ast_hash": "85a3aaa744cb6b2226616bc3c88d60a4",
"semantic_hash": ""
},
"components/BoardCard.jsx": {
"mtime": 1787212419.8479488,
"ast_hash": "50130a57d076ea247a341801685faf14",
"semantic_hash": ""
},
"components/CodeExample.jsx": {
"mtime": 1787227734.670659,
"ast_hash": "ed46db1f388eaf2170e383722cd988ec",
"semantic_hash": ""
},
"components/ConnectionsDiagram.jsx": {
"mtime": 1787212419.845745,
"ast_hash": "6898b8e25e23d506512e6a9f634a8424",
"semantic_hash": ""
},
"components/Footer.jsx": {
"mtime": 1787212419.85472,
"ast_hash": "bd7ffbe86c0b3815a27e5e90f56848c7",
"semantic_hash": ""
},
"components/Header.jsx": {
"mtime": 1787493839.49114,
"ast_hash": "65796747b210fb0313ea5e2b41234c0a",
"semantic_hash": ""
},
"components/PinRestrictions.jsx": {
"mtime": 1787227759.6538575,
"ast_hash": "10907f1e0fb249f497ed4fc365303ef9",
"semantic_hash": ""
},
"components/Providers.jsx": {
"mtime": 1787208875.111169,
"ast_hash": "d31db26b58629a807b7df4c4a3189772",
"semantic_hash": ""
},
"components/SeriesTabMenu.jsx": {
"mtime": 1787227734.6712155,
"ast_hash": "20947d45331bd3be7cb858246746f45c",
"semantic_hash": ""
},
"eslint.config.mjs": {
"mtime": 1787208875.111688,
"ast_hash": "cd28c192684b52caf16d8d1df068e272",
"semantic_hash": ""
},
"jsconfig.json": {
"mtime": 1787208875.115688,
"ast_hash": "21306b44064ae42bbbd715b1986abaf8",
"semantic_hash": ""
},
"lib/seo.js": {
"mtime": 1787492722.9508429,
"ast_hash": "12b829f0078d3fb18cb20f832f498c17",
"semantic_hash": ""
},
"next.config.mjs": {
"mtime": 1787208875.115688,
"ast_hash": "21958f5752add43cc47ab0ff5172cd46",
"semantic_hash": ""
},
"package.json": {
"mtime": 1787577906.3179622,
"ast_hash": "4224d3570f8164a9291a49197c690114",
"semantic_hash": ""
},
"postcss.config.mjs": {
"mtime": 1787208875.1166883,
"ast_hash": "675899342e765a4d16acd75a53389101",
"semantic_hash": ""
},
"public/conexoes/ESP32-C2.json": {
"mtime": 1787208875.11729,
"ast_hash": "aad3b4f175c3dd386adbf368f15073f7",
"semantic_hash": ""
},
"public/conexoes/ESP32-C3.json": {
"mtime": 1787208875.1173952,
"ast_hash": "5deecb15a45f0291802077cd24e4051b",
"semantic_hash": ""
},
"public/conexoes/ESP32-C5.json": {
"mtime": 1787208875.1173952,
"ast_hash": "949d8facf94a56f254872c185a88d2a1",
"semantic_hash": ""
},
"public/conexoes/ESP32-C6.json": {
"mtime": 1787208875.1173952,
"ast_hash": "84dceb481e501b68643300982832c8c7",
"semantic_hash": ""
},
"public/conexoes/ESP32-C61.json": {
"mtime": 1787208875.1173952,
"ast_hash": "88aa2cadabff6bbd1ba662531e904df6",
"semantic_hash": ""
},
"public/conexoes/ESP32-H2.json": {
"mtime": 1787208875.1173952,
"ast_hash": "61e9339e808c87642b618b322de424dd",
"semantic_hash": ""
},
"public/conexoes/ESP32-P4.json": {
"mtime": 1787208875.1173952,
"ast_hash": "aec6bfdf220455851dea0619fa3954e8",
"semantic_hash": ""
},
"public/conexoes/ESP32-S2.json": {
"mtime": 1787208875.1173952,
"ast_hash": "4b6b0c563a63a59756227ef096141cd5",
"semantic_hash": ""
},
"public/conexoes/ESP32-S3.json": {
"mtime": 1787208875.1176882,
"ast_hash": "7d877331595d2677894a926714590c04",
"semantic_hash": ""
},
"public/conexoes/ESP32-S31.json": {
"mtime": 1787208875.1176882,
"ast_hash": "0f3cd4f8f2741329ea93f18227b9f2a9",
"semantic_hash": ""
},
"public/conexoes/ESP32.json": {
"mtime": 1787208875.1176882,
"ast_hash": "0d111992e8707f75177cf8ec495519f1",
"semantic_hash": ""
},
"public/exemplos/esp-adf.c": {
"mtime": 1787208875.1497247,
"ast_hash": "189f598b93c1b130dedce25d07513a30",
"semantic_hash": ""
},
"public/exemplos/esp-dsp.c": {
"mtime": 1787208875.1497247,
"ast_hash": "f3406d15617cf415888b07d688cdaf34",
"semantic_hash": ""
},
"public/exemplos/esp-idf.c": {
"mtime": 1787208875.1497247,
"ast_hash": "28d7cf987af6c5d3a54ad1fe06571e91",
"semantic_hash": ""
},
"public/exemplos/esp-matter.c": {
"mtime": 1787208875.1497247,
"ast_hash": "332c82ce14230250fd828db6e22cae44",
"semantic_hash": ""
},
"public/exemplos/esp-nn.c": {
"mtime": 1787208875.1497247,
"ast_hash": "186d382f96347dbae8be3b13c0252ad3",
"semantic_hash": ""
},
"public/exemplos/esp-who.c": {
"mtime": 1787208875.1497247,
"ast_hash": "2abc563b2750f0a823438a3e9b1c56c1",
"semantic_hash": ""
},
"public/exemplos/micropython.py": {
"mtime": 1787208875.1497247,
"ast_hash": "99c3b78148eee8632bb7772db61bdfdd",
"semantic_hash": ""
},
"public/formacoes/assets/paged.polyfill.js": {
"mtime": 1787224680.399874,
"ast_hash": "28be5336e03f6072740a5cad2f787314",
"semantic_hash": ""
},
"public/frameworks.json": {
"mtime": 1787208875.1497247,
"ast_hash": "3595f7219f3fcfd1b8d59ea741fab869",
"semantic_hash": ""
},
"public/series.json": {
"mtime": 1787214110.9422739,
"ast_hash": "64ba3d2642c83040afda45cccc107736",
"semantic_hash": ""
},
"scripts/auditar-temas.mjs": {
"mtime": 1787247985.7048883,
"ast_hash": "ab177dc276098ee67cf39504c2c406df",
"semantic_hash": ""
},
"start.config.js": {
"mtime": 1787208875.1956916,
"ast_hash": "a6a5cda80ac9eea57d50f14872a739d2",
"semantic_hash": ""
},
"CLAUDE.md": {
"mtime": 1787208875.1086879,
"ast_hash": "0ea9488e278d2efd15e7c0b6e7cdca83",
"semantic_hash": ""
},
"DESIGN.md": {
"mtime": 1787227815.9607596,
"ast_hash": "227ededb587d6b60a08c9b653ffece7e",
"semantic_hash": ""
},
"README.md": {
"mtime": 1787208875.1086879,
"ast_hash": "e1c8b99e874c6cddc035c7ac900c9bbd",
"semantic_hash": ""
},
"public/formacoes/1/index.html": {
"mtime": 1787576388.0904403,
"ast_hash": "d885d27c8e0854573c7596f2f87d90e7",
"semantic_hash": ""
},
"public/formacoes/1/slide.html": {
"mtime": 1787578115.8015034,
"ast_hash": "63c75c707f55eb060113fc26ad3efd56",
"semantic_hash": ""
},
"public/google21a790a2c23c0ec5.html": {
"mtime": 1787208875.1497247,
"ast_hash": "c8e349cbe0172dc98e26385e09d67cc3",
"semantic_hash": ""
},
"public/datasheets/ESP32-C2 (ESP8684).pdf": {
"mtime": 1787208875.1196883,
"ast_hash": "36e6ee1a52e7293510d60c7adfc0fbaf",
"semantic_hash": ""
},
"public/datasheets/ESP32-C3.pdf": {
"mtime": 1787208875.1226883,
"ast_hash": "25beb64276e6bc6c5d13d032e30847d9",
"semantic_hash": ""
},
"public/datasheets/ESP32-C5.pdf": {
"mtime": 1787208875.1246884,
"ast_hash": "c1083a9504a574282a09f557e0343d48",
"semantic_hash": ""
},
"public/datasheets/ESP32-C6.pdf": {
"mtime": 1787208875.1286886,
"ast_hash": "66a7b580c6afff5becf9bd326bb675d4",
"semantic_hash": ""
},
"public/datasheets/ESP32-C61.pdf": {
"mtime": 1787208875.1306887,
"ast_hash": "2f86d54475a006e9b0e41ba329560c5f",
"semantic_hash": ""
},
"public/datasheets/ESP32-H2.pdf": {
"mtime": 1787208875.1326888,
"ast_hash": "460ea57a62c32646d12ae0088eb1a073",
"semantic_hash": ""
},
"public/datasheets/ESP32-P4.pdf": {
"mtime": 1787208875.137689,
"ast_hash": "aa3fc8de7dfa4e7d3ff40dd9e19fdb35",
"semantic_hash": ""
},
"public/datasheets/ESP32-S2.pdf": {
"mtime": 1787208875.1406891,
"ast_hash": "1e912b14670dde07253da71147ea2ded",
"semantic_hash": ""
},
"public/datasheets/ESP32-S3.pdf": {
"mtime": 1787208875.1436894,
"ast_hash": "cdb8a18273a761aff071e6a665867205",
"semantic_hash": ""
},
"public/datasheets/ESP32-S31.pdf": {
"mtime": 1787208875.1466894,
"ast_hash": "b2f7aa8b2cc16c18815abc5a1ddd566a",
"semantic_hash": ""
},
"public/datasheets/ESP32.pdf": {
"mtime": 1787208875.1486895,
"ast_hash": "2354c04b871b3b6b294076c1fb953522",
"semantic_hash": ""
},
"app/icon.svg": {
"mtime": 1787493648.5160885,
"ast_hash": "ce4f06e06babeb3ff3c5f06373573625",
"semantic_hash": ""
},
"app/opengraph-image.png": {
"mtime": 1787493677.7188504,
"ast_hash": "a64c2620cabed2aface6819ea582e76d",
"semantic_hash": ""
},
"public/formacoes/1/esp32-s3-blocos.png": {
"mtime": 1787230391.7354066,
"ast_hash": "91caddfa7e957735efeeaf51252dd4c9",
"semantic_hash": ""
},
"public/formacoes/1/pratica.png": {
"mtime": 1787226071.9687011,
"ast_hash": "0041e888c91ab709794602e2a607532b",
"semantic_hash": ""
},
"public/formacoes/assets/capa-curvas.svg": {
"mtime": 1787226377.6237059,
"ast_hash": "aafa9bdfdede085b9d848684f6420ac6",
"semantic_hash": ""
},
"public/formacoes/assets/laser-escuro.svg": {
"mtime": 1787226338.6152956,
"ast_hash": "b4b66a35a74c18b6fcdd4e7b5aba60d9",
"semantic_hash": ""
},
"public/formacoes/assets/laser.svg": {
"mtime": 1787226268.1520822,
"ast_hash": "62d94dd326502e1b0afd280e1f465cf4",
"semantic_hash": ""
},
"public/logo.png": {
"mtime": 1787208875.1497247,
"ast_hash": "1c0eae14654c8f5427c7141029ecd29e",
"semantic_hash": ""
},
"public/marca/espdocs-lockup.svg": {
"mtime": 1787493648.5180027,
"ast_hash": "a95424a74b7d5dff1c0a16ee2981bb06",
"semantic_hash": ""
},
"public/marca/espdocs-marca.svg": {
"mtime": 1787493553.7360556,
"ast_hash": "ce4f06e06babeb3ff3c5f06373573625",
"semantic_hash": ""
},
"public/placas/esp32-c2.png": {
"mtime": 1787208875.1506896,
"ast_hash": "3480aadf17ef57e93ee5afdfd934d896",
"semantic_hash": ""
},
"public/placas/esp32-c3.png": {
"mtime": 1787208875.1516895,
"ast_hash": "85df0510a61dee5ffa581d912f5d68c9",
"semantic_hash": ""
},
"public/placas/esp32-c5.png": {
"mtime": 1787208875.1526897,
"ast_hash": "6a59f4e23ac9ec5e319a77a6600fa343",
"semantic_hash": ""
},
"public/placas/esp32-c6.png": {
"mtime": 1787208875.1536896,
"ast_hash": "0f836b438f62bb4b6237c9318346cdf2",
"semantic_hash": ""
},
"public/placas/esp32-c61.png": {
"mtime": 1787208875.1546898,
"ast_hash": "6734034067caa41374f2a4ca5064a7d3",
"semantic_hash": ""
},
"public/placas/esp32-h2.png": {
"mtime": 1787208875.1556897,
"ast_hash": "7dceb269eb019ce826ef336dd57ab52c",
"semantic_hash": ""
},
"public/placas/esp32-p4.png": {
"mtime": 1787208875.1626902,
"ast_hash": "c144c171692850ac257d00827dc674f5",
"semantic_hash": ""
},
"public/placas/esp32-s2.png": {
"mtime": 1787208875.1646903,
"ast_hash": "670c4a12339f32fb32af2eebdc575892",
"semantic_hash": ""
},
"public/placas/esp32-s3.png": {
"mtime": 1787208875.1686904,
"ast_hash": "52b96040d9c648f7c52aa4c8adac7e47",
"semantic_hash": ""
},
"public/placas/esp32-s31.png": {
"mtime": 1787208875.1926913,
"ast_hash": "5b970e68abce449015851cd5966525e3",
"semantic_hash": ""
},
"public/placas/esp32.png": {
"mtime": 1787208875.1946914,
"ast_hash": "6791837138c1c5400db2ee07c9025627",
"semantic_hash": ""
},
"scripts/slides-pdf.mjs": {
"mtime": 1787577906.2640111,
"ast_hash": "dbf8509a3083d40582dce9d8b29956a9",
"semantic_hash": ""
},
"public/formacoes/1/LASER-ESP32-Modulo-1-Slides.pdf": {
"mtime": 1787578140.9017217,
"ast_hash": "fe8398321d742b36d93c72b49678b16c",
"semantic_hash": ""
}
}
+101 -52
View File
@@ -1,16 +1,16 @@
# Graph Report - ESPDocs (2026-08-24)
# Graph Report - ESPDocs (2026-08-26)
## Corpus Check
- 59 files · ~675,087 words
- 76 files · ~706,036 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 833 nodes · 1499 edges · 82 communities (58 shown, 24 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 20 edges (avg confidence: 0.53)
- 908 nodes · 1593 edges · 105 communities (74 shown, 31 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 21 edges (avg confidence: 0.54)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `d5303561`
- Built from commit: `e347a95d`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
@@ -53,8 +53,6 @@
- getVendorPrefix
- layout.jsx
- layout.jsx
- page.jsx
- page.jsx
- layout.jsx
- layout.jsx
- page.jsx
@@ -77,6 +75,25 @@
- isSelectorValid
- OverflowContentError
- RenderResult
- UndisplayedFilter
- esp-zigbee.c
- Hook
- write_cb
- ContentParser
- componentRegistryData.js
- esp-now.c
- Following
- diagnosticoData.js
- eqStr
- Lists
- layout.jsx
- layout.jsx
- layout.jsx
- layout.jsx
- glossarioData.js
- consumeRaw$4
- dumpAtruleMapSyntax
- requireValidateSymbol
## God Nodes (most connected - your core abstractions)
1. `AtPage` - 39 edges
@@ -91,57 +108,45 @@
10. `join()` - 14 edges
## Surprising Connections (you probably didn't know these)
- `nodeAfter()` --calls--> `nextSignificantNode()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 1 → community 10_
- `sourceFragment()` --calls--> `join()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 6 → community 4_
- `generateSequence()` --calls--> `join()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 36 → community 4_
- `peek()` --calls--> `scanString()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 7 → community 9_
- `readImplicitGroup()` --calls--> `regroupTerms()` [EXTRACTED]
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 6 → community 9_
- `ComponentRegistryPage()` --references--> `COMPONENTES_REGISTRY` [EXTRACTED]
app/componentes/page.jsx → lib/componentRegistryData.js
## Import Cycles
- None detected.
## Communities (82 total, 24 thin omitted)
## Communities (105 total, 31 thin omitted)
### Community 0 - "paged.polyfill.js"
Cohesion: 0.02
Nodes (25): consumeRaw$4(), consumeRule(), dumpAtruleMapSyntax(), dumpMapSyntax(), NOTE: The order of the mappings is NOT guaranteed., TODO: should consume block content as Raw?, TODO: fall back to mutation observer?, TODO: not sure we should support this hack (+17 more)
Nodes (23): consumeDeclaration(), consumeRawDeclaration(), NOTE: The order of the mappings is NOT guaranteed., TODO: should consume block content as Raw?, TODO: fall back to mutation observer?, TODO: not sure we should support this hack, TODO: check value is an ident, TODO: produce a node with Delim node type (+15 more)
### Community 1 - "Layout"
Cohesion: 0.06
Nodes (27): breakInsideAvoidParentNode(), BreakToken, child(), cloneNode(), displayedElementAfter(), elementAfter(), findElement(), findRef() (+19 more)
Nodes (25): breakInsideAvoidParentNode(), BreakToken, cloneNode(), findElement(), findRef(), Footnotes, getBoundingClientRect(), getClientRects() (+17 more)
### Community 2 - "AtPage"
Cohesion: 0.05
Nodes (8): append(), AtPage, createItem(), CSSValueToString(), PageCounterIncrement, PositionFixed, PrintMedia, ScriptsFilter
Nodes (11): append(), AtPage, createItem(), CSSValueToString(), PageCounterIncrement, PositionFixed, PrintMedia, ScriptsFilter (+3 more)
### Community 3 - "Page"
Cohesion: 0.06
Nodes (14): CodeExample(), ConnectionsDiagram(), FILTER_CATEGORIES, type_colors, Chunker, dump(), forEachToken(), Page (+6 more)
Cohesion: 0.09
Nodes (8): ConnectionsDiagram(), FILTER_CATEGORIES, type_colors, Chunker, dump(), forEachToken(), Page, requirePolyfill()
### Community 4 - ".push"
Cohesion: 0.11
Nodes (12): collectWarning(), computeSourceURL(), Counters, createNodeStructureChecker(), isAbsolute(), join(), normalize(), prepareTokens$1() (+4 more)
Nodes (14): collectWarning(), computeSourceURL(), Counters, createNodeStructureChecker(), isAbsolute(), join(), normalize(), number() (+6 more)
### Community 5 - "dependencies"
Cohesion: 0.04
Nodes (46): @emotion/react, @emotion/styled, eslint, eslint-config-next, @eslint/eslintrc, framer-motion, googleapis, lucide-react (+38 more)
Cohesion: 0.05
Nodes (39): eslint, eslint-config-next, @eslint/eslintrc, googleapis, lucide-react, next, next-themes, dependencies (+31 more)
### Community 6 - ".replace"
Cohesion: 0.05
Nodes (21): attr(), calc(), cleanPseudoContent(), consumeFunction(), ContentParser, customIdent(), defer(), eqStr() (+13 more)
Cohesion: 0.16
Nodes (9): attr(), child(), cleanPseudoContent(), defer(), NthOfType, parseSourceMapInput(), querySelectorEscape(), TargetCounters (+1 more)
### Community 7 - ".indexOf"
Cohesion: 0.09
Nodes (12): ArraySet$1(), calculateSpecificity(), cleanSelector(), compareByGeneratedPositionsInflated(), generatedPositionAfter(), getArg(), MappingList$1(), relative() (+4 more)
### Community 8 - "Sheet"
Cohesion: 0.13
Nodes (7): Handler, Hook, invokeForType(), Lists, Sheet, validate(), walk()
Cohesion: 0.07
Nodes (13): ArraySet$1(), compareByGeneratedPositionsInflated(), func(), generatedPositionAfter(), getArg(), MappingList$1(), regroupTerms(), relative() (+5 more)
### Community 9 - "peek"
Cohesion: 0.22
@@ -149,7 +154,11 @@ Nodes (18): charCode(), customPropertyName(), idSelector(), maybeMultiplied(), m
### Community 10 - "Breaks"
Cohesion: 0.09
Nodes (15): Breaks, CommentsFilter, displayedElementBefore(), elementBefore(), filterTree(), getNodeWithNamedPage(), isAllWhitespace(), isIgnorable() (+7 more)
Nodes (16): Breaks, CommentsFilter, displayedElementAfter(), displayedElementBefore(), elementAfter(), elementBefore(), filterTree(), getNodeWithNamedPage() (+8 more)
### Community 11 - "Queue"
Cohesion: 0.15
Nodes (7): Queue, requireEs6Symbol(), requireIsArguments(), requireIsFunction(), requireIsImplemented(), requireIsString(), requireShim$1()
### Community 12 - "allocateCursor"
Cohesion: 0.21
@@ -171,6 +180,10 @@ Nodes (11): 1. Só existem os tons declarados, 2. A regra da simetria, 3. Pares
Cohesion: 0.20
Nodes (11): areStringsEqualCaseInsensitive(), buildLoc(), fromLoc(), internalMatch(), isCommaContextEnd(), isCommaContextStart(), isContextEdgeDelim(), locateMismatch() (+3 more)
### Community 17 - "Previewer"
Cohesion: 0.16
Nodes (6): Handlers, Previewer, createIco(), run(), svgContent, svgPath
### Community 18 - "auditar-temas.mjs"
Cohesion: 0.48
Nodes (6): arquivos(), contraste(), coresFixasInline(), ESCALA, luminancia(), main()
@@ -205,7 +218,7 @@ Nodes (5): assign(), requireIsImplemented$1(), requireKeys(), requireShim$4(), r
### Community 27 - "outOfRange"
Cohesion: 0.40
Nodes (6): dimension(), integer(), isPostfixIeHack(), number(), outOfRange(), percentage()
Nodes (5): dimension(), integer(), isPostfixIeHack(), outOfRange(), percentage()
### Community 28 - "testNode"
Cohesion: 0.40
@@ -216,8 +229,8 @@ Cohesion: 0.67
Nodes (3): categoryIcons, Comparacao(), valorDe()
### Community 31 - "page.jsx"
Cohesion: 0.67
Nodes (3): getOptionIcon(), iconMap, Seletor()
Cohesion: 0.50
Nodes (4): getOptionIcon(), iconMap, PRESETS, Seletor()
### Community 34 - "consumeB$1"
Cohesion: 0.50
@@ -251,33 +264,69 @@ Nodes (3): consumeRaw(), parentheses(), readSequence()
Cohesion: 0.67
Nodes (3): patchAtrules(), patchDictionary(), unpackSyntaxes()
### Community 69 - "consumeDeclaration"
Cohesion: 0.17
Nodes (4): CodeExample(), Polisher, request(), startsWith()
### Community 70 - "consumeRaw$4"
Cohesion: 0.29
Nodes (6): requireEs6Symbol(), requireIsArguments(), requireIsFunction(), requireIsImplemented(), requireIsString(), requireShim$1()
Cohesion: 0.49
Nodes (13): auditarContrasteEClasses(), auditarImagens(), auditarLinksEInteracoes(), auditarPerformanceConfigs(), auditarRotasInternas(), aviso(), buscarArquivos(), CORES (+5 more)
### Community 72 - "dumpAtruleMapSyntax"
Cohesion: 0.33
Nodes (5): pastaModulo, raiz, saida, servidor, TIPOS
### Community 82 - "UndisplayedFilter"
Cohesion: 0.28
Nodes (3): calculateSpecificity(), cleanSelector(), UndisplayedFilter
### Community 83 - "esp-zigbee.c"
Cohesion: 0.25
Nodes (5): esp_zb_app_signal_msg_t, esp_zb_zcl_set_attr_value_message_t, esp_err_t, esp_zb_app_signal_handler(), zb_attribute_handler()
### Community 84 - "Hook"
Cohesion: 0.25
Nodes (3): Handler, Hook, invokeForType()
### Community 85 - "write_cb"
Cohesion: 0.29
Nodes (5): esp_rmaker_device_t, esp_rmaker_param_val_t, esp_rmaker_write_ctx_t, esp_err_t, write_cb()
### Community 87 - "componentRegistryData.js"
Cohesion: 0.33
Nodes (4): ComponentRegistryPage(), CATEGORIAS_COMPONENTES, COMPONENTES_REGISTRY, GUIA_COMPONENT_MANAGER
### Community 88 - "esp-now.c"
Cohesion: 0.40
Nodes (4): esp_now_recv_info_t, esp_now_send_status_t, on_data_recv(), on_data_sent()
### Community 90 - "diagnosticoData.js"
Cohesion: 0.40
Nodes (4): categoriasDiagnostico, errosCatalogo, regrasDecodificadorLog, sintomasRapidos
### Community 91 - "eqStr"
Cohesion: 0.50
Nodes (5): calc(), consumeFunction(), customIdent(), eqStr(), eqStrAny()
## Knowledge Gaps
- **78 isolated node(s):** `metadata`, `metadata`, `categoryIcons`, `metadata`, `metadata` (+73 more)
- **94 isolated node(s):** `metadata`, `metadata`, `faqs`, `categoryIcons`, `metadata` (+89 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **24 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
- **31 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `AtPage` connect `AtPage` to `paged.polyfill.js`, `Page`, `.push`?**
_High betweenness centrality (0.044) - this node is a cross-community bridge._
- **Why does `AtPage` connect `AtPage` to `paged.polyfill.js`, `consumeDeclaration`, `.indexOf`?**
_High betweenness centrality (0.037) - this node is a cross-community bridge._
- **Why does `Page` connect `Page` to `paged.polyfill.js`, `.replace`?**
_High betweenness centrality (0.029) - this node is a cross-community bridge._
- **Why does `Chunker` connect `Page` to `paged.polyfill.js`?**
_High betweenness centrality (0.023) - this node is a cross-community bridge._
- **What connects `metadata`, `metadata`, `categoryIcons` to the rest of the system?**
_78 weakly-connected nodes found - possible documentation gaps or missing edges._
_High betweenness centrality (0.025) - this node is a cross-community bridge._
- **Why does `Chunker` connect `Page` to `paged.polyfill.js`, `consumeDeclaration`?**
_High betweenness centrality (0.019) - this node is a cross-community bridge._
- **What connects `metadata`, `metadata`, `faqs` to the rest of the system?**
_94 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `paged.polyfill.js` be split into smaller, more focused modules?**
_Cohesion score 0.022216913521261348 - nodes in this community are weakly interconnected._
_Cohesion score 0.02247191011235955 - nodes in this community are weakly interconnected._
- **Should `Layout` be split into smaller, more focused modules?**
_Cohesion score 0.056535504296698326 - nodes in this community are weakly interconnected._
_Cohesion score 0.05608322026232474 - nodes in this community are weakly interconnected._
- **Should `AtPage` be split into smaller, more focused modules?**
_Cohesion score 0.05427905427905428 - nodes in this community are weakly interconnected._
_Cohesion score 0.05238095238095238 - nodes in this community are weakly interconnected._
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "label": "esp-rainmaker.c", "file_type": "code", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_write_cb", "label": "write_cb()", "file_type": "code", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L25", "_callable": true}, {"id": "esp_err_t", "label": "esp_err_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-rainmaker.c"}, {"id": "esp_rmaker_device_t", "label": "esp_rmaker_device_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-rainmaker.c"}, {"id": "esp_rmaker_param_val_t", "label": "esp_rmaker_param_val_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-rainmaker.c"}, {"id": "esp_rmaker_write_ctx_t", "label": "esp_rmaker_write_ctx_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-rainmaker.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L39", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "string", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "nvs_flash", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "esp_rmaker_core", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L16", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "esp_rmaker_standard_params", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L17", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "esp_rmaker_standard_devices", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L18", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "app_wifi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L19", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_write_cb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L25", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmaker_write_cb", "target": "esp_err_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-rainmaker.c", "source_location": "L25", "weight": 1.0, "context": "return_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_rainmakLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "label": "esp-zigbee.c", "file_type": "code", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_zb_attribute_handler", "label": "zb_attribute_handler()", "file_type": "code", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L22", "_callable": true}, {"id": "esp_err_t", "label": "esp_err_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-zigbee.c"}, {"id": "esp_zb_zcl_set_attr_value_message_t", "label": "esp_zb_zcl_set_attr_value_message_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-zigbee.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_esp_zb_app_signal_handler", "label": "esp_zb_app_signal_handler()", "file_type": "code", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L35", "_callable": true}, {"id": "esp_zb_app_signal_msg_t", "label": "esp_zb_app_signal_msg_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-zigbee.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_esp_zb_task", "label": "esp_zb_task()", "file_type": "code", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L59", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L85", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "nvs_flash", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "esp_zigbee_core", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_zb_attribute_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L22", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_zb_attribute_handler", "target": "esp_err_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L22", "weight": 1.0, "context": "return_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_zb_attribute_handler", "target": "esp_zb_zcl_set_attr_value_message_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L22", "weight": 1.0, "context": "parameter_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_esp_zb_app_signal_handler", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L35", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_zigbee_esp_zb_app_signal_handler", "target": "esp_zb_app_signal_msg_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-zigbee.c", "source_location": "L35", "weight": 1.0Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "label": "esp-iot-solution.c", "file_type": "code", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_single_click_cb", "label": "button_single_click_cb()", "file_type": "code", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L25", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_long_press_cb", "label": "button_long_press_cb()", "file_type": "code", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L32", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L38", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "iot_button", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "led_indicator", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L15", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_single_click_cb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L25", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_long_press_cb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L32", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_single_click_cb", "callee": "ESP_LOGI", "is_member_call": false, "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L27", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_single_click_cb", "callee": "led_indicator_start", "is_member_call": false, "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L28", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_long_press_cb", "callee": "ESP_LOGW", "is_member_call": false, "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L34", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_button_long_press_cb", "callee": "led_indicator_start", "is_member_call": false, "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L35", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_iot_solution_app_main", "callee": "ESP_LOGI", "is_member_call": false, "source_file": "public/exemplos/esp-iot-solution.c", "source_location": "L40", "receiver":Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "label": "esp-sr.c", "file_type": "code", "source_file": "public/exemplos/esp-sr.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_feed_audio_task", "label": "feed_audio_task()", "file_type": "code", "source_file": "public/exemplos/esp-sr.c", "source_location": "L23", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_speech_recognition_task", "label": "speech_recognition_task()", "file_type": "code", "source_file": "public/exemplos/esp-sr.c", "source_location": "L40", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-sr.c", "source_location": "L84", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "stdlib", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_wn_iface", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_wn_models", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L15", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_mn_iface", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L16", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_mn_models", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L17", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_afe_sr_iface", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L18", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "esp_afe_sr_models", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L19", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_feed_audio_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L23", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_speech_recognition_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L40", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-sr.c", "source_location": "L84", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_sr_feed_audio_task", "callee": "get_feed_chunksize", "is_member_call": true, "source_file": "public/exemplos/esp-sr.c", "source_location": "L26", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_esLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "label": "esp-now.c", "file_type": "code", "source_file": "public/exemplos/esp-now.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_sent", "label": "on_data_sent()", "file_type": "code", "source_file": "public/exemplos/esp-now.c", "source_location": "L31", "_callable": true}, {"id": "esp_now_send_status_t", "label": "esp_now_send_status_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-now.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_recv", "label": "on_data_recv()", "file_type": "code", "source_file": "public/exemplos/esp-now.c", "source_location": "L37", "_callable": true}, {"id": "esp_now_recv_info_t", "label": "esp_now_recv_info_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-now.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-now.c", "source_location": "L48", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L8", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "string", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "esp_wifi", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "esp_now", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "nvs_flash", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L15", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_sent", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L31", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_sent", "target": "esp_now_send_status_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L31", "weight": 1.0, "context": "parameter_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_recv", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L37", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_recv", "target": "esp_now_recv_info_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L37", "weight": 1.0, "context": "parameter_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-now.c", "source_location": "L48", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_now_on_data_sent",Line truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "label": "esp-idf.c", "file_type": "code", "source_file": "public/exemplos/esp-idf.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "label": "blink_task()", "file_type": "code", "source_file": "public/exemplos/esp-idf.c", "source_location": "L22", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-idf.c", "source_location": "L42", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "freertos", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "task", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L12", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "gpio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L13", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L14", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "esp_system", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L15", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "esp_chip_info", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L16", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L22", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-idf.c", "source_location": "L42", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "gpio_reset_pin", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L25", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "gpio_set_direction", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L26", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "gpio_set_level", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L32", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "ESP_LOGI", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L34", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "esp_get_free_heap_size", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L36", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "vTaskDelay", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L38", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_blink_task", "callee": "pdMS_TO_TICKS", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L38", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "esp_chip_info", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L46", "receiver": null}, {"caller_nid": "homLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_package_json", "label": "package.json", "file_type": "code", "source_file": "package.json", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_name", "label": "name", "file_type": "code", "source_file": "package.json", "source_location": "L2"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_version", "label": "version", "file_type": "code", "source_file": "package.json", "source_location": "L3"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_private", "label": "private", "file_type": "code", "source_file": "package.json", "source_location": "L4"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts", "label": "scripts", "file_type": "code", "source_file": "package.json", "source_location": "L5"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_dev", "label": "dev", "file_type": "code", "source_file": "package.json", "source_location": "L6"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_build", "label": "build", "file_type": "code", "source_file": "package.json", "source_location": "L7"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_start", "label": "start", "file_type": "code", "source_file": "package.json", "source_location": "L8"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_lint", "label": "lint", "file_type": "code", "source_file": "package.json", "source_location": "L9"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_audit", "label": "audit", "file_type": "code", "source_file": "package.json", "source_location": "L10"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_check", "label": "check", "file_type": "code", "source_file": "package.json", "source_location": "L11"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_favicons", "label": "favicons", "file_type": "code", "source_file": "package.json", "source_location": "L12"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_auditar_temas", "label": "auditar-temas", "file_type": "code", "source_file": "package.json", "source_location": "L13"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_slides_pdf", "label": "slides-pdf", "file_type": "code", "source_file": "package.json", "source_location": "L14"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "package.json", "source_location": "L16"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_googleapis", "label": "googleapis", "file_type": "code", "source_file": "package.json", "source_location": "L17"}, {"id": "googleapis", "label": "googleapis", "file_type": "concept", "source_file": "package.json", "source_location": "L17"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_lucide_react", "label": "lucide-react", "file_type": "code", "source_file": "package.json", "source_location": "L18"}, {"id": "lucide_react", "label": "lucide-react", "file_type": "concept", "source_file": "package.json", "source_location": "L18"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next", "label": "next", "file_type": "code", "source_file": "package.json", "source_location": "L19"}, {"id": "next", "label": "next", "file_type": "concept", "source_file": "package.json", "source_location": "L19"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next_themes", "label": "next-themes", "file_type": "code", "source_file": "package.json", "source_location": "L20"}, {"id": "next_themes", "label": "next-themes", "file_type": "concept", "source_file": "package.json", "source_location": "L20"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_react", "label": "react", "file_type": "code", "source_file": "package.json", "source_location": "L21"}, {"id": "react", "label": "react", "file_type": "concept", "source_file": "package.json", "source_location": "L21"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_react_dom", "label": "react-dom", "file_type": "code", "source_file": "package.json", "source_location": "L22"}, {"id": "react_dom", "label": "react-dom", "file_type": "concept", "source_file": "package.json", "source_location": "L22"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_devdependencies", "label": "devDependencies", "file_type": "code", "source_file": "package.json", "source_location": "L24"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_devdependencies_eslint_eslintrc", "label": "@eslint/eslintrc", "file_type": "code", "source_file": "package.json", "source_location": "L25"}, {"id": "eslint_eslintrc", "label": "@eslint/eslintrc", "file_type": "concept", "source_file": "package.json", "source_location": "L25"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_devdependencies_tailwindcss_postcsLine truncated
@@ -0,0 +1 @@
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_rs", "label": "rust-esp.rs", "file_type": "code", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_main", "label": "main()", "file_type": "code", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L24"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_rs", "target": "esp_backtrace_as", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L11", "weight": 1.0, "context": "import"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_rs", "target": "esp_hal", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L12", "weight": 1.0, "context": "import"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_rs", "target": "println", "relation": "imports_from", "confidence": "EXTRACTED", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L21", "weight": 1.0, "context": "import"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_rs", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/rust-esp.rs", "source_location": "L24", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_main", "callee": "freeze", "is_member_call": true, "source_file": "public/exemplos/rust-esp.rs", "source_location": "L28"}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_main", "callee": "toggle", "is_member_call": true, "source_file": "public/exemplos/rust-esp.rs", "source_location": "L42"}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_rust_esp_main", "callee": "delay_millis", "is_member_call": true, "source_file": "public/exemplos/rust-esp.rs", "source_location": "L46"}]}
+1 -1
View File
@@ -1 +1 @@
{"/home/lucas/Documents/Pessoal/dev/ESPDocs/CLAUDE.md":{"size":850,"mtime_ns":1787208875108687809,"word_count":118,"hash":"258e0dfcf55c0af2ab0875e4e88107b4a6750e03f282df21493a8e1c1ecea26e"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/DESIGN.md":{"size":7458,"mtime_ns":1787227815960759566,"word_count":1139,"hash":"2408e701d9cd2a32eabfc9fab5a78c59639962ececd8a101f505782130bab20e"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/README.md":{"size":4471,"mtime_ns":1787208875108687809,"word_count":510,"hash":"f024a922261e513412d492a32ff2e4aa2825835c9493bb9a050162297eb55a46"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/api/placas/route.js":{"size":1675,"mtime_ns":1787208875109445427,"word_count":178},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/catalogo/layout.jsx":{"size":667,"mtime_ns":1787492776095609424,"word_count":99},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/catalogo/page.jsx":{"size":15277,"mtime_ns":1787212450028229413,"word_count":1247},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/comparacao/layout.jsx":{"size":749,"mtime_ns":1787492776089608886,"word_count":111},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/comparacao/page.jsx":{"size":17360,"mtime_ns":1787227734667847134,"word_count":1575},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/frameworks/[key]/page.jsx":{"size":12293,"mtime_ns":1787492933930084366,"word_count":986},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/frameworks/page.jsx":{"size":12949,"mtime_ns":1787493006331380408,"word_count":987},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/glossario/page.jsx":{"size":30172,"mtime_ns":1787493006335479271,"word_count":2541},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/icon.svg":{"size":1053,"mtime_ns":1787493648516088553,"word_count":101},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/layout.jsx":{"size":3230,"mtime_ns":1787499080336201729,"word_count":363},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/opengraph-image.png":{"size":189553,"mtime_ns":1787493677718850382,"word_count":6394},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/page.jsx":{"size":11570,"mtime_ns":1787212450023113942,"word_count":996},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/robots.js":{"size":467,"mtime_ns":1787492747521046621,"word_count":73},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/seletor/layout.jsx":{"size":758,"mtime_ns":1787492776092609155,"word_count":113},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/seletor/page.jsx":{"size":47737,"mtime_ns":1787227734668591914,"word_count":4307},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/[key]/page.jsx":{"size":30140,"mtime_ns":1787493839445832724,"word_count":2848},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/layout.jsx":{"size":1044,"mtime_ns":1787493098902938213,"word_count":169},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/page.jsx":{"size":11972,"mtime_ns":1787227734666431087,"word_count":919},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/sitemap.js":{"size":1548,"mtime_ns":1787492747517046262,"word_count":190},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/sobre/page.jsx":{"size":15635,"mtime_ns":1787493098903634352,"word_count":1391},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/BoardCard.jsx":{"size":3950,"mtime_ns":1787212419847948763,"word_count":340},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/CodeExample.jsx":{"size":6954,"mtime_ns":1787227734670658950,"word_count":662},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/ConnectionsDiagram.jsx":{"size":30118,"mtime_ns":1787212419845745061,"word_count":2538},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Footer.jsx":{"size":7129,"mtime_ns":1787212419854720006,"word_count":600},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Header.jsx":{"size":8885,"mtime_ns":1787493839491139968,"word_count":814},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/PinRestrictions.jsx":{"size":6702,"mtime_ns":1787227759653857376,"word_count":781},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Providers.jsx":{"size":236,"mtime_ns":1787208875111169207,"word_count":25},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/SeriesTabMenu.jsx":{"size":4327,"mtime_ns":1787227734671215574,"word_count":408},"/home/lucas/Documents/Pessoal/dev/ESPDocs/eslint.config.mjs":{"size":505,"mtime_ns":1787208875111687936,"word_count":53},"/home/lucas/Documents/Pessoal/dev/ESPDocs/jsconfig.json":{"size":73,"mtime_ns":1787208875115688105,"word_count":10,"hash":"7bb1966576768c2921b8b0f30ee3c68796385e8b463095701d1d16f685fdac8f"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/lib/seo.js":{"size":4474,"mtime_ns":1787492722950842956,"word_count":460},"/home/lucas/Documents/Pessoal/dev/ESPDocs/next.config.mjs":{"size":92,"mtime_ns":1787208875115688105,"word_count":11},"/home/lucas/Documents/Pessoal/dev/ESPDocs/package.json":{"size":868,"mtime_ns":1787577906317962132,"word_count":70,"hash":"94eab1d9ed9cf56eface235930b3e24a489c3f2c13fcb9fef288ca62bfcbf17d"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/postcss.config.mjs":{"size"Line truncated
{"/home/lucas/Documents/Pessoal/dev/ESPDocs/CLAUDE.md":{"size":850,"mtime_ns":1787208875108687809,"word_count":118,"hash":"258e0dfcf55c0af2ab0875e4e88107b4a6750e03f282df21493a8e1c1ecea26e"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/DESIGN.md":{"size":7458,"mtime_ns":1787227815960759566,"word_count":1139,"hash":"2408e701d9cd2a32eabfc9fab5a78c59639962ececd8a101f505782130bab20e"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/README.md":{"size":4471,"mtime_ns":1787208875108687809,"word_count":510,"hash":"f024a922261e513412d492a32ff2e4aa2825835c9493bb9a050162297eb55a46"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/api/placas/route.js":{"size":1675,"mtime_ns":1787208875109445427,"word_count":178},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/catalogo/layout.jsx":{"size":1057,"mtime_ns":1787681388184724195,"word_count":115},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/catalogo/page.jsx":{"size":15277,"mtime_ns":1787212450028229413,"word_count":1247},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/comparacao/layout.jsx":{"size":2312,"mtime_ns":1787681373363590508,"word_count":283},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/comparacao/page.jsx":{"size":17360,"mtime_ns":1787227734667847134,"word_count":1575},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/frameworks/[key]/page.jsx":{"size":14641,"mtime_ns":1787687088498118891,"word_count":1196},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/frameworks/page.jsx":{"size":16278,"mtime_ns":1787751018893699799,"word_count":1240},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/glossario/page.jsx":{"size":23012,"mtime_ns":1787684076382017471,"word_count":1887},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/icon.svg":{"size":1053,"mtime_ns":1787493648516088553,"word_count":101},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/layout.jsx":{"size":3588,"mtime_ns":1787750969899193601,"word_count":411},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/opengraph-image.png":{"size":189553,"mtime_ns":1787493677718850382,"word_count":6394},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/page.jsx":{"size":24645,"mtime_ns":1787751011216620482,"word_count":2239},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/robots.js":{"size":467,"mtime_ns":1787492747521046621,"word_count":73},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/seletor/layout.jsx":{"size":2774,"mtime_ns":1787683511276889625,"word_count":367},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/seletor/page.jsx":{"size":83823,"mtime_ns":1787747389841664556,"word_count":7643},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/[key]/page.jsx":{"size":30140,"mtime_ns":1787493839445832724,"word_count":2848},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/layout.jsx":{"size":1603,"mtime_ns":1787681380716656833,"word_count":210},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/series/page.jsx":{"size":11972,"mtime_ns":1787227734666431087,"word_count":919},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/sitemap.js":{"size":2188,"mtime_ns":1787687159167787137,"word_count":252},"/home/lucas/Documents/Pessoal/dev/ESPDocs/app/sobre/page.jsx":{"size":16169,"mtime_ns":1787681407291896542,"word_count":1440},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/BoardCard.jsx":{"size":3950,"mtime_ns":1787212419847948763,"word_count":340},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/CodeExample.jsx":{"size":6954,"mtime_ns":1787227734670658950,"word_count":662},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/ConnectionsDiagram.jsx":{"size":30118,"mtime_ns":1787212419845745061,"word_count":2538},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Footer.jsx":{"size":7667,"mtime_ns":1787750987458375017,"word_count":636},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Header.jsx":{"size":30771,"mtime_ns":1787750982122319887,"word_count":2309},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/PinRestrictions.jsx":{"size":6702,"mtime_ns":1787227759653857376,"word_count":781},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/Providers.jsx":{"size":262,"mtime_ns":1787750974858244837,"word_count":26},"/home/lucas/Documents/Pessoal/dev/ESPDocs/components/SeriesTabMenu.jsx":{"size":4327,"mtime_ns":1787227734671215574,"word_count":408},"/home/lucas/Documents/Pessoal/dev/ESPDocs/eslint.config.mjs":{"size":524,"mtime_ns":1787750947109958152,"word_count":54},"/home/lucas/Documents/Pessoal/dev/ESPDocs/jsconfig.json":{"size":73,"mtime_ns":1787208875115688105,"word_count":10,"hash":"7bb1966576768c2921b8b0f30ee3c68796385e8b463095701d1d16f685fdac8f"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/lib/seo.js":{"size":8268,"mtime_ns":1787748552205753280,"word_count":774},"/home/lucas/Documents/Pessoal/dev/ESPDocs/next.config.mjs":{"size":222,"mtime_ns":1787750953339022508,"word_count":25},"/home/lucas/Documents/Pessoal/dev/ESPDocs/package.json":{"size":872,"mtime_ns":1787750958787078795,"word_count":78,"hash":"9d546509616b570a5f60d28d0477445c03287106532c6508e594031c84dfd9b5"},"/home/lucas/Documents/Pessoal/dev/ESPDocs/postcss.config.mjLine truncated
+4 -4
View File
@@ -63,12 +63,12 @@
</div>
<div id="legend"></div>
</div>
<div id="stats">833 nodes &middot; 1499 edges &middot; 82 communities</div>
<div id="stats">908 nodes &middot; 1593 edges &middot; 105 communities</div>
</div>
<script>
const RAW_NODES = [{"id": "app_api_placas_route", "label": "route.js", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "route.js", "community": 54, "community_name": "route.js", "source_file": "app/api/placas/route.js", "file_type": "code", "degree": 1}, {"id": "app_api_placas_route_get", "label": "GET()", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "GET()", "community": 54, "community_name": "route.js", "source_file": "app/api/placas/route.js", "file_type": "code", "degree": 1}, {"id": "app_catalogo_layout", "label": "layout.jsx", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "layout.jsx", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 2}, {"id": "app_catalogo_layout_metadata", "label": "metadata", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "metadata", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_layout_layout", "label": "Layout()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "Layout()", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_page", "label": "page.jsx", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "page.jsx", "community": 55, "community_name": "page.jsx", "source_file": "app/catalogo/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_page_placaspage", "label": "PlacasPage()", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "PlacasPage()", "community": 55, "community_name": "page.jsx", "source_file": "app/catalogo/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_layout", "label": "layout.jsx", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "layout.jsx", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 2}, {"id": "app_comparacao_layout_metadata", "label": "metadata", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "metadata", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_layout_layout", "label": "Layout()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "Layout()", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_page", "label": "page.jsx", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "page.jsx", "community": 29, "community_name": "page.jsx", "source_file": "app/comparacao/page.jsx", "file_type": "code", "degree": 3}, {"id": "app_comparacao_page_categoryicons", "label": "categoryIcons", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "categoryIcons", "community": 29, "community_name": "page.jsx", "source_file": "app/comparacao/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_page_valorde", "label": "valorDe()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "valorDe()", "community": 29, "community_name": "page.jsx", "source_file": "app/comparacao/page.jsx", "file_type": "code", "degree": 2}, {"id": "app_comparacao_page_comparacao", "label": "Comparacao()", "color":Line truncated
const RAW_EDGES = [{"from": "app_api_placas_route", "to": "app_api_placas_route_get", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_layout", "to": "app_catalogo_layout_layout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_layout", "to": "app_catalogo_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_page", "to": "app_catalogo_page_placaspage", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_layout", "to": "app_comparacao_layout_layout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_layout", "to": "app_comparacao_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_categoryicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_comparacao", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_valorde", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page_comparacao", "to": "app_comparacao_page_valorde", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_frameworkdetail", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_generatemetadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_generatestaticparams", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_page", "to": "app_frameworks_page_frameworks", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_page", "to": "app_frameworks_page_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_glossario_page", "to": "app_glossario_page_glossario", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_glossario_page", "to": "app_glossario_page_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_layout", "to": "app_layout_inter", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_layout", "to": "app_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_layout", "to": "app_layout_outfit", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_layout", "to": "app_layout_rootlayout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_layout", "to": "app_layout_viewport", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_page", "to": "app_page_externallinkicon", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_page", "to": "app_page_home", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_robots", "to": "app_robots_robots", "label": "coLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "paged.polyfill.js", "count": 92}, {"cid": 1, "color": "#F28E2B", "label": "Layout", "count": 67}, {"cid": 2, "color": "#E15759", "label": "AtPage", "count": 78}, {"cid": 3, "color": "#76B7B2", "label": "Page", "count": 60}, {"cid": 4, "color": "#59A14F", "label": ".push", "count": 33}, {"cid": 5, "color": "#EDC948", "label": "dependencies", "count": 47}, {"cid": 6, "color": "#B07AA1", "label": ".replace", "count": 52}, {"cid": 7, "color": "#FF9DA7", "label": ".indexOf", "count": 34}, {"cid": 8, "color": "#9C755F", "label": "Sheet", "count": 31}, {"cid": 9, "color": "#BAB0AC", "label": "peek", "count": 18}, {"cid": 10, "color": "#4E79A7", "label": "Breaks", "count": 28}, {"cid": 11, "color": "#F28E2B", "label": "Queue", "count": 10}, {"cid": 12, "color": "#E15759", "label": "allocateCursor", "count": 15}, {"cid": 13, "color": "#76B7B2", "label": "ESPDocs - Documenta\u00e7\u00e3o ESP32 em Portugu\u00eas", "count": 15}, {"cid": 14, "color": "#59A14F", "label": "isNameStart", "count": 13}, {"cid": 15, "color": "#EDC948", "label": "Diretrizes de tema: claro e escuro", "count": 12}, {"cid": 16, "color": "#B07AA1", "label": "internalMatch", "count": 12}, {"cid": 17, "color": "#FF9DA7", "label": "Previewer", "count": 11}, {"cid": 18, "color": "#9C755F", "label": "auditar-temas.mjs", "count": 7}, {"cid": 19, "color": "#BAB0AC", "label": "layout.jsx", "count": 6}, {"cid": 20, "color": "#4E79A7", "label": "buildGroupMatchGraph", "count": 6}, {"cid": 21, "color": "#F28E2B", "label": "getCharCode", "count": 6}, {"cid": 22, "color": "#E15759", "label": "page.jsx", "count": 5}, {"cid": 23, "color": "#76B7B2", "label": "PinRestrictions.jsx", "count": 5}, {"cid": 24, "color": "#59A14F", "label": "eslint.config.mjs", "count": 5}, {"cid": 25, "color": "#EDC948", "label": "compilerOptions", "count": 5}, {"cid": 26, "color": "#B07AA1", "label": "requireKeys", "count": 5}, {"cid": 27, "color": "#FF9DA7", "label": "outOfRange", "count": 6}, {"cid": 28, "color": "#9C755F", "label": "testNode", "count": 5}, {"cid": 29, "color": "#BAB0AC", "label": "page.jsx", "count": 4}, {"cid": 30, "color": "#4E79A7", "label": "page.jsx", "count": 4}, {"cid": 31, "color": "#F28E2B", "label": "page.jsx", "count": 4}, {"cid": 32, "color": "#E15759", "label": "esp-matter.c", "count": 4}, {"cid": 33, "color": "#76B7B2", "label": "seo.js", "count": 4}, {"cid": 34, "color": "#59A14F", "label": "consumeB$1", "count": 4}, {"cid": 35, "color": "#EDC948", "label": "processStructure", "count": 2}, {"cid": 36, "color": "#B07AA1", "label": "generate$2", "count": 4}, {"cid": 37, "color": "#FF9DA7", "label": "getVendorPrefix", "count": 4}, {"cid": 38, "color": "#9C755F", "label": "layout.jsx", "count": 3}, {"cid": 39, "color": "#BAB0AC", "label": "layout.jsx", "count": 3}, {"cid": 40, "color": "#4E79A7", "label": "page.jsx", "count": 3}, {"cid": 41, "color": "#F28E2B", "label": "page.jsx", "count": 3}, {"cid": 42, "color": "#E15759", "label": "page.jsx", "count": 3}, {"cid": 43, "color": "#76B7B2", "label": "layout.jsx", "count": 3}, {"cid": 44, "color": "#59A14F", "label": "layout.jsx", "count": 3}, {"cid": 45, "color": "#EDC948", "label": "page.jsx", "count": 3}, {"cid": 46, "color": "#B07AA1", "label": "Header.jsx", "count": 3}, {"cid": 47, "color": "#FF9DA7", "label": "esp-nn.c", "count": 3}, {"cid": 48, "color": "#9C755F", "label": "esp-who.c", "count": 3}, {"cid": 49, "color": "#BAB0AC", "label": "matchSyntax", "count": 3}, {"cid": 50, "color": "#4E79A7", "label": "consumeNumber$5", "count": 3}, {"cid": 51, "color": "#F28E2B", "label": "strcmp", "count": 3}, {"cid": 52, "color": "#E15759", "label": "readSequence", "count": 3}, {"cid": 53, "color": "#76B7B2", "label": "patchAtrules", "count": 3}, {"cid": 54, "color": "#59A14F", "label": "route.js", "count": 2}, {"cid": 55, "color": "#EDC948", "label": "page.jsx", "count": 2}, {"cid": 56, "color": "#B07AA1", "label": "robots.js", "count": 2}, {"cid": 57, "color": "#FF9DA7", "label": "page.jsx", "count": 2}, {"cid": 58, "color": "#9C755F", "label": "sitemap.js", "count": 2}, {"cid": 59, "color": "#BAB0AC", "label": "CLAUDE.md", "count": 2}, {"cid": 60, "color": "#4E79A7", "label": "BoardCard.jsx", "count": 2}, {"cid": 61, "color": "#F28E2B", "label": "Footer.jsx", "count": 2}, {"cid": 62, "color": "#E15759", "label": "Providers.jsx", "count": 2}, {"cid": 63, "color": "#76B7B2", "label": "SeriesTabMenu.jsx", "count": 2}, {"cid": 64, "color": "#59A14F", "label": "next.config.mjs", "count": 2}, {"cid": 65, "color": "#EDC948", "label": "postcss.config.mjs", "count": 2}, {"cid": 66, "color": "#B07AA1", "label": "esp-adf.c", "count": 2}, {"cid": 67, "color": "#FF9DA7", "label": "esp-dsp.c", "count": 2}, {"cid": 68, "color": "#9C755F", "label": "esp-idf.c", "count": 2}, {"cid": 69, "color": "#BAB0AC", "label": "consumeDeclaration", "count": 2}, {"cid": 70, "color": "#4E79A7", "label": "consumeRaw$4", "count": 7}, {"cid": 71, "color": "#F28E2B", "label": "creLine truncated
const RAW_NODES = [{"id": "app_api_placas_route", "label": "route.js", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "route.js", "community": 54, "community_name": "route.js", "source_file": "app/api/placas/route.js", "file_type": "code", "degree": 1}, {"id": "app_api_placas_route_get", "label": "GET()", "color": {"background": "#59A14F", "border": "#59A14F", "highlight": {"background": "#ffffff", "border": "#59A14F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "GET()", "community": 54, "community_name": "route.js", "source_file": "app/api/placas/route.js", "file_type": "code", "degree": 1}, {"id": "app_catalogo_layout", "label": "layout.jsx", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.2, "font": {"size": 0, "color": "#ffffff"}, "title": "layout.jsx", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 2}, {"id": "app_catalogo_layout_metadata", "label": "metadata", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "metadata", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_layout_layout", "label": "Layout()", "color": {"background": "#9C755F", "border": "#9C755F", "highlight": {"background": "#ffffff", "border": "#9C755F"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "Layout()", "community": 38, "community_name": "layout.jsx", "source_file": "app/catalogo/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_page", "label": "page.jsx", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "page.jsx", "community": 55, "community_name": "page.jsx", "source_file": "app/catalogo/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_catalogo_page_placaspage", "label": "PlacasPage()", "color": {"background": "#EDC948", "border": "#EDC948", "highlight": {"background": "#ffffff", "border": "#EDC948"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "PlacasPage()", "community": 55, "community_name": "page.jsx", "source_file": "app/catalogo/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_layout", "label": "layout.jsx", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "layout.jsx", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 3}, {"id": "app_comparacao_layout_metadata", "label": "metadata", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "metadata", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_layout_faqs", "label": "faqs", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "faqs", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_layout_layout", "label": "Layout()", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "Layout()", "community": 39, "community_name": "layout.jsx", "source_file": "app/comparacao/layout.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_page", "label": "page.jsx", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.3, "font": {"size": 0, "color": "#ffffff"}, "title": "page.jsx", "community": 29, "community_name": "page.jsx", "source_file": "app/comparacao/page.jsx", "file_type": "code", "degree": 3}, {"id": "app_comparacao_page_categoryicons", "label": "categoryIcons", "color": {"background": "#BAB0AC", "border": "#BAB0AC", "highlight": {"background": "#ffffff", "border": "#BAB0AC"}}, "size": 10.1, "font": {"size": 0, "color": "#ffffff"}, "title": "categoryIcons", "community": 29, "community_name": "page.jsx", "source_file": "app/comparacao/page.jsx", "file_type": "code", "degree": 1}, {"id": "app_comparacao_page_valorde", "label": "valorDe()", "color": {"backgroundLine truncated
const RAW_EDGES = [{"from": "app_api_placas_route", "to": "app_api_placas_route_get", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_layout", "to": "app_catalogo_layout_layout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_layout", "to": "app_catalogo_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_catalogo_page", "to": "app_catalogo_page_placaspage", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_layout", "to": "app_comparacao_layout_faqs", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_layout", "to": "app_comparacao_layout_layout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_layout", "to": "app_comparacao_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_categoryicons", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_comparacao", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page", "to": "app_comparacao_page_valorde", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_comparacao_page_comparacao", "to": "app_comparacao_page_valorde", "label": "calls", "title": "calls [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_componentes_layout", "to": "app_componentes_layout_componenteslayout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_componentes_layout", "to": "app_componentes_layout_faqs", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_componentes_layout", "to": "app_componentes_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_componentes_page", "to": "app_componentes_page_componentregistrypage", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_componentes_page_componentregistrypage", "to": "lib_componentregistrydata_componentes_registry", "label": "references", "title": "references [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_diagnostico_layout", "to": "app_diagnostico_layout_diagnosticolayout", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_diagnostico_layout", "to": "app_diagnostico_layout_faqs", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_diagnostico_layout", "to": "app_diagnostico_layout_metadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_diagnostico_page", "to": "app_diagnostico_page_diagnosticopage", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_frameworkdetail", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_generatemetadata", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_frameworks_key_page", "to": "app_frameworks_key_page_generatestaticparams", "label": "contains", "title": "contains [EXTRACTED]", "dashes": false, "width": 2, "color": {"opacity": 0.7}, "confidence": "EXTRACTED"}, {"from": "app_framewoLine truncated
const LEGEND = [{"cid": 0, "color": "#4E79A7", "label": "paged.polyfill.js", "count": 90}, {"cid": 1, "color": "#F28E2B", "label": "Layout", "count": 67}, {"cid": 2, "color": "#E15759", "label": "AtPage", "count": 85}, {"cid": 3, "color": "#76B7B2", "label": "Page", "count": 41}, {"cid": 4, "color": "#59A14F", "label": ".push", "count": 32}, {"cid": 5, "color": "#EDC948", "label": "dependencies", "count": 40}, {"cid": 6, "color": "#B07AA1", "label": ".replace", "count": 17}, {"cid": 7, "color": "#FF9DA7", "label": ".indexOf", "count": 41}, {"cid": 8, "color": "#9C755F", "label": "Sheet", "count": 14}, {"cid": 9, "color": "#BAB0AC", "label": "peek", "count": 18}, {"cid": 10, "color": "#4E79A7", "label": "Breaks", "count": 28}, {"cid": 11, "color": "#F28E2B", "label": "Queue", "count": 17}, {"cid": 12, "color": "#E15759", "label": "allocateCursor", "count": 15}, {"cid": 13, "color": "#76B7B2", "label": "ESPDocs - Documenta\u00e7\u00e3o ESP32 em Portugu\u00eas", "count": 15}, {"cid": 14, "color": "#59A14F", "label": "isNameStart", "count": 13}, {"cid": 15, "color": "#EDC948", "label": "Diretrizes de tema: claro e escuro", "count": 12}, {"cid": 16, "color": "#B07AA1", "label": "internalMatch", "count": 12}, {"cid": 17, "color": "#FF9DA7", "label": "Previewer", "count": 16}, {"cid": 18, "color": "#9C755F", "label": "auditar-temas.mjs", "count": 7}, {"cid": 19, "color": "#BAB0AC", "label": "layout.jsx", "count": 6}, {"cid": 20, "color": "#4E79A7", "label": "buildGroupMatchGraph", "count": 6}, {"cid": 21, "color": "#F28E2B", "label": "getCharCode", "count": 6}, {"cid": 22, "color": "#E15759", "label": "page.jsx", "count": 5}, {"cid": 23, "color": "#76B7B2", "label": "PinRestrictions.jsx", "count": 5}, {"cid": 24, "color": "#59A14F", "label": "eslint.config.mjs", "count": 5}, {"cid": 25, "color": "#EDC948", "label": "compilerOptions", "count": 5}, {"cid": 26, "color": "#B07AA1", "label": "requireKeys", "count": 5}, {"cid": 27, "color": "#FF9DA7", "label": "outOfRange", "count": 5}, {"cid": 28, "color": "#9C755F", "label": "testNode", "count": 5}, {"cid": 29, "color": "#BAB0AC", "label": "page.jsx", "count": 4}, {"cid": 30, "color": "#4E79A7", "label": "page.jsx", "count": 4}, {"cid": 31, "color": "#F28E2B", "label": "page.jsx", "count": 5}, {"cid": 32, "color": "#E15759", "label": "esp-matter.c", "count": 4}, {"cid": 33, "color": "#76B7B2", "label": "seo.js", "count": 4}, {"cid": 34, "color": "#59A14F", "label": "consumeB$1", "count": 4}, {"cid": 35, "color": "#EDC948", "label": "processStructure", "count": 2}, {"cid": 36, "color": "#B07AA1", "label": "generate$2", "count": 4}, {"cid": 37, "color": "#FF9DA7", "label": "getVendorPrefix", "count": 4}, {"cid": 38, "color": "#9C755F", "label": "layout.jsx", "count": 3}, {"cid": 39, "color": "#BAB0AC", "label": "layout.jsx", "count": 4}, {"cid": 40, "color": "#4E79A7", "label": "page.jsx", "count": 2}, {"cid": 41, "color": "#F28E2B", "label": "page.jsx", "count": 3}, {"cid": 42, "color": "#E15759", "label": "page.jsx", "count": 2}, {"cid": 43, "color": "#76B7B2", "label": "layout.jsx", "count": 4}, {"cid": 44, "color": "#59A14F", "label": "layout.jsx", "count": 4}, {"cid": 45, "color": "#EDC948", "label": "page.jsx", "count": 3}, {"cid": 46, "color": "#B07AA1", "label": "Header.jsx", "count": 3}, {"cid": 47, "color": "#FF9DA7", "label": "esp-nn.c", "count": 3}, {"cid": 48, "color": "#9C755F", "label": "esp-who.c", "count": 3}, {"cid": 49, "color": "#BAB0AC", "label": "matchSyntax", "count": 3}, {"cid": 50, "color": "#4E79A7", "label": "consumeNumber$5", "count": 3}, {"cid": 51, "color": "#F28E2B", "label": "strcmp", "count": 3}, {"cid": 52, "color": "#E15759", "label": "readSequence", "count": 3}, {"cid": 53, "color": "#76B7B2", "label": "patchAtrules", "count": 3}, {"cid": 54, "color": "#59A14F", "label": "route.js", "count": 2}, {"cid": 55, "color": "#EDC948", "label": "page.jsx", "count": 2}, {"cid": 56, "color": "#B07AA1", "label": "robots.js", "count": 2}, {"cid": 57, "color": "#FF9DA7", "label": "page.jsx", "count": 2}, {"cid": 58, "color": "#9C755F", "label": "sitemap.js", "count": 2}, {"cid": 59, "color": "#BAB0AC", "label": "CLAUDE.md", "count": 2}, {"cid": 60, "color": "#4E79A7", "label": "BoardCard.jsx", "count": 2}, {"cid": 61, "color": "#F28E2B", "label": "Footer.jsx", "count": 2}, {"cid": 62, "color": "#E15759", "label": "Providers.jsx", "count": 2}, {"cid": 63, "color": "#76B7B2", "label": "SeriesTabMenu.jsx", "count": 2}, {"cid": 64, "color": "#59A14F", "label": "next.config.mjs", "count": 2}, {"cid": 65, "color": "#EDC948", "label": "postcss.config.mjs", "count": 2}, {"cid": 66, "color": "#B07AA1", "label": "esp-adf.c", "count": 2}, {"cid": 67, "color": "#FF9DA7", "label": "esp-dsp.c", "count": 2}, {"cid": 68, "color": "#9C755F", "label": "esp-idf.c", "count": 3}, {"cid": 69, "color": "#BAB0AC", "label": "consumeDeclaration", "count": 17}, {"cid": 70, "color": "#4E79A7", "label": "consumeRaw$4", "count": 14}, {"cid": 71, "color": "#F28E2B", "label": "cLine truncated
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
function esc(s) {
+2390 -585
View File
File diff suppressed because it is too large. Load diff
+155 -45
View File
@@ -5,8 +5,8 @@
"semantic_hash": ""
},
"app/catalogo/layout.jsx": {
"mtime": 1787492776.0956094,
"ast_hash": "f228a345868fa3e409f80133c29aa737",
"mtime": 1787681388.184724,
"ast_hash": "5e68bb4c5b0020e762a15068aac011b6",
"semantic_hash": ""
},
"app/catalogo/page.jsx": {
@@ -15,8 +15,8 @@
"semantic_hash": ""
},
"app/comparacao/layout.jsx": {
"mtime": 1787492776.089609,
"ast_hash": "288273a48c04bbdc124c62848e9d7ca9",
"mtime": 1787681373.3635905,
"ast_hash": "65cac4e0ee9351535bda8c725fe763e3",
"semantic_hash": ""
},
"app/comparacao/page.jsx": {
@@ -25,28 +25,28 @@
"semantic_hash": ""
},
"app/frameworks/[key]/page.jsx": {
"mtime": 1787492933.9300845,
"ast_hash": "a5ed16ece919880c8300d897424c49a2",
"mtime": 1787687088.4981189,
"ast_hash": "cfb22260bbd09209cf49c515b715add1",
"semantic_hash": ""
},
"app/frameworks/page.jsx": {
"mtime": 1787493006.3313804,
"ast_hash": "f878cabb7d4a27e83262d95b769b8dc9",
"mtime": 1787751018.8937,
"ast_hash": "aed03fb7fb0f0f87fff7fb8e6a8a91f6",
"semantic_hash": ""
},
"app/glossario/page.jsx": {
"mtime": 1787493006.3354793,
"ast_hash": "6a02ace0ab551d91794fce1a0b19c753",
"mtime": 1787684076.3820174,
"ast_hash": "2cdc6722e22b0ea4475f55ff46af6f01",
"semantic_hash": ""
},
"app/layout.jsx": {
"mtime": 1787499080.3362017,
"ast_hash": "78e4dcb798d3806a4a37071ecfc9ef0d",
"mtime": 1787750969.8991935,
"ast_hash": "d54f8e0163c77a635a1d9513bbc885ef",
"semantic_hash": ""
},
"app/page.jsx": {
"mtime": 1787212450.023114,
"ast_hash": "31690989ba2c2ed800f1fb7fb78a0ed8",
"mtime": 1787751011.2166204,
"ast_hash": "0a773ed3c6e2a6292b06b93eeddc2a27",
"semantic_hash": ""
},
"app/robots.js": {
@@ -55,13 +55,13 @@
"semantic_hash": ""
},
"app/seletor/layout.jsx": {
"mtime": 1787492776.0926092,
"ast_hash": "73da1dea1a6b930897053dda83e27f4f",
"mtime": 1787683511.2768896,
"ast_hash": "155cd2f891526abfd9447ec4ba5aced3",
"semantic_hash": ""
},
"app/seletor/page.jsx": {
"mtime": 1787227734.668592,
"ast_hash": "4ad52df27f6742b5a6302e694593164c",
"mtime": 1787747389.8416646,
"ast_hash": "64d49b65514b50ef0e168b2d1d89183a",
"semantic_hash": ""
},
"app/series/[key]/page.jsx": {
@@ -70,8 +70,8 @@
"semantic_hash": ""
},
"app/series/layout.jsx": {
"mtime": 1787493098.9029381,
"ast_hash": "eb809632a02c5731c37fba793c2c6a4a",
"mtime": 1787681380.716657,
"ast_hash": "dbb59e963388f1fca5e8e05fb39fb26c",
"semantic_hash": ""
},
"app/series/page.jsx": {
@@ -80,13 +80,13 @@
"semantic_hash": ""
},
"app/sitemap.js": {
"mtime": 1787492747.5170462,
"ast_hash": "906d69e855c533c8937646cfe386121e",
"mtime": 1787687159.167787,
"ast_hash": "110753c3ee5fde3b73b6174ac0037fb8",
"semantic_hash": ""
},
"app/sobre/page.jsx": {
"mtime": 1787493098.9036343,
"ast_hash": "85a3aaa744cb6b2226616bc3c88d60a4",
"mtime": 1787681407.2918966,
"ast_hash": "f16b62ea1519a1b3549f21f2a837eaf7",
"semantic_hash": ""
},
"components/BoardCard.jsx": {
@@ -105,13 +105,13 @@
"semantic_hash": ""
},
"components/Footer.jsx": {
"mtime": 1787212419.85472,
"ast_hash": "bd7ffbe86c0b3815a27e5e90f56848c7",
"mtime": 1787750987.458375,
"ast_hash": "80f215000d29dbb4495d312653336b67",
"semantic_hash": ""
},
"components/Header.jsx": {
"mtime": 1787493839.49114,
"ast_hash": "65796747b210fb0313ea5e2b41234c0a",
"mtime": 1787750982.12232,
"ast_hash": "45663d4208da9f66645a9f946daa5b20",
"semantic_hash": ""
},
"components/PinRestrictions.jsx": {
@@ -120,8 +120,8 @@
"semantic_hash": ""
},
"components/Providers.jsx": {
"mtime": 1787208875.111169,
"ast_hash": "d31db26b58629a807b7df4c4a3189772",
"mtime": 1787750974.858245,
"ast_hash": "80e656806f8fcc50fbccc758150d2bca",
"semantic_hash": ""
},
"components/SeriesTabMenu.jsx": {
@@ -130,8 +130,8 @@
"semantic_hash": ""
},
"eslint.config.mjs": {
"mtime": 1787208875.111688,
"ast_hash": "cd28c192684b52caf16d8d1df068e272",
"mtime": 1787750947.1099582,
"ast_hash": "e405b31a0baf4c27c35d2b08130d0a7d",
"semantic_hash": ""
},
"jsconfig.json": {
@@ -140,18 +140,18 @@
"semantic_hash": ""
},
"lib/seo.js": {
"mtime": 1787492722.9508429,
"ast_hash": "12b829f0078d3fb18cb20f832f498c17",
"mtime": 1787748552.2057533,
"ast_hash": "346b706375bd470b2229a1f0fbeb71df",
"semantic_hash": ""
},
"next.config.mjs": {
"mtime": 1787208875.115688,
"ast_hash": "21958f5752add43cc47ab0ff5172cd46",
"mtime": 1787750953.3390224,
"ast_hash": "b70c1b95f25a2d201c583152020a0cdb",
"semantic_hash": ""
},
"package.json": {
"mtime": 1787577906.3179622,
"ast_hash": "4224d3570f8164a9291a49197c690114",
"mtime": 1787750958.7870789,
"ast_hash": "979aab7512ac076c283cb70ddfddc4fe",
"semantic_hash": ""
},
"postcss.config.mjs": {
@@ -225,8 +225,8 @@
"semantic_hash": ""
},
"public/exemplos/esp-idf.c": {
"mtime": 1787208875.1497247,
"ast_hash": "28d7cf987af6c5d3a54ad1fe06571e91",
"mtime": 1787687002.6863074,
"ast_hash": "adcde98ec45bf3880a7d44f864841455",
"semantic_hash": ""
},
"public/exemplos/esp-matter.c": {
@@ -255,8 +255,8 @@
"semantic_hash": ""
},
"public/frameworks.json": {
"mtime": 1787208875.1497247,
"ast_hash": "3595f7219f3fcfd1b8d59ea741fab869",
"mtime": 1787686949.0378003,
"ast_hash": "7fee3fc9ff2fc51e4fa586fb2f996df0",
"semantic_hash": ""
},
"public/series.json": {
@@ -469,9 +469,119 @@
"ast_hash": "dbf8509a3083d40582dce9d8b29956a9",
"semantic_hash": ""
},
"public/formacoes/1/LASER-ESP32-Modulo-1-Slides.pdf": {
"mtime": 1787578140.9017217,
"ast_hash": "fe8398321d742b36d93c72b49678b16c",
"app/componentes/layout.jsx": {
"mtime": 1787687058.2038324,
"ast_hash": "3c67d0688957fc7b7691a43d90bb0386",
"semantic_hash": ""
},
"app/componentes/page.jsx": {
"mtime": 1787687433.89741,
"ast_hash": "299ea4ffc6a45c84d637c798980266be",
"semantic_hash": ""
},
"app/diagnostico/layout.jsx": {
"mtime": 1787682030.3465166,
"ast_hash": "88703349e19bcb0a5fdc8b445677049c",
"semantic_hash": ""
},
"app/diagnostico/page.jsx": {
"mtime": 1787751083.1233635,
"ast_hash": "02d99cbb95167634b3c20b2f5f447834",
"semantic_hash": ""
},
"app/frameworks/layout.jsx": {
"mtime": 1787748686.6371284,
"ast_hash": "47ccfddb1c9c595799d55af02d429e90",
"semantic_hash": ""
},
"app/glossario/layout.jsx": {
"mtime": 1787682600.281657,
"ast_hash": "d5de510e2584f86cd5cffcaab97d0090",
"semantic_hash": ""
},
"lib/componentRegistryData.js": {
"mtime": 1787687021.9374895,
"ast_hash": "893b27c29c6f65898615e69161703cd8",
"semantic_hash": ""
},
"lib/diagnosticoData.js": {
"mtime": 1787686239.1010916,
"ast_hash": "198f814cb391d7d3d28841603486cf0e",
"semantic_hash": ""
},
"lib/glossarioData.js": {
"mtime": 1787683052.2727337,
"ast_hash": "cdac67307443c2bb2d5ceb7b494ebef9",
"semantic_hash": ""
},
"public/exemplos/esp-iot-solution.c": {
"mtime": 1787686970.809006,
"ast_hash": "10edea93f349f04f6bdb34a192051686",
"semantic_hash": ""
},
"public/exemplos/esp-now.c": {
"mtime": 1787686979.0340838,
"ast_hash": "2d9c373f830d97a377962eb51194fbcb",
"semantic_hash": ""
},
"public/exemplos/esp-rainmaker.c": {
"mtime": 1787686956.6098719,
"ast_hash": "36c464febe5ef2871011b0bba4637166",
"semantic_hash": ""
},
"public/exemplos/esp-sr.c": {
"mtime": 1787686964.3929453,
"ast_hash": "7dc7047ecf6a6b66b1ba06cee0e5871d",
"semantic_hash": ""
},
"public/exemplos/esp-zigbee.c": {
"mtime": 1787686987.6361651,
"ast_hash": "4d065e4d3c6fd8d13f15e3da3a625c2c",
"semantic_hash": ""
},
"public/exemplos/rust-esp.rs": {
"mtime": 1787686993.6814249,
"ast_hash": "e73d8cf18fe0e5e6d91d1eb83565d2a6",
"semantic_hash": ""
},
"scripts/auditar-paginas.mjs": {
"mtime": 1787751070.2455041,
"ast_hash": "caa4d175c9bc2c3751274a2ce6e9b127",
"semantic_hash": ""
},
"scripts/generate-favicons.mjs": {
"mtime": 1787680718.2466626,
"ast_hash": "e048547c90c428acb515d66e00f80739",
"semantic_hash": ""
},
"public/apple-touch-icon.png": {
"mtime": 1787680738.9008498,
"ast_hash": "6a77b4abf2978fe29cca00cd20f99905",
"semantic_hash": ""
},
"public/favicon-16x16.png": {
"mtime": 1787680738.9008498,
"ast_hash": "168e39aa2419fe4b4af72ff9bbececcc",
"semantic_hash": ""
},
"public/favicon-32x32.png": {
"mtime": 1787680738.9008498,
"ast_hash": "10014cfc9bf622afbf851983537c69e6",
"semantic_hash": ""
},
"public/favicon-48x48.png": {
"mtime": 1787680738.9008498,
"ast_hash": "2b2101acc9b1a99a3c659b3b65e97792",
"semantic_hash": ""
},
"public/icon-192.png": {
"mtime": 1787680738.9008498,
"ast_hash": "557373e141babca8a269c93a82ca499e",
"semantic_hash": ""
},
"public/icon-512.png": {
"mtime": 1787680738.9008498,
"ast_hash": "a51e72a9a939c44f58b7272884bbb3be",
"semantic_hash": ""
}
}
-3
View File
@@ -3,9 +3,6 @@ const nextConfig = {
experimental: {
optimizePackageImports: [
"lucide-react",
"@mui/material",
"@mui/icons-material",
"framer-motion",
],
},
images: {
+2 -5
View File
@@ -7,16 +7,13 @@
"build": "next build --turbopack",
"start": "next start",
"lint": "eslint",
"audit": "node scripts/auditar-paginas.mjs",
"check": "npm run lint && npm run auditar-temas && npm run audit",
"favicons": "node scripts/generate-favicons.mjs",
"auditar-temas": "node scripts/auditar-temas.mjs",
"slides-pdf": "node scripts/slides-pdf.mjs"
},
"dependencies": {
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@mui/icons-material": "^7.3.4",
"@mui/material": "^7.3.4",
"framer-motion": "^12.40.0",
"googleapis": "^165.0.0",
"lucide-react": "^1.16.0",
"next": "^15.5.9",
+342
View File
@@ -0,0 +1,342 @@
#!/usr/bin/env node
/**
* ESPDocs - Script de Auditoria Automatizada de Páginas & Qualidade
*
* Valida todos os componentes e páginas da aplicação contra os critérios
* do Google Lighthouse e PageSpeed Insights:
*
* 1. ACESSIBILIDADE (A11y):
* - Todas as imagens têm 'alt' e dimensões definidas (evita CLS).
* - Todos os botões e links com ícone têm 'aria-label' ou texto visível.
* - Links com target="_blank" têm rel="noopener noreferrer".
* - Verificação de classes com contraste abaixo de 4.5:1 (WCAG AA).
* - Nenhum elemento interativo com texto vazio.
*
* 2. PERFORMANCE & COMPOSIÇÃO:
* - Sem 'transition-all' ou 'transition-colors' no body/containers raiz
* (evita reflow forçado e animações não compostas).
* - ThemeProvider configurado com 'disableTransitionOnChange'.
* - Baseline de navegadores em .browserslistrc moderno (evita polyfills desnecessários).
*
* 3. SEO & ESTRUTURA SEMÂNTICA:
* - Hierarquia de cabeçalhos (h1 único por página principal).
* - Presença de tags semânticas (<header>, <main>, <footer>, <nav>).
* - Metadados e JSON-LD estruturados.
*
* 4. INTEGRIDADE DE LINKS:
* - Todos os hrefs internos apontam para rotas que realmente existem no app/.
*
* Uso: npm run audit
*/
import { readFileSync, readdirSync, statSync, existsSync } from "node:fs";
import { join } from "node:path";
const CORES = {
reset: "\x1b[0m",
verde: "\x1b[32m",
vermelho: "\x1b[31m",
amarelo: "\x1b[33m",
azul: "\x1b[34m",
ciano: "\x1b[36m",
negrito: "\x1b[1m",
cinza: "\x1b[90m",
};
function log(msg) {
console.log(msg);
}
function sucesso(msg) {
console.log(` ${CORES.verde}✔${CORES.reset} ${msg}`);
}
function falha(msg) {
console.log(` ${CORES.vermelho}✖${CORES.reset} ${msg}`);
}
function aviso(msg) {
console.log(` ${CORES.amarelo}⚠${CORES.reset} ${msg}`);
}
/** Caminha recursivamente por diretórios buscando arquivos com determinadas extensões */
function buscarArquivos(dir, ext = [".jsx", ".js"]) {
const achados = [];
const anda = (d) => {
let entradas;
try {
entradas = readdirSync(d);
} catch {
return;
}
for (const nome of entradas) {
if (nome === "node_modules" || nome === ".next" || nome === ".git" || nome === "public") continue;
const caminho = join(d, nome);
if (statSync(caminho).isDirectory()) {
anda(caminho);
} else if (ext.some((e) => nome.endsWith(e))) {
achados.push(caminho);
}
}
};
anda(dir);
return achados.sort();
}
/** Descobre todas as rotas válidas no app/ */
function obterRotasExistentes() {
const rotas = new Set(["/", "/api/placas", "/api/og"]);
const arquivosApp = buscarArquivos("app");
for (const arq of arquivosApp) {
if (arq.endsWith("page.jsx") || arq.endsWith("page.js")) {
let rota = arq
.replace(/^app/, "")
.replace(/\/page\.(jsx|js)$/, "");
if (rota === "") rota = "/";
rotas.add(rota);
}
}
return rotas;
}
let totalProblemas = 0;
// --------------------------------------------------------------------------
// 1. Auditoria de Configurações de Performance (.browserslistrc & ThemeProvider)
// --------------------------------------------------------------------------
function auditarPerformanceConfigs() {
log(`\n${CORES.negrito}${CORES.ciano}[1/5] Auditoria de Configurações de Performance & Runtime${CORES.reset}`);
// Checar .browserslistrc
if (existsSync(".browserslistrc")) {
const conteudo = readFileSync(".browserslistrc", "utf8");
if (conteudo.includes("safari >= 15\n") || conteudo.includes("chrome >= 90\n")) {
falha(".browserslistrc está com alvos legados (< Safari 16.4 ou < Chrome 109), forçando polyfills de ES2022.");
totalProblemas++;
} else {
sucesso(".browserslistrc configurado para baseline moderno (zero polyfills ES2019-ES2022 desnecessários).");
}
}
// Checar Providers.jsx
if (existsSync("components/Providers.jsx")) {
const providers = readFileSync("components/Providers.jsx", "utf8");
if (!providers.includes("disableTransitionOnChange")) {
falha("ThemeProvider em components/Providers.jsx deve usar disableTransitionOnChange para evitar reflows no tema.");
totalProblemas++;
} else {
sucesso("ThemeProvider com disableTransitionOnChange ativo (elimina reflow forçado).");
}
}
// Checar globals.css e layout.jsx para transições no body
const globalsCss = existsSync("app/globals.css") ? readFileSync("app/globals.css", "utf8") : "";
const layoutJsx = existsSync("app/layout.jsx") ? readFileSync("app/layout.jsx", "utf8") : "";
if (globalsCss.includes("body {\n\t\t@apply bg-slate-50 text-slate-900 transition-colors")) {
falha("globals.css tem transition-colors global no body (provoca animações não compostas no load).");
totalProblemas++;
} else if (layoutJsx.includes('body className="font-sans antialiased bg-slate-50 text-slate-900 dark:bg-slate-950 dark:text-slate-50 transition-colors')) {
falha("layout.jsx tem transition-colors global no body.");
totalProblemas++;
} else {
sucesso("Body livre de transições de cores globais no carregamento.");
}
}
// --------------------------------------------------------------------------
// 2. Auditoria de Contraste e Classes Incompatíveis
// --------------------------------------------------------------------------
function auditarContrasteEClasses() {
log(`\n${CORES.negrito}${CORES.ciano}[2/5] Auditoria de Acessibilidade de Cores & Botões (WCAG AA)${CORES.reset}`);
const arquivos = [...buscarArquivos("app"), ...buscarArquivos("components")];
let errosContraste = 0;
for (const arq of arquivos) {
const conteudo = readFileSync(arq, "utf8");
const linhas = conteudo.split("\n");
linhas.forEach((linha, i) => {
const n = i + 1;
// bg-amber-600 com text-white falha contraste (ratio ~3.78:1)
if (/\bbg-amber-600\b/.test(linha) && /\btext-white\b/.test(linha)) {
falha(`${arq}:${n} -> 'bg-amber-600 text-white' falha contraste WCAG AA (< 4.5:1). Use 'bg-amber-700' ou 'text-slate-950'.`);
errosContraste++;
}
// bg-amber-500 com text-white falha contraste severamente (< 2.5:1)
if (/\bbg-amber-500\b/.test(linha) && /\btext-white\b/.test(linha)) {
falha(`${arq}:${n} -> 'bg-amber-500 text-white' falha contraste WCAG AA (< 2.5:1). Use 'text-slate-950'.`);
errosContraste++;
}
// bg-yellow-500/600 com text-white
if (/\bbg-yellow-[56]00\b/.test(linha) && /\btext-white\b/.test(linha)) {
falha(`${arq}:${n} -> 'bg-yellow-* text-white' falha contraste WCAG AA. Use texto escuro.`);
errosContraste++;
}
});
}
if (errosContraste === 0) {
sucesso("Todos os botões e badges inspecionados atendem à taxa mínima de contraste WCAG AA (>= 4.5:1).");
} else {
totalProblemas += errosContraste;
}
}
// --------------------------------------------------------------------------
// 3. Auditoria de Imagens e Multimídia (A11y & CLS)
// --------------------------------------------------------------------------
function auditarImagens() {
log(`\n${CORES.negrito}${CORES.ciano}[3/5] Auditoria de Imagens & CLS (Tags <img> e <Image>)${CORES.reset}`);
const arquivos = [...buscarArquivos("app"), ...buscarArquivos("components")];
let errosImagens = 0;
for (const arq of arquivos) {
const conteudo = readFileSync(arq, "utf8");
// Buscar tags <Image ou <img
const imgRegex = /<(?:Image|img)\b([^>]*)\/?>/g;
let match;
while ((match = imgRegex.exec(conteudo)) !== null) {
const tagProps = match[1];
// Checar alt
if (!tagProps.includes("alt=")) {
falha(`${arq} -> Tag de imagem sem atributo 'alt' obrigatório.`);
errosImagens++;
} else if (/alt=["']\s*["']/.test(tagProps) && !tagProps.includes("aria-hidden")) {
aviso(`${arq} -> Tag de imagem com 'alt' vazio. Se decorativa, use 'aria-hidden="true"'.`);
}
// Checar dimensões explícitas
const temWidth = tagProps.includes("width=");
const temHeight = tagProps.includes("height=");
const temFill = tagProps.includes("fill");
if (!temFill && (!temWidth || !temHeight)) {
falha(`${arq} -> Imagem sem largura/altura explícitas (width/height ou fill), o que pode causar CLS.`);
errosImagens++;
}
}
}
if (errosImagens === 0) {
sucesso("Todas as imagens possuem 'alt' acessível e dimensões declaradas (prevenção de CLS).");
} else {
totalProblemas += errosImagens;
}
}
// --------------------------------------------------------------------------
// 4. Auditoria de Links e Botões Acessíveis
// --------------------------------------------------------------------------
function auditarLinksEInteracoes() {
log(`\n${CORES.negrito}${CORES.ciano}[4/5] Auditoria de Links e Rótulos Acessíveis (A11y & SEO)${CORES.reset}`);
const arquivos = [...buscarArquivos("app"), ...buscarArquivos("components")];
let errosLinks = 0;
for (const arq of arquivos) {
const conteudo = readFileSync(arq, "utf8");
// Checar target="_blank" sem rel="noopener noreferrer"
const blankRegex = /<a\b[^>]*target=["']_blank["'][^>]*>/g;
let match;
while ((match = blankRegex.exec(conteudo)) !== null) {
const tag = match[0];
if (!tag.includes("rel=") || (!tag.includes("noopener") && !tag.includes("noreferrer"))) {
falha(`${arq} -> Link com target="_blank" sem 'rel="noopener noreferrer"'.`);
errosLinks++;
}
}
// Checar botões sem texto/aria-label
const buttonRegex = /<button\b([^>]*)>([\s\S]*?)<\/button>/g;
let btnMatch;
while ((btnMatch = buttonRegex.exec(conteudo)) !== null) {
const props = btnMatch[1];
const corpo = btnMatch[2].trim();
const temAriaLabel = props.includes("aria-label=") || props.includes("aria-labelledby=");
// Se o corpo não tem texto visível (ex: apenas <X />, <Menu />, etc.)
const temTextoPuro = /[a-zA-Z0-9À-ÿ]{2,}/.test(corpo.replace(/<[^>]*>/g, ""));
if (!temAriaLabel && !temTextoPuro && !props.includes("title=")) {
aviso(`${arq} -> Botão potencialmente sem rótulo acessível ou texto visível: <button ${props.slice(0, 40)}...>`);
}
}
}
if (errosLinks === 0) {
sucesso("Links externos e botões interativos estão em conformidade com as regras de segurança e acessibilidade.");
} else {
totalProblemas += errosLinks;
}
}
// --------------------------------------------------------------------------
// 5. Auditoria de Integridade de Rotas Internas
// --------------------------------------------------------------------------
function auditarRotasInternas() {
log(`\n${CORES.negrito}${CORES.ciano}[5/5] Auditoria de Integridade de Rotas Internas (Prevenção 404)${CORES.reset}`);
const rotasValidas = obterRotasExistentes();
const arquivos = [...buscarArquivos("app"), ...buscarArquivos("components")];
let rotasQuebradas = 0;
// Rotas dinâmicas conhecidas
const rotasDinamicas = [
/^\/series\/[a-zA-Z0-9_-]+$/,
/^\/frameworks\/[a-zA-Z0-9_-]+$/,
/^\/slides\/[a-zA-Z0-9_-]+$/,
];
for (const arq of arquivos) {
const conteudo = readFileSync(arq, "utf8");
const hrefRegex = /href=["'](\/[^"'#?]*)["']/g;
let match;
while ((match = hrefRegex.exec(conteudo)) !== null) {
const caminho = match[1];
if (caminho.startsWith("/api") || caminho.startsWith("/favicon") || caminho.startsWith("/icon") || caminho.startsWith("/logo") || caminho.startsWith("/site.webmanifest")) {
continue;
}
const existe = rotasValidas.has(caminho) || rotasDinamicas.some((rx) => rx.test(caminho));
if (!existe) {
falha(`${arq} -> Link interno aponta para rota inexistente: '${caminho}'`);
rotasQuebradas++;
}
}
}
if (rotasQuebradas === 0) {
sucesso(`Todas as referências de rotas internas foram validadas com sucesso (${rotasValidas.size} rotas mapeadas).`);
} else {
totalProblemas += rotasQuebradas;
}
}
// --------------------------------------------------------------------------
// Execução Principal
// --------------------------------------------------------------------------
function main() {
log(`${CORES.negrito}${CORES.azul}======================================================${CORES.reset}`);
log(`${CORES.negrito}${CORES.azul} ESPDocs · Auditoria Automatizada de Páginas 100% ${CORES.reset}`);
log(`${CORES.negrito}${CORES.azul}======================================================${CORES.reset}`);
auditarPerformanceConfigs();
auditarContrasteEClasses();
auditarImagens();
auditarLinksEInteracoes();
auditarRotasInternas();
log(`\n${CORES.negrito}------------------------------------------------------${CORES.reset}`);
if (totalProblemas === 0) {
log(`${CORES.verde}${CORES.negrito}🎉 TODAS AS AUDITORIAS PASSARAM COM SUCESSO! (0 problemas)${CORES.reset}`);
log(`${CORES.cinza}O site está otimizado para atingir 100% no Lighthouse / PageSpeed.${CORES.reset}\n`);
return 0;
} else {
log(`${CORES.vermelho}${CORES.negrito}✖ Foram encontrados ${totalProblemas} problema(s) que precisam de correção.${CORES.reset}\n`);
return 1;
}
}
process.exitCode = main();