openthunder lens generate --no-narrate && openthunder lens export. ← Evidence GalleryArchitecture health: 72/100 (C)
axios is a JavaScript/TypeScript npm project, built with Vue and Express. It runs as a backend service (axios). The main structural risks to watch: 3 oversized "god" files. The file with the widest blast radius is lib/utils.js: 26 files depend on it at runtime; oversized and doing too much.
_This entire analysis runs on your machine with no AI required. Connect a model provider to also narrate the reasoning and recover decisions._
index.js Start here: how the system boots and wires its subsystems together.lib/utils.js Core module: 40 other modules depend on it, so it shapes much of the system.lib/core/AxiosError.js Core module: 32 other modules depend on it, so it shapes much of the system.lib/core/AxiosHeaders.js Core module: 14 other modules depend on it, so it shapes much of the system.lib/cancel/CancelToken.js Key flow: Authentication, a high-risk path that enters at invoke CancelToken.js (lib/cancel/CancelToken.js).gulpfile.js Key flow: File changes / writes, a high-risk path that enters at invoke gulpfile.js (gulpfile.js).lib/helpers/resolveConfig.js Key flow: Background jobs, a medium-risk path that enters at scheduled trigger (lib/helpers/resolveConfig.js).flowchart TD
subgraph sys_boundary["axios"]
axios(["axios"])
end
class axios service
classDef frontend fill:#2563eb,stroke:#93c5fd,color:#fff,stroke-width:2px;
classDef service fill:#059669,stroke:#6ee7b7,color:#fff,stroke-width:2px;
classDef store fill:#d97706,stroke:#fcd34d,color:#fff,stroke-width:2px;
classDef queue fill:#9333ea,stroke:#d8b4fe,color:#fff,stroke-width:2px;
classDef job fill:#4f46e5,stroke:#a5b4fc,color:#fff,stroke-width:2px;
classDef external fill:#475569,stroke:#cbd5e1,color:#fff,stroke-width:2px;
classDef aiprovider fill:#e11d48,stroke:#fda4af,color:#fff,stroke-width:2px;
classDef library fill:#0891b2,stroke:#67e8f9,color:#fff,stroke-width:2px;
classDef cli fill:#0d9488,stroke:#5eead4,color:#fff,stroke-width:2px;
classDef user fill:#64748b,stroke:#e2e8f0,color:#fff,stroke-width:2px;
classDef muted fill:#334155,stroke:#64748b,color:#cbd5e1,stroke-width:1px;
Entry: process start (index.js)
calls an external service (external API)
Boot wires every subsystem together; a fault here stops the whole process from starting.
sequenceDiagram actor C0 as Process participant F0 as index.js participant F1 as axios.js participant External as external API C0->>F0: process start F0->>External: calls an external service F0->>F1: calls F1->>External: calls an external service
Entry: invoke CancelToken.js (lib/cancel/CancelToken.js)
Authentication guards every protected resource; a regression here can expose data or grant unauthorized access.
sequenceDiagram actor C0 as Caller participant F0 as CancelToken.js participant F1 as Http2Sessions.js C0->>F0: invoke CancelToken.js
Entry: invoke gulpfile.js (gulpfile.js)
writes files to the working tree (disk); calls an external service (external API)
Direct writes to the working tree are hard to reverse; an unguarded write can clobber user code.
sequenceDiagram actor C0 as Caller participant F0 as gulpfile.js participant F1 as process-sponsors.js participant F2 as dispatchRequest.js participant Disk as disk participant External as external API C0->>F0: invoke gulpfile.js F0->>Disk: writes files to the working tree F0->>External: calls an external service F1->>Disk: writes files to the working tree F1->>External: calls an external service
Entry: scheduled trigger (lib/helpers/resolveConfig.js)
moves work onto a queue (queue)
Background jobs run unattended; failures are silent and can pile up unnoticed.
sequenceDiagram actor C0 as Scheduler participant F0 as resolveConfig.js participant F1 as trackStream.js participant Queue as queue C0->>F0: scheduled trigger F1->>Queue: moves work onto a queue
lib/utils.js (score 56.3): 26 files depend on it at runtime; oversized and doing too muchlib/core/AxiosError.js (score 30.5): 15 files depend on it at runtimelib/core/AxiosHeaders.js (score 20.8): 10 files depend on it at runtimelib/platform/index.js (score 20.5): 10 files depend on it at runtimelib/cancel/CanceledError.js (score 12.3): 6 files depend on it at runtimelib/adapters/http.js (score 11.5): 1 file depends on it at runtime; oversized and doing too muchlib/helpers/toFormData.js (score 11): 5 files depend on it at runtimelib/helpers/sanitizeHeaderValue.js (score 8.3): 4 files depend on it at runtimelib/adapters/fetch.js (score 8): 1 file depends on it at runtime; oversized and doing too muchlib/defaults/transitional.js (score 8): 4 files depend on it at runtimelib/env/data.js (score 8): 4 files depend on it at runtimetests/module/cjs/tests/helpers/fixture.cjs (score 8): 4 files depend on it at runtimeThis file has a wide blast radius (fan-in 40, fan-out 1, risk score 56.3); a careless edit ripples through many dependents.
This file has a wide blast radius (fan-in 32, fan-out 2, risk score 30.5); a careless edit ripples through many dependents.
This file has a wide blast radius (fan-in 14, fan-out 3, risk score 20.8); a careless edit ripples through many dependents.
This file has a wide blast radius (fan-in 12, fan-out 2, risk score 20.5); a careless edit ripples through many dependents.
This file has a wide blast radius (fan-in 9, fan-out 1, risk score 12.3); a careless edit ripples through many dependents.
This file has a wide blast radius (fan-in 2, fan-out 22, risk score 11.5); a careless edit ripples through many dependents.
Large multi-purpose files are change magnets that accumulate coupling and resist testing; keeping them from growing limits the damage.