codebread 1.1.3__tar.gz → 1.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {codebread-1.1.3 → codebread-1.1.4}/PKG-INFO +10 -4
- {codebread-1.1.3 → codebread-1.1.4}/README.md +9 -3
- {codebread-1.1.3 → codebread-1.1.4}/codebread/web/app.js +50 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/web/index.html +13 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/web/style.css +37 -5
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/PKG-INFO +10 -4
- {codebread-1.1.3 → codebread-1.1.4}/pyproject.toml +1 -1
- {codebread-1.1.3 → codebread-1.1.4}/LICENSE +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/__init__.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/analyzer.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/classifier.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/cli.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/connections.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/context.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/deobfuscate.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/diff.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/export.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/languages.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/models.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/parsers/__init__.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/parsers/generic_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/parsers/javascript_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/parsers/python_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/scanner.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread/server.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/SOURCES.txt +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/dependency_links.txt +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/entry_points.txt +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/requires.txt +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/codebread.egg-info/top_level.txt +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/setup.cfg +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_analyzer.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_config_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_connections.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_context.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_deobfuscate.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_generic_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_javascript_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_python_parser.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_scanner.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_server.py +0 -0
- {codebread-1.1.3 → codebread-1.1.4}/tests/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebread
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.4
|
|
4
4
|
Summary: Interactive codebase analyzer & visualizer — slice open a project and see how it's wired together.
|
|
5
5
|
Author: Danial Irsyad
|
|
6
6
|
License: MIT
|
|
@@ -29,7 +29,7 @@ Dynamic: license-file
|
|
|
29
29
|
</p>
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=
|
|
32
|
+
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=0e7490&label=pypi&cacheSeconds=3600"></a>
|
|
33
33
|
<a href="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml/badge.svg"></a>
|
|
34
34
|
<img alt="Python 3.9+" src="https://img.shields.io/badge/python-3.9%2B-5f5c55">
|
|
35
35
|
<img alt="No dependencies" src="https://img.shields.io/badge/dependencies-none-5f5c55">
|
|
@@ -82,6 +82,12 @@ it, all the way from a frontend `fetch()` to the database table.
|
|
|
82
82
|
|
|
83
83
|
Read any file with an outline and syntax highlighting, without leaving the page.
|
|
84
84
|
|
|
85
|
+
### Your colours
|
|
86
|
+
|
|
87
|
+
The report follows your system's light or dark mode. Click the dot at the
|
|
88
|
+
right of the top bar to pick an accent colour; your choice is saved in your
|
|
89
|
+
browser.
|
|
90
|
+
|
|
85
91
|
<p align="center">
|
|
86
92
|
<img src="https://cdn.jsdelivr.net/gh/honow48-tech/CodeBread@main/assets/code.png" alt="The Code view: file tree, function outline and highlighted source" width="880">
|
|
87
93
|
</p>
|
|
@@ -128,7 +134,7 @@ codebread --path . --html report.html --no-serve
|
|
|
128
134
|
| Python | ✓ | Flask, FastAPI, Django | requests, httpx, aiohttp | SQLAlchemy, Django, peewee |
|
|
129
135
|
| JavaScript / TypeScript | ✓ | Express, Fastify, Koa, NestJS | fetch, axios | Prisma, Mongoose, Sequelize, Knex, TypeORM |
|
|
130
136
|
| Vue / Svelte | ✓ | same as JS | fetch, axios | same as JS |
|
|
131
|
-
| PHP | ✓ | Laravel | – | raw SQL |
|
|
137
|
+
| PHP | ✓ | Laravel (incl. closures) | – | Eloquent, migrations, raw SQL |
|
|
132
138
|
| Java | ✓ | Spring | – | raw SQL |
|
|
133
139
|
| C# | ✓ | ASP.NET | – | raw SQL |
|
|
134
140
|
| Go | ✓ | Gin, net/http | – | raw SQL |
|
|
@@ -154,7 +160,7 @@ structural regex with brace matching and gets parameter names only.
|
|
|
154
160
|
| Java | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
155
161
|
| C# | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
156
162
|
| Go | regex | ✓ | structs | ✓ | – | – | ✓ | ✓ | – |
|
|
157
|
-
| PHP | regex | ✓ | ✓ | ✓ | – |
|
|
163
|
+
| PHP | regex | ✓ | ✓ | ✓ | – | Eloquent + migrations | ✓ | ✓ | ✓ |
|
|
158
164
|
| Ruby | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | ✓ |
|
|
159
165
|
| SQL | regex | – | – | – | – | tables + columns | ✓ | – | – |
|
|
160
166
|
| Config (`.env`, json, yaml, toml, ini, xml) | key scan | – | – | – | – | – | – | – | – |
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</p>
|
|
14
14
|
|
|
15
15
|
<p align="center">
|
|
16
|
-
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=
|
|
16
|
+
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=0e7490&label=pypi&cacheSeconds=3600"></a>
|
|
17
17
|
<a href="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml/badge.svg"></a>
|
|
18
18
|
<img alt="Python 3.9+" src="https://img.shields.io/badge/python-3.9%2B-5f5c55">
|
|
19
19
|
<img alt="No dependencies" src="https://img.shields.io/badge/dependencies-none-5f5c55">
|
|
@@ -66,6 +66,12 @@ it, all the way from a frontend `fetch()` to the database table.
|
|
|
66
66
|
|
|
67
67
|
Read any file with an outline and syntax highlighting, without leaving the page.
|
|
68
68
|
|
|
69
|
+
### Your colours
|
|
70
|
+
|
|
71
|
+
The report follows your system's light or dark mode. Click the dot at the
|
|
72
|
+
right of the top bar to pick an accent colour; your choice is saved in your
|
|
73
|
+
browser.
|
|
74
|
+
|
|
69
75
|
<p align="center">
|
|
70
76
|
<img src="https://cdn.jsdelivr.net/gh/honow48-tech/CodeBread@main/assets/code.png" alt="The Code view: file tree, function outline and highlighted source" width="880">
|
|
71
77
|
</p>
|
|
@@ -112,7 +118,7 @@ codebread --path . --html report.html --no-serve
|
|
|
112
118
|
| Python | ✓ | Flask, FastAPI, Django | requests, httpx, aiohttp | SQLAlchemy, Django, peewee |
|
|
113
119
|
| JavaScript / TypeScript | ✓ | Express, Fastify, Koa, NestJS | fetch, axios | Prisma, Mongoose, Sequelize, Knex, TypeORM |
|
|
114
120
|
| Vue / Svelte | ✓ | same as JS | fetch, axios | same as JS |
|
|
115
|
-
| PHP | ✓ | Laravel | – | raw SQL |
|
|
121
|
+
| PHP | ✓ | Laravel (incl. closures) | – | Eloquent, migrations, raw SQL |
|
|
116
122
|
| Java | ✓ | Spring | – | raw SQL |
|
|
117
123
|
| C# | ✓ | ASP.NET | – | raw SQL |
|
|
118
124
|
| Go | ✓ | Gin, net/http | – | raw SQL |
|
|
@@ -138,7 +144,7 @@ structural regex with brace matching and gets parameter names only.
|
|
|
138
144
|
| Java | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
139
145
|
| C# | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
140
146
|
| Go | regex | ✓ | structs | ✓ | – | – | ✓ | ✓ | – |
|
|
141
|
-
| PHP | regex | ✓ | ✓ | ✓ | – |
|
|
147
|
+
| PHP | regex | ✓ | ✓ | ✓ | – | Eloquent + migrations | ✓ | ✓ | ✓ |
|
|
142
148
|
| Ruby | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | ✓ |
|
|
143
149
|
| SQL | regex | – | – | – | – | tables + columns | ✓ | – | – |
|
|
144
150
|
| Config (`.env`, json, yaml, toml, ini, xml) | key scan | – | – | – | – | – | – | – | – |
|
|
@@ -71,6 +71,7 @@ window.addEventListener("resize", invalidateRectCache);
|
|
|
71
71
|
/* ---------------- boot ---------------- */
|
|
72
72
|
function boot(data) {
|
|
73
73
|
S.data = data;
|
|
74
|
+
bindAccent(); // first, so a saved accent applies before anything animates in
|
|
74
75
|
indexData();
|
|
75
76
|
renderHeader();
|
|
76
77
|
renderLanguages();
|
|
@@ -2413,6 +2414,55 @@ function esc(s) {
|
|
|
2413
2414
|
}
|
|
2414
2415
|
|
|
2415
2416
|
|
|
2417
|
+
/* ---------------- accent color ----------------
|
|
2418
|
+
The viewer's pick sets --accent-pick; CSS derives everything else (--soft,
|
|
2419
|
+
focus rings, highlights). Dark mode gets a lightened mix so it stays legible.
|
|
2420
|
+
Saved per browser: it's a personal preference, not part of the report. */
|
|
2421
|
+
const ACCENTS = [["Cyan (logo)", null], ["Blue", "#2563eb"], ["Crust", "#b0541c"],
|
|
2422
|
+
["Green", "#3f7d3a"], ["Violet", "#7c4dbd"], ["Rose", "#c2416b"], ["Graphite", "#3f3f46"]];
|
|
2423
|
+
const ACCENT_DEFAULT = "#0e7490"; // keep in sync with --accent in style.css
|
|
2424
|
+
const ACCENT_KEY = "codebread_accent";
|
|
2425
|
+
|
|
2426
|
+
function applyAccent(hex, save = true) {
|
|
2427
|
+
const st = document.documentElement.style;
|
|
2428
|
+
if (hex) {
|
|
2429
|
+
st.setProperty("--accent-pick", hex);
|
|
2430
|
+
st.setProperty("--accent-pick-dark", `color-mix(in srgb, ${hex} 62%, white)`);
|
|
2431
|
+
} else {
|
|
2432
|
+
st.removeProperty("--accent-pick");
|
|
2433
|
+
st.removeProperty("--accent-pick-dark");
|
|
2434
|
+
}
|
|
2435
|
+
if (save) {
|
|
2436
|
+
try { hex ? localStorage.setItem(ACCENT_KEY, hex) : localStorage.removeItem(ACCENT_KEY); } catch (e) { /* no storage */ }
|
|
2437
|
+
}
|
|
2438
|
+
document.querySelectorAll(".swatch").forEach(b => b.classList.toggle("on", (b.dataset.hex || null) === hex));
|
|
2439
|
+
$("accent-input").value = hex || ACCENT_DEFAULT;
|
|
2440
|
+
}
|
|
2441
|
+
|
|
2442
|
+
function bindAccent() {
|
|
2443
|
+
$("accent-swatches").innerHTML = ACCENTS.map(([name, hex]) =>
|
|
2444
|
+
`<button class="swatch" ${hex ? `data-hex="${hex}"` : ""} title="${name}" aria-label="${name}" ` +
|
|
2445
|
+
`style="background:${hex || ACCENT_DEFAULT}"></button>`).join("");
|
|
2446
|
+
let saved = null;
|
|
2447
|
+
try { saved = localStorage.getItem(ACCENT_KEY); } catch (e) { /* no storage */ }
|
|
2448
|
+
applyAccent(saved, false);
|
|
2449
|
+
|
|
2450
|
+
const btn = $("accent-btn"), pop = $("accent-pop");
|
|
2451
|
+
const toggle = (open) => {
|
|
2452
|
+
pop.classList.toggle("hidden", !open);
|
|
2453
|
+
btn.setAttribute("aria-expanded", String(open));
|
|
2454
|
+
};
|
|
2455
|
+
btn.addEventListener("click", () => toggle(pop.classList.contains("hidden")));
|
|
2456
|
+
$("accent-swatches").addEventListener("click", (ev) => {
|
|
2457
|
+
const sw = ev.target.closest(".swatch");
|
|
2458
|
+
if (sw) applyAccent(sw.dataset.hex || null);
|
|
2459
|
+
});
|
|
2460
|
+
$("accent-input").addEventListener("input", (ev) => applyAccent(ev.target.value));
|
|
2461
|
+
$("accent-reset").addEventListener("click", () => applyAccent(null));
|
|
2462
|
+
document.addEventListener("click", (ev) => { if (!ev.target.closest("#accent-wrap")) toggle(false); });
|
|
2463
|
+
document.addEventListener("keydown", (ev) => { if (ev.key === "Escape") toggle(false); });
|
|
2464
|
+
}
|
|
2465
|
+
|
|
2416
2466
|
/* ---------------- start ----------------
|
|
2417
2467
|
Must run after every top-level const above is initialized: the static
|
|
2418
2468
|
--html export inlines CODEBREAD_DATA, so boot() runs synchronously and
|
|
@@ -47,6 +47,19 @@
|
|
|
47
47
|
<button data-layer="database">Database</button>
|
|
48
48
|
<button data-layer="config">Config</button>
|
|
49
49
|
</nav>
|
|
50
|
+
|
|
51
|
+
<div id="accent-wrap">
|
|
52
|
+
<button id="accent-btn" title="Accent color" aria-label="Accent color"
|
|
53
|
+
aria-haspopup="dialog" aria-expanded="false"><span></span></button>
|
|
54
|
+
<div id="accent-pop" class="hidden" role="dialog" aria-label="Accent color">
|
|
55
|
+
<div class="kicker">Accent color</div>
|
|
56
|
+
<div id="accent-swatches"></div>
|
|
57
|
+
<div class="accent-row">
|
|
58
|
+
<label class="accent-custom"><input type="color" id="accent-input"> Custom</label>
|
|
59
|
+
<button id="accent-reset" class="chip">Reset</button>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
50
63
|
</header>
|
|
51
64
|
|
|
52
65
|
<div id="main">
|
|
@@ -14,9 +14,11 @@
|
|
|
14
14
|
--ink-3: #9a978e;
|
|
15
15
|
--line: #e3e0d7;
|
|
16
16
|
--line2: #cfcbc0;
|
|
17
|
-
|
|
17
|
+
/* default: the logo's cyan, deepened for text contrast on paper (~5:1).
|
|
18
|
+
Viewers can pick another from the top bar, see applyAccent() */
|
|
19
|
+
--accent: var(--accent-pick, #0e7490);
|
|
18
20
|
--accent-ink: #fff;
|
|
19
|
-
--soft:
|
|
21
|
+
--soft: color-mix(in srgb, var(--accent) 9%, transparent);
|
|
20
22
|
--warn: #98580f;
|
|
21
23
|
--bad: #a3372a;
|
|
22
24
|
--shadow: 0 18px 40px -22px rgba(30, 24, 12, 0.35);
|
|
@@ -51,9 +53,9 @@
|
|
|
51
53
|
--ink-3: #6c6a63;
|
|
52
54
|
--line: #2a2a27;
|
|
53
55
|
--line2: #3a3934;
|
|
54
|
-
--accent: #
|
|
55
|
-
--accent-ink: #
|
|
56
|
-
--soft:
|
|
56
|
+
--accent: var(--accent-pick-dark, #67e8f9); /* the logo's exact cyan */
|
|
57
|
+
--accent-ink: #062a33;
|
|
58
|
+
--soft: color-mix(in srgb, var(--accent) 12%, transparent);
|
|
57
59
|
--warn: #e2a85c;
|
|
58
60
|
--bad: #ef8a7a;
|
|
59
61
|
--shadow: 0 18px 40px -18px rgba(0, 0, 0, 0.7);
|
|
@@ -162,6 +164,36 @@ kbd {
|
|
|
162
164
|
.sr-item .sr-path { margin-left: auto; color: var(--ink-3); font-size: 11.5px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
163
165
|
.sr-empty { padding: 10px 12px; color: var(--ink-3); font-size: 13px; }
|
|
164
166
|
|
|
167
|
+
/* ---------- accent picker ------------------------------------------------ */
|
|
168
|
+
|
|
169
|
+
#accent-wrap { position: relative; }
|
|
170
|
+
#accent-btn {
|
|
171
|
+
width: 30px; height: 30px; display: grid; place-items: center; cursor: pointer;
|
|
172
|
+
background: none; border: 1px solid var(--line2); border-radius: 50%;
|
|
173
|
+
transition: border-color .2s, transform .15s;
|
|
174
|
+
}
|
|
175
|
+
#accent-btn:hover { border-color: var(--ink); }
|
|
176
|
+
#accent-btn:active { transform: scale(.94); }
|
|
177
|
+
#accent-btn span { width: 16px; height: 16px; border-radius: 50%; background: var(--accent); transition: background .3s; }
|
|
178
|
+
#accent-pop {
|
|
179
|
+
position: absolute; top: calc(100% + 8px); right: 0; z-index: 60; width: 236px;
|
|
180
|
+
padding: 14px; background: var(--panel); border: 1px solid var(--line2); border-radius: 12px;
|
|
181
|
+
box-shadow: var(--shadow); animation: drop .18s var(--ease);
|
|
182
|
+
}
|
|
183
|
+
#accent-swatches { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; margin: 12px 0; }
|
|
184
|
+
.swatch {
|
|
185
|
+
aspect-ratio: 1; border-radius: 50%; cursor: pointer; padding: 0;
|
|
186
|
+
border: 2px solid var(--panel); box-shadow: 0 0 0 1px var(--line2);
|
|
187
|
+
transition: box-shadow .2s, transform .15s;
|
|
188
|
+
}
|
|
189
|
+
.swatch:hover { transform: scale(1.1); }
|
|
190
|
+
.swatch.on { box-shadow: 0 0 0 2px var(--ink); }
|
|
191
|
+
.accent-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
|
|
192
|
+
.accent-custom { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--ink-2); cursor: pointer; }
|
|
193
|
+
#accent-input { width: 28px; height: 28px; padding: 0; border: 1px solid var(--line2); border-radius: 6px; background: none; cursor: pointer; }
|
|
194
|
+
#accent-input::-webkit-color-swatch-wrapper { padding: 2px; }
|
|
195
|
+
#accent-input::-webkit-color-swatch { border: 0; border-radius: 4px; }
|
|
196
|
+
|
|
165
197
|
/* ---------- layout ----------------------------------------------------- */
|
|
166
198
|
|
|
167
199
|
#main { display: flex; flex: 1; min-height: 0; position: relative; }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codebread
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.4
|
|
4
4
|
Summary: Interactive codebase analyzer & visualizer — slice open a project and see how it's wired together.
|
|
5
5
|
Author: Danial Irsyad
|
|
6
6
|
License: MIT
|
|
@@ -29,7 +29,7 @@ Dynamic: license-file
|
|
|
29
29
|
</p>
|
|
30
30
|
|
|
31
31
|
<p align="center">
|
|
32
|
-
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=
|
|
32
|
+
<a href="https://pypi.org/project/codebread/"><img alt="PyPI" src="https://img.shields.io/pypi/v/codebread?color=0e7490&label=pypi&cacheSeconds=3600"></a>
|
|
33
33
|
<a href="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/honow48-tech/CodeBread/actions/workflows/ci.yml/badge.svg"></a>
|
|
34
34
|
<img alt="Python 3.9+" src="https://img.shields.io/badge/python-3.9%2B-5f5c55">
|
|
35
35
|
<img alt="No dependencies" src="https://img.shields.io/badge/dependencies-none-5f5c55">
|
|
@@ -82,6 +82,12 @@ it, all the way from a frontend `fetch()` to the database table.
|
|
|
82
82
|
|
|
83
83
|
Read any file with an outline and syntax highlighting, without leaving the page.
|
|
84
84
|
|
|
85
|
+
### Your colours
|
|
86
|
+
|
|
87
|
+
The report follows your system's light or dark mode. Click the dot at the
|
|
88
|
+
right of the top bar to pick an accent colour; your choice is saved in your
|
|
89
|
+
browser.
|
|
90
|
+
|
|
85
91
|
<p align="center">
|
|
86
92
|
<img src="https://cdn.jsdelivr.net/gh/honow48-tech/CodeBread@main/assets/code.png" alt="The Code view: file tree, function outline and highlighted source" width="880">
|
|
87
93
|
</p>
|
|
@@ -128,7 +134,7 @@ codebread --path . --html report.html --no-serve
|
|
|
128
134
|
| Python | ✓ | Flask, FastAPI, Django | requests, httpx, aiohttp | SQLAlchemy, Django, peewee |
|
|
129
135
|
| JavaScript / TypeScript | ✓ | Express, Fastify, Koa, NestJS | fetch, axios | Prisma, Mongoose, Sequelize, Knex, TypeORM |
|
|
130
136
|
| Vue / Svelte | ✓ | same as JS | fetch, axios | same as JS |
|
|
131
|
-
| PHP | ✓ | Laravel | – | raw SQL |
|
|
137
|
+
| PHP | ✓ | Laravel (incl. closures) | – | Eloquent, migrations, raw SQL |
|
|
132
138
|
| Java | ✓ | Spring | – | raw SQL |
|
|
133
139
|
| C# | ✓ | ASP.NET | – | raw SQL |
|
|
134
140
|
| Go | ✓ | Gin, net/http | – | raw SQL |
|
|
@@ -154,7 +160,7 @@ structural regex with brace matching and gets parameter names only.
|
|
|
154
160
|
| Java | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
155
161
|
| C# | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | – |
|
|
156
162
|
| Go | regex | ✓ | structs | ✓ | – | – | ✓ | ✓ | – |
|
|
157
|
-
| PHP | regex | ✓ | ✓ | ✓ | – |
|
|
163
|
+
| PHP | regex | ✓ | ✓ | ✓ | – | Eloquent + migrations | ✓ | ✓ | ✓ |
|
|
158
164
|
| Ruby | regex | ✓ | ✓ | ✓ | – | – | ✓ | ✓ | ✓ |
|
|
159
165
|
| SQL | regex | – | – | – | – | tables + columns | ✓ | – | – |
|
|
160
166
|
| Config (`.env`, json, yaml, toml, ini, xml) | key scan | – | – | – | – | – | – | – | – |
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "codebread"
|
|
7
|
-
version = "1.1.
|
|
7
|
+
version = "1.1.4"
|
|
8
8
|
description = "Interactive codebase analyzer & visualizer — slice open a project and see how it's wired together."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.9"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|