rerender-lens 0.3.0 → 0.5.0

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.
Files changed (66) hide show
  1. package/CHANGELOG.md +118 -0
  2. package/README.md +192 -353
  3. package/dist/{budget-COBu7jBU.d.cts → budget-BnJlYwrV.d.ts} +20 -10
  4. package/dist/{budget-LkNjGtRc.d.ts → budget-CRswn-nC.d.cts} +20 -10
  5. package/dist/cli.cjs +248 -31
  6. package/dist/cli.cjs.map +1 -1
  7. package/dist/cli.js +248 -31
  8. package/dist/cli.js.map +1 -1
  9. package/dist/{devtools-BHGUUo-p.d.ts → devtools-BYWat7nQ.d.ts} +17 -3
  10. package/dist/{devtools-DmhWiWcN.d.cts → devtools-DJi_6AfJ.d.cts} +17 -3
  11. package/dist/index.cjs +635 -109
  12. package/dist/index.cjs.map +1 -1
  13. package/dist/index.d.cts +131 -8
  14. package/dist/index.d.ts +131 -8
  15. package/dist/index.js +620 -110
  16. package/dist/index.js.map +1 -1
  17. package/dist/jest-setup.cjs +1673 -0
  18. package/dist/jest-setup.cjs.map +1 -0
  19. package/dist/jest-setup.d.cts +8 -0
  20. package/dist/jest-setup.d.ts +8 -0
  21. package/dist/jest-setup.js +1671 -0
  22. package/dist/jest-setup.js.map +1 -0
  23. package/dist/jest.cjs +1760 -0
  24. package/dist/jest.cjs.map +1 -0
  25. package/dist/jest.d.cts +23 -0
  26. package/dist/jest.d.ts +23 -0
  27. package/dist/jest.js +1751 -0
  28. package/dist/jest.js.map +1 -0
  29. package/dist/{notifiers-BjjGSHpp.d.ts → notifiers-DwKlvv4H.d.cts} +8 -4
  30. package/dist/{notifiers-BGQtWKfX.d.cts → notifiers-FNzKHs0a.d.ts} +8 -4
  31. package/dist/playwright.cjs +235 -30
  32. package/dist/playwright.cjs.map +1 -1
  33. package/dist/playwright.d.cts +8 -6
  34. package/dist/playwright.d.ts +8 -6
  35. package/dist/playwright.js +235 -31
  36. package/dist/playwright.js.map +1 -1
  37. package/dist/relay.cjs +10 -2
  38. package/dist/relay.cjs.map +1 -1
  39. package/dist/relay.js +10 -2
  40. package/dist/relay.js.map +1 -1
  41. package/dist/rerender-lens.iife.js +1100 -337
  42. package/dist/runner-report-B8Sc3FZO.d.cts +46 -0
  43. package/dist/runner-report-CW8X5RwK.d.ts +46 -0
  44. package/dist/setup.cjs +308 -95
  45. package/dist/setup.cjs.map +1 -1
  46. package/dist/setup.js +308 -95
  47. package/dist/setup.js.map +1 -1
  48. package/dist/{types-BzUEVkxJ.d.cts → types-DW5-N2XH.d.cts} +55 -2
  49. package/dist/{types-BzUEVkxJ.d.ts → types-DW5-N2XH.d.ts} +55 -2
  50. package/dist/vite.d.cts +1 -1
  51. package/dist/vite.d.ts +1 -1
  52. package/dist/vitest-setup.cjs +452 -87
  53. package/dist/vitest-setup.cjs.map +1 -1
  54. package/dist/vitest-setup.d.cts +4 -4
  55. package/dist/vitest-setup.d.ts +4 -4
  56. package/dist/vitest-setup.js +452 -87
  57. package/dist/vitest-setup.js.map +1 -1
  58. package/dist/vitest.cjs +515 -123
  59. package/dist/vitest.cjs.map +1 -1
  60. package/dist/vitest.d.cts +21 -39
  61. package/dist/vitest.d.ts +21 -39
  62. package/dist/vitest.js +516 -124
  63. package/dist/vitest.js.map +1 -1
  64. package/package.json +41 -5
  65. package/panel/panel.css +1 -34
  66. package/panel/panel.js +865 -713
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rerender-lens",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Find avoidable React re-renders and what caused them. Reads the fiber tree like React DevTools, so nothing is patched: works with Fast Refresh, memo, forwardRef and classes. Structured reports, test assertions, and a DevTools bridge.",
5
5
  "keywords": [
6
6
  "react",
@@ -19,7 +19,9 @@
19
19
  "./dist/setup.js",
20
20
  "./dist/setup.cjs",
21
21
  "./dist/vitest-setup.js",
22
- "./dist/vitest-setup.cjs"
22
+ "./dist/vitest-setup.cjs",
23
+ "./dist/jest-setup.js",
24
+ "./dist/jest-setup.cjs"
23
25
  ],
