@memlab/mcp-server 2.18.1 → 2.86.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 (374) hide show
  1. package/README.md +30 -16
  2. package/bin/.eslintrc.js +26 -0
  3. package/bin/memlab-cli.js +313 -0
  4. package/dist/anonymized-snapshot.d.ts +75 -0
  5. package/dist/anonymized-snapshot.d.ts.map +1 -0
  6. package/dist/anonymized-snapshot.js +101 -0
  7. package/dist/anonymized-snapshot.js.map +1 -0
  8. package/dist/artifact-classes.d.ts +86 -0
  9. package/dist/artifact-classes.d.ts.map +1 -0
  10. package/dist/artifact-classes.js +261 -0
  11. package/dist/artifact-classes.js.map +1 -0
  12. package/dist/capture-mode.d.ts +60 -0
  13. package/dist/capture-mode.d.ts.map +1 -0
  14. package/dist/capture-mode.js +39 -0
  15. package/dist/capture-mode.js.map +1 -0
  16. package/dist/eval-hints.d.ts +41 -0
  17. package/dist/eval-hints.d.ts.map +1 -0
  18. package/dist/eval-hints.js +115 -0
  19. package/dist/eval-hints.js.map +1 -0
  20. package/dist/guardrail.d.ts.map +1 -1
  21. package/dist/guardrail.js +13 -0
  22. package/dist/guardrail.js.map +1 -1
  23. package/dist/heap-budget.d.ts +32 -0
  24. package/dist/heap-budget.d.ts.map +1 -0
  25. package/dist/heap-budget.js +90 -0
  26. package/dist/heap-budget.js.map +1 -0
  27. package/dist/heap-shapes.d.ts +148 -0
  28. package/dist/heap-shapes.d.ts.map +1 -0
  29. package/dist/heap-shapes.js +193 -0
  30. package/dist/heap-shapes.js.map +1 -0
  31. package/dist/heap-state.d.ts +109 -2
  32. package/dist/heap-state.d.ts.map +1 -1
  33. package/dist/heap-state.js +194 -3
  34. package/dist/heap-state.js.map +1 -1
  35. package/dist/index.js +102 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/progress.d.ts +25 -0
  38. package/dist/progress.d.ts.map +1 -0
  39. package/dist/progress.js +46 -0
  40. package/dist/progress.js.map +1 -0
  41. package/dist/react-shapes.d.ts +42 -0
  42. package/dist/react-shapes.d.ts.map +1 -0
  43. package/dist/react-shapes.js +149 -0
  44. package/dist/react-shapes.js.map +1 -0
  45. package/dist/result-handles.d.ts +11 -0
  46. package/dist/result-handles.d.ts.map +1 -0
  47. package/dist/result-handles.js +77 -0
  48. package/dist/result-handles.js.map +1 -0
  49. package/dist/server-version.d.ts +19 -0
  50. package/dist/server-version.d.ts.map +1 -0
  51. package/dist/server-version.js +19 -0
  52. package/dist/server-version.js.map +1 -0
  53. package/dist/snapshot-borrow.d.ts +67 -0
  54. package/dist/snapshot-borrow.d.ts.map +1 -0
  55. package/dist/snapshot-borrow.js +113 -0
  56. package/dist/snapshot-borrow.js.map +1 -0
  57. package/dist/string-index.d.ts +55 -0
  58. package/dist/string-index.d.ts.map +1 -0
  59. package/dist/string-index.js +99 -0
  60. package/dist/string-index.js.map +1 -0
  61. package/dist/tool-registry.d.ts +42 -0
  62. package/dist/tool-registry.d.ts.map +1 -0
  63. package/dist/tool-registry.js +20 -0
  64. package/dist/tool-registry.js.map +1 -0
  65. package/dist/tools/analyze-run.d.ts +12 -0
  66. package/dist/tools/analyze-run.d.ts.map +1 -0
  67. package/dist/tools/analyze-run.js +404 -0
  68. package/dist/tools/analyze-run.js.map +1 -0
  69. package/dist/tools/anonymize-snapshot.d.ts +12 -0
  70. package/dist/tools/anonymize-snapshot.d.ts.map +1 -0
  71. package/dist/tools/anonymize-snapshot.js +159 -0
  72. package/dist/tools/anonymize-snapshot.js.map +1 -0
  73. package/dist/tools/app-config.d.ts +12 -0
  74. package/dist/tools/app-config.d.ts.map +1 -0
  75. package/dist/tools/app-config.js +217 -0
  76. package/dist/tools/app-config.js.map +1 -0
  77. package/dist/tools/app-heap.d.ts +30 -0
  78. package/dist/tools/app-heap.d.ts.map +1 -0
  79. package/dist/tools/app-heap.js +106 -0
  80. package/dist/tools/app-heap.js.map +1 -0
  81. package/dist/tools/artifact-budget.d.ts +12 -0
  82. package/dist/tools/artifact-budget.d.ts.map +1 -0
  83. package/dist/tools/artifact-budget.js +219 -0
  84. package/dist/tools/artifact-budget.js.map +1 -0
  85. package/dist/tools/async-census.d.ts +12 -0
  86. package/dist/tools/async-census.d.ts.map +1 -0
  87. package/dist/tools/async-census.js +243 -0
  88. package/dist/tools/async-census.js.map +1 -0
  89. package/dist/tools/auto-investigate.d.ts.map +1 -1
  90. package/dist/tools/auto-investigate.js +54 -5
  91. package/dist/tools/auto-investigate.js.map +1 -1
  92. package/dist/tools/batch.d.ts +12 -0
  93. package/dist/tools/batch.d.ts.map +1 -0
  94. package/dist/tools/batch.js +196 -0
  95. package/dist/tools/batch.js.map +1 -0
  96. package/dist/tools/cache-analysis.d.ts +15 -0
  97. package/dist/tools/cache-analysis.d.ts.map +1 -1
  98. package/dist/tools/cache-analysis.js +240 -14
  99. package/dist/tools/cache-analysis.js.map +1 -1
  100. package/dist/tools/census-diff.d.ts +55 -0
  101. package/dist/tools/census-diff.d.ts.map +1 -0
  102. package/dist/tools/census-diff.js +228 -0
  103. package/dist/tools/census-diff.js.map +1 -0
  104. package/dist/tools/chain-walk.d.ts +12 -0
  105. package/dist/tools/chain-walk.d.ts.map +1 -0
  106. package/dist/tools/chain-walk.js +184 -0
  107. package/dist/tools/chain-walk.js.map +1 -0
  108. package/dist/tools/class-histogram.d.ts.map +1 -1
  109. package/dist/tools/class-histogram.js +14 -3
  110. package/dist/tools/class-histogram.js.map +1 -1
  111. package/dist/tools/collection-diff.d.ts +44 -0
  112. package/dist/tools/collection-diff.d.ts.map +1 -0
  113. package/dist/tools/collection-diff.js +343 -0
  114. package/dist/tools/collection-diff.js.map +1 -0
  115. package/dist/tools/collection-trend.d.ts +55 -0
  116. package/dist/tools/collection-trend.d.ts.map +1 -0
  117. package/dist/tools/collection-trend.js +315 -0
  118. package/dist/tools/collection-trend.js.map +1 -0
  119. package/dist/tools/detached-dom.d.ts +5 -0
  120. package/dist/tools/detached-dom.d.ts.map +1 -1
  121. package/dist/tools/detached-dom.js +368 -22
  122. package/dist/tools/detached-dom.js.map +1 -1
  123. package/dist/tools/dev-artifacts.d.ts +62 -6
  124. package/dist/tools/dev-artifacts.d.ts.map +1 -1
  125. package/dist/tools/dev-artifacts.js +685 -24
  126. package/dist/tools/dev-artifacts.js.map +1 -1
  127. package/dist/tools/diff-snapshots.d.ts.map +1 -1
  128. package/dist/tools/diff-snapshots.js +18 -2
  129. package/dist/tools/diff-snapshots.js.map +1 -1
  130. package/dist/tools/dom-audit.d.ts +37 -0
  131. package/dist/tools/dom-audit.d.ts.map +1 -0
  132. package/dist/tools/dom-audit.js +247 -0
  133. package/dist/tools/dom-audit.js.map +1 -0
  134. package/dist/tools/dominator-attribution.d.ts +12 -0
  135. package/dist/tools/dominator-attribution.d.ts.map +1 -0
  136. package/dist/tools/dominator-attribution.js +189 -0
  137. package/dist/tools/dominator-attribution.js.map +1 -0
  138. package/dist/tools/dominator-chain.d.ts +12 -0
  139. package/dist/tools/dominator-chain.d.ts.map +1 -0
  140. package/dist/tools/dominator-chain.js +92 -0
  141. package/dist/tools/dominator-chain.js.map +1 -0
  142. package/dist/tools/duplicate-objects.d.ts +12 -0
  143. package/dist/tools/duplicate-objects.d.ts.map +1 -0
  144. package/dist/tools/duplicate-objects.js +172 -0
  145. package/dist/tools/duplicate-objects.js.map +1 -0
  146. package/dist/tools/duplicated-strings.d.ts.map +1 -1
  147. package/dist/tools/duplicated-strings.js +49 -40
  148. package/dist/tools/duplicated-strings.js.map +1 -1
  149. package/dist/tools/eval-across.d.ts +12 -0
  150. package/dist/tools/eval-across.d.ts.map +1 -0
  151. package/dist/tools/eval-across.js +135 -0
  152. package/dist/tools/eval-across.js.map +1 -0
  153. package/dist/tools/eval.d.ts +79 -0
  154. package/dist/tools/eval.d.ts.map +1 -1
  155. package/dist/tools/eval.js +2523 -197
  156. package/dist/tools/eval.js.map +1 -1
  157. package/dist/tools/event-listener-leaks.d.ts.map +1 -1
  158. package/dist/tools/event-listener-leaks.js +42 -17
  159. package/dist/tools/event-listener-leaks.js.map +1 -1
  160. package/dist/tools/event-registry.d.ts.map +1 -1
  161. package/dist/tools/event-registry.js +42 -8
  162. package/dist/tools/event-registry.js.map +1 -1
  163. package/dist/tools/explain-delta.d.ts +12 -0
  164. package/dist/tools/explain-delta.d.ts.map +1 -0
  165. package/dist/tools/explain-delta.js +221 -0
  166. package/dist/tools/explain-delta.js.map +1 -0
  167. package/dist/tools/find-nodes-by-class.d.ts.map +1 -1
  168. package/dist/tools/find-nodes-by-class.js +112 -13
  169. package/dist/tools/find-nodes-by-class.js.map +1 -1
  170. package/dist/tools/finding-index.d.ts +203 -0
  171. package/dist/tools/finding-index.d.ts.map +1 -0
  172. package/dist/tools/finding-index.js +566 -0
  173. package/dist/tools/finding-index.js.map +1 -0
  174. package/dist/tools/for-each.d.ts.map +1 -1
  175. package/dist/tools/for-each.js +15 -3
  176. package/dist/tools/for-each.js.map +1 -1
  177. package/dist/tools/get-referrers.d.ts.map +1 -1
  178. package/dist/tools/get-referrers.js +17 -0
  179. package/dist/tools/get-referrers.js.map +1 -1
  180. package/dist/tools/get-value.d.ts +16 -0
  181. package/dist/tools/get-value.d.ts.map +1 -1
  182. package/dist/tools/get-value.js +96 -2
  183. package/dist/tools/get-value.js.map +1 -1
  184. package/dist/tools/hunt-report.d.ts +12 -0
  185. package/dist/tools/hunt-report.d.ts.map +1 -0
  186. package/dist/tools/hunt-report.js +186 -0
  187. package/dist/tools/hunt-report.js.map +1 -0
  188. package/dist/tools/hypothesis.d.ts +12 -0
  189. package/dist/tools/hypothesis.d.ts.map +1 -0
  190. package/dist/tools/hypothesis.js +280 -0
  191. package/dist/tools/hypothesis.js.map +1 -0
  192. package/dist/tools/id-space-audit.d.ts +12 -0
  193. package/dist/tools/id-space-audit.d.ts.map +1 -0
  194. package/dist/tools/id-space-audit.js +262 -0
  195. package/dist/tools/id-space-audit.js.map +1 -0
  196. package/dist/tools/identify.d.ts +12 -0
  197. package/dist/tools/identify.d.ts.map +1 -0
  198. package/dist/tools/identify.js +205 -0
  199. package/dist/tools/identify.js.map +1 -0
  200. package/dist/tools/identity-diff.d.ts +12 -0
  201. package/dist/tools/identity-diff.d.ts.map +1 -0
  202. package/dist/tools/identity-diff.js +188 -0
  203. package/dist/tools/identity-diff.js.map +1 -0
  204. package/dist/tools/intern-opportunities.d.ts.map +1 -1
  205. package/dist/tools/intern-opportunities.js +116 -50
  206. package/dist/tools/intern-opportunities.js.map +1 -1
  207. package/dist/tools/ladder-probe.d.ts +65 -0
  208. package/dist/tools/ladder-probe.d.ts.map +1 -0
  209. package/dist/tools/ladder-probe.js +445 -0
  210. package/dist/tools/ladder-probe.js.map +1 -0
  211. package/dist/tools/ladder.d.ts +33 -0
  212. package/dist/tools/ladder.d.ts.map +1 -0
  213. package/dist/tools/ladder.js +266 -0
  214. package/dist/tools/ladder.js.map +1 -0
  215. package/dist/tools/largest-objects.d.ts.map +1 -1
  216. package/dist/tools/largest-objects.js +6 -2
  217. package/dist/tools/largest-objects.js.map +1 -1
  218. package/dist/tools/leak-report.d.ts +35 -0
  219. package/dist/tools/leak-report.d.ts.map +1 -0
  220. package/dist/tools/leak-report.js +398 -0
  221. package/dist/tools/leak-report.js.map +1 -0
  222. package/dist/tools/load-snapshot.d.ts +29 -0
  223. package/dist/tools/load-snapshot.d.ts.map +1 -1
  224. package/dist/tools/load-snapshot.js +294 -23
  225. package/dist/tools/load-snapshot.js.map +1 -1
  226. package/dist/tools/map-entries.d.ts +12 -0
  227. package/dist/tools/map-entries.d.ts.map +1 -0
  228. package/dist/tools/map-entries.js +139 -0
  229. package/dist/tools/map-entries.js.map +1 -0
  230. package/dist/tools/match-object.d.ts +12 -0
  231. package/dist/tools/match-object.d.ts.map +1 -0
  232. package/dist/tools/match-object.js +165 -0
  233. package/dist/tools/match-object.js.map +1 -0
  234. package/dist/tools/metric.d.ts +13 -0
  235. package/dist/tools/metric.d.ts.map +1 -0
  236. package/dist/tools/metric.js +185 -0
  237. package/dist/tools/metric.js.map +1 -0
  238. package/dist/tools/module-attribution.d.ts +36 -0
  239. package/dist/tools/module-attribution.d.ts.map +1 -0
  240. package/dist/tools/module-attribution.js +235 -0
  241. package/dist/tools/module-attribution.js.map +1 -0
  242. package/dist/tools/next-measurement.d.ts +26 -0
  243. package/dist/tools/next-measurement.d.ts.map +1 -0
  244. package/dist/tools/next-measurement.js +149 -0
  245. package/dist/tools/next-measurement.js.map +1 -0
  246. package/dist/tools/object-cost-breakdown.d.ts.map +1 -1
  247. package/dist/tools/object-cost-breakdown.js +64 -0
  248. package/dist/tools/object-cost-breakdown.js.map +1 -1
  249. package/dist/tools/object-shape.d.ts.map +1 -1
  250. package/dist/tools/object-shape.js +53 -5
  251. package/dist/tools/object-shape.js.map +1 -1
  252. package/dist/tools/population-diff.d.ts +57 -0
  253. package/dist/tools/population-diff.d.ts.map +1 -0
  254. package/dist/tools/population-diff.js +338 -0
  255. package/dist/tools/population-diff.js.map +1 -0
  256. package/dist/tools/population-vs-owners.d.ts +12 -0
  257. package/dist/tools/population-vs-owners.d.ts.map +1 -0
  258. package/dist/tools/population-vs-owners.js +183 -0
  259. package/dist/tools/population-vs-owners.js.map +1 -0
  260. package/dist/tools/property-names.d.ts +29 -0
  261. package/dist/tools/property-names.d.ts.map +1 -0
  262. package/dist/tools/property-names.js +131 -0
  263. package/dist/tools/property-names.js.map +1 -0
  264. package/dist/tools/quick-diagnosis.d.ts.map +1 -1
  265. package/dist/tools/quick-diagnosis.js +7 -1
  266. package/dist/tools/quick-diagnosis.js.map +1 -1
  267. package/dist/tools/react-owners.d.ts +12 -0
  268. package/dist/tools/react-owners.d.ts.map +1 -0
  269. package/dist/tools/react-owners.js +167 -0
  270. package/dist/tools/react-owners.js.map +1 -0
  271. package/dist/tools/react-update-queues.d.ts +12 -0
  272. package/dist/tools/react-update-queues.d.ts.map +1 -0
  273. package/dist/tools/react-update-queues.js +173 -0
  274. package/dist/tools/react-update-queues.js.map +1 -0
  275. package/dist/tools/replicate.d.ts +49 -0
  276. package/dist/tools/replicate.d.ts.map +1 -0
  277. package/dist/tools/replicate.js +241 -0
  278. package/dist/tools/replicate.js.map +1 -0
  279. package/dist/tools/retainer-diff.d.ts +12 -0
  280. package/dist/tools/retainer-diff.d.ts.map +1 -0
  281. package/dist/tools/retainer-diff.js +168 -0
  282. package/dist/tools/retainer-diff.js.map +1 -0
  283. package/dist/tools/retainer-layers.d.ts +23 -0
  284. package/dist/tools/retainer-layers.d.ts.map +1 -0
  285. package/dist/tools/retainer-layers.js +179 -0
  286. package/dist/tools/retainer-layers.js.map +1 -0
  287. package/dist/tools/retainer-summary.d.ts +18 -0
  288. package/dist/tools/retainer-summary.d.ts.map +1 -1
  289. package/dist/tools/retainer-summary.js +210 -51
  290. package/dist/tools/retainer-summary.js.map +1 -1
  291. package/dist/tools/retainer-trace.d.ts.map +1 -1
  292. package/dist/tools/retainer-trace.js +14 -2
  293. package/dist/tools/retainer-trace.js.map +1 -1
  294. package/dist/tools/round-audit.d.ts +66 -0
  295. package/dist/tools/round-audit.d.ts.map +1 -0
  296. package/dist/tools/round-audit.js +258 -0
  297. package/dist/tools/round-audit.js.map +1 -0
  298. package/dist/tools/round-digest.d.ts +12 -0
  299. package/dist/tools/round-digest.d.ts.map +1 -0
  300. package/dist/tools/round-digest.js +190 -0
  301. package/dist/tools/round-digest.js.map +1 -0
  302. package/dist/tools/script-census.d.ts +12 -0
  303. package/dist/tools/script-census.d.ts.map +1 -0
  304. package/dist/tools/script-census.js +182 -0
  305. package/dist/tools/script-census.js.map +1 -0
  306. package/dist/tools/search-nodes.d.ts.map +1 -1
  307. package/dist/tools/search-nodes.js +5 -1
  308. package/dist/tools/search-nodes.js.map +1 -1
  309. package/dist/tools/search-strings.d.ts.map +1 -1
  310. package/dist/tools/search-strings.js +53 -7
  311. package/dist/tools/search-strings.js.map +1 -1
  312. package/dist/tools/sequence-analysis.d.ts +53 -0
  313. package/dist/tools/sequence-analysis.d.ts.map +1 -1
  314. package/dist/tools/sequence-analysis.js +313 -89
  315. package/dist/tools/sequence-analysis.js.map +1 -1
  316. package/dist/tools/server-status.d.ts.map +1 -1
  317. package/dist/tools/server-status.js +4 -1
  318. package/dist/tools/server-status.js.map +1 -1
  319. package/dist/tools/settle-check.d.ts +12 -0
  320. package/dist/tools/settle-check.d.ts.map +1 -0
  321. package/dist/tools/settle-check.js +188 -0
  322. package/dist/tools/settle-check.js.map +1 -0
  323. package/dist/tools/shape-histogram.d.ts.map +1 -1
  324. package/dist/tools/shape-histogram.js +9 -2
  325. package/dist/tools/shape-histogram.js.map +1 -1
  326. package/dist/tools/sliced-strings.d.ts.map +1 -1
  327. package/dist/tools/sliced-strings.js +2 -1
  328. package/dist/tools/sliced-strings.js.map +1 -1
  329. package/dist/tools/snapshots.d.ts.map +1 -1
  330. package/dist/tools/snapshots.js +24 -6
  331. package/dist/tools/snapshots.js.map +1 -1
  332. package/dist/tools/sparse-elements.d.ts +12 -0
  333. package/dist/tools/sparse-elements.d.ts.map +1 -0
  334. package/dist/tools/sparse-elements.js +215 -0
  335. package/dist/tools/sparse-elements.js.map +1 -0
  336. package/dist/tools/stale-collections.d.ts +17 -0
  337. package/dist/tools/stale-collections.d.ts.map +1 -1
  338. package/dist/tools/stale-collections.js +28 -0
  339. package/dist/tools/stale-collections.js.map +1 -1
  340. package/dist/tools/string-patterns.d.ts.map +1 -1
  341. package/dist/tools/string-patterns.js +7 -5
  342. package/dist/tools/string-patterns.js.map +1 -1
  343. package/dist/tools/tools-index.d.ts +12 -0
  344. package/dist/tools/tools-index.d.ts.map +1 -0
  345. package/dist/tools/tools-index.js +492 -0
  346. package/dist/tools/tools-index.js.map +1 -0
  347. package/dist/tools/trace-all.d.ts +42 -0
  348. package/dist/tools/trace-all.d.ts.map +1 -0
  349. package/dist/tools/trace-all.js +263 -0
  350. package/dist/tools/trace-all.js.map +1 -0
  351. package/dist/tools/unit-cost.d.ts +12 -0
  352. package/dist/tools/unit-cost.d.ts.map +1 -0
  353. package/dist/tools/unit-cost.js +219 -0
  354. package/dist/tools/unit-cost.js.map +1 -0
  355. package/dist/tools/verify-fix.d.ts +23 -0
  356. package/dist/tools/verify-fix.d.ts.map +1 -0
  357. package/dist/tools/verify-fix.js +219 -0
  358. package/dist/tools/verify-fix.js.map +1 -0
  359. package/dist/tools/weakmap-entries.d.ts.map +1 -1
  360. package/dist/tools/weakmap-entries.js +6 -1
  361. package/dist/tools/weakmap-entries.js.map +1 -1
  362. package/dist/tools/weakref-census.d.ts +15 -0
  363. package/dist/tools/weakref-census.d.ts.map +1 -0
  364. package/dist/tools/weakref-census.js +147 -0
  365. package/dist/tools/weakref-census.js.map +1 -0
  366. package/dist/tools/what-if.d.ts +12 -0
  367. package/dist/tools/what-if.d.ts.map +1 -0
  368. package/dist/tools/what-if.js +285 -0
  369. package/dist/tools/what-if.js.map +1 -0
  370. package/dist/utils.d.ts +238 -3
  371. package/dist/utils.d.ts.map +1 -1
  372. package/dist/utils.js +507 -15
  373. package/dist/utils.js.map +1 -1
  374. package/package.json +7 -6
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import { z } from 'zod';
11
+ import { getSnapshot } from '../heap-state.js';
12
+ import { errorResult, formatBytes, formatNumber, markdownTable, toolResult, } from '../utils.js';
13
+ /**
14
+ * Attribute heap bytes to the MODULE that owns them.
15
+ *
16
+ * Why this exists, stated plainly because the failure it prevents is expensive:
17
+ * in a bundled app every module-scope singleton is reached through the module
18
+ * registry, so essentially every retainer path starts
19
+ *
20
+ * Window -> requireDynamic -> .context -> modulesMap -> <Module> -> ...
21
+ *
22
+ * That prefix is shared by everything and therefore attributes nothing. A real
23
+ * round sampled twelve instances of a growing class, observed that all twelve
24
+ * "route through modulesMap", and concluded the growth was a known
25
+ * module-registry leak. It was not — three unrelated telemetry modules were each
26
+ * accumulating, and the registry was merely the road to all of them. The
27
+ * sampling tool had even reported "0.0% sampled" and declined to name a cause;
28
+ * the generic prefix made the wrong answer look confirmed.
29
+ *
30
+ * The fix is to report the MODULE NAME as the owner. `modulesMap` is a lookup
31
+ * table whose property edges are module ids, so the module that owns a node is
32
+ * the first module-export ancestor on its dominator chain.
33
+ */
34
+ /** Edge names that bind a module registry in the bundler runtime's scope. */
35
+ const MODULE_REGISTRY_EDGE_NAMES = new Set([
36
+ 'modulesMap',
37
+ 'modules',
38
+ '__webpack_module_cache__',
39
+ 'installedModules',
40
+ ]);
41
+ /**
42
+ * A registry has to be big to be a registry. A three-entry object called
43
+ * `modules` is somebody's local variable, and attributing the heap to it would
44
+ * be worse than not running.
45
+ */
46
+ const MIN_REGISTRY_ENTRIES = 200;
47
+ export function findModuleRegistries(snapshot) {
48
+ const out = [];
49
+ const seen = new Set();
50
+ snapshot.nodes.forEach((node) => {
51
+ if (node.id <= 3)
52
+ return;
53
+ for (const edge of node.references) {
54
+ const name = String(edge.name_or_index);
55
+ if (!MODULE_REGISTRY_EDGE_NAMES.has(name))
56
+ continue;
57
+ const reg = edge.toNode;
58
+ if (reg == null || reg.id <= 3 || seen.has(reg.id))
59
+ continue;
60
+ let entries = 0;
61
+ const moduleByNodeId = new Map();
62
+ for (const e2 of reg.references) {
63
+ if (e2.type !== 'property')
64
+ continue;
65
+ const key = String(e2.name_or_index);
66
+ if (key === '__proto__')
67
+ continue;
68
+ entries++;
69
+ const target = e2.toNode;
70
+ if (target != null && target.id > 3)
71
+ moduleByNodeId.set(target.id, key);
72
+ }
73
+ if (entries < MIN_REGISTRY_ENTRIES)
74
+ continue;
75
+ seen.add(reg.id);
76
+ out.push({ node: reg, edgeName: name, moduleByNodeId });
77
+ }
78
+ });
79
+ return out;
80
+ }
81
+ /**
82
+ * One pass with a memo indexed by `nodeIndex`: each node inherits its immediate
83
+ * dominator's module unless it IS a module export, so the whole heap is
84
+ * attributed in O(N) rather than one bounded walk per node.
85
+ */
86
+ export function attributeByModule(snapshot, registries) {
87
+ const moduleOf = new Map();
88
+ for (const r of registries) {
89
+ for (const [id, name] of r.moduleByNodeId)
90
+ moduleOf.set(id, name);
91
+ }
92
+ const memo = new Map();
93
+ const resolve = (node) => {
94
+ const direct = moduleOf.get(node.id);
95
+ if (direct != null)
96
+ return direct;
97
+ const cached = memo.get(node.id);
98
+ if (cached !== undefined)
99
+ return cached;
100
+ // Walk up, remembering the chain, then write the answer back to all of it.
101
+ const chain = [];
102
+ let cur = node;
103
+ let answer = null;
104
+ let hops = 0;
105
+ const guard = new Set();
106
+ while (cur != null && hops < 200 && !guard.has(cur.id)) {
107
+ guard.add(cur.id);
108
+ const hit = moduleOf.get(cur.id);
109
+ if (hit != null) {
110
+ answer = hit;
111
+ break;
112
+ }
113
+ const m = memo.get(cur.id);
114
+ if (m !== undefined) {
115
+ answer = m;
116
+ break;
117
+ }
118
+ chain.push(cur);
119
+ const dom = cur.dominatorNode ?? null;
120
+ if (dom == null || dom.id === cur.id)
121
+ break;
122
+ cur = dom;
123
+ hops++;
124
+ }
125
+ for (const n of chain)
126
+ memo.set(n.id, answer);
127
+ return answer;
128
+ };
129
+ const byModule = new Map();
130
+ let attributed = 0;
131
+ let unattributed = 0;
132
+ snapshot.nodes.forEach((node) => {
133
+ if (node.id <= 3)
134
+ return;
135
+ const mod = resolve(node);
136
+ if (mod == null) {
137
+ unattributed += node.self_size;
138
+ return;
139
+ }
140
+ attributed += node.self_size;
141
+ let s = byModule.get(mod);
142
+ if (!s) {
143
+ s = { module: mod, selfBytes: 0, nodes: 0 };
144
+ byModule.set(mod, s);
145
+ }
146
+ s.selfBytes += node.self_size;
147
+ s.nodes++;
148
+ });
149
+ return {
150
+ stats: [...byModule.values()].sort((a, b) => b.selfBytes - a.selfBytes),
151
+ attributed,
152
+ unattributed,
153
+ };
154
+ }
155
+ export function registerModuleAttribution(server) {
156
+ server.tool('memlab_module_attribution', 'Attribute heap bytes to the MODULE that owns them, by walking the dominator tree up to the nearest module-registry export. ' +
157
+ 'Exists because in a bundled app the retainer path of every module-scope singleton begins with the same generic prefix — `Window -> require -> .context -> modulesMap -> <Module>` — which is shared by everything in the heap and therefore attributes NOTHING. ' +
158
+ 'A measured round sampled 12 instances of a growing class, saw that all 12 "route through modulesMap", and filed the growth as a known module-registry leak; in fact three unrelated telemetry modules were each accumulating and the registry was just the road to all of them. The sampling tool had reported "0.0% sampled" and refused to name a cause — the generic prefix is what made the wrong answer look confirmed. ' +
159
+ 'This reports the module name instead, so "the heap grew" becomes "WebLoom +63 MB, InteractionTracingMetrics +23 MB". Use it whenever a retainer trace bottoms out in a module registry.', {
160
+ limit: z
161
+ .number()
162
+ .optional()
163
+ .default(25)
164
+ .describe('Maximum modules to report (default 25).'),
165
+ min_bytes: z
166
+ .number()
167
+ .optional()
168
+ .default(65536)
169
+ .describe('Ignore modules attributed less than this (default 64 KB).'),
170
+ name_pattern: z
171
+ .string()
172
+ .optional()
173
+ .describe('Optional case-insensitive substring/regex filter on the module id.'),
174
+ }, async ({ limit, min_bytes, name_pattern }) => {
175
+ try {
176
+ const snapshot = getSnapshot();
177
+ if (!snapshot) {
178
+ return errorResult('No heap snapshot loaded. Use memlab_load_snapshot first.');
179
+ }
180
+ const registries = findModuleRegistries(snapshot);
181
+ if (registries.length === 0) {
182
+ return errorResult('No module registry found in this snapshot. This tool looks for a bundler registry bound as ' +
183
+ [...MODULE_REGISTRY_EDGE_NAMES].map(n => `\`${n}\``).join(' / ') +
184
+ ` with at least ${MIN_REGISTRY_ENTRIES} entries. ` +
185
+ 'If this app uses a different registry shape, attribute with `memlab_dominator_attribution` against candidate owners instead.');
186
+ }
187
+ const { stats, attributed, unattributed } = attributeByModule(snapshot, registries);
188
+ let rows = stats.filter(s => s.selfBytes >= min_bytes);
189
+ if (name_pattern != null && name_pattern.length > 0) {
190
+ let re;
191
+ try {
192
+ re = new RegExp(name_pattern, 'i');
193
+ }
194
+ catch {
195
+ re = new RegExp(name_pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i');
196
+ }
197
+ rows = rows.filter(s => re.test(s.module));
198
+ }
199
+ const total = attributed + unattributed;
200
+ const lines = [
201
+ '## Heap attributed by owning module',
202
+ '',
203
+ `Registries found: ${registries
204
+ .map(r => `\`${r.edgeName}\` (${formatNumber(r.moduleByNodeId.size)} modules)`)
205
+ .join(', ')}`,
206
+ `Attributed to a module: **${formatBytes(attributed)}**` +
207
+ (total > 0
208
+ ? ` (${((attributed / total) * 100).toFixed(1)}%)`
209
+ : '') +
210
+ ` · not owned by any module: ${formatBytes(unattributed)}`,
211
+ '',
212
+ ];
213
+ if (rows.length === 0) {
214
+ lines.push('_No module is attributed more than the floor._');
215
+ return toolResult(lines.join('\n'));
216
+ }
217
+ lines.push(markdownTable(['Module', 'Self bytes', '% of attributed', 'Nodes'], rows
218
+ .slice(0, limit)
219
+ .map(s => [
220
+ s.module.length > 60 ? s.module.slice(0, 57) + '…' : s.module,
221
+ formatBytes(s.selfBytes),
222
+ attributed > 0
223
+ ? `${((s.selfBytes / attributed) * 100).toFixed(1)}%`
224
+ : '—',
225
+ formatNumber(s.nodes),
226
+ ]), new Set([1, 2, 3])));
227
+ lines.push('', '_Attribution is by SELF size up the dominator tree, so the figures partition the heap and are additive — a node is counted under exactly one module. "Not owned by any module" is the DOM, native/Blink objects, V8 internals and anything a module does not dominate; a large remainder is normal and is not a gap in the measurement._', '_A module being large is not a leak. Compare two captures — run this on each and diff the table — to turn "large" into "growing"._');
228
+ return toolResult(lines.join('\n'));
229
+ }
230
+ catch (error) {
231
+ return errorResult(`Failed to attribute by module: ${error instanceof Error ? error.message : String(error)}`);
232
+ }
233
+ });
234
+ }
235
+ //# sourceMappingURL=module-attribution.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-attribution.js","sourceRoot":"","sources":["../../src/tools/module-attribution.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
11
+ export declare function registerNextMeasurement(server: McpServer): void;
12
+ /**
13
+ * The one-line warning a report should carry when it rests on a single capture.
14
+ *
15
+ * `memlab_next_measurement` answers "what can this evidence support" well, and
16
+ * nothing ever called it: no other tool's output says "you are one snapshot
17
+ * short of being able to claim that", so the limitation is invisible at exactly
18
+ * the moment a finding gets written down. A session that analysed one supplied
19
+ * capture reported three findings as leaks; all three were standing sizes, and
20
+ * two were structural costs that a rate would have separated immediately.
21
+ *
22
+ * Returns null when more than one snapshot is resident, so a real ladder is not
23
+ * nagged.
24
+ */
25
+ export declare function singleSnapshotCaveat(): string | null;
26
+ //# sourceMappingURL=next-measurement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-measurement.d.ts","sourceRoot":"","sources":["../../src/tools/next-measurement.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA0BvE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8I/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAUpD"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @oncall memory_lab
9
+ */
10
+ import { z } from 'zod';
11
+ import { listSnapshots } from '../heap-state.js';
12
+ import { errorResult, formatNumber, toolResult } from '../utils.js';
13
+ export function registerNextMeasurement(server) {
14
+ server.tool('memlab_next_measurement', 'What can the snapshots currently loaded actually support — and which capture would change that?\n\n' +
15
+ 'Every wrong conclusion in a leak hunt has the same shape: a claim that needed a measurement nobody took, argued from one that happened to be available. One rung cannot show a trend. Two rungs cannot separate in-flight work from retention. A light snapshot cannot support any statement about retention at all. None of those limits appears in the output of the tools that produce the numbers.\n\n' +
16
+ 'Reports the gaps in the CURRENT evidence base, worst first, each with the specific capture or call that closes it. It only reports gaps it can verify from what is resident — it is not a model of your investigation, and silence about something is not endorsement of it.', {
17
+ goal: z
18
+ .enum(['find-leak', 'size-fix', 'verify-fix', 'any'])
19
+ .optional()
20
+ .default('any')
21
+ .describe('What the investigation is for, which changes which gaps matter: "find-leak" (is something growing), "size-fix" (how much would a fix save), "verify-fix" (did the fix work).'),
22
+ }, async ({ goal }) => {
23
+ try {
24
+ const resident = listSnapshots();
25
+ const gaps = [];
26
+ if (resident.length === 0) {
27
+ return toolResult('No snapshots are loaded, so there is no evidence base to assess. Load one with `memlab_load_snapshot` — and if the question is about growth, load the ladder rather than one capture.');
28
+ }
29
+ const light = resident.filter(m => m.light);
30
+ if (light.length > 0) {
31
+ gaps.push({
32
+ severity: 'blocking',
33
+ claim: 'anything about retention, ownership or "what would this free"',
34
+ why: `${light.map(m => `\`${m.handle}\``).join(', ')} ${light.length === 1 ? 'was' : 'were'} loaded with \`light: true\`, which skips the path and dominator pass. Retained sizes read as 0 and there are no retainer paths — not "no leak", no data.`,
35
+ fix: 'Reload without `light` (`memlab_load_snapshot({file_path, light: false})`).',
36
+ });
37
+ }
38
+ if (resident.length === 1) {
39
+ gaps.push({
40
+ severity: 'blocking',
41
+ claim: 'that anything is GROWING',
42
+ why: 'One capture is a state, not a trend. A large population in a single snapshot is equally consistent with a steady-state working set and with an accumulation — nothing in the capture distinguishes them.',
43
+ fix: 'Capture a second rung after exercising the suspect flow, load it with `keep_previous: true`, then `memlab_diff_snapshots` or `memlab_sequence_analysis`. `memlab_growth_signals` is the single-snapshot substitute, and it is a heuristic.',
44
+ });
45
+ }
46
+ if (resident.length === 2) {
47
+ gaps.push({
48
+ severity: 'limiting',
49
+ claim: 'that growth is a LEAK rather than backlog',
50
+ why: 'Two rungs cannot separate in-flight work from retention. A burst of activity legitimately inflates promise chains, IndexedDB transactions, scheduler queues and request buffers, and every one of those looks exactly like an accumulation in a two-rung diff.',
51
+ fix: 'Capture a third rung after the app goes idle and GC has run, then `memlab_settle_check({busy_handle, settled_handle})`. Anything that drains was backlog.',
52
+ });
53
+ gaps.push({
54
+ severity: 'note',
55
+ claim: 'that a per-step trend is monotonic',
56
+ why: 'With two points "grew every step" and "grew overall" are the same statement, so a single GC-band sample reads as a trend.',
57
+ fix: 'A third rung makes the trend verdicts in `memlab_sequence_analysis` mean something.',
58
+ });
59
+ }
60
+ if (resident.length >= 3) {
61
+ gaps.push({
62
+ severity: 'note',
63
+ claim: 'that the last rung is a settled one',
64
+ why: 'A ladder of N rungs still cannot separate backlog from retention unless one of them was captured after the app went idle. Rung count is not the same as having a settle rung, and nothing in the ladder records which is which.',
65
+ fix: 'If none of the rungs is post-idle, capture one. `memlab_settle_check` is what reads it.',
66
+ });
67
+ }
68
+ if (goal === 'size-fix' || goal === 'any') {
69
+ gaps.push({
70
+ severity: 'note',
71
+ claim: 'that a fix would free the bytes a class total shows',
72
+ why: 'A class total counts memory other live code also holds, and summing per-object retained sizes double-counts every nested object. Neither is what a fix frees.',
73
+ fix: '`memlab_what_if` for the dominator-deduped figure (add `cascade: true` for the second-order effect), and `memlab_unit_cost` for the per-instance number a cap is sized against.',
74
+ });
75
+ }
76
+ if (goal === 'verify-fix') {
77
+ gaps.push({
78
+ severity: 'blocking',
79
+ claim: 'that the fix is what changed the number',
80
+ why: 'A before/after pair captured on different builds differs in more than the fix. Without knowing the gate state IN each capture, an improvement is attributed to the fix by assumption.',
81
+ fix: '`memlab_app_config({key})` reads the flag out of each capture directly. Then `memlab_verify_fix` for the per-cycle rates, and `memlab_retainer_diff` to confirm the path you fixed is the one that changed.',
82
+ });
83
+ }
84
+ if (goal === 'find-leak' || goal === 'any') {
85
+ gaps.push({
86
+ severity: 'note',
87
+ claim: 'that a population is retained one way',
88
+ why: 'The default retainer tools sample ~10 instances and stop early once they agree, so a minority path — often the interesting one — cannot appear.',
89
+ fix: '`memlab_trace_all` traces the whole population and reports every cluster under 10% share.',
90
+ });
91
+ gaps.push({
92
+ severity: 'note',
93
+ claim: 'that a grower is production memory at all',
94
+ why: 'Dev-tools bridges, DevTools console retention, a11y/CDP caches and React Fast Refresh all manufacture growth that survives GC and is rooted at the real Window.',
95
+ fix: '`memlab_dev_artifacts({explain: true})` — the `explain` table also shows which families it did NOT find, so a silent zero is distinguishable from a clean capture.',
96
+ });
97
+ }
98
+ const order = { blocking: 0, limiting: 1, note: 2 };
99
+ gaps.sort((a, b) => order[a.severity] - order[b.severity]);
100
+ const lines = [
101
+ `## Evidence base: ${formatNumber(resident.length)} snapshot(s) resident`,
102
+ '',
103
+ resident
104
+ .map(m => `- \`${m.handle}\` — ${m.fileName}, ${formatNumber(m.nodeCount)} nodes${m.light ? ' ⚠ LIGHT (no retention data)' : ''}`)
105
+ .join('\n'),
106
+ '',
107
+ `### Gaps (goal: ${goal})`,
108
+ '',
109
+ ];
110
+ for (const g of gaps) {
111
+ const tag = g.severity === 'blocking'
112
+ ? '**BLOCKING**'
113
+ : g.severity === 'limiting'
114
+ ? '**LIMITING**'
115
+ : 'note';
116
+ lines.push(`- ${tag} — cannot support: ${g.claim}`, ` - Why: ${g.why}`, ` - Closes it: ${g.fix}`);
117
+ }
118
+ lines.push('', '_Rule-based over what is resident. It cannot see what you have already concluded, and it does not know whether a rung was captured post-idle — so treat silence as "not checked", not "fine"._');
119
+ return toolResult(lines.join('\n'));
120
+ }
121
+ catch (err) {
122
+ return errorResult(err);
123
+ }
124
+ });
125
+ }
126
+ /**
127
+ * The one-line warning a report should carry when it rests on a single capture.
128
+ *
129
+ * `memlab_next_measurement` answers "what can this evidence support" well, and
130
+ * nothing ever called it: no other tool's output says "you are one snapshot
131
+ * short of being able to claim that", so the limitation is invisible at exactly
132
+ * the moment a finding gets written down. A session that analysed one supplied
133
+ * capture reported three findings as leaks; all three were standing sizes, and
134
+ * two were structural costs that a rate would have separated immediately.
135
+ *
136
+ * Returns null when more than one snapshot is resident, so a real ladder is not
137
+ * nagged.
138
+ */
139
+ export function singleSnapshotCaveat() {
140
+ if (listSnapshots().length > 1)
141
+ return null;
142
+ return ('> ⚠️ **One snapshot is resident, so everything above is a STANDING SIZE, not a rate.** ' +
143
+ 'A single capture cannot separate a leak from a structural O(owners) cost, cannot show a trend, and cannot verify a fix — ' +
144
+ 'a population that is large because the account is large looks identical to one that grows every cycle. ' +
145
+ 'Before calling anything here a leak, either capture a ladder (`memlab_leak_report` / `memlab_ladder_probe` over >=3 rungs) ' +
146
+ 'or establish the ratio with `memlab_population_vs_owners`, which answers structural-vs-accumulating from one capture. ' +
147
+ 'Run `memlab_next_measurement` for the full list of what this evidence base can and cannot support.');
148
+ }
149
+ //# sourceMappingURL=next-measurement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next-measurement.js","sourceRoot":"","sources":["../../src/tools/next-measurement.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"object-cost-breakdown.d.ts","sourceRoot":"","sources":["../../src/tools/object-cost-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAuHvE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+bnE"}
1
+ {"version":3,"file":"object-cost-breakdown.d.ts","sourceRoot":"","sources":["../../src/tools/object-cost-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AA6HvE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAogBnE"}
@@ -8,6 +8,7 @@
8
8
  * @oncall memory_lab
9
9
  */
10
10
  import { z } from 'zod';
11
+ import { readRawElements, describeElements, getSlotBytes, FORGIVEN_TAIL_SLOTS, } from '../heap-shapes.js';
11
12
  import { getSnapshot, getSnapshotMetadata } from '../heap-state.js';
12
13
  import { formatBytes, formatNumber, markdownTable, errorResult, toolResult, } from '../utils.js';
13
14
  function analyzePropertyCosts(nodes, sampleSize) {
@@ -176,9 +177,42 @@ export function registerObjectCostBreakdown(server) {
176
177
  let inMapCount = 0;
177
178
  let inSetCount = 0;
178
179
  let inArrayCount = 0;
180
+ // Elements backing stores. An integer-keyed object's bytes live on a
181
+ // `(object elements)` FixedArray that belongs to no class, so they are
182
+ // invisible to self_size, to a class histogram, and — until now — to
183
+ // this breakdown. On one capture that was 31.3 MB for a single class,
184
+ // 23.0 MB of it unused capacity.
185
+ const slotBytes = getSlotBytes(snapshot);
186
+ let elementsInstances = 0;
187
+ let elementsBytes = 0;
188
+ let elementsCapacity = 0;
189
+ let elementsUsed = 0;
190
+ let elementsWasteSlots = 0;
191
+ let elementsUnmeasurable = 0;
192
+ let elementsDictionary = 0;
179
193
  const sampled = instances.slice(0, sample_size);
180
194
  for (const node of sampled) {
181
195
  totalRetainedSize += node.retainedSize;
196
+ const raw = readRawElements(node);
197
+ const els = raw ? describeElements(raw, slotBytes) : null;
198
+ if (els) {
199
+ elementsInstances++;
200
+ elementsBytes += els.storeBytes;
201
+ if (els.mode === 'dictionary') {
202
+ elementsDictionary++;
203
+ }
204
+ else if (!els.measurable) {
205
+ // All holes or all small integers — a snapshot cannot tell those
206
+ // apart, so counting it either way would be a guess.
207
+ elementsUnmeasurable++;
208
+ }
209
+ else {
210
+ elementsCapacity += els.capacity;
211
+ elementsUsed += els.used;
212
+ elementsWasteSlots +=
213
+ els.holes + Math.max(0, els.slack - FORGIVEN_TAIL_SLOTS);
214
+ }
215
+ }
182
216
  let ownProps = 0;
183
217
  for (const edge of node.references) {
184
218
  if (edge.type !== 'property')
@@ -345,6 +379,27 @@ export function registerObjectCostBreakdown(server) {
345
379
  .join(', '),
346
380
  ]);
347
381
  }
382
+ if (elementsInstances > 0) {
383
+ const perInstanceElements = elementsBytes / count;
384
+ const wasteBytes = elementsWasteSlots * slotBytes;
385
+ const occupancy = elementsCapacity > 0
386
+ ? `${Math.round((elementsUsed / elementsCapacity) * 100)}% full`
387
+ : 'occupancy not readable';
388
+ costRows.push([
389
+ 'Elements store',
390
+ String(Math.round(perInstanceElements)),
391
+ `${elementsInstances}/${count} sampled instance(s) carry one — ${occupancy}` +
392
+ (wasteBytes > 0
393
+ ? `, ${formatBytes(wasteBytes / count)}/instance of it unused`
394
+ : '') +
395
+ (elementsUnmeasurable > 0
396
+ ? `; ${elementsUnmeasurable} unmeasurable (all-SMI or all-hole)`
397
+ : '') +
398
+ (elementsDictionary > 0
399
+ ? `; ${elementsDictionary} dictionary-mode`
400
+ : ''),
401
+ ]);
402
+ }
348
403
  costRows.push([
349
404
  '**Modeled per instance**',
350
405
  `**${Math.round(totalPerInstance)}**`,
@@ -426,6 +481,15 @@ export function registerObjectCostBreakdown(server) {
426
481
  if (instances.length > 10000) {
427
482
  lines.push(`- **Columnar layout:** For ${formatNumber(instances.length)} instances, consider struct-of-arrays instead of array-of-structs to eliminate per-object overhead.`);
428
483
  }
484
+ if (elementsCapacity > 0 &&
485
+ elementsUsed / elementsCapacity < 0.5 &&
486
+ elementsWasteSlots * slotBytes > 1024) {
487
+ lines.push(`- **Sparse elements:** the elements stores are only ` +
488
+ `${Math.round((elementsUsed / elementsCapacity) * 100)}% full, wasting ` +
489
+ `${formatBytes(elementsWasteSlots * slotBytes)} across the sampled instances. ` +
490
+ `Run \`memlab_sparse_elements\` for the per-owner breakdown and whether the ` +
491
+ `cause is sparse keys or over-allocation — they need different fixes.`);
492
+ }
429
493
  if (collectionOverhead > V8_OBJECT_HEADER) {
430
494
  lines.push(`- **Collection choice:** Current collection overhead is ${Math.round(collectionOverhead)}B/instance. Array storage (${V8_ARRAY_SLOT}B/slot) is cheaper than Map (${V8_MAP_ENTRY_OVERHEAD}B/entry).`);
431
495
  }
@@ -1 +1 @@
1
- {"version":3,"file":"object-cost-breakdown.js","sourceRoot":"","sources":["../../src/tools/object-cost-breakdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAC,CAAC,EAAC,MAAM,KAAK,CAAC;AACtB,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,aAAa,EACb,WAAW,EACX,UAAU,GACX,MAAM,aAAa,CAAC;AA2BrB,SAAS,oBAAoB,CAC3B,KAAkB,EAClB,UAAkB;IAElB,MAAM,SAAS,GAAG,IAAI,GAAG,EAWtB,CAAC;IAEJ,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;gBAAE,SAAS;YACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC3B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACzC,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,KAAK,QAAQ;gBACxB,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;YACtE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;YAEjE,IAAI,QAAQ,EAAE,CAAC;gBACb,QAAQ,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC;gBACvC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACjB,IAAI,KAAK;oBAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;qBAC1B,IAAI,SAAS;oBAAE,QAAQ,CAAC,eAAe,EAAE,CAAC;qBAC1C,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;qBACrD,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ;oBAAE,QAAQ,CAAC,WAAW,EAAE,CAAC;;oBACrD,QAAQ,CAAC,UAAU,EAAE,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACtB,SAAS,EAAE,MAAM,CAAC,SAAS;oBAC3B,eAAe,EAAE,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC5C,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvB,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,WAAW,EAAE,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC7C,UAAU,EACR,CAAC,SAAS;wBACV,CAAC,KAAK;wBACN,MAAM,CAAC,IAAI,KAAK,QAAQ;wBACxB,MAAM,CAAC,IAAI,KAAK,QAAQ;wBACtB,CAAC,CAAC,CAAC;wBACH,CAAC,CAAC,CAAC;oBACP,KAAK,EAAE,CAAC;iBACT,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAuC,EAAE,CAAC;IACtD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACtC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpE,MAAM,YAAY,GAChB,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG;YACvC,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG;gBAClC,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG;oBACrC,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG;wBACrC,CAAC,CAAC,QAAQ;wBACV,CAAC,CAAC,OAAO,CAAC;QACpB,MAAM,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,IAAI,EAAE,YAAY;YAClB,OAAO;YACP,YAAY,EAAE,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,KAAK,GAAG,GAAG;SACxD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAC7C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,IAAI,CACT,8BAA8B,EAC9B,uWAAuW,EACvW;QACE,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,sEAAsE,CACvE;QACH,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gEAAgE,CACjE;QACH,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CACP,mEAAmE,CACpE;QACH,mBAAmB,EAAE,CAAC;aACnB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CACP,uNAAuN,CACxN;KACJ,EACD,KAAK,EAAE,EAAC,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAC,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,mBAAmB,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5B,OAAO,UAAU,CACf,sDAAsD,CACvD,CAAC;YACJ,CAAC;YAED,2BAA2B;YAC3B,IAAI,UAAU,GAAG,UAAU,IAAI,EAAE,CAAC;YAClC,IAAI,WAAW,GAAoB,IAAI,CAAC;YACxC,MAAM,SAAS,GAAgB,EAAE,CAAC;YAElC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;gBAC9C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO,UAAU,CAAC,SAAS,OAAO,aAAa,CAAC,CAAC;gBACnD,CAAC;gBACD,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;gBAC1B,8BAA8B;gBAC9B,MAAM,UAAU,GAAa,EAAE,CAAC;gBAChC,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;oBACtC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC7B,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;oBAC9C,CAAC;gBACH,CAAC;gBACD,UAAU,CAAC,IAAI,EAAE,CAAC;gBAClB,WAAW,GAAG,UAAU,CAAC;gBAEzB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI;wBAAE,OAAO;oBACnE,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;wBAAE,OAAO;oBACzB,MAAM,KAAK,GAAa,EAAE,CAAC;oBAC3B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;wBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;4BAC7B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,KAAK,CAAC,IAAI,EAAE,CAAC;oBACb,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE,CAAC;wBACjC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC5B,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC;wBAAE,OAAO;oBACzB,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBAC7B,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvB,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC;YAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,UAAU,CACf,2BAA2B,UAAU,IAAI,WAAW,CAAC,CAAC,CAAC,gBAAgB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CACzG,CAAC;YACJ,CAAC;YAED,yEAAyE;YACzE,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,iBAAiB,IAAI,IAAI,CAAC,SAAS,CAAC;YACtC,CAAC;YACD,MAAM,WAAW,GAAG,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC;YAEzD,0BAA0B;YAC1B,IAAI,iBAAiB,GAAG,CAAC,CAAC;YAC1B,IAAI,eAAe,GAAG,CAAC,CAAC;YACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,sEAAsE;YACtE,qEAAqE;YACrE,qEAAqE;YACrE,sEAAsE;YACtE,MAAM,aAAa,GAAa,EAAE,CAAC;YAEnC,wBAAwB;YACxB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,YAAY,GAAG,CAAC,CAAC;YAErB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;gBAC3B,iBAAiB,IAAI,IAAI,CAAC,YAAY,CAAC;gBAEvC,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBACnC,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU;wBAAE,SAAS;oBACvC,QAAQ,EAAE,CAAC;oBACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC3B,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,KAAK,QAAQ;wBACxB,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ;4BACvB,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC;oBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;oBAEjE,IAAI,KAAK,EAAE,CAAC;wBACV,QAAQ,EAAE,CAAC;oBACb,CAAC;yBAAM,IAAI,SAAS,EAAE,CAAC;wBACrB,eAAe,EAAE,CAAC;oBACpB,CAAC;gBACH,CAAC;gBACD,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE7B,iCAAiC;gBACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACnC,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;wBACtD,IAAI,QAAQ,KAAK,KAAK,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;4BACxD,MAAM,WAAW,GAAG,GAAG,CAAC,QAAQ,CAAC;4BACjC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;gCACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oCACjC,UAAU,EAAE,CAAC;oCACb,MAAM;gCACR,CAAC;gCACD,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;oCACjC,UAAU,EAAE,CAAC;oCACb,MAAM;gCACR,CAAC;4BACH,CAAC;wBACH,CAAC;wBACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;4BACzB,YAAY,EAAE,CAAC;wBACjB,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC;YAC7B,MAAM,WAAW,GAAG,iBAAiB,GAAG,KAAK,CAAC;YAC9C,MAAM,cAAc,GAAG,eAAe,GAAG,KAAK,CAAC;YAC/C,MAAM,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;YAEjC,wEAAwE;YACxE,uEAAuE;YACvE,uEAAuE;YACvE,sEAAsE;YACtE,qEAAqE;YACrE,MAAM,WAAW,GACf,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,WAAW,GACf,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,eAAe,GACnB,aAAa,CAAC,MAAM,CAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,EACnD,CAAC,CACF,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;YACxC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACjD,MAAM,OAAO,GAAG,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,iEAAiE;YACjE,MAAM,iBAAiB,GACrB,OAAO,GAAG,GAAG,IAAI,WAAW,GAAG,WAAW,GAAG,CAAC,CAAC;YAEjD,qBAAqB;YACrB,MAAM,aAAa,GAAG,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACnE,sEAAsE;YACtE,uEAAuE;YACvE,sEAAsE;YACtE,MAAM,gBAAgB,GAAG,aAAa,CAAC,MAAM,CAAC;YAC9C,wEAAwE;YACxE,oEAAoE;YACpE,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAE9C,gDAAgD;YAChD,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,kCAAkC;YAC/D,MAAM,mBAAmB,GAAG,CAAC,CAAC,CAAC,8BAA8B;YAC7D,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,kCAAkC;YAC7D,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,6BAA6B;YAC/D,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,qBAAqB;YACvD,MAAM,aAAa,GAAG,CAAC,CAAC,CAAC,sBAAsB;YAE/C,MAAM,cAAc,GAAG,gBAAgB,CAAC;YACxC,MAAM,kBAAkB,GAAG,aAAa,GAAG,mBAAmB,CAAC;YAC/D,MAAM,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC;YACxD,MAAM,oBAAoB,GACxB,cAAc,GAAG,kBAAkB,GAAG,eAAe,CAAC;YAExD,qEAAqE;YACrE,yEAAyE;YACzE,uEAAuE;YACvE,wDAAwD;YACxD,MAAM,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAClD,CAAC,MAAM,CAAC;YACT,MAAM,eAAe,GACnB,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,aAAa,EACb,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,eAAe,CAAC,CAC5C,CAAC;YACF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,GAAG,YAAY,CAAC,CAAC;YAClE,MAAM,cAAc,GAClB,YAAY,GAAG,CAAC,GAAG,wBAAwB;gBAC3C,eAAe,GAAG,mBAAmB,GAAG,2BAA2B;gBACnE,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mCAAmC;YAEnF,sBAAsB;YACtB,MAAM,kBAAkB,GACtB,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,qBAAqB;gBAC5C,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,qBAAqB;gBAC5C,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,aAAa,CAAC;YAEzC,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;YACnE,sEAAsE;YACtE,kEAAkE;YAClE,iEAAiE;YACjE,yEAAyE;YACzE,8DAA8D;YAC9D,MAAM,eAAe,GAAG,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC;YAC9D,MAAM,iBAAiB,GAAG,iBAAiB,GAAG,eAAe,CAAC;YAC9D,8DAA8D;YAC9D,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAC/B,cAAc,GAAG,SAAS,CAAC,MAAM,EACjC,iBAAiB,CAClB,CAAC;YAEF,MAAM,KAAK,GAAa;gBACtB,8BAA8B,UAAU,KAAK,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAClJ,EAAE;gBACF,kBAAkB,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,mBAAmB,YAAY,CAAC,KAAK,CAAC,oCAAoC,WAAW,CAAC,iBAAiB,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,aAAa;gBACrM,EAAE;aACH,CAAC;YAEF,0EAA0E;YAC1E,yEAAyE;YACzE,iEAAiE;YACjE,iCAAiC;YACjC,IAAI,iBAAiB,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CACR,+DAA+D,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,WAAW,wBAAwB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,YAAY,CAAC,gBAAgB,CAAC,oDAAoD;oBAClR,6HAA6H,WAAW,CAAC,iBAAiB,CAAC,wCAAwC;oBACnM,0IAA0I,EAC5I,EAAE,CACH,CAAC;YACJ,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,sCAAsC,EAAE,EAAE,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YACpD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,QAAQ,GAAe;gBAC3B;oBACE,eAAe;oBACf,MAAM,CAAC,gBAAgB,CAAC;oBACxB,qCAAqC;iBACtC;gBACD;oBACE,mBAAmB;oBACnB,MAAM,CAAC,kBAAkB,CAAC;oBAC1B,GAAG,aAAa,iBAAiB,mBAAmB,GAAG;iBACxD;aACF,CAAC;YAEF,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,QAAQ,CAAC,IAAI,CAAC;oBACZ,cAAc;oBACd,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;oBACnC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,cAAc,iCAAiC;iBAC/F,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC;oBACZ,YAAY;oBACZ,GAAG;oBACH,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,yCAAyC;iBAC/D,CAAC,CAAC;YACL,CAAC;YACD,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;gBAC3B,QAAQ,CAAC,IAAI,CAAC;oBACZ,oBAAoB;oBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;oBACtC;wBACE,UAAU,GAAG,CAAC;4BACZ,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;4BACpD,CAAC,CAAC,EAAE;wBACN,UAAU,GAAG,CAAC;4BACZ,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;4BACpD,CAAC,CAAC,EAAE;wBACN,YAAY,GAAG,CAAC;4BACd,CAAC,CAAC,UAAU,CAAC,CAAC,YAAY,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;4BACxD,CAAC,CAAC,EAAE;qBACP;yBACE,MAAM,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,IAAI,CAAC;iBACd,CAAC,CAAC;YACL,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC;gBACZ,0BAA0B;gBAC1B,KAAK,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI;gBACrC,sBAAsB,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gBAAgB,WAAW,CAAC,WAAW,CAAC,EAAE;aACxF,CAAC,CAAC;YACH,QAAQ,CAAC,IAAI,CAAC;gBACZ,mBAAmB;gBACnB,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG;gBACjC,YAAY,GAAG,CAAC;oBACd,CAAC,CAAC,GAAG,YAAY,wCAAwC;oBACzD,CAAC,CAAC,sBAAsB;aAC3B,CAAC,CAAC;YAEH,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;YAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,wEAAwE;YACxE,iDAAiD;YACjD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CACR,uCAAuC,WAAW,CAAC,iBAAiB,CAAC,WAAW,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAC3H,CAAC;YACF,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,KAAK,CAAC,IAAI,CACR,gDAAgD,WAAW,CAAC,eAAe,CAAC,iEAAiE,WAAW,CAAC,iBAAiB,CAAC,UAAU,CACtL,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CACR,+BAA+B,WAAW,CAAC,gBAAgB,CAAC,iCAAiC,CAC9F,CAAC;YACF,MAAM,QAAQ,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;YACtD,IAAI,QAAQ,GAAG,CAAC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;gBACzC,KAAK,CAAC,IAAI,CACR,sCAAsC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,iBAAiB,CACnI,CAAC;YACJ,CAAC;YACD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,uEAAuE;gBACvE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,GAAG,EACH,CAAC,iBAAiB,GAAG,SAAS,CAAC,GAAG,GAAG,CACtC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACb,KAAK,CAAC,IAAI,CAAC,gCAAgC,OAAO,GAAG,CAAC,CAAC;YACzD,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAEf,oEAAoE;YACpE,yEAAyE;YACzE,iBAAiB;YACjB,IAAI,CAAC,mBAAmB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,KAAK,CAAC,IAAI,CACR,IAAI,YAAY,CAAC,gBAAgB,CAAC,oBAAoB,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,qGAAqG,EAC/L,EAAE,CACH,CAAC;YACJ,CAAC;YACD,IAAI,mBAAmB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACf,MAAM,WAAW,GAAG;oBAClB,UAAU;oBACV,eAAe;oBACf,UAAU;oBACV,OAAO;iBACR,CAAC;gBACF,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnC,MAAM,YAAY,GAAa,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;oBAClD,IAAI,KAAK,GAAG,EAAE,CAAC;oBACf,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;wBACnB,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;wBAC1B,KAAK;4BACH,4EAA4E,CAAC;oBACjF,CAAC;yBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;wBAC5B,KAAK,GAAG,uCAAuC,CAAC;oBAClD,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;gBACzD,CAAC,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;gBAChE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAEf,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC5B,KAAK,CAAC,IAAI,CACR,KAAK,YAAY,CAAC,MAAM,8BAA8B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,2JAA2J,CACzO,CAAC;oBACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjB,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CACR,4CAA4C,YAAY,sDAAsD,WAAW,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,GAAG,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,gCAAgC,CAClN,CAAC;YACJ,CAAC;YACD,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CACR,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,uIAAuI,CACxK,CAAC;YACJ,CAAC;YACD,IAAI,SAAS,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CACR,8BAA8B,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,qGAAqG,CAClK,CAAC;YACJ,CAAC;YACD,IAAI,kBAAkB,GAAG,gBAAgB,EAAE,CAAC;gBAC1C,KAAK,CAAC,IAAI,CACR,2DAA2D,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,8BAA8B,aAAa,gCAAgC,qBAAqB,WAAW,CACrM,CAAC;YACJ,CAAC;YAED,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"object-cost-breakdown.js","sourceRoot":"","sources":["../../src/tools/object-cost-breakdown.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"object-shape.d.ts","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAavE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA8O3D"}
1
+ {"version":3,"file":"object-shape.d.ts","sourceRoot":"","sources":["../../src/tools/object-shape.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,yCAAyC,CAAC;AAevE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAgT3D"}