@perfonext/render-mcp 0.3.0 → 0.3.2
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.
- package/README.md +78 -81
- package/dist/index.js +1 -1
- package/dist/ingest/server.d.ts +1 -0
- package/dist/ingest/server.d.ts.map +1 -1
- package/dist/ingest/server.js +15 -12
- package/dist/ingest/server.js.map +1 -1
- package/dist/parser/analysis.d.ts +4 -0
- package/dist/parser/analysis.d.ts.map +1 -1
- package/dist/parser/analysis.js +120 -54
- package/dist/parser/analysis.js.map +1 -1
- package/dist/parser/react-profile.d.ts.map +1 -1
- package/dist/parser/react-profile.js +2 -3
- package/dist/parser/react-profile.js.map +1 -1
- package/dist/parser/react-scan-lite.d.ts.map +1 -1
- package/dist/parser/react-scan-lite.js +72 -2
- package/dist/parser/react-scan-lite.js.map +1 -1
- package/dist/parser/types.d.ts +23 -0
- package/dist/parser/types.d.ts.map +1 -1
- package/dist/store.js +1 -1
- package/dist/store.js.map +1 -1
- package/dist/tools/begin-render-analysis.d.ts.map +1 -1
- package/dist/tools/begin-render-analysis.js +1 -1
- package/dist/tools/begin-render-analysis.js.map +1 -1
- package/dist/tools/compare-renders.d.ts.map +1 -1
- package/dist/tools/compare-renders.js +16 -4
- package/dist/tools/compare-renders.js.map +1 -1
- package/dist/tools/get-captured-renders.d.ts.map +1 -1
- package/dist/tools/get-captured-renders.js +8 -2
- package/dist/tools/get-captured-renders.js.map +1 -1
- package/dist/tools/get-hot-commits.d.ts.map +1 -1
- package/dist/tools/get-hot-commits.js +24 -7
- package/dist/tools/get-hot-commits.js.map +1 -1
- package/dist/tools/get-render-summary.d.ts.map +1 -1
- package/dist/tools/get-render-summary.js +23 -10
- package/dist/tools/get-render-summary.js.map +1 -1
- package/dist/tools/get-rerender-causes.d.ts.map +1 -1
- package/dist/tools/get-rerender-causes.js +25 -18
- package/dist/tools/get-rerender-causes.js.map +1 -1
- package/dist/tools/get-slow-components.d.ts.map +1 -1
- package/dist/tools/get-slow-components.js +20 -5
- package/dist/tools/get-slow-components.js.map +1 -1
- package/dist/tools/load-render-profile.d.ts.map +1 -1
- package/dist/tools/load-render-profile.js +7 -3
- package/dist/tools/load-render-profile.js.map +1 -1
- package/dist/tools/run-render-capture.d.ts.map +1 -1
- package/dist/tools/run-render-capture.js +11 -5
- package/dist/tools/run-render-capture.js.map +1 -1
- package/dist/tools/stop-render-capture.d.ts.map +1 -1
- package/dist/tools/stop-render-capture.js +22 -4
- package/dist/tools/stop-render-capture.js.map +1 -1
- package/package.json +17 -5
package/README.md
CHANGED
|
@@ -1,12 +1,55 @@
|
|
|
1
1
|
# perfonext-render-mcp
|
|
2
2
|
|
|
3
|
+
> Analyze React render behavior in Next.js apps and apply fixes in the editor.
|
|
4
|
+
|
|
3
5
|
[](https://www.npmjs.com/package/@perfonext/render-mcp)
|
|
6
|
+
[](https://www.npmjs.com/package/@perfonext/render-mcp)
|
|
7
|
+
[](https://www.npmjs.com/package/@perfonext/render-mcp)
|
|
8
|
+
|
|
9
|
+
`perfonext-render-mcp` is a Model Context Protocol (MCP) server that gives GitHub Copilot, Claude Desktop,
|
|
10
|
+
Claude Code, and other MCP clients structured, machine-readable React render analysis for Next.js performance
|
|
11
|
+
work. It turns live capture sessions and React DevTools Profiler exports into component costs, exact rerender
|
|
12
|
+
causes, and regression diffs — evidence Copilot can act on directly.
|
|
13
|
+
|
|
14
|
+
## Quick Start
|
|
15
|
+
|
|
16
|
+
Run directly with `npx`:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npx -y @perfonext/render-mcp
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Or install globally:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
npm install -g @perfonext/render-mcp
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
The executable command remains `perfonext-render-mcp` after installation.
|
|
4
29
|
|
|
5
|
-
|
|
6
|
-
in the editor. It is the **agent companion** to React DevTools Profiler and `react-scan` — best at
|
|
7
|
-
machine-readable summaries, exact rerender-cause attribution, source-aware follow-up, and diffing.
|
|
30
|
+
Add the server to VS Code in `.vscode/mcp.json` (the workspace MCP configuration file):
|
|
8
31
|
|
|
9
|
-
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"servers": {
|
|
35
|
+
"perfonext-render": {
|
|
36
|
+
"type": "stdio",
|
|
37
|
+
"command": "npx",
|
|
38
|
+
"args": ["-y", "@perfonext/render-mcp"]
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Then reload the VS Code window and run **MCP: List Servers** to start it, or accept the trust prompt when it appears. For a locally-built checkout, point `command`/`args` at `node` and the repo's `dist/index.js` instead.
|
|
45
|
+
|
|
46
|
+
Then ask Copilot: _"Run a render analysis on my app."_
|
|
47
|
+
|
|
48
|
+
## What It Does
|
|
49
|
+
|
|
50
|
+
`perfonext-render-mcp` is the **agent companion** to React DevTools Profiler and `react-scan` — best at
|
|
51
|
+
machine-readable summaries, exact rerender-cause attribution, source-aware follow-up, and diffing. The loop is
|
|
52
|
+
**collect → analyze → fix**, all locally:
|
|
10
53
|
|
|
11
54
|
- **collect** — choose live capture (react-scan/lite streams events in real time) or manual DevTools export
|
|
12
55
|
- **analyze** — the MCP returns structured, machine-readable evidence: component costs, rerender causes, commit breakdowns, and regressions
|
|
@@ -15,14 +58,17 @@ The loop is **collect → analyze → fix**, all locally:
|
|
|
15
58
|
> **Note:** while a live capture session is active, React DevTools Timeline Profiler will not receive events
|
|
16
59
|
> (react-scan/lite takes over the profiling channel). Calling `stop_render_capture` restores it.
|
|
17
60
|
|
|
18
|
-
|
|
61
|
+
Capabilities:
|
|
19
62
|
|
|
20
63
|
- **live capture** — streams per-commit fiber events from a running React app directly into the MCP over a local HTTP endpoint; no manual export required
|
|
21
64
|
- **manual export** — loads exported React DevTools Profiler JSON files as an alternative input path
|
|
22
65
|
- summarizes commits, the most expensive components, and detected render issues in one call
|
|
23
66
|
- ranks the hottest commits and shows the top components inside each spike
|
|
24
67
|
- identifies the slowest components by total render cost
|
|
25
|
-
- highlights components with repeated rerenders
|
|
68
|
+
- highlights components with repeated rerenders, reporting the **exact** changed props/state/hooks when live
|
|
69
|
+
capture provides `changeDescription` data, and falling back to deterministic heuristics otherwise
|
|
70
|
+
- annotates ranked components with their source file and line when available
|
|
71
|
+
- filters DOM host elements (`div`, `span`, …) and unnamed components out of ranked output so findings stay actionable
|
|
26
72
|
- compares two render profiles to surface regressions and improvements
|
|
27
73
|
- keeps profiles in memory so Copilot can iterate without re-loading
|
|
28
74
|
|
|
@@ -30,38 +76,39 @@ The loop is **collect → analyze → fix**, all locally:
|
|
|
30
76
|
|
|
31
77
|
### Entry point
|
|
32
78
|
|
|
33
|
-
| Tool
|
|
34
|
-
|
|
79
|
+
| Tool | Description |
|
|
80
|
+
| ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
35
81
|
| `begin_render_analysis` | Entry point. Accepts `approach: "live" \| "manual"`. For `live`: starts a capture session and returns the instrumentation snippet. For `manual`: returns React DevTools Profiler export steps. |
|
|
36
82
|
|
|
37
83
|
### Live capture
|
|
38
84
|
|
|
39
|
-
| Tool
|
|
40
|
-
|
|
41
|
-
| `run_render_capture`
|
|
42
|
-
| `stop_render_capture`
|
|
43
|
-
| `get_captured_renders` | Optional diagnostic: peek at session progress without stopping (commit count, unknown events). Only call if something seems wrong.
|
|
85
|
+
| Tool | Description |
|
|
86
|
+
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
87
|
+
| `run_render_capture` | Called after instrumentation is wired up. Accepts `method: "manual-interaction" \| "test-suite"`. Returns focused instructions for whichever method the user picks. Test suites must run **headed** (e.g. `playwright test --headed`) so React profiling hooks activate. |
|
|
88
|
+
| `stop_render_capture` | Stop the session, finalize buffered events into a profile, and return a `profileId` plus `dataQuality` (`exact` \| `heuristic`) for analysis |
|
|
89
|
+
| `get_captured_renders` | Optional diagnostic: peek at session progress without stopping (commit count, unknown events). Only call if something seems wrong. |
|
|
44
90
|
|
|
45
91
|
### Analysis
|
|
46
92
|
|
|
47
|
-
| Tool
|
|
48
|
-
|
|
49
|
-
| `load_render_profile` | Parse and load an exported React DevTools Profiler JSON file from disk (manual path entry point)
|
|
50
|
-
| `get_render_summary`
|
|
51
|
-
| `get_hot_commits`
|
|
52
|
-
| `get_slow_components` | Rank the slowest components by total actual render time
|
|
53
|
-
| `get_rerender_causes` | Explain rerender causes with evidence, confidence, and a risk score |
|
|
54
|
-
| `compare_renders`
|
|
93
|
+
| Tool | Description |
|
|
94
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
95
|
+
| `load_render_profile` | Parse and load an exported React DevTools Profiler JSON file from disk (manual path entry point) |
|
|
96
|
+
| `get_render_summary` | Summarize a loaded profile: top components by render cost, hottest commits, and detected render issues |
|
|
97
|
+
| `get_hot_commits` | Rank the most expensive commits and show the top components inside each spike |
|
|
98
|
+
| `get_slow_components` | Rank the slowest components by total actual render time |
|
|
99
|
+
| `get_rerender_causes` | Explain rerender causes with evidence, confidence, and a risk score. Reports exact changed props/state/hooks when `changeDescription` data is present (`dataQuality: "exact"`), heuristics otherwise |
|
|
100
|
+
| `compare_renders` | Diff two loaded render profiles and rank regressions, improvements, additions, and removals |
|
|
55
101
|
|
|
56
|
-
##
|
|
102
|
+
## Usage Walkthrough
|
|
57
103
|
|
|
58
|
-
Ask Copilot:
|
|
104
|
+
Ask Copilot: _"Run a render analysis on my app."_
|
|
59
105
|
|
|
60
106
|
Copilot calls `begin_render_analysis` and asks you to choose:
|
|
61
107
|
|
|
62
108
|
**Option A — Live capture (recommended)**
|
|
63
109
|
|
|
64
110
|
Copilot will:
|
|
111
|
+
|
|
65
112
|
1. Start a capture session (ingest server on `127.0.0.1:7721`)
|
|
66
113
|
2. Install `react-scan` as a devDependency if not present
|
|
67
114
|
3. Write `instrumentation-client.js` at your project root with the session snippet
|
|
@@ -69,6 +116,10 @@ Copilot will:
|
|
|
69
116
|
5. Ask whether you want to interact manually or run a test suite (`run_render_capture`)
|
|
70
117
|
6. Stop the session and run analysis
|
|
71
118
|
|
|
119
|
+
> Running a test suite? Launch it **headed** (e.g. `playwright test --headed`). A headless browser does not
|
|
120
|
+
> expose the React DevTools profiling channel, so `changeDescription` data is unavailable and causes fall back
|
|
121
|
+
> to heuristics (`dataQuality: "heuristic"`).
|
|
122
|
+
|
|
72
123
|
The ingest server runs on a **fixed port (7721)**. Only the `sessionId` line in `instrumentation-client.js` changes between sessions — the file does not need to be re-wired each time.
|
|
73
124
|
|
|
74
125
|
**Option B — Manual DevTools export**
|
|
@@ -78,23 +129,6 @@ The ingest server runs on a **fixed port (7721)**. Only the `sessionId` line in
|
|
|
78
129
|
3. Export the JSON and share the file path
|
|
79
130
|
4. Copilot calls `load_render_profile({ filePath: "..." })`
|
|
80
131
|
|
|
81
|
-
## Rerender Score Contract
|
|
82
|
-
|
|
83
|
-
`get_rerender_causes` returns a `score`, `scoreBand`, `confidence`, and `evidence[]` for each component.
|
|
84
|
-
|
|
85
|
-
- `score`: a `0-10` heuristic rerender-risk score
|
|
86
|
-
- `scoreBand`:
|
|
87
|
-
- `low`: `0.0-2.9`
|
|
88
|
-
- `medium`: `3.0-5.9`
|
|
89
|
-
- `high`: `6.0-10.0`
|
|
90
|
-
- `confidence`: how many independent evidence signals supported the finding
|
|
91
|
-
- `low`: one weak signal or only fallback export evidence
|
|
92
|
-
- `medium`: two independent signals
|
|
93
|
-
- `high`: three or more independent signals
|
|
94
|
-
- `evidence[]`: machine-readable signals such as repeated updates, nested-update propagation, wide commit spread, or high actual-vs-self duration ratio
|
|
95
|
-
|
|
96
|
-
The score ranks investigation order, not exact root cause.
|
|
97
|
-
|
|
98
132
|
## Example Copilot Prompts
|
|
99
133
|
|
|
100
134
|
- "Run a render analysis on my app."
|
|
@@ -102,49 +136,12 @@ The score ranks investigation order, not exact root cause.
|
|
|
102
136
|
- "Which components are re-rendering the most and why?"
|
|
103
137
|
- "Compare this run to the profile I captured before the refactor."
|
|
104
138
|
- "I already have a React DevTools export — load it and tell me what's slow."
|
|
139
|
+
- "Show me the hottest commits and which components dominated each spike."
|
|
105
140
|
|
|
106
|
-
##
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
Run directly with `npx`:
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
npx -y @perfonext/render-mcp
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Or install globally:
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
npm install -g @perfonext/render-mcp
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
The executable command remains `perfonext-render-mcp` after installation.
|
|
122
|
-
|
|
123
|
-
## MCP Configuration
|
|
124
|
-
|
|
125
|
-
Add to your VS Code `settings.json`:
|
|
126
|
-
|
|
127
|
-
```json
|
|
128
|
-
{
|
|
129
|
-
"mcp": {
|
|
130
|
-
"servers": {
|
|
131
|
-
"perfonext-render": {
|
|
132
|
-
"command": "npx",
|
|
133
|
-
"args": ["-y", "@perfonext/render-mcp"]
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## Example Copilot Prompts
|
|
141
|
+
## Related Perfonext Tools
|
|
141
142
|
|
|
142
|
-
-
|
|
143
|
-
-
|
|
144
|
-
- "Which components are re-rendering the most and why?"
|
|
145
|
-
- "Compare this run to the profile I captured before the refactor."
|
|
146
|
-
- "I already have a React DevTools export — load it and tell me what's slow."
|
|
147
|
-
- "Show me the hottest commits and which components dominated each spike."
|
|
143
|
+
- [perfonext-profiler-mcp](https://github.com/souvikdu/perfonext-profiler-mcp) — CPU profiling (V8/Chrome) for Next.js servers
|
|
144
|
+
- [perfonext-build-mcp](https://github.com/souvikdu/perfonext-build-mcp) — Next.js bundle/build analysis
|
|
148
145
|
|
|
149
146
|
## Development
|
|
150
147
|
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import { registerStopRenderCapture } from './tools/stop-render-capture.js';
|
|
|
13
13
|
import { registerGetCapturedRenders } from './tools/get-captured-renders.js';
|
|
14
14
|
const server = new McpServer({
|
|
15
15
|
name: 'perfonext-render-mcp',
|
|
16
|
-
version: '0.3.
|
|
16
|
+
version: '0.3.2',
|
|
17
17
|
});
|
|
18
18
|
registerLoadRenderProfile(server);
|
|
19
19
|
registerCompareRenders(server);
|
package/dist/ingest/server.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/ingest/server.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACtD,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/ingest/server.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,0BAA0B,GAAG,IAAI,CAAC;IACtD,MAAM,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAyGD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,kBAAkB,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB;;+FAE2F;IAC3F,aAAa,EAAE,MAAM,CAAC;CACvB;AAyID,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAoBpE;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE/E;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAKhF;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C"}
|
package/dist/ingest/server.js
CHANGED
|
@@ -4,18 +4,21 @@ function normalizeFiber(raw) {
|
|
|
4
4
|
const cd = raw.changeDescription ?? null;
|
|
5
5
|
return {
|
|
6
6
|
fiberId: typeof raw.fiberId === 'number' ? raw.fiberId : 0,
|
|
7
|
-
name:
|
|
7
|
+
name: typeof raw.name === 'string' && raw.name.trim() ? raw.name.trim() : '(anonymous)',
|
|
8
8
|
depth: typeof raw.depth === 'number' ? raw.depth : 0,
|
|
9
9
|
actualDuration: typeof raw.actualDuration === 'number' ? raw.actualDuration : 0,
|
|
10
10
|
selfDuration: typeof raw.selfBaseDuration === 'number' ? raw.selfBaseDuration : 0,
|
|
11
|
-
changeDescription: cd != null
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
11
|
+
changeDescription: cd != null
|
|
12
|
+
? {
|
|
13
|
+
isFirstMount: cd.isFirstMount ?? false,
|
|
14
|
+
props: cd.props ?? null,
|
|
15
|
+
state: cd.state ? ['state'] : null,
|
|
16
|
+
context: cd.context ? ['context'] : null,
|
|
17
|
+
hooks: cd.hooks?.map((i) => `hook[${i}]`) ?? null,
|
|
18
|
+
parent: cd.parent ?? false,
|
|
19
|
+
}
|
|
20
|
+
: null,
|
|
21
|
+
source: raw.source && typeof raw.source === 'object' ? raw.source : null,
|
|
19
22
|
parentId: null,
|
|
20
23
|
};
|
|
21
24
|
}
|
|
@@ -26,13 +29,13 @@ function parseOneEvent(raw, commitIndex, urlSessionId) {
|
|
|
26
29
|
// ── Native react-scan/lite endpoint format ────────────────────────────────
|
|
27
30
|
// Body: { message: LiteEventKind, data: {...}, sessionId, timestamp }
|
|
28
31
|
if (typeof r.message === 'string') {
|
|
29
|
-
const data =
|
|
32
|
+
const data = r.data && typeof r.data === 'object' ? r.data : {};
|
|
30
33
|
const ts = typeof r.timestamp === 'number' ? r.timestamp : Date.now();
|
|
31
34
|
if (r.message === 'commit') {
|
|
32
35
|
const tree = Array.isArray(data.tree) ? data.tree : [];
|
|
33
36
|
const fibers = tree.map(normalizeFiber);
|
|
34
37
|
// Use root-depth fiber's actualDuration as commit duration; fall back to sum.
|
|
35
|
-
const rootFiber = fibers.find(f => f.depth === 0);
|
|
38
|
+
const rootFiber = fibers.find((f) => f.depth === 0);
|
|
36
39
|
const duration = rootFiber?.actualDuration ?? fibers.reduce((s, f) => s + f.actualDuration, 0);
|
|
37
40
|
return {
|
|
38
41
|
kind: 'commit',
|
|
@@ -103,7 +106,7 @@ function handleRequest(req, res) {
|
|
|
103
106
|
return;
|
|
104
107
|
}
|
|
105
108
|
readBody(req)
|
|
106
|
-
.then(body => {
|
|
109
|
+
.then((body) => {
|
|
107
110
|
let rawEvents;
|
|
108
111
|
try {
|
|
109
112
|
const parsed = JSON.parse(body);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ingest/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/ingest/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CommitBreakdown, HotCommitSummary, ParsedRenderProfile, RenderComparison, RenderIssue, RenderPropagationPath, RenderSummaryEntry, RerenderCause } from './types.js';
|
|
2
|
+
/** Returns true for named React components that appear in ranked analysis output. */
|
|
3
|
+
export declare function isAnalyzableComponent(name: string): boolean;
|
|
2
4
|
export declare function getHotCommits(profile: ParsedRenderProfile, limit?: number, componentLimit?: number, priorityLevel?: string): HotCommitSummary[];
|
|
3
5
|
export declare function getRenderSummary(profile: ParsedRenderProfile, limit?: number): {
|
|
4
6
|
profileId: string;
|
|
@@ -12,6 +14,8 @@ export declare function getRenderSummary(profile: ParsedRenderProfile, limit?: n
|
|
|
12
14
|
topComponents: RenderSummaryEntry[];
|
|
13
15
|
hotCommits: HotCommitSummary[];
|
|
14
16
|
issues: RenderIssue[];
|
|
17
|
+
warnings: string[];
|
|
18
|
+
dataQuality: 'heuristic' | 'exact';
|
|
15
19
|
};
|
|
16
20
|
export declare function getSlowComponents(profile: ParsedRenderProfile, limit?: number, sortBy?: 'total' | 'average' | 'max', minDuration?: number): RenderSummaryEntry[];
|
|
17
21
|
export declare function getRerenderCauses(profile: ParsedRenderProfile, limit?: number, minDuration?: number): RerenderCause[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAIf,gBAAgB,EAChB,mBAAmB,EAEnB,gBAAgB,EAEhB,WAAW,EAGX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EAId,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"analysis.d.ts","sourceRoot":"","sources":["../../src/parser/analysis.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EAIf,gBAAgB,EAChB,mBAAmB,EAEnB,gBAAgB,EAEhB,WAAW,EAGX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EAId,MAAM,YAAY,CAAC;AAyBpB,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAmFD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,cAAc,SAAI,EAClB,aAAa,CAAC,EAAE,MAAM,GACrB,gBAAgB,EAAE,CAsBpB;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,GACT;IACD,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,aAAa,EAAE,kBAAkB,EAAE,CAAC;IACpC,UAAU,EAAE,gBAAgB,EAAE,CAAC;IAC/B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC;CACpC,CA6BA;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,MAAM,GAAE,OAAO,GAAG,SAAS,GAAG,KAAe,EAC7C,WAAW,SAAI,GACd,kBAAkB,EAAE,CA+BtB;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,mBAAmB,EAC5B,KAAK,SAAK,EACV,WAAW,SAAI,GACd,aAAa,EAAE,CAiMjB;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,cAAc,SAAI,GACjB,eAAe,GAAG,IAAI,CA8ExB;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,WAAW,EAAE,MAAM,EACnB,KAAK,SAAK,GACT,qBAAqB,EAAE,CA8JzB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,EAAE,KAAK,SAAK,GAAG,WAAW,EAAE,CA4E1F;AAmDD,wBAAgB,cAAc,CAC5B,WAAW,EAAE,mBAAmB,EAChC,cAAc,EAAE,mBAAmB,EACnC,KAAK,SAAK,EACV,QAAQ,SAAI,GACX,gBAAgB,CA6ClB"}
|