24
26
  "main": "./dist/index.cjs",
25
27
  "module": "./dist/index.js",
@@ -85,6 +87,26 @@
85
87
  "default": "./dist/vitest-setup.cjs"
86
88
  }
87
89
  },
90
+ "./jest": {
91
+ "import": {
92
+ "types": "./dist/jest.d.ts",
93
+ "default": "./dist/jest.js"
94
+ },
95
+ "require": {
96
+ "types": "./dist/jest.d.cts",
97
+ "default": "./dist/jest.cjs"
98
+ }
99
+ },
100
+ "./jest/setup": {
101
+ "import": {
102
+ "types": "./dist/jest-setup.d.ts",
103
+ "default": "./dist/jest-setup.js"
104
+ },
105
+ "require": {
106
+ "types": "./dist/jest-setup.d.cts",
107
+ "default": "./dist/jest-setup.cjs"
108
+ }
109
+ },
88
110
  "./setup": {
89
111
  "import": {
90
112
  "types": "./dist/setup.d.ts",
@@ -108,7 +130,7 @@
108
130
  "CHANGELOG.md"
109
131
  ],
110
132
  "scripts": {
111
- "build": "tsup && node scripts/copy-panel.mjs",
133
+ "build": "tsup && node scripts/build-vendor.mjs && node scripts/copy-panel.mjs",
112
134
  "typecheck": "tsc --noEmit",
113
135
  "test": "vitest run",
114
136
  "test:watch": "vitest",
@@ -119,9 +141,15 @@
119
141
  "docs:media": "node scripts/docs-media.mjs",
120
142
  "lint:ext": "npx --yes web-ext lint --source-dir dist-extension/firefox --warnings-as-errors=false",
121
143
  "version": "node scripts/sync-version.mjs && git add extension/manifest.json",
122
- "check": "npm run typecheck && npm test && npm run build && npm run lint:pkg && npm run build:ext",
144
+ "check": "npm run typecheck && npm test && npm run build && npm run test:built && npm run lint:pkg && npm run build:ext",
123
145
  "prepublishOnly": "npm run check",
124
- "dev:example": "npm run build && npm --prefix examples/vite-react run dev"
146
+ "dev:example": "npm run build && npm --prefix examples/vite-react run dev",
147
+ "test:built": "vitest run test/vendor.test.ts",
148
+ "e2e:next": "playwright test -c e2e/next.config.ts",
149
+ "test:jest": "node scripts/jest-check.mjs",
150
+ "test:react18": "npm install --prefix .react18 --no-save --no-package-lock --no-audit --no-fund react@18 react-dom@18 && vitest run --config test/react-compat.config.ts",
151
+ "store:media": "node scripts/store-media.mjs",
152
+ "test:react17": "npm install --prefix .react17 --no-save --no-package-lock --no-audit --no-fund react@17 react-dom@17 && REACT_COMPAT_DIR=.react17/node_modules vitest run --config test/react-compat.config.ts"
125
153
  },
126
154
  "peerDependencies": {
127
155
  "react": ">=16.8.0",
@@ -129,11 +157,19 @@
129
157
  },
130
158
  "devDependencies": {
131
159
  "@arethetypeswrong/cli": "^0.18.5",
160
+ "@babel/core": "^8.0.1",
161
+ "@babel/preset-env": "^8.0.2",
162
+ "@babel/preset-react": "^8.0.1",
163
+ "@babel/preset-typescript": "^8.0.1",
164
+ "@jest/globals": "^30.5.1",
132
165
  "@playwright/test": "^1.63.0",
133
166
  "@types/chrome": "^0.2.9",
134
167
  "@types/node": "^26.4.1",
135
168
  "@types/react": "^19.2.18",
136
169
  "@types/react-dom": "^19.2.7",
170
+ "babel-jest": "^30.5.1",
171
+ "jest": "^30.5.1",
172
+ "jest-environment-jsdom": "^30.5.1",
137
173
  "jsdom": "^29.1.1",
138
174
  "marked": "^9.1.6",
139
175
  "publint": "^0.3.24",
package/panel/panel.css CHANGED
@@ -324,6 +324,7 @@ details.obj pre { margin: 4px 0 0 12px; font: 11px/1.4 var(--mono); white-space:
324
324
  .opt input[type="text"], .opt input[type="number"] { height: 24px; padding: 0 8px; border: 1px solid var(--border-strong); border-radius: var(--radius); background: var(--bg); color: inherit; font: inherit; }
325
325
  .opt input[type="text"]:focus, .opt input[type="number"]:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent-bg); }
326
326
  .drawer .meta { color: var(--text-dim); margin-top: 4px; }
327
+ .drawer .report-link { display: inline-block; margin-top: 8px; font-weight: 600; }
327
328
 
328
329
  /* ---------- sessions, compare, commit priority ---------- */
329
330
  button.ib.rec .glyph { color: var(--danger); animation: blink 1.2s ease-in-out infinite; }
@@ -363,40 +364,6 @@ button.ib.rec .glyph { color: var(--danger); animation: blink 1.2s ease-in-out i
363
364
  .views button.instances { color: var(--text-dim); }
364
365
  .views button.instances.active { background: var(--accent-bg); color: var(--accent); }
365
366
 
366
- /* ---------- windowed grids, column chooser, notes ---------- */
367
- .vhead { display: grid; position: sticky; top: 0; z-index: 1; background: var(--bg-alt); border-bottom: 1px solid var(--border); font-size: 11px; font-weight: 600; color: var(--text-dim); align-items: center; }
368
- .vhead > span { padding: 6px 10px; white-space: nowrap; cursor: pointer; user-select: none; }
369
- .vhead > span.sorted { color: var(--accent); }
370
- .vhead > span.num { text-align: right; }
371
- .vrow { display: grid; grid-template-columns: var(--grid-cols); align-items: center; height: 26px; position: absolute; left: 0; right: 0; border-bottom: 1px solid var(--border); font-size: 11px; cursor: pointer; box-sizing: border-box; }
372
- .vrow:hover { background: var(--hover); }
373
- .vrow > span { padding: 0 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
374
- .vrow > span.num { text-align: right; font-variant-numeric: tabular-nums; }
375
- .vrow > span.c .name { font-family: var(--mono); color: var(--key); }
376
- .vrow > span.c .name::before { content: "<"; color: var(--text-faint); }
377
- .vrow > span.c .name::after { content: ">"; color: var(--text-faint); }
378
- .vrow > span.fix { color: var(--text-dim); font-family: var(--mono); }
379
- .vrow.fix-row { display: flex; gap: 8px; padding: 0 10px; }
380
- .vrow.fix-row .label { font-family: var(--mono); }
381
- .vrow.fix-row .meta { color: var(--text-dim); overflow: hidden; text-overflow: ellipsis; }
382
- .vrow.selected, .vrow.fix-row.selected { background: var(--selected); color: var(--selected-text); box-shadow: inset 2px 0 0 var(--accent); }
383
- .table-tools { display: flex; justify-content: flex-end; padding: 3px 8px; border-bottom: 1px solid var(--border); background: var(--bg-alt); }
384
- .columns-menu { position: relative; font-size: 11px; font-weight: 400; }
385
- .columns-menu summary { list-style: none; cursor: pointer; color: var(--text-dim); padding: 2px 6px; border-radius: var(--radius); }
386
- .columns-menu summary::-webkit-details-marker { display: none; }
387
- .columns-menu summary:hover { background: var(--hover); color: var(--text); }
388
- .columns-menu .menu { position: absolute; right: 0; top: 100%; z-index: 3; background: var(--bg); border: 1px solid var(--border-strong); border-radius: var(--radius); box-shadow: var(--shadow); padding: 6px 10px; min-width: 140px; }
389
- .vhead .columns-menu { justify-self: end; }
390
- .grid td.mono { font-family: var(--mono); }
391
- tr.muted td, .vrow.muted > span, .row.muted .tag { opacity: 0.55; }
392
- .row.muted .tag .name::after { content: " ·muted"; color: var(--text-faint); font-family: var(--font); font-size: 10px; }
393
- button.ib.small { height: 22px; padding: 0 6px; }
394
- .note-box { display: flex; align-items: center; gap: 8px; padding: 6px 14px; background: var(--warn-bg); border-bottom: 1px solid var(--border); }
395
- .note-box.muted { background: var(--bg-inset); }
396
- .note-box .glyph { color: var(--warn); }
397
- .note-input { flex: 1; height: 24px; padding: 0 8px; border: 1px solid transparent; border-radius: var(--radius); background: transparent; font: inherit; color: inherit; }
398
- .note-input:hover, .note-input:focus { border-color: var(--border-strong); background: var(--bg); outline: none; }
399
-
400
367
  /* ---------- compact layout (side panel, narrow windows) ---------- */
401
368
  .compact .toolbar { flex-wrap: wrap; gap: 3px; }
402
369
  .compact .toolbar input[type="search"] { min-width: 120px; flex-basis: 100%; max-width: none; order: -1; margin-bottom: 3px; }