feat: add script to export training slides to PDF in 16:9 format
This commit is contained in:
1 parent
d530356101
commit
f93e0fe460
31 files changed
+54144
-487
No files matched your search
@@ -1,151 +0,0 @@
|
||||
import { execSync } from "node:child_process";
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { NextResponse } from "next/server";
|
||||
import puppeteer from "puppeteer";
|
||||
|
||||
export const runtime = "nodejs";
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
export async function GET(request) {
|
||||
const { searchParams } = new URL(request.url);
|
||||
const modulo = searchParams.get("modulo") || "1";
|
||||
|
||||
const publicDir = path.resolve(process.cwd(), "public/formacoes", modulo);
|
||||
const htmlFile = path.join(publicDir, "index.html");
|
||||
|
||||
if (!fs.existsSync(htmlFile)) {
|
||||
return NextResponse.json(
|
||||
{ error: `Módulo ${modulo} não encontrado.` },
|
||||
{ status: 404 }
|
||||
);
|
||||
}
|
||||
|
||||
const tmpDir = os.tmpdir();
|
||||
const cachedCmykPdf = path.join(tmpDir, `espdocs-cached-cmyk-mod-${modulo}.pdf`);
|
||||
const htmlMtime = fs.statSync(htmlFile).mtimeMs;
|
||||
|
||||
// Se já foi gerado no /tmp e o HTML não mudou, entrega instantaneamente
|
||||
if (fs.existsSync(cachedCmykPdf)) {
|
||||
const cachedMtime = fs.statSync(cachedCmykPdf).mtimeMs;
|
||||
if (cachedMtime >= htmlMtime) {
|
||||
const cachedBuffer = fs.readFileSync(cachedCmykPdf);
|
||||
return new NextResponse(cachedBuffer, {
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/pdf",
|
||||
"Content-Disposition": `attachment; filename="LASER-ESP32-Modulo-${modulo}-CMYK.pdf"`,
|
||||
"Content-Length": cachedBuffer.length.toString()
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
const tmpRgbPdf = path.join(tmpDir, `espdocs-tmp-${modulo}-${Date.now()}-rgb.pdf`);
|
||||
let browser = null;
|
||||
|
||||
try {
|
||||
browser = await puppeteer.launch({
|
||||
headless: "new",
|
||||
args: [
|
||||
"--no-sandbox",
|
||||
"--disable-setuid-sandbox",
|
||||
"--disable-web-security",
|
||||
"--allow-file-access-from-files"
|
||||
]
|
||||
});
|
||||
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1200, height: 1600, deviceScaleFactor: 2 });
|
||||
await page.goto(`file://${htmlFile}`, { waitUntil: "load", timeout: 30000 });
|
||||
|
||||
// Aguarda o Paged.js concluir a montagem
|
||||
await page.waitForFunction(() => {
|
||||
const pages = document.querySelectorAll(".pagedjs_page");
|
||||
return pages.length > 0 && !document.querySelector(".aviso-carregando");
|
||||
}, { timeout: 25000 });
|
||||
|
||||
await new Promise((r) => setTimeout(r, 600));
|
||||
|
||||
await page.pdf({
|
||||
path: tmpRgbPdf,
|
||||
format: "A4",
|
||||
printBackground: true,
|
||||
preferCSSPageSize: true,
|
||||
margin: { top: 0, right: 0, bottom: 0, left: 0 }
|
||||
});
|
||||
|
||||
await browser.close();
|
||||
browser = null;
|
||||
|
||||
// Converte para CMYK (DeviceCMYK / ISO Coated)
|
||||
const gsCmd = `gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4 -sOutputFile="${cachedCmykPdf}" "${tmpRgbPdf}"`;
|
||||
execSync(gsCmd, { stdio: "pipe" });
|
||||
|
||||
const pdfBuffer = fs.readFileSync(cachedCmykPdf);
|
||||
|
||||
return new NextResponse(pdfBuffer, {
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/pdf",
|
||||
"Content-Disposition": `attachment; filename="LASER-ESP32-Modulo-${modulo}-CMYK.pdf"`,
|
||||
"Content-Length": pdfBuffer.length.toString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Erro na conversão CMYK:", error);
|
||||
return NextResponse.json(
|
||||
{ error: "Falha ao gerar PDF CMYK", details: error.message },
|
||||
{ status: 500 }
|
||||
);
|
||||
} finally {
|
||||
if (browser) await browser.close();
|
||||
if (fs.existsSync(tmpRgbPdf)) fs.unlinkSync(tmpRgbPdf);
|
||||
}
|
||||
}
|
||||
|
||||
export async function POST(request) {
|
||||
try {
|
||||
const formData = await request.formData();
|
||||
const file = formData.get("pdf");
|
||||
|
||||
if (!file) {
|
||||
return NextResponse.json({ error: "Nenhum arquivo PDF enviado." }, { status: 400 });
|
||||
}
|
||||
|
||||
const bytes = await file.arrayBuffer();
|
||||
const buffer = Buffer.from(bytes);
|
||||
|
||||
const tmpDir = os.tmpdir();
|
||||
const inputPath = path.join(tmpDir, `input-${Date.now()}.pdf`);
|
||||
const outputPath = path.join(tmpDir, `cmyk-${Date.now()}.pdf`);
|
||||
|
||||
fs.writeFileSync(inputPath, buffer);
|
||||
|
||||
// Converte com Ghostscript
|
||||
const gsCmd = `gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4 -sOutputFile="${outputPath}" "${inputPath}"`;
|
||||
execSync(gsCmd, { stdio: "pipe" });
|
||||
|
||||
const outputBuffer = fs.readFileSync(outputPath);
|
||||
|
||||
// Limpa temporários
|
||||
if (fs.existsSync(inputPath)) fs.unlinkSync(inputPath);
|
||||
if (fs.existsSync(outputPath)) fs.unlinkSync(outputPath);
|
||||
|
||||
return new NextResponse(outputBuffer, {
|
||||
status: 200,
|
||||
headers: {
|
||||
"Content-Type": "application/pdf",
|
||||
"Content-Disposition": `attachment; filename="documento-CMYK.pdf"`,
|
||||
"Content-Length": outputBuffer.length.toString()
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Erro ao converter PDF POST:", error);
|
||||
return NextResponse.json(
|
||||
{ error: "Erro ao converter PDF para CMYK", details: error.message },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
.
|
||||
@@ -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"
|
||||
}
|
||||
@@ -0,0 +1,283 @@
|
||||
# Graph Report - ESPDocs (2026-08-24)
|
||||
|
||||
## Corpus Check
|
||||
- 58 files · ~674,255 words
|
||||
- Verdict: corpus is large enough that graph structure adds value.
|
||||
|
||||
## Summary
|
||||
- 824 nodes · 1491 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_
|
||||
- `number()` --calls--> `isPostfixIeHack()` [EXTRACTED]
|
||||
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 27 → community 4_
|
||||
- `peek()` --calls--> `scanString()` [EXTRACTED]
|
||||
public/formacoes/assets/paged.polyfill.js → public/formacoes/assets/paged.polyfill.js _Bridges community 7 → community 9_
|
||||
|
||||
## Import Cycles
|
||||
- None detected.
|
||||
|
||||
## Communities (82 total, 24 thin omitted)
|
||||
|
||||
### Community 0 - "paged.polyfill.js"
|
||||
Cohesion: 0.02
|
||||
Nodes (21): 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, NOTE: Don't check more than a first argument is an ident, rest checks are for le, TODO: this isn't working right, needs to check what is in the prelude (+13 more)
|
||||
|
||||
### Community 1 - "Layout"
|
||||
Cohesion: 0.06
|
||||
Nodes (27): breakInsideAvoidParentNode(), BreakToken, cloneNode(), elementAfter(), findElement(), findRef(), Footnotes, getBoundingClientRect() (+19 more)
|
||||
|
||||
### Community 2 - "AtPage"
|
||||
Cohesion: 0.08
|
||||
Nodes (6): append(), AtPage, createItem(), CSSValueToString(), validate(), walk()
|
||||
|
||||
### Community 3 - "Page"
|
||||
Cohesion: 0.06
|
||||
Nodes (10): CodeExample(), ConnectionsDiagram(), FILTER_CATEGORIES, type_colors, Chunker, dump(), forEachToken(), Page (+2 more)
|
||||
|
||||
### Community 4 - ".push"
|
||||
Cohesion: 0.06
|
||||
Nodes (16): collectWarning(), computeSourceURL(), Counters, isAbsolute(), join(), normalize(), number(), PageCounterIncrement (+8 more)
|
||||
|
||||
### Community 5 - "dependencies"
|
||||
Cohesion: 0.05
|
||||
Nodes (43): @emotion/react, @emotion/styled, eslint, eslint-config-next, @eslint/eslintrc, framer-motion, googleapis, lucide-react (+35 more)
|
||||
|
||||
### Community 6 - ".replace"
|
||||
Cohesion: 0.07
|
||||
Nodes (19): attr(), calc(), child(), cleanPseudoContent(), consumeFunction(), customIdent(), defer(), eqStr() (+11 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.10
|
||||
Nodes (6): ContentParser, Handler, Hook, invokeForType(), Lists, Sheet
|
||||
|
||||
### Community 9 - "peek"
|
||||
Cohesion: 0.13
|
||||
Nodes (20): charCode(), customPropertyName(), idSelector(), maybeMultiplied(), maybeToken(), parse$2(), peek(), readGroup() (+12 more)
|
||||
|
||||
### Community 10 - "Breaks"
|
||||
Cohesion: 0.10
|
||||
Nodes (14): Breaks, CommentsFilter, displayedElementAfter(), displayedElementBefore(), elementBefore(), filterTree(), getNodeWithNamedPage(), isAllWhitespace() (+6 more)
|
||||
|
||||
### Community 11 - "Queue"
|
||||
Cohesion: 0.12
|
||||
Nodes (10): Queue, requireEs6Symbol(), requireIsArguments(), requireIsFunction(), requireIsImplemented(), requireIsString(), requireIsSymbol(), requirePolyfill() (+2 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 (5): dimension(), integer(), isPostfixIeHack(), 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 35 - "processStructure"
|
||||
Cohesion: 0.50
|
||||
Nodes (4): createNodeStructureChecker(), isValidLocation(), isValidNumber(), processStructure()
|
||||
|
||||
### 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()
|
||||
|
||||
## Knowledge Gaps
|
||||
- **71 isolated node(s):** `metadata`, `metadata`, `categoryIcons`, `metadata`, `metadata` (+66 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`?**
|
||||
_High betweenness centrality (0.045) - this node is a cross-community bridge._
|
||||
- **Why does `Page` connect `Page` to `paged.polyfill.js`, `.replace`?**
|
||||
_High betweenness centrality (0.030) - 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?**
|
||||
_71 weakly-connected nodes found - possible documentation gaps or missing edges._
|
||||
- **Should `paged.polyfill.js` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.022727272727272728 - nodes in this community are weakly interconnected._
|
||||
- **Should `Layout` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.05575065847234416 - nodes in this community are weakly interconnected._
|
||||
- **Should `AtPage` be split into smaller, more focused modules?**
|
||||
_Cohesion score 0.08240794856808883 - nodes in this community are weakly interconnected._
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,467 @@
|
||||
{
|
||||
"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": 1787576412.64932,
|
||||
"ast_hash": "0a1ab6540c39a42179b1f7de5322efd1",
|
||||
"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": 1787577490.6546896,
|
||||
"ast_hash": "76d50796d964b9bc5f0de4217eead660",
|
||||
"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": ""
|
||||
}
|
||||
}
|
||||
@@ -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._
|
||||
graphify-out/cache/ast/v0.9.15/2408e701d9cd2a32eabfc9fab5a78c59639962ececd8a101f505782130bab20e.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_design_md", "label": "DESIGN.md", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "label": "Diretrizes de tema: claro e escuro", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_1_s\u00f3_existem_os_tons_declarados", "label": "1. S\u00f3 existem os tons declarados", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L9"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_2_a_regra_da_simetria", "label": "2. A regra da simetria", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L36"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_3_pares_can\u00f4nicos_por_papel", "label": "3. Pares can\u00f4nicos por papel", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L50"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_4_exce\u00e7\u00e3o_superf\u00edcies_escuras_nos_dois_temas", "label": "4. Exce\u00e7\u00e3o: superf\u00edcies escuras nos dois temas", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L73"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_4_1_bot\u00e3o_nunca_inverte_preto_branco", "label": "4.1. Bot\u00e3o nunca inverte preto \u2194 branco", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L90"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_4_2_painel_de_destaque_acompanha_o_tema", "label": "4.2. Painel de destaque acompanha o tema", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L114"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_4_3_separa\u00e7\u00e3o_de_superf\u00edcie_no_tema_claro", "label": "4.3. Separa\u00e7\u00e3o de superf\u00edcie no tema claro", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L131"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_5_cor_de_s\u00e9rie_vem_do_dado_n\u00e3o_da_classe", "label": "5. Cor de s\u00e9rie vem do dado, n\u00e3o da classe", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L148"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_nunca_escreva_cor_fixa_em_style_inline", "label": "Nunca escreva cor fixa em `style` inline", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L161"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_design_6_auditar_antes_de_commitar", "label": "6. Auditar antes de commitar", "file_type": "document", "source_file": "DESIGN.md", "source_location": "L186"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_design_md", "target": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_1_s\u00f3_existem_os_tons_declarados", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_2_a_regra_da_simetria", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L36", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_3_pares_can\u00f4nicos_por_papel", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L50", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_4_exce\u00e7\u00e3o_superf\u00edcies_escuras_nos_dois_temas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L73", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_4_1_bot\u00e3o_nunca_inverte_preto_branco", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L90", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_de_tema_claro_e_escuro", "target": "home_lucas_documents_pessoal_dev_espdocs_design_4_2_painel_de_destaque_acompanha_o_tema", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DESIGN.md", "source_location": "L114", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_design_diretrizes_deLine truncated
|
||||
graphify-out/cache/ast/v0.9.15/258e0dfcf55c0af2ab0875e4e88107b4a6750e03f282df21493a8e1c1ecea26e.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_claude_md", "label": "CLAUDE.md", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_claude_graphify", "label": "graphify", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_claude_md", "target": "home_lucas_documents_pessoal_dev_espdocs_claude_graphify", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L1", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}
|
||||
graphify-out/cache/ast/v0.9.15/3dc090adcb7ad150b7433f04e80096cb4e0cc438208bb4873fe1417d9fcadf7e.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_c", "label": "esp-dsp.c", "file_type": "code", "source_file": "public/exemplos/esp-dsp.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-dsp.c", "source_location": "L6", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-dsp.c", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_c", "target": "esp_dsp", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-dsp.c", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-dsp.c", "source_location": "L6", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "dsps_fft2r_init_fc32", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L13", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L15", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L19", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L21", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L23", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "dsps_mulc_f32", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L26", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "dsps_mul_f32", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L27", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "dsps_sum_f32", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L31", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "sqrtf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L34", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_dsp_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-dsp.c", "source_location": "L36", "receiver": null}]}
|
||||
graphify-out/cache/ast/v0.9.15/5ab05c60f8e03374a56391fed8550455c697e75dd904cf9b9bfe2fa31daa6555.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "label": "esp-adf.c", "file_type": "code", "source_file": "public/exemplos/esp-adf.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-adf.c", "source_location": "L14", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "audio_pipeline", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "audio_element", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L3", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "audio_event_iface", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L4", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "audio_common", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L5", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "i2s_stream", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L6", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "mp3_decoder", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L7", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "fatfs_stream", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L8", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "esp_peripherals", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "periph_sdcard", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L10", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-adf.c", "source_location": "L14", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "DEFAULT_ESP_PERIPH_SET_CONFIG", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L17", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "esp_periph_set_init", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L18", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "periph_sdcard_init", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L22", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "esp_periph_start", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L23", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "periph_sdcard_wait_for_ready", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L26", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "ESP_LOGI", "is_member_call": false, "source_file": "public/exemplos/esp-adf.c", "source_location": "L28", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_adf_app_main", "callee": "DEFAULT_AUDIO_PIPELINE_CONFIG", "is_member_call": false, "source_file": "Line truncated
|
||||
graphify-out/cache/ast/v0.9.15/5ff2948b3e60c795c7fa88fb215c4f61ee401a32d601e379c5675c175aa0afd0.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "label": "esp-matter.c", "file_type": "code", "source_file": "public/exemplos/esp-matter.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_event_cb", "label": "app_event_cb()", "file_type": "code", "source_file": "public/exemplos/esp-matter.c", "source_location": "L9", "_callable": true}, {"id": "esp_matter_event_t", "label": "esp_matter_event_t", "file_type": "code", "source_file": "", "source_location": "", "origin_file": "/home/lucas/Documents/Pessoal/dev/ESPDocs/public/exemplos/esp-matter.c"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-matter.c", "source_location": "L27", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "esp_log", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "esp_matter", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L3", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "esp_matter_controller", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L4", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "nvs_flash", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L5", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_event_cb", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_event_cb", "target": "esp_matter_event_t", "relation": "references", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L9", "weight": 1.0, "context": "parameter_type"}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-matter.c", "source_location": "L27", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_event_cb", "callee": "esp_matter_attribute_get", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L16", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_event_cb", "callee": "ESP_LOGI", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L18", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "nvs_flash_init", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L30", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "ESP_ERROR_CHECK", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L32", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "nvs_flash_erase", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L32", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "ESP_ERROR_CHECK", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L33", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "nvs_flash_init", "is_member_call": false, "source_file": "public/exemplos/esp-matter.c", "source_location": "L33", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_matter_app_main", "callee": "create", "is_member_call": faLine truncated
|
||||
graphify-out/cache/ast/v0.9.15/65fb9d056dd4018f23ccfd719bbf7ab57cf848421ee591122ac55e1783e24878.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "label": "esp-nn.c", "file_type": "code", "source_file": "public/exemplos/esp-nn.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "label": "print_array()", "file_type": "code", "source_file": "public/exemplos/esp-nn.c", "source_location": "L8", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-nn.c", "source_location": "L16", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "target": "stdio", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "target": "esp_nn", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "target": "esp_nn_defs", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L3", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L8", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_app_main", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L16", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_app_main", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "relation": "calls", "context": "call", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-nn.c", "source_location": "L38", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-nn.c", "source_location": "L9", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-nn.c", "source_location": "L11", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_print_array", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-nn.c", "source_location": "L13", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_app_main", "callee": "esp_nn_mul_mat_16x8_16", "is_member_call": false, "source_file": "public/exemplos/esp-nn.c", "source_location": "L35", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_nn_app_main", "callee": "esp_nn_relu_16", "is_member_call": false, "source_file": "public/exemplos/esp-nn.c", "source_location": "L41", "receiver": null}]}
|
||||
graphify-out/cache/ast/v0.9.15/7bb1966576768c2921b8b0f30ee3c68796385e8b463095701d1d16f685fdac8f.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_json", "label": "jsconfig.json", "file_type": "code", "source_file": "jsconfig.json", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions", "label": "compilerOptions", "file_type": "code", "source_file": "jsconfig.json", "source_location": "L2"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions_paths", "label": "paths", "file_type": "code", "source_file": "jsconfig.json", "source_location": "L3"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_paths", "label": "@/*", "file_type": "code", "source_file": "jsconfig.json", "source_location": "L4"}, {"id": "ref", "label": "./*", "file_type": "concept", "source_file": "jsconfig.json", "source_location": "L4"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_json", "target": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "jsconfig.json", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions", "target": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "jsconfig.json", "source_location": "L3", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_compileroptions_paths", "target": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "jsconfig.json", "source_location": "L4", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_jsconfig_paths", "target": "ref", "relation": "extends", "confidence": "EXTRACTED", "source_file": "jsconfig.json", "source_location": "L4", "weight": 1.0, "context": "import"}]}
|
||||
graphify-out/cache/ast/v0.9.15/7cf0a07eab6ddffe0e8518eeea85d2ea19b2436f7c333406107c6aa246118cea.json
Vendored
+1
@@ -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_app_main", "label": "app_main()", "file_type": "code", "source_file": "public/exemplos/esp-idf.c", "source_location": "L8", "_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": "L1", "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": "L2", "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": "L3", "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": "L4", "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": "L8", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "gpio_reset_pin", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L11", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "gpio_set_direction", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L12", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "gpio_set_level", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L16", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L17", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "vTaskDelay", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L18", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "pdMS_TO_TICKS", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L18", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "gpio_set_level", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L21", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "printf", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L22", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "vTaskDelay", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L23", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_idf_app_main", "callee": "pdMS_TO_TICKS", "is_member_call": false, "source_file": "public/exemplos/esp-idf.c", "source_location": "L23", "receiver": null}]}
|
||||
graphify-out/cache/ast/v0.9.15/8a225260e7d82b34dc818d6fe04cb0eb6a0f1ce94643c4ff6a412365f0a32af8.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_micropython_py", "label": "micropython.py", "file_type": "code", "source_file": "public/exemplos/micropython.py", "source_location": "L1"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_micropython_py", "target": "machine", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/micropython.py", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_micropython_py", "target": "time", "relation": "imports_from", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/micropython.py", "source_location": "L2", "weight": 1.0}], "raw_calls": []}
|
||||
graphify-out/cache/ast/v0.9.15/94eab1d9ed9cf56eface235930b3e24a489c3f2c13fcb9fef288ca62bfcbf17d.json
Vendored
+1
@@ -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_auditar_temas", "label": "auditar-temas", "file_type": "code", "source_file": "package.json", "source_location": "L10"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_scripts_slides_pdf", "label": "slides-pdf", "file_type": "code", "source_file": "package.json", "source_location": "L11"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "package.json", "source_location": "L13"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_emotion_react", "label": "@emotion/react", "file_type": "code", "source_file": "package.json", "source_location": "L14"}, {"id": "emotion_react", "label": "@emotion/react", "file_type": "concept", "source_file": "package.json", "source_location": "L14"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_emotion_styled", "label": "@emotion/styled", "file_type": "code", "source_file": "package.json", "source_location": "L15"}, {"id": "emotion_styled", "label": "@emotion/styled", "file_type": "concept", "source_file": "package.json", "source_location": "L15"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_mui_icons_material", "label": "@mui/icons-material", "file_type": "code", "source_file": "package.json", "source_location": "L16"}, {"id": "mui_icons_material", "label": "@mui/icons-material", "file_type": "concept", "source_file": "package.json", "source_location": "L16"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_mui_material", "label": "@mui/material", "file_type": "code", "source_file": "package.json", "source_location": "L17"}, {"id": "mui_material", "label": "@mui/material", "file_type": "concept", "source_file": "package.json", "source_location": "L17"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_framer_motion", "label": "framer-motion", "file_type": "code", "source_file": "package.json", "source_location": "L18"}, {"id": "framer_motion", "label": "framer-motion", "file_type": "concept", "source_file": "package.json", "source_location": "L18"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_googleapis", "label": "googleapis", "file_type": "code", "source_file": "package.json", "source_location": "L19"}, {"id": "googleapis", "label": "googleapis", "file_type": "concept", "source_file": "package.json", "source_location": "L19"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_lucide_react", "label": "lucide-react", "file_type": "code", "source_file": "package.json", "source_location": "L20"}, {"id": "lucide_react", "label": "lucide-react", "file_type": "concept", "source_file": "package.json", "source_location": "L20"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next", "label": "next", "file_type": "code", "source_file": "package.json", "source_location": "L21"}, {"id": "next", "label": "next", "file_type": "concept", "source_file": "package.json", "source_location": "L21"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next_themes", "label": "next-themes", "file_type": "code", "source_file": "package.json", "source_location": "L22"}, {"id": "next_themes", "label": "next-themes", "file_type": "concept", "source_file": "package.json", "source_location": "L22"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_react", "lLine truncated
|
||||
graphify-out/cache/ast/v0.9.15/9a4f7865e03840a08d94f5cddebeaf3a7695b326d786c5c398defe907088f806.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "label": "esp-who.c", "file_type": "code", "source_file": "public/exemplos/esp-who.c", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "label": "setup()", "file_type": "code", "source_file": "public/exemplos/esp-who.c", "source_location": "L11", "_callable": true}, {"id": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "label": "loop()", "file_type": "code", "source_file": "public/exemplos/esp-who.c", "source_location": "L48", "_callable": true}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "esp_camera", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "fd_forward", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L2", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "fr_forward", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L3", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "human_face_detect_msr01", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L4", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "human_face_detect_mnp01", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L5", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "camera_pins", "relation": "imports", "context": "import", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L11", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_c", "target": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "relation": "contains", "confidence": "EXTRACTED", "source_file": "public/exemplos/esp-who.c", "source_location": "L48", "weight": 1.0}], "raw_calls": [{"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "begin", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L12", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "setDebugOutput", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L13", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "println", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L14", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "esp_camera_init", "is_member_call": false, "source_file": "public/exemplos/esp-who.c", "source_location": "L40", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "println", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L41", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_setup", "callee": "println", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L45", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "callee": "esp_camera_fb_get", "is_member_call": false, "source_file": "public/exemplos/esp-who.c", "source_location": "L49", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "callee": "println", "is_member_call": true, "source_file": "public/exemplos/esp-who.c", "source_location": "L51", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "callee": "face_detect_msr01", "is_member_call": false, "source_file": "public/exemplos/esp-who.c", "source_location": "L56", "receiver": null}, {"caller_nid": "home_lucas_documents_pessoal_dev_espdocs_public_exemplos_esp_who_loop", "callee": "printf", "is_meLine truncated
|
||||
graphify-out/cache/ast/v0.9.15/ce4479652d4f587627d26b179cdd5e49d72eee42d5a90f531b31ac657dcbf563.json
Vendored
+1
@@ -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_auditar_temas", "label": "auditar-temas", "file_type": "code", "source_file": "package.json", "source_location": "L10"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies", "label": "dependencies", "file_type": "code", "source_file": "package.json", "source_location": "L12"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_emotion_react", "label": "@emotion/react", "file_type": "code", "source_file": "package.json", "source_location": "L13"}, {"id": "emotion_react", "label": "@emotion/react", "file_type": "concept", "source_file": "package.json", "source_location": "L13"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_emotion_styled", "label": "@emotion/styled", "file_type": "code", "source_file": "package.json", "source_location": "L14"}, {"id": "emotion_styled", "label": "@emotion/styled", "file_type": "concept", "source_file": "package.json", "source_location": "L14"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_mui_icons_material", "label": "@mui/icons-material", "file_type": "code", "source_file": "package.json", "source_location": "L15"}, {"id": "mui_icons_material", "label": "@mui/icons-material", "file_type": "concept", "source_file": "package.json", "source_location": "L15"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_mui_material", "label": "@mui/material", "file_type": "code", "source_file": "package.json", "source_location": "L16"}, {"id": "mui_material", "label": "@mui/material", "file_type": "concept", "source_file": "package.json", "source_location": "L16"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_framer_motion", "label": "framer-motion", "file_type": "code", "source_file": "package.json", "source_location": "L17"}, {"id": "framer_motion", "label": "framer-motion", "file_type": "concept", "source_file": "package.json", "source_location": "L17"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_googleapis", "label": "googleapis", "file_type": "code", "source_file": "package.json", "source_location": "L18"}, {"id": "googleapis", "label": "googleapis", "file_type": "concept", "source_file": "package.json", "source_location": "L18"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_lucide_react", "label": "lucide-react", "file_type": "code", "source_file": "package.json", "source_location": "L19"}, {"id": "lucide_react", "label": "lucide-react", "file_type": "concept", "source_file": "package.json", "source_location": "L19"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next", "label": "next", "file_type": "code", "source_file": "package.json", "source_location": "L20"}, {"id": "next", "label": "next", "file_type": "concept", "source_file": "package.json", "source_location": "L20"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_next_themes", "label": "next-themes", "file_type": "code", "source_file": "package.json", "source_location": "L21"}, {"id": "next_themes", "label": "next-themes", "file_type": "concept", "source_file": "package.json", "source_location": "L21"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_package_dependencies_react", "label": "react", "file_type": "code", "source_file": "package.json", "source_location": "L22"}, {"id": "react", "label": "react", "file_type": "concept", "source_file": "package.jsoLine truncated
|
||||
graphify-out/cache/ast/v0.9.15/f024a922261e513412d492a32ff2e4aa2825835c9493bb9a050162297eb55a46.json
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"nodes": [{"id": "home_lucas_documents_pessoal_dev_espdocs_readme_md", "label": "README.md", "file_type": "document", "source_file": "README.md", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_espdocs_documenta\u00e7\u00e3o_esp32_em_portugu\u00eas", "label": "ESPDocs - Documenta\u00e7\u00e3o ESP32 em Portugu\u00eas", "file_type": "document", "source_file": "README.md", "source_location": "L1"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_funcionalidades", "label": "\ud83d\ude80 Funcionalidades", "file_type": "document", "source_file": "README.md", "source_location": "L9"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_in\u00edcio_r\u00e1pido", "label": "\ud83c\udfc1 In\u00edcio R\u00e1pido", "file_type": "document", "source_file": "README.md", "source_location": "L18"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_instala\u00e7\u00e3o", "label": "Instala\u00e7\u00e3o", "file_type": "document", "source_file": "README.md", "source_location": "L20"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_configura\u00e7\u00e3o_do_marketplace_opcional", "label": "Configura\u00e7\u00e3o do Marketplace (Opcional)", "file_type": "document", "source_file": "README.md", "source_location": "L33"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_executar_em_desenvolvimento", "label": "Executar em Desenvolvimento", "file_type": "document", "source_file": "README.md", "source_location": "L43"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_estrutura_do_projeto", "label": "\ud83d\udcc1 Estrutura do Projeto", "file_type": "document", "source_file": "README.md", "source_location": "L55"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_tecnologias", "label": "\ud83d\udee0\ufe0f Tecnologias", "file_type": "document", "source_file": "README.md", "source_location": "L87"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_learn_more", "label": "\ud83d\udcda Learn More", "file_type": "document", "source_file": "README.md", "source_location": "L95"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_deploy_on_vercel", "label": "\ud83d\ude80 Deploy on Vercel", "file_type": "document", "source_file": "README.md", "source_location": "L104"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_licen\u00e7a", "label": "\ud83d\udcc4 Licen\u00e7a", "file_type": "document", "source_file": "README.md", "source_location": "L112"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_disclaimer", "label": "\u26a0\ufe0f Disclaimer", "file_type": "document", "source_file": "README.md", "source_location": "L116"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_autor", "label": "\ud83d\udc64 Autor", "file_type": "document", "source_file": "README.md", "source_location": "L120"}, {"id": "home_lucas_documents_pessoal_dev_espdocs_readme_contribuindo", "label": "\ud83e\udd1d Contribuindo", "file_type": "document", "source_file": "README.md", "source_location": "L126"}], "edges": [{"source": "home_lucas_documents_pessoal_dev_espdocs_readme_md", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_espdocs_documenta\u00e7\u00e3o_esp32_em_portugu\u00eas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L1", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_espdocs_documenta\u00e7\u00e3o_esp32_em_portugu\u00eas", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_funcionalidades", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L9", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_espdocs_documenta\u00e7\u00e3o_esp32_em_portugu\u00eas", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_in\u00edcio_r\u00e1pido", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L18", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_in\u00edcio_r\u00e1pido", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_instala\u00e7\u00e3o", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L20", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_in\u00edcio_r\u00e1pido", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_configura\u00e7\u00e3o_do_marketplace_opcional", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L33", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_in\u00edcio_r\u00e1pido", "target": "home_lucas_documents_pessoal_dev_espdocs_readme_executar_em_desenvolvimento", "relation": "contains", "confidence": "EXTRACTED", "source_file": "README.md", "source_location": "L43", "weight": 1.0}, {"source": "home_lucas_documents_pessoal_dev_espdocs_readme_espdocs_documenta\u00e7\u00e3o_esp32_em_portugu\u00eas", "target": "home_lucas_documLine truncated
|
||||
Vendored
+1
@@ -0,0 +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
|
||||
@@ -0,0 +1,320 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>graphify - graphify-out/graph.html</title>
|
||||
<script src="https://unpkg.com/vis-network@9.1.6/standalone/umd/vis-network.min.js"
|
||||
integrity="sha384-Ux6phic9PEHJ38YtrijhkzyJ8yQlH8i/+buBR8s3mAZOJrP1gwyvAcIYl3GWtpX1"
|
||||
crossorigin="anonymous"></script>
|
||||
<style>
|
||||
* { box-sizing: border-box; margin: 0; padding: 0; }
|
||||
body { background: #0f0f1a; color: #e0e0e0; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; display: flex; height: 100vh; overflow: hidden; }
|
||||
#graph { flex: 1; }
|
||||
#sidebar { width: 280px; background: #1a1a2e; border-left: 1px solid #2a2a4e; display: flex; flex-direction: column; overflow: hidden; }
|
||||
#search-wrap { padding: 12px; border-bottom: 1px solid #2a2a4e; }
|
||||
#search { width: 100%; background: #0f0f1a; border: 1px solid #3a3a5e; color: #e0e0e0; padding: 7px 10px; border-radius: 6px; font-size: 13px; outline: none; }
|
||||
#search:focus { border-color: #4E79A7; }
|
||||
#search-results { max-height: 140px; overflow-y: auto; padding: 4px 12px; border-bottom: 1px solid #2a2a4e; display: none; }
|
||||
.search-item { padding: 4px 6px; cursor: pointer; border-radius: 4px; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
|
||||
.search-item:hover { background: #2a2a4e; }
|
||||
#info-panel { padding: 14px; border-bottom: 1px solid #2a2a4e; min-height: 140px; }
|
||||
#info-panel h3 { font-size: 13px; color: #aaa; margin-bottom: 8px; text-transform: uppercase; letter-spacing: 0.05em; }
|
||||
#info-content { font-size: 13px; color: #ccc; line-height: 1.6; }
|
||||
#info-content .field { margin-bottom: 5px; }
|
||||
#info-content .field b { color: #e0e0e0; }
|
||||
#info-content .empty { color: #555; font-style: italic; }
|
||||
.neighbor-link { display: block; padding: 2px 6px; margin: 2px 0; border-radius: 3px; cursor: pointer; font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; border-left: 3px solid #333; }
|
||||
.neighbor-link:hover { background: #2a2a4e; }
|
||||
#neighbors-list { max-height: 160px; overflow-y: auto; margin-top: 4px; }
|
||||
#legend-wrap { flex: 1; overflow-y: auto; padding: 12px; }
|
||||
#legend-wrap h3 { font-size: 13px; color: #aaa; margin-bottom: 10px; text-transform: uppercase; letter-spacing: 0.05em; }
|
||||
.legend-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; cursor: pointer; border-radius: 4px; font-size: 12px; }
|
||||
.legend-item:hover { background: #2a2a4e; padding-left: 4px; }
|
||||
.legend-item.dimmed { opacity: 0.35; }
|
||||
.legend-dot { width: 12px; height: 12px; border-radius: 50%; flex-shrink: 0; }
|
||||
.legend-label { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
||||
.legend-count { color: #666; font-size: 11px; }
|
||||
#stats { padding: 10px 14px; border-top: 1px solid #2a2a4e; font-size: 11px; color: #555; }
|
||||
#legend-controls { display: flex; align-items: center; gap: 8px; margin-bottom: 8px; padding: 4px 0; }
|
||||
#legend-controls label { display: flex; align-items: center; gap: 6px; cursor: pointer; font-size: 12px; color: #aaa; user-select: none; }
|
||||
#legend-controls label:hover { color: #e0e0e0; }
|
||||
.legend-cb, #select-all-cb { appearance: none; -webkit-appearance: none; width: 14px; height: 14px; border: 1.5px solid #3a3a5e; border-radius: 3px; background: #0f0f1a; cursor: pointer; position: relative; flex-shrink: 0; }
|
||||
.legend-cb:checked, #select-all-cb:checked { background: #4E79A7; border-color: #4E79A7; }
|
||||
.legend-cb:checked::after, #select-all-cb:checked::after { content: ''; position: absolute; left: 3.5px; top: 1px; width: 4px; height: 7px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }
|
||||
#select-all-cb:indeterminate { background: #4E79A7; border-color: #4E79A7; }
|
||||
#select-all-cb:indeterminate::after { content: ''; position: absolute; left: 2px; top: 5px; width: 8px; height: 2px; background: #fff; border: none; transform: none; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="graph"></div>
|
||||
<div id="sidebar">
|
||||
<div id="search-wrap">
|
||||
<input id="search" type="text" placeholder="Search nodes..." autocomplete="off">
|
||||
<div id="search-results"></div>
|
||||
</div>
|
||||
<div id="info-panel">
|
||||
<h3>Node Info</h3>
|
||||
<div id="info-content"><span class="empty">Click a node to inspect it</span></div>
|
||||
</div>
|
||||
<div id="legend-wrap">
|
||||
<h3>Communities</h3>
|
||||
<div id="legend-controls">
|
||||
<label><input type="checkbox" id="select-all-cb" checked onchange="toggleAllCommunities(!this.checked)">Select All</label>
|
||||
</div>
|
||||
<div id="legend"></div>
|
||||
</div>
|
||||
<div id="stats">833 nodes · 1499 edges · 82 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
|
||||
|
||||
// HTML-escape helper — prevents XSS when injecting graph data into innerHTML
|
||||
function esc(s) {
|
||||
return String(s).replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''');
|
||||
}
|
||||
|
||||
// Build vis datasets
|
||||
const nodesDS = new vis.DataSet(RAW_NODES.map(n => ({
|
||||
id: n.id, label: n.label, color: n.color, size: n.size,
|
||||
font: n.font, title: n.title,
|
||||
_community: n.community, _community_name: n.community_name,
|
||||
_source_file: n.source_file, _file_type: n.file_type, _degree: n.degree,
|
||||
})));
|
||||
|
||||
const edgesDS = new vis.DataSet(RAW_EDGES.map((e, i) => ({
|
||||
id: i, from: e.from, to: e.to,
|
||||
label: '',
|
||||
title: e.title,
|
||||
dashes: e.dashes,
|
||||
width: e.width,
|
||||
color: e.color,
|
||||
arrows: { to: { enabled: true, scaleFactor: 0.5 } },
|
||||
})));
|
||||
|
||||
const container = document.getElementById('graph');
|
||||
const network = new vis.Network(container, { nodes: nodesDS, edges: edgesDS }, {
|
||||
physics: {
|
||||
enabled: true,
|
||||
solver: 'forceAtlas2Based',
|
||||
forceAtlas2Based: {
|
||||
gravitationalConstant: -60,
|
||||
centralGravity: 0.005,
|
||||
springLength: 120,
|
||||
springConstant: 0.08,
|
||||
damping: 0.4,
|
||||
avoidOverlap: 0.8,
|
||||
},
|
||||
stabilization: { iterations: 200, fit: true },
|
||||
},
|
||||
interaction: {
|
||||
hover: true,
|
||||
tooltipDelay: 100,
|
||||
hideEdgesOnDrag: true,
|
||||
navigationButtons: false,
|
||||
keyboard: false,
|
||||
},
|
||||
nodes: { shape: 'dot', borderWidth: 1.5 },
|
||||
edges: { smooth: { type: 'continuous', roundness: 0.2 }, selectionWidth: 3 },
|
||||
});
|
||||
|
||||
network.once('stabilizationIterationsDone', () => {
|
||||
network.setOptions({ physics: { enabled: false } });
|
||||
});
|
||||
|
||||
function showInfo(nodeId) {
|
||||
const n = nodesDS.get(nodeId);
|
||||
if (!n) return;
|
||||
const neighborIds = network.getConnectedNodes(nodeId);
|
||||
const neighborItems = neighborIds.map(nid => {
|
||||
const nb = nodesDS.get(nid);
|
||||
const color = nb ? nb.color.background : '#555';
|
||||
return `<span class="neighbor-link" style="border-left-color:${esc(color)}" data-nid="${esc(nid)}">${esc(nb ? nb.label : nid)}</span>`;
|
||||
}).join('');
|
||||
document.getElementById('info-content').innerHTML = `
|
||||
<div class="field"><b>${esc(n.label)}</b></div>
|
||||
<div class="field">Type: ${esc(n._file_type || 'unknown')}</div>
|
||||
<div class="field">Community: ${esc(n._community_name)}</div>
|
||||
<div class="field">Source: ${esc(n._source_file || '-')}</div>
|
||||
<div class="field">Degree: ${n._degree}</div>
|
||||
${neighborIds.length ? `<div class="field" style="margin-top:8px;color:#aaa;font-size:11px">Neighbors (${neighborIds.length})</div><div id="neighbors-list">${neighborItems}</div>` : ''}
|
||||
`;
|
||||
}
|
||||
|
||||
function focusNode(nodeId) {
|
||||
network.focus(nodeId, { scale: 1.4, animation: true });
|
||||
network.selectNodes([nodeId]);
|
||||
showInfo(nodeId);
|
||||
}
|
||||
|
||||
// Neighbor links use a data attribute + one delegated listener rather than an
|
||||
// inline onclick. A node id/label sourced from a document or a scraped URL
|
||||
// (graphify add) can contain a double-quote; dropping the stringified id
|
||||
// unescaped into a quoted onclick both broke every link and allowed a hostile
|
||||
// source to inject an event handler into the local report (stored XSS, #1838).
|
||||
// esc() on data-nid keeps the value inside the attribute; the listener reads it
|
||||
// back verbatim. Bound to document so it survives the innerHTML rebuild that
|
||||
// recreates #neighbors-list on each showInfo().
|
||||
document.addEventListener('click', e => {
|
||||
const el = e.target.closest('.neighbor-link');
|
||||
if (el && el.dataset.nid !== undefined) focusNode(el.dataset.nid);
|
||||
});
|
||||
|
||||
// Track hovered node — hover detection is more reliable than click params
|
||||
let hoveredNodeId = null;
|
||||
network.on('hoverNode', params => {
|
||||
hoveredNodeId = params.node;
|
||||
container.style.cursor = 'pointer';
|
||||
});
|
||||
network.on('blurNode', () => {
|
||||
hoveredNodeId = null;
|
||||
container.style.cursor = 'default';
|
||||
});
|
||||
container.addEventListener('click', () => {
|
||||
if (hoveredNodeId !== null) {
|
||||
showInfo(hoveredNodeId);
|
||||
network.selectNodes([hoveredNodeId]);
|
||||
}
|
||||
});
|
||||
network.on('click', params => {
|
||||
if (params.nodes.length > 0) {
|
||||
showInfo(params.nodes[0]);
|
||||
} else if (hoveredNodeId === null) {
|
||||
document.getElementById('info-content').innerHTML = '<span class="empty">Click a node to inspect it</span>';
|
||||
}
|
||||
});
|
||||
|
||||
const searchInput = document.getElementById('search');
|
||||
const searchResults = document.getElementById('search-results');
|
||||
searchInput.addEventListener('input', () => {
|
||||
const q = searchInput.value.toLowerCase().trim();
|
||||
searchResults.innerHTML = '';
|
||||
if (!q) { searchResults.style.display = 'none'; return; }
|
||||
const matches = RAW_NODES.filter(n => n.label.toLowerCase().includes(q)).slice(0, 20);
|
||||
if (!matches.length) { searchResults.style.display = 'none'; return; }
|
||||
searchResults.style.display = 'block';
|
||||
matches.forEach(n => {
|
||||
const el = document.createElement('div');
|
||||
el.className = 'search-item';
|
||||
el.textContent = n.label;
|
||||
el.style.borderLeft = `3px solid ${n.color.background}`;
|
||||
el.style.paddingLeft = '8px';
|
||||
el.onclick = () => {
|
||||
network.focus(n.id, { scale: 1.5, animation: true });
|
||||
network.selectNodes([n.id]);
|
||||
showInfo(n.id);
|
||||
searchResults.style.display = 'none';
|
||||
searchInput.value = '';
|
||||
};
|
||||
searchResults.appendChild(el);
|
||||
});
|
||||
});
|
||||
document.addEventListener('click', e => {
|
||||
if (!searchResults.contains(e.target) && e.target !== searchInput)
|
||||
searchResults.style.display = 'none';
|
||||
});
|
||||
|
||||
const hiddenCommunities = new Set();
|
||||
|
||||
const selectAllCb = document.getElementById('select-all-cb');
|
||||
|
||||
function updateSelectAllState() {
|
||||
const total = LEGEND.length;
|
||||
const hidden = hiddenCommunities.size;
|
||||
selectAllCb.checked = hidden === 0;
|
||||
selectAllCb.indeterminate = hidden > 0 && hidden < total;
|
||||
}
|
||||
|
||||
function toggleAllCommunities(hide) {
|
||||
document.querySelectorAll('.legend-item').forEach(item => {
|
||||
hide ? item.classList.add('dimmed') : item.classList.remove('dimmed');
|
||||
});
|
||||
document.querySelectorAll('.legend-cb').forEach(cb => {
|
||||
cb.checked = !hide;
|
||||
});
|
||||
LEGEND.forEach(c => {
|
||||
if (hide) hiddenCommunities.add(c.cid); else hiddenCommunities.delete(c.cid);
|
||||
});
|
||||
const updates = RAW_NODES.map(n => ({ id: n.id, hidden: hide }));
|
||||
nodesDS.update(updates);
|
||||
updateSelectAllState();
|
||||
}
|
||||
|
||||
const legendEl = document.getElementById('legend');
|
||||
LEGEND.forEach(c => {
|
||||
const item = document.createElement('div');
|
||||
item.className = 'legend-item';
|
||||
const cb = document.createElement('input');
|
||||
cb.type = 'checkbox';
|
||||
cb.className = 'legend-cb';
|
||||
cb.checked = true;
|
||||
cb.addEventListener('change', (e) => {
|
||||
e.stopPropagation();
|
||||
if (cb.checked) {
|
||||
hiddenCommunities.delete(c.cid);
|
||||
item.classList.remove('dimmed');
|
||||
} else {
|
||||
hiddenCommunities.add(c.cid);
|
||||
item.classList.add('dimmed');
|
||||
}
|
||||
const updates = RAW_NODES
|
||||
.filter(n => n.community === c.cid)
|
||||
.map(n => ({ id: n.id, hidden: !cb.checked }));
|
||||
nodesDS.update(updates);
|
||||
updateSelectAllState();
|
||||
});
|
||||
item.innerHTML = `<div class="legend-dot" style="background:${c.color}"></div>
|
||||
<span class="legend-label">${c.label}</span>
|
||||
<span class="legend-count">${c.count}</span>`;
|
||||
item.prepend(cb);
|
||||
item.onclick = (e) => {
|
||||
if (e.target === cb) return;
|
||||
cb.checked = !cb.checked;
|
||||
cb.dispatchEvent(new Event('change'));
|
||||
};
|
||||
legendEl.appendChild(item);
|
||||
});
|
||||
</script>
|
||||
<script>
|
||||
// Render hyperedges as shaded regions
|
||||
const hyperedges = [];
|
||||
// afterDrawing passes ctx already transformed to network coordinate space.
|
||||
// Draw node positions raw — no manual pan/zoom/DPR math needed.
|
||||
network.on('afterDrawing', function(ctx) {
|
||||
hyperedges.forEach(h => {
|
||||
const positions = h.nodes
|
||||
.map(nid => network.getPositions([nid])[nid])
|
||||
.filter(p => p !== undefined);
|
||||
if (positions.length < 2) return;
|
||||
ctx.save();
|
||||
ctx.globalAlpha = 0.12;
|
||||
ctx.fillStyle = '#6366f1';
|
||||
ctx.strokeStyle = '#6366f1';
|
||||
ctx.lineWidth = 2;
|
||||
ctx.beginPath();
|
||||
// Centroid and expanded hull in network coordinates
|
||||
const cx = positions.reduce((s, p) => s + p.x, 0) / positions.length;
|
||||
const cy = positions.reduce((s, p) => s + p.y, 0) / positions.length;
|
||||
const expanded = positions.map(p => ({
|
||||
x: cx + (p.x - cx) * 1.15,
|
||||
y: cy + (p.y - cy) * 1.15
|
||||
}));
|
||||
ctx.moveTo(expanded[0].x, expanded[0].y);
|
||||
expanded.slice(1).forEach(p => ctx.lineTo(p.x, p.y));
|
||||
ctx.closePath();
|
||||
ctx.fill();
|
||||
ctx.globalAlpha = 0.4;
|
||||
ctx.stroke();
|
||||
// Label
|
||||
ctx.globalAlpha = 0.8;
|
||||
ctx.fillStyle = '#4f46e5';
|
||||
ctx.font = 'bold 11px sans-serif';
|
||||
ctx.textAlign = 'center';
|
||||
ctx.fillText(h.label, cx, cy - 5);
|
||||
ctx.restore();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
+24930
File diff suppressed because it is too large.
Load diff
@@ -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": ""
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -8,7 +8,7 @@
|
||||
"start": "next start",
|
||||
"lint": "eslint",
|
||||
"auditar-temas": "node scripts/auditar-temas.mjs",
|
||||
"exportar-cmyk": "node scripts/exportar-cmyk.mjs"
|
||||
"slides-pdf": "node scripts/slides-pdf.mjs"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.14.0",
|
||||
|
||||
@@ -1965,108 +1965,7 @@ Temperatura: 26.1 C | Umidade: 62.0 %</code></pre>
|
||||
window.PagedConfig = {
|
||||
before: () => document.querySelector(".aviso-carregando")?.remove(),
|
||||
};
|
||||
|
||||
function montarPainelFlutuante() {
|
||||
if (document.getElementById("painelExportacao")) return;
|
||||
|
||||
// Injeta estilo para position fixed sem ser sanitizado pelo parser do Paged.js
|
||||
const style = document.createElement("style");
|
||||
style.textContent = `
|
||||
#painelExportacao {
|
||||
position: fixed !important;
|
||||
top: 18px !important;
|
||||
right: 20px !important;
|
||||
z-index: 999999 !important;
|
||||
display: flex !important;
|
||||
}
|
||||
#toastExportacao {
|
||||
position: fixed !important;
|
||||
bottom: 24px !important;
|
||||
right: 24px !important;
|
||||
z-index: 1000000 !important;
|
||||
}
|
||||
@media print {
|
||||
#painelExportacao, #toastExportacao {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
`;
|
||||
document.head.appendChild(style);
|
||||
|
||||
const painel = document.createElement("div");
|
||||
painel.id = "painelExportacao";
|
||||
painel.className = "painel-exportacao";
|
||||
painel.innerHTML = `
|
||||
<span class="painel-exportacao-titulo">
|
||||
<svg viewBox="0 0 24 24" width="13" height="13" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 6 2 18 2 18 9"></polyline><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"></path><rect x="6" y="14" width="12" height="8"></rect></svg>
|
||||
Apostila:
|
||||
</span>
|
||||
<button type="button" class="btn-exportar btn-exportar-rgb" id="btnExportarRgb" title="Imprimir ou Salvar em PDF (padrão RGB)">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"></path><polyline points="14 2 14 8 20 8"></polyline><line x1="16" y1="13" x2="8" y2="13"></line><line x1="16" y1="17" x2="8" y2="17"></line><polyline points="10 9 9 9 8 9"></polyline></svg>
|
||||
<span>Exportar PDF</span>
|
||||
</button>
|
||||
<button type="button" class="btn-exportar btn-exportar-cmyk" id="btnExportarCmyk" title="Exportar PDF em CMYK (ISO Coated) para gráfica">
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20"></path><path d="M2 12h20"></path></svg>
|
||||
<span>Exportar em CMYK</span>
|
||||
</button>
|
||||
`;
|
||||
|
||||
const toast = document.createElement("div");
|
||||
toast.id = "toastExportacao";
|
||||
toast.className = "toast-exportacao";
|
||||
|
||||
document.body.appendChild(painel);
|
||||
document.body.appendChild(toast);
|
||||
|
||||
document.getElementById("btnExportarRgb").onclick = () => window.print();
|
||||
|
||||
document.getElementById("btnExportarCmyk").onclick = async () => {
|
||||
const btn = document.getElementById("btnExportarCmyk");
|
||||
const txt = btn.innerHTML;
|
||||
btn.disabled = true;
|
||||
btn.innerHTML = `<span class="spinner-exportar"></span><span>Baixando CMYK...</span>`;
|
||||
exibirToast("Gerando PDF em CMYK (ISO Coated)... O download iniciará em instantes.", "info", 15000);
|
||||
|
||||
try {
|
||||
const res = await fetch("/api/export-cmyk?modulo=1");
|
||||
if (!res.ok) throw new Error("Erro no servidor (" + res.status + ")");
|
||||
const blob = await res.blob();
|
||||
const url = URL.createObjectURL(blob);
|
||||
const a = document.createElement("a");
|
||||
a.style.display = "none";
|
||||
a.href = url;
|
||||
a.download = "LASER-ESP32-Modulo-1-CMYK.pdf";
|
||||
document.body.appendChild(a);
|
||||
a.click();
|
||||
setTimeout(() => { a.remove(); URL.revokeObjectURL(url); }, 1000);
|
||||
exibirToast("✅ PDF em CMYK baixado com sucesso!", "sucesso", 4000);
|
||||
} catch (err) {
|
||||
console.error("Erro CMYK:", err);
|
||||
exibirToast("❌ Erro ao baixar PDF: " + err.message, "erro", 6000);
|
||||
} finally {
|
||||
btn.disabled = false;
|
||||
btn.innerHTML = txt;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
function exibirToast(msg, tipo = "info", dur = 4000) {
|
||||
const t = document.getElementById("toastExportacao");
|
||||
if (!t) return;
|
||||
t.textContent = msg;
|
||||
t.className = "toast-exportacao ativo " + tipo;
|
||||
clearTimeout(t._timer);
|
||||
t._timer = setTimeout(() => t.classList.remove("ativo"), dur);
|
||||
}
|
||||
</script>
|
||||
<script src="../assets/paged.polyfill.js"></script>
|
||||
<script>
|
||||
class ExportHandler extends window.Paged.Handler {
|
||||
afterRendered() {
|
||||
montarPainelFlutuante();
|
||||
}
|
||||
}
|
||||
window.Paged.registerHandlers(ExportHandler);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because it is too large.
Load diff
@@ -666,160 +666,7 @@ figcaption {
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
8. Barra Flutuante de Exportação e Impressão (Apenas em Tela)
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
.painel-exportacao {
|
||||
position: fixed !important;
|
||||
top: 18px !important;
|
||||
right: 20px !important;
|
||||
z-index: 999999 !important;
|
||||
display: flex !important;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
background: rgba(6, 38, 57, 0.92);
|
||||
backdrop-filter: blur(14px);
|
||||
-webkit-backdrop-filter: blur(14px);
|
||||
padding: 6px 10px;
|
||||
border-radius: 9999px;
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
box-shadow:
|
||||
0 8px 30px rgba(0, 0, 0, 0.4),
|
||||
0 0 0 1px rgba(0, 0, 0, 0.2);
|
||||
transition: opacity 0.2s ease, transform 0.2s ease;
|
||||
}
|
||||
|
||||
.painel-exportacao.oculto {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
transform: translateY(-8px);
|
||||
}
|
||||
|
||||
.painel-exportacao-titulo {
|
||||
font-family: "Inter", sans-serif;
|
||||
font-size: 11px;
|
||||
font-weight: 600;
|
||||
color: #94a3b8;
|
||||
padding: 0 4px 0 6px;
|
||||
letter-spacing: 0.02em;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
}
|
||||
|
||||
.btn-exportar {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
gap: 6px;
|
||||
padding: 6px 13px;
|
||||
border-radius: 9999px;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-size: 11.5px;
|
||||
font-weight: 600;
|
||||
cursor: pointer;
|
||||
border: none;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
transition: all 0.18s cubic-bezier(0.16, 1, 0.3, 1);
|
||||
white-space: nowrap;
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.btn-exportar svg {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.btn-exportar-rgb {
|
||||
background: rgba(255, 255, 255, 0.12);
|
||||
color: #f1f5f9;
|
||||
border: 1px solid rgba(255, 255, 255, 0.18);
|
||||
}
|
||||
|
||||
.btn-exportar-rgb:hover {
|
||||
background: rgba(255, 255, 255, 0.2);
|
||||
color: #ffffff;
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-exportar-rgb:active {
|
||||
transform: translateY(0);
|
||||
background: rgba(255, 255, 255, 0.1);
|
||||
}
|
||||
|
||||
.btn-exportar-cmyk {
|
||||
background: linear-gradient(135deg, #F77F00, #D62828);
|
||||
color: #ffffff;
|
||||
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||
box-shadow: 0 2px 10px rgba(214, 40, 40, 0.35);
|
||||
}
|
||||
|
||||
.btn-exportar-cmyk:hover {
|
||||
background: linear-gradient(135deg, #ff911a, #e63939);
|
||||
box-shadow: 0 4px 14px rgba(214, 40, 40, 0.5);
|
||||
transform: translateY(-1px);
|
||||
}
|
||||
|
||||
.btn-exportar-cmyk:active {
|
||||
transform: translateY(0);
|
||||
box-shadow: 0 1px 4px rgba(214, 40, 40, 0.3);
|
||||
}
|
||||
|
||||
.btn-exportar:disabled,
|
||||
.btn-exportar.carregando {
|
||||
opacity: 0.75;
|
||||
cursor: wait;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.spinner-exportar {
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
border: 2px solid rgba(255, 255, 255, 0.35);
|
||||
border-top-color: #ffffff;
|
||||
border-radius: 50%;
|
||||
animation: girar-spinner 0.75s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes girar-spinner {
|
||||
to { transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
/* Toast de notificação de exportação */
|
||||
.toast-exportacao {
|
||||
position: fixed;
|
||||
bottom: 24px;
|
||||
right: 24px;
|
||||
z-index: 10001;
|
||||
background: #062639;
|
||||
color: #e2e8f0;
|
||||
border: 1px solid #33566a;
|
||||
padding: 10px 16px;
|
||||
border-radius: 8px;
|
||||
font-family: "Inter", sans-serif;
|
||||
font-size: 12px;
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.4);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
transition: all 0.3s ease;
|
||||
opacity: 0;
|
||||
transform: translateY(12px);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.toast-exportacao.ativo {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
.toast-exportacao.sucesso { border-color: #10b981; }
|
||||
.toast-exportacao.erro { border-color: #ef4444; }
|
||||
|
||||
/* -------------------------------------------------------------------------
|
||||
9. Regras Especiais para Impressão Física e Geração de PDF (@media print)
|
||||
8. Regras Especiais para Impressão Física e Geração de PDF (@media print)
|
||||
------------------------------------------------------------------------- */
|
||||
|
||||
@media print {
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
import { execSync } from "node:child_process";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import puppeteer from "puppeteer";
|
||||
|
||||
const modulo = process.argv[2] || "1";
|
||||
const publicDir = path.resolve("public/formacoes", modulo);
|
||||
const htmlFile = path.join(publicDir, "index.html");
|
||||
|
||||
if (!fs.existsSync(htmlFile)) {
|
||||
console.error(`❌ Erro: Apostila do módulo ${modulo} não encontrada em ${htmlFile}`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const outputDir = path.resolve("dist/apostilas");
|
||||
if (!fs.existsSync(outputDir)) {
|
||||
fs.mkdirSync(outputDir, { recursive: true });
|
||||
}
|
||||
|
||||
const tmpRgbPdf = path.join(outputDir, `modulo-${modulo}-rgb-temp.pdf`);
|
||||
const finalCmykPdf = path.join(outputDir, `LASER-ESP32-Modulo-${modulo}-CMYK.pdf`);
|
||||
|
||||
console.log(`\n🚀 Iniciando exportação da Apostila (Módulo ${modulo})...`);
|
||||
console.log(`📄 Arquivo fonte: ${htmlFile}`);
|
||||
|
||||
async function exportar() {
|
||||
console.log("\n[1/3] Renderizando páginas no Puppeteer e aguardando Paged.js...");
|
||||
const browser = await puppeteer.launch({
|
||||
headless: "new",
|
||||
args: ["--no-sandbox", "--disable-setuid-sandbox", "--disable-web-security", "--allow-file-access-from-files"]
|
||||
});
|
||||
|
||||
try {
|
||||
const page = await browser.newPage();
|
||||
await page.setViewport({ width: 1200, height: 1600, deviceScaleFactor: 2 });
|
||||
|
||||
await page.goto(`file://${htmlFile}`, { waitUntil: "networkidle0", timeout: 60000 });
|
||||
|
||||
// Aguarda o Paged.js concluir a montagem de todas as páginas
|
||||
await page.waitForFunction(() => {
|
||||
const pages = document.querySelectorAll(".pagedjs_page");
|
||||
return pages.length > 0 && !document.querySelector(".aviso-carregando");
|
||||
}, { timeout: 30000 });
|
||||
|
||||
// Aguarda 1 segundo adicional para renderização de fontes e SVG
|
||||
await new Promise((r) => setTimeout(r, 1000));
|
||||
|
||||
console.log("[2/3] Gerando PDF em alta resolução...");
|
||||
await page.pdf({
|
||||
path: tmpRgbPdf,
|
||||
format: "A4",
|
||||
printBackground: true,
|
||||
preferCSSPageSize: true,
|
||||
margin: { top: 0, right: 0, bottom: 0, left: 0 }
|
||||
});
|
||||
|
||||
console.log(`[3/3] Convertendo espaço de cor para CMYK (ISO Coated) via Ghostscript...`);
|
||||
const gsCmd = `gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sColorConversionStrategy=CMYK -dProcessColorModel=/DeviceCMYK -dCompatibilityLevel=1.4 -sOutputFile="${finalCmykPdf}" "${tmpRgbPdf}"`;
|
||||
|
||||
execSync(gsCmd, { stdio: "pipe" });
|
||||
|
||||
if (fs.existsSync(tmpRgbPdf)) {
|
||||
fs.unlinkSync(tmpRgbPdf);
|
||||
}
|
||||
|
||||
const stats = fs.statSync(finalCmykPdf);
|
||||
const tamanhoMB = (stats.size / (1024 * 1024)).toFixed(2);
|
||||
|
||||
console.log(`\n✅ PDF em CMYK gerado com sucesso!`);
|
||||
console.log(`📂 Destino: ${finalCmykPdf}`);
|
||||
console.log(`📊 Tamanho: ${tamanhoMB} MB\n`);
|
||||
} catch (err) {
|
||||
console.error("❌ Erro durante a geração:", err);
|
||||
process.exit(1);
|
||||
} finally {
|
||||
await browser.close();
|
||||
}
|
||||
}
|
||||
|
||||
exportar();
|
||||
@@ -0,0 +1,96 @@
|
||||
/**
|
||||
* Exporta os slides de uma formação para PDF em 16:9 exato.
|
||||
*
|
||||
* npm run slides-pdf → módulo 1
|
||||
* npm run slides-pdf -- 2 → módulo 2
|
||||
*
|
||||
* A página do PDF tem 1280 x 720 px (338,667 x 190,5 mm), a mesma caixa do
|
||||
* palco do slide.html, então nada é reescalado nem cortado. Sai um arquivo por
|
||||
* formação, ao lado do próprio slide.html.
|
||||
*
|
||||
* Existe porque a caixa de impressão do navegador depende de o usuário lembrar
|
||||
* de marcar "gráficos de segundo plano" e "margens: nenhuma". Aqui isso é fixo.
|
||||
*/
|
||||
|
||||
import http from "node:http";
|
||||
import fs from "node:fs";
|
||||
import path from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import puppeteer from "puppeteer";
|
||||
|
||||
const raiz = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
|
||||
const modulo = (process.argv[2] || "1").replace(/\D/g, "") || "1";
|
||||
const pastaModulo = path.join(raiz, "public", "formacoes", modulo);
|
||||
const saida = path.join(pastaModulo, `LASER-ESP32-Modulo-${modulo}-Slides.pdf`);
|
||||
|
||||
if (!fs.existsSync(path.join(pastaModulo, "slide.html"))) {
|
||||
console.error(`Não achei public/formacoes/${modulo}/slide.html`);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
/* Um servidor estático efêmero: com file:// o Chrome bloqueia as fontes e as
|
||||
imagens de pastas irmãs, e o PDF sai com o tipo errado. */
|
||||
const TIPOS = {
|
||||
".html": "text/html; charset=utf-8",
|
||||
".css": "text/css; charset=utf-8",
|
||||
".js": "text/javascript; charset=utf-8",
|
||||
".svg": "image/svg+xml",
|
||||
".png": "image/png",
|
||||
".jpg": "image/jpeg",
|
||||
".json": "application/json",
|
||||
};
|
||||
|
||||
const servidor = http.createServer((req, res) => {
|
||||
const rel = decodeURIComponent(req.url.split("?")[0]);
|
||||
const arquivo = path.join(raiz, "public", path.normalize(rel).replace(/^(\.\.[/\\])+/, ""));
|
||||
if (!arquivo.startsWith(path.join(raiz, "public")) || !fs.existsSync(arquivo) || fs.statSync(arquivo).isDirectory()) {
|
||||
res.writeHead(404).end("não encontrado");
|
||||
return;
|
||||
}
|
||||
res.writeHead(200, { "Content-Type": TIPOS[path.extname(arquivo)] || "application/octet-stream" });
|
||||
fs.createReadStream(arquivo).pipe(res);
|
||||
});
|
||||
|
||||
await new Promise((r) => servidor.listen(0, "127.0.0.1", r));
|
||||
const porta = servidor.address().port;
|
||||
const url = `http://127.0.0.1:${porta}/formacoes/${modulo}/slide.html`;
|
||||
|
||||
console.log(`[1/3] Abrindo ${url}`);
|
||||
const navegador = await puppeteer.launch({ headless: "new", args: ["--no-sandbox"] });
|
||||
|
||||
try {
|
||||
const pagina = await navegador.newPage();
|
||||
await pagina.goto(url, { waitUntil: "networkidle0", timeout: 60000 });
|
||||
await pagina.evaluate(() => document.fonts.ready);
|
||||
|
||||
console.log("[2/3] Conferindo o encaixe de cada slide no 16:9");
|
||||
await pagina.emulateMediaType("print");
|
||||
await new Promise((r) => setTimeout(r, 500));
|
||||
|
||||
const caixas = await pagina.evaluate(() =>
|
||||
[...document.querySelectorAll("#palco .slide")].map((s) => {
|
||||
const b = s.getBoundingClientRect();
|
||||
return { t: s.dataset.titulo, w: Math.round(b.width), h: Math.round(b.height) };
|
||||
})
|
||||
);
|
||||
const fora = caixas.filter((c) => c.w !== 1280 || c.h !== 720);
|
||||
if (fora.length) {
|
||||
console.warn(` atenção: ${fora.length} slide(s) fora de 1280x720:`, fora.slice(0, 5));
|
||||
} else {
|
||||
console.log(` ${caixas.length} slides, todos em 1280x720`);
|
||||
}
|
||||
|
||||
console.log("[3/3] Gerando o PDF");
|
||||
await pagina.pdf({
|
||||
path: saida,
|
||||
printBackground: true,
|
||||
preferCSSPageSize: true,
|
||||
margin: { top: 0, right: 0, bottom: 0, left: 0 },
|
||||
});
|
||||
|
||||
const kb = (fs.statSync(saida).size / 1024).toFixed(0);
|
||||
console.log(`\nPronto: ${path.relative(raiz, saida)} (${kb} KB, ${caixas.length} páginas em 16:9)`);
|
||||
} finally {
|
||||
await navegador.close();
|
||||
servidor.close();
|
||||
}
|
||||
Reference in new issue
Block a user