@memlab/core 1.0.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 (130) hide show
  1. package/README.md +11 -0
  2. package/dist/__tests__/parser/HeapParser.test.d.ts +11 -0
  3. package/dist/__tests__/parser/HeapParser.test.d.ts.map +1 -0
  4. package/dist/__tests__/parser/HeapParser.test.js +54 -0
  5. package/dist/__tests__/parser/NodeHeap.test.d.ts +11 -0
  6. package/dist/__tests__/parser/NodeHeap.test.d.ts.map +1 -0
  7. package/dist/__tests__/parser/NodeHeap.test.js +96 -0
  8. package/dist/__tests__/parser/StringNode.test.d.ts +11 -0
  9. package/dist/__tests__/parser/StringNode.test.d.ts.map +1 -0
  10. package/dist/__tests__/parser/StringNode.test.js +61 -0
  11. package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.d.ts +16 -0
  12. package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.d.ts.map +1 -0
  13. package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.js +140 -0
  14. package/dist/__tests__/utils/utils.test.d.ts +11 -0
  15. package/dist/__tests__/utils/utils.test.d.ts.map +1 -0
  16. package/dist/__tests__/utils/utils.test.js +81 -0
  17. package/dist/index.d.ts +29 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +62 -0
  20. package/dist/lib/BaseOption.d.ts +31 -0
  21. package/dist/lib/BaseOption.d.ts.map +1 -0
  22. package/dist/lib/BaseOption.js +109 -0
  23. package/dist/lib/BrowserInfo.d.ts +33 -0
  24. package/dist/lib/BrowserInfo.d.ts.map +1 -0
  25. package/dist/lib/BrowserInfo.js +117 -0
  26. package/dist/lib/Config.d.ts +203 -0
  27. package/dist/lib/Config.d.ts.map +1 -0
  28. package/dist/lib/Config.js +427 -0
  29. package/dist/lib/Console.d.ts +67 -0
  30. package/dist/lib/Console.d.ts.map +1 -0
  31. package/dist/lib/Console.js +344 -0
  32. package/dist/lib/Constant.d.ts +38 -0
  33. package/dist/lib/Constant.d.ts.map +1 -0
  34. package/dist/lib/Constant.js +58 -0
  35. package/dist/lib/FileManager.d.ts +69 -0
  36. package/dist/lib/FileManager.d.ts.map +1 -0
  37. package/dist/lib/FileManager.js +309 -0
  38. package/dist/lib/HeapAnalyzer.d.ts +51 -0
  39. package/dist/lib/HeapAnalyzer.d.ts.map +1 -0
  40. package/dist/lib/HeapAnalyzer.js +719 -0
  41. package/dist/lib/HeapParser.d.ts +19 -0
  42. package/dist/lib/HeapParser.d.ts.map +1 -0
  43. package/dist/lib/HeapParser.js +128 -0
  44. package/dist/lib/InternalValueSetter.d.ts +14 -0
  45. package/dist/lib/InternalValueSetter.d.ts.map +1 -0
  46. package/dist/lib/InternalValueSetter.js +43 -0
  47. package/dist/lib/NodeHeap.d.ts +16 -0
  48. package/dist/lib/NodeHeap.d.ts.map +1 -0
  49. package/dist/lib/NodeHeap.js +62 -0
  50. package/dist/lib/ProcessManager.d.ts +25 -0
  51. package/dist/lib/ProcessManager.d.ts.map +1 -0
  52. package/dist/lib/ProcessManager.js +67 -0
  53. package/dist/lib/Serializer.d.ts +49 -0
  54. package/dist/lib/Serializer.d.ts.map +1 -0
  55. package/dist/lib/Serializer.js +702 -0
  56. package/dist/lib/StringLoader.d.ts +26 -0
  57. package/dist/lib/StringLoader.d.ts.map +1 -0
  58. package/dist/lib/StringLoader.js +290 -0
  59. package/dist/lib/Types.d.ts +432 -0
  60. package/dist/lib/Types.d.ts.map +1 -0
  61. package/dist/lib/Types.js +11 -0
  62. package/dist/lib/Utils.d.ts +223 -0
  63. package/dist/lib/Utils.d.ts.map +1 -0
  64. package/dist/lib/Utils.js +1736 -0
  65. package/dist/lib/heap-data/HeapEdge.d.ts +27 -0
  66. package/dist/lib/heap-data/HeapEdge.d.ts.map +1 -0
  67. package/dist/lib/heap-data/HeapEdge.js +75 -0
  68. package/dist/lib/heap-data/HeapLocation.d.ts +22 -0
  69. package/dist/lib/heap-data/HeapLocation.d.ts.map +1 -0
  70. package/dist/lib/heap-data/HeapLocation.js +40 -0
  71. package/dist/lib/heap-data/HeapNode.d.ts +55 -0
  72. package/dist/lib/heap-data/HeapNode.d.ts.map +1 -0
  73. package/dist/lib/heap-data/HeapNode.js +344 -0
  74. package/dist/lib/heap-data/HeapSnapshot.d.ts +85 -0
  75. package/dist/lib/heap-data/HeapSnapshot.d.ts.map +1 -0
  76. package/dist/lib/heap-data/HeapSnapshot.js +462 -0
  77. package/dist/lib/heap-data/HeapStringNode.d.ts +18 -0
  78. package/dist/lib/heap-data/HeapStringNode.d.ts.map +1 -0
  79. package/dist/lib/heap-data/HeapStringNode.js +43 -0
  80. package/dist/lib/heap-data/HeapUtils.d.ts +17 -0
  81. package/dist/lib/heap-data/HeapUtils.d.ts.map +1 -0
  82. package/dist/lib/heap-data/HeapUtils.js +25 -0
  83. package/dist/logger/LeakClusterLogger.d.ts +40 -0
  84. package/dist/logger/LeakClusterLogger.d.ts.map +1 -0
  85. package/dist/logger/LeakClusterLogger.js +228 -0
  86. package/dist/logger/LeakTraceDetailsLogger.d.ts +19 -0
  87. package/dist/logger/LeakTraceDetailsLogger.d.ts.map +1 -0
  88. package/dist/logger/LeakTraceDetailsLogger.js +50 -0
  89. package/dist/modes/BaseMode.d.ts +30 -0
  90. package/dist/modes/BaseMode.d.ts.map +1 -0
  91. package/dist/modes/BaseMode.js +95 -0
  92. package/dist/modes/InteractionTestMode.d.ts +23 -0
  93. package/dist/modes/InteractionTestMode.d.ts.map +1 -0
  94. package/dist/modes/InteractionTestMode.js +46 -0
  95. package/dist/modes/MeasureMode.d.ts +23 -0
  96. package/dist/modes/MeasureMode.d.ts.map +1 -0
  97. package/dist/modes/MeasureMode.js +58 -0
  98. package/dist/modes/RunningModes.d.ts +15 -0
  99. package/dist/modes/RunningModes.d.ts.map +1 -0
  100. package/dist/modes/RunningModes.js +40 -0
  101. package/dist/paths/TraceFinder.d.ts +31 -0
  102. package/dist/paths/TraceFinder.d.ts.map +1 -0
  103. package/dist/paths/TraceFinder.js +537 -0
  104. package/dist/trace-cluster/ClusterUtils.d.ts +14 -0
  105. package/dist/trace-cluster/ClusterUtils.d.ts.map +1 -0
  106. package/dist/trace-cluster/ClusterUtils.js +17 -0
  107. package/dist/trace-cluster/ClusterUtilsHelper.d.ts +38 -0
  108. package/dist/trace-cluster/ClusterUtilsHelper.d.ts.map +1 -0
  109. package/dist/trace-cluster/ClusterUtilsHelper.js +373 -0
  110. package/dist/trace-cluster/ClusteringHeuristics.d.ts +22 -0
  111. package/dist/trace-cluster/ClusteringHeuristics.d.ts.map +1 -0
  112. package/dist/trace-cluster/ClusteringHeuristics.js +23 -0
  113. package/dist/trace-cluster/EvalutationMetric.d.ts +22 -0
  114. package/dist/trace-cluster/EvalutationMetric.d.ts.map +1 -0
  115. package/dist/trace-cluster/EvalutationMetric.js +158 -0
  116. package/dist/trace-cluster/TraceBucket.d.ts +36 -0
  117. package/dist/trace-cluster/TraceBucket.d.ts.map +1 -0
  118. package/dist/trace-cluster/TraceBucket.js +238 -0
  119. package/dist/trace-cluster/TraceElement.d.ts +71 -0
  120. package/dist/trace-cluster/TraceElement.d.ts.map +1 -0
  121. package/dist/trace-cluster/TraceElement.js +182 -0
  122. package/dist/trace-cluster/strategies/TraceAsClusterStrategy.d.ts +15 -0
  123. package/dist/trace-cluster/strategies/TraceAsClusterStrategy.d.ts.map +1 -0
  124. package/dist/trace-cluster/strategies/TraceAsClusterStrategy.js +37 -0
  125. package/dist/trace-cluster/strategies/TraceSimilarityStrategy.d.ts +15 -0
  126. package/dist/trace-cluster/strategies/TraceSimilarityStrategy.d.ts.map +1 -0
  127. package/dist/trace-cluster/strategies/TraceSimilarityStrategy.js +60 -0
  128. package/package.json +60 -0
  129. package/static/run-meta.json +10 -0
  130. package/static/visit-order.json +27 -0
@@ -0,0 +1,27 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ import type { IHeapEdge } from '../Types';
12
+ import type HeapSnapshot from './HeapSnapshot';
13
+ import HeapNode from './HeapNode';
14
+ export default class HeapEdge implements IHeapEdge {
15
+ private heapSnapshot;
16
+ private idx;
17
+ constructor(heapSnapshot: HeapSnapshot, idx: number);
18
+ get snapshot(): HeapSnapshot;
19
+ get edgeIndex(): number;
20
+ get type(): string;
21
+ get is_index(): boolean;
22
+ get name_or_index(): number | string;
23
+ get to_node(): number;
24
+ get toNode(): HeapNode;
25
+ get fromNode(): HeapNode;
26
+ }
27
+ //# sourceMappingURL=HeapEdge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeapEdge.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapEdge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAElC,MAAM,CAAC,OAAO,OAAO,QAAS,YAAW,SAAS;IACpC,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,GAAG;gBAAvC,YAAY,EAAE,YAAY,EAAU,GAAG,EAAE,MAAM;IAEnE,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,IAAI,IAAI,MAAM,CAQjB;IAKD,IAAI,QAAQ,IAAI,OAAO,CAGtB;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,MAAM,CAYnC;IAED,IAAI,OAAO,IAAI,MAAM,CAWpB;IAED,IAAI,MAAM,IAAI,QAAQ,CAErB;IAED,IAAI,QAAQ,IAAI,QAAQ,CAKvB;CACF"}
@@ -0,0 +1,75 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ 'use strict';
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const HeapUtils_1 = require("./HeapUtils");
17
+ const HeapNode_1 = __importDefault(require("./HeapNode"));
18
+ class HeapEdge {
19
+ constructor(heapSnapshot, idx) {
20
+ this.heapSnapshot = heapSnapshot;
21
+ this.idx = idx;
22
+ }
23
+ get snapshot() {
24
+ return this.heapSnapshot;
25
+ }
26
+ get edgeIndex() {
27
+ return this.idx;
28
+ }
29
+ get type() {
30
+ const heapSnapshot = this.heapSnapshot;
31
+ const edgeValues = heapSnapshot.snapshot.edges;
32
+ const edgeFieldsCount = heapSnapshot._edgeFieldsCount;
33
+ const edgeTypes = heapSnapshot._edgeTypes;
34
+ const typeIdx = edgeValues[this.idx * edgeFieldsCount + heapSnapshot._edgeTypeOffset];
35
+ return edgeTypes[typeIdx];
36
+ }
37
+ // For element and hidden edges, the value in the slot is
38
+ // a numeric index property of the hosting object, rather
39
+ // than a pointer pointing to a string table.
40
+ get is_index() {
41
+ const type = this.type;
42
+ return type === 'element' || type === 'hidden';
43
+ }
44
+ get name_or_index() {
45
+ const heapSnapshot = this.heapSnapshot;
46
+ const edgeValues = heapSnapshot.snapshot.edges;
47
+ const edgeFieldsCount = heapSnapshot._edgeFieldsCount;
48
+ const idx = edgeValues[this.idx * edgeFieldsCount + heapSnapshot._edgeNameOrIndexOffset];
49
+ if (this.is_index) {
50
+ return idx;
51
+ }
52
+ return this.heapSnapshot.snapshot.strings[idx];
53
+ }
54
+ get to_node() {
55
+ const heapSnapshot = this.heapSnapshot;
56
+ const edgeValues = heapSnapshot.snapshot.edges;
57
+ const edgeFieldsCount = heapSnapshot._edgeFieldsCount;
58
+ const toNodeIdx = edgeValues[this.idx * edgeFieldsCount + heapSnapshot._edgeToNodeOffset];
59
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
60
+ if (toNodeIdx % nodeFieldsCount) {
61
+ (0, HeapUtils_1.throwError)(new Error('invalid idx: ' + this.idx));
62
+ }
63
+ return toNodeIdx / nodeFieldsCount;
64
+ }
65
+ get toNode() {
66
+ return new HeapNode_1.default(this.heapSnapshot, this.to_node);
67
+ }
68
+ get fromNode() {
69
+ const heapSnapshot = this.heapSnapshot;
70
+ const edgeIndex2SrcNodeIndex = heapSnapshot._edgeIndex2SrcNodeIndex;
71
+ const srcNodeIdx = edgeIndex2SrcNodeIndex[this.idx];
72
+ return new HeapNode_1.default(heapSnapshot, srcNodeIdx);
73
+ }
74
+ }
75
+ exports.default = HeapEdge;
@@ -0,0 +1,22 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ import type { IHeapLocation } from '../Types';
12
+ import type HeapSnapshot from './HeapSnapshot';
13
+ export default class HeapLocation implements IHeapLocation {
14
+ private heapSnapshot;
15
+ private idx;
16
+ constructor(heapSnapshot: HeapSnapshot, idx: number);
17
+ get snapshot(): HeapSnapshot;
18
+ get script_id(): number;
19
+ get line(): number;
20
+ get column(): number;
21
+ }
22
+ //# sourceMappingURL=HeapLocation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeapLocation.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapLocation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAE/C,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,aAAa;IAC5C,OAAO,CAAC,YAAY;IAAgB,OAAO,CAAC,GAAG;gBAAvC,YAAY,EAAE,YAAY,EAAU,GAAG,EAAE,MAAM;IAEnE,IAAI,QAAQ,IAAI,YAAY,CAE3B;IAED,IAAI,SAAS,IAAI,MAAM,CAOtB;IAED,IAAI,IAAI,IAAI,MAAM,CAOjB;IAED,IAAI,MAAM,IAAI,MAAM,CAOnB;CACF"}
@@ -0,0 +1,40 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ 'use strict';
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ class HeapLocation {
14
+ constructor(heapSnapshot, idx) {
15
+ this.heapSnapshot = heapSnapshot;
16
+ this.idx = idx;
17
+ }
18
+ get snapshot() {
19
+ return this.heapSnapshot;
20
+ }
21
+ get script_id() {
22
+ const heapSnapshot = this.heapSnapshot;
23
+ const locations = heapSnapshot.snapshot.locations;
24
+ const locationFieldsCount = heapSnapshot._locationFieldsCount;
25
+ return locations[this.idx * locationFieldsCount + heapSnapshot._locationScriptIdOffset];
26
+ }
27
+ get line() {
28
+ const heapSnapshot = this.heapSnapshot;
29
+ const locations = heapSnapshot.snapshot.locations;
30
+ const locationFieldsCount = heapSnapshot._locationFieldsCount;
31
+ return locations[this.idx * locationFieldsCount + heapSnapshot._locationLineOffset];
32
+ }
33
+ get column() {
34
+ const heapSnapshot = this.heapSnapshot;
35
+ const locations = heapSnapshot.snapshot.locations;
36
+ const locationFieldsCount = heapSnapshot._locationFieldsCount;
37
+ return locations[this.idx * locationFieldsCount + heapSnapshot._locationColumnOffset];
38
+ }
39
+ }
40
+ exports.default = HeapLocation;
@@ -0,0 +1,55 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ import type { IHeapNode, IHeapEdge, Nullable, EdgeIterationCallback, Predicator, IHeapStringNode } from '../Types';
12
+ import type HeapSnapshot from './HeapSnapshot';
13
+ import HeapEdge from './HeapEdge';
14
+ import HeapLocation from './HeapLocation';
15
+ export default class HeapNode implements IHeapNode {
16
+ private heapSnapshot;
17
+ private idx;
18
+ constructor(heapSnapshot: HeapSnapshot, idx: number);
19
+ get snapshot(): HeapSnapshot;
20
+ get type(): string;
21
+ get name(): string;
22
+ get is_detached(): boolean;
23
+ set detachState(detachState: number);
24
+ markAsDetached(): void;
25
+ get attributes(): number;
26
+ set attributes(attr: number);
27
+ get id(): number;
28
+ get self_size(): number;
29
+ get edge_count(): number;
30
+ get trace_node_id(): number;
31
+ get references(): HeapEdge[];
32
+ forEachReference(callback: EdgeIterationCallback): void;
33
+ findReference(predicate: Predicator<IHeapEdge>): Nullable<IHeapEdge>;
34
+ findAnyReferrer(predicate: Predicator<IHeapEdge>): Nullable<IHeapEdge>;
35
+ findReferrers(predicate: Predicator<IHeapEdge>): IHeapEdge[];
36
+ get referrers(): HeapEdge[];
37
+ forEachReferrer(callback: EdgeIterationCallback): void;
38
+ get pathEdge(): Nullable<HeapEdge>;
39
+ set pathEdge(edge: Nullable<HeapEdge>);
40
+ get nodeIndex(): number;
41
+ get retainedSize(): number;
42
+ set retainedSize(size: number);
43
+ get dominatorNode(): Nullable<HeapNode>;
44
+ set dominatorNode(node: Nullable<HeapNode>);
45
+ get location(): Nullable<HeapLocation>;
46
+ getReference(edgeName: string | number, edgeType?: string): Nullable<IHeapEdge>;
47
+ getReferenceNode(edgeName: string | number, edgeType?: string): Nullable<IHeapNode>;
48
+ getAnyReferrer(edgeName: string | number, edgeType?: string): Nullable<IHeapEdge>;
49
+ getReferrers(edgeName: string | number, edgeType?: string): IHeapEdge[];
50
+ getAnyReferrerNode(edgeName: string | number, edgeType?: string): Nullable<IHeapNode>;
51
+ getReferrerNodes(edgeName: string | number, edgeType?: string): IHeapNode[];
52
+ get isString(): boolean;
53
+ toStringNode(): Nullable<IHeapStringNode>;
54
+ }
55
+ //# sourceMappingURL=HeapNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeapNode.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,344 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ 'use strict';
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ const HeapUtils_1 = require("./HeapUtils");
17
+ const HeapEdge_1 = __importDefault(require("./HeapEdge"));
18
+ const HeapLocation_1 = __importDefault(require("./HeapLocation"));
19
+ class HeapNode {
20
+ constructor(heapSnapshot, idx) {
21
+ this.heapSnapshot = heapSnapshot;
22
+ this.idx = idx;
23
+ }
24
+ get snapshot() {
25
+ return this.heapSnapshot;
26
+ }
27
+ get type() {
28
+ const heapSnapshot = this.heapSnapshot;
29
+ const nodeValues = heapSnapshot.snapshot.nodes;
30
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
31
+ const nodeTypes = heapSnapshot._nodeTypes;
32
+ const typeIdx = nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeTypeOffset];
33
+ return nodeTypes[typeIdx];
34
+ }
35
+ get name() {
36
+ const heapSnapshot = this.heapSnapshot;
37
+ const nodeValues = heapSnapshot.snapshot.nodes;
38
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
39
+ const strIdx = nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeNameOffset];
40
+ const prefix = this.is_detached ? 'Detached ' : '';
41
+ return prefix + heapSnapshot.snapshot.strings[strIdx];
42
+ }
43
+ get is_detached() {
44
+ const heapSnapshot = this.heapSnapshot;
45
+ if (heapSnapshot._nodeDetachednessOffset < 0) {
46
+ return (heapSnapshot._externalDetachedness[this.idx] ===
47
+ HeapUtils_1.NodeDetachState.Detached);
48
+ }
49
+ const nodeValues = heapSnapshot.snapshot.nodes;
50
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
51
+ const detachState = nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeDetachednessOffset];
52
+ return detachState === HeapUtils_1.NodeDetachState.Detached;
53
+ }
54
+ set detachState(detachState) {
55
+ const heapSnapshot = this.heapSnapshot;
56
+ if (heapSnapshot._nodeDetachednessOffset >= 0) {
57
+ const nodeValues = heapSnapshot.snapshot.nodes;
58
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
59
+ nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeDetachednessOffset] = detachState;
60
+ }
61
+ else {
62
+ heapSnapshot._externalDetachedness[this.idx] = detachState;
63
+ }
64
+ }
65
+ markAsDetached() {
66
+ this.detachState = HeapUtils_1.NodeDetachState.Detached;
67
+ }
68
+ get attributes() {
69
+ const heapSnapshot = this.heapSnapshot;
70
+ const nodeAttributes = heapSnapshot._additionalAttributes;
71
+ return nodeAttributes[this.idx];
72
+ }
73
+ set attributes(attr) {
74
+ const heapSnapshot = this.heapSnapshot;
75
+ const nodeAttributes = heapSnapshot._additionalAttributes;
76
+ nodeAttributes[this.idx] = attr;
77
+ }
78
+ get id() {
79
+ const heapSnapshot = this.heapSnapshot;
80
+ const nodeValues = heapSnapshot.snapshot.nodes;
81
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
82
+ const id = nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeIdOffset];
83
+ return id;
84
+ }
85
+ get self_size() {
86
+ const heapSnapshot = this.heapSnapshot;
87
+ const nodeValues = heapSnapshot.snapshot.nodes;
88
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
89
+ return nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeSelfSizeOffset];
90
+ }
91
+ get edge_count() {
92
+ const heapSnapshot = this.heapSnapshot;
93
+ const nodeValues = heapSnapshot.snapshot.nodes;
94
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
95
+ return nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeEdgeCountOffset];
96
+ }
97
+ get trace_node_id() {
98
+ const heapSnapshot = this.heapSnapshot;
99
+ const nodeValues = heapSnapshot.snapshot.nodes;
100
+ const nodeFieldsCount = heapSnapshot._nodeFieldsCount;
101
+ return nodeValues[this.idx * nodeFieldsCount + heapSnapshot._nodeTraceNodeIdOffset];
102
+ }
103
+ get references() {
104
+ const ret = [];
105
+ const heapSnapshot = this.heapSnapshot;
106
+ const edgeFieldsCount = heapSnapshot._edgeFieldsCount;
107
+ const firstEdgePointers = heapSnapshot._firstEdgePointers;
108
+ const beginEdgeIdx = firstEdgePointers[this.idx];
109
+ const endEdgeIdx = firstEdgePointers[this.idx + 1];
110
+ for (let edgeIdx = beginEdgeIdx; edgeIdx < endEdgeIdx; edgeIdx += edgeFieldsCount) {
111
+ ret.push(new HeapEdge_1.default(heapSnapshot, edgeIdx / edgeFieldsCount));
112
+ }
113
+ return ret;
114
+ }
115
+ forEachReference(callback) {
116
+ const heapSnapshot = this.heapSnapshot;
117
+ const edgeFieldsCount = heapSnapshot._edgeFieldsCount;
118
+ const firstEdgePointers = heapSnapshot._firstEdgePointers;
119
+ const beginEdgeIdx = firstEdgePointers[this.idx];
120
+ const endEdgeIdx = firstEdgePointers[this.idx + 1];
121
+ for (let edgeIdx = beginEdgeIdx; edgeIdx < endEdgeIdx; edgeIdx += edgeFieldsCount) {
122
+ const edge = new HeapEdge_1.default(heapSnapshot, edgeIdx / edgeFieldsCount);
123
+ const ret = callback(edge);
124
+ if (ret && ret.stop) {
125
+ break;
126
+ }
127
+ }
128
+ }
129
+ findReference(predicate) {
130
+ let found = null;
131
+ this.forEachReference((edge) => {
132
+ if (predicate(edge)) {
133
+ found = edge;
134
+ return { stop: true };
135
+ }
136
+ });
137
+ return found;
138
+ }
139
+ findAnyReferrer(predicate) {
140
+ let found = null;
141
+ this.forEachReferrer((edge) => {
142
+ if (predicate(edge)) {
143
+ found = edge;
144
+ return { stop: true };
145
+ }
146
+ });
147
+ return found;
148
+ }
149
+ findReferrers(predicate) {
150
+ const ret = [];
151
+ this.forEachReferrer((edge) => {
152
+ if (predicate(edge)) {
153
+ ret.push(edge);
154
+ }
155
+ return null;
156
+ });
157
+ return ret;
158
+ }
159
+ get referrers() {
160
+ const heapSnapshot = this.heapSnapshot;
161
+ const retainingEdgeIndex2EdgeIndex = heapSnapshot._retainingEdgeIndex2EdgeIndex;
162
+ const firstRetainerIndex = heapSnapshot._firstRetainerIndex;
163
+ const ret = [];
164
+ const beginIdx = firstRetainerIndex[this.idx];
165
+ const endIdx = firstRetainerIndex[this.idx + 1];
166
+ for (let idx = beginIdx; idx < endIdx; idx++) {
167
+ const retainingEdgeIdx = retainingEdgeIndex2EdgeIndex[idx];
168
+ ret.push(new HeapEdge_1.default(heapSnapshot, retainingEdgeIdx));
169
+ }
170
+ return ret;
171
+ }
172
+ forEachReferrer(callback) {
173
+ const heapSnapshot = this.heapSnapshot;
174
+ const retainingEdgeIndex2EdgeIndex = heapSnapshot._retainingEdgeIndex2EdgeIndex;
175
+ const firstRetainerIndex = heapSnapshot._firstRetainerIndex;
176
+ const beginIdx = firstRetainerIndex[this.idx];
177
+ const endIdx = firstRetainerIndex[this.idx + 1];
178
+ for (let idx = beginIdx; idx < endIdx; idx++) {
179
+ const retainingEdgeIdx = retainingEdgeIndex2EdgeIndex[idx];
180
+ const edge = new HeapEdge_1.default(heapSnapshot, retainingEdgeIdx);
181
+ const ret = callback(edge);
182
+ if (ret && ret.stop) {
183
+ break;
184
+ }
185
+ }
186
+ }
187
+ get pathEdge() {
188
+ const heapSnapshot = this.heapSnapshot;
189
+ if (heapSnapshot._nodeIdxHasPathEdge[this.idx] === 0) {
190
+ return null;
191
+ }
192
+ if (this.idx >= heapSnapshot._nodeIdx2PathEdgeIdx.length) {
193
+ (0, HeapUtils_1.throwError)(new Error('invalid idx: ' + this.idx));
194
+ }
195
+ const edgeIdx = heapSnapshot._nodeIdx2PathEdgeIdx[this.idx];
196
+ return new HeapEdge_1.default(heapSnapshot, edgeIdx);
197
+ }
198
+ set pathEdge(edge) {
199
+ const heapSnapshot = this.heapSnapshot;
200
+ if (!edge) {
201
+ heapSnapshot._nodeIdxHasPathEdge[this.idx] = 0;
202
+ return;
203
+ }
204
+ const edgeIdx = edge.edgeIndex;
205
+ if (this.idx >= heapSnapshot._nodeIdx2PathEdgeIdx.length) {
206
+ (0, HeapUtils_1.throwError)(new Error('invalid idx: ' + this.idx));
207
+ }
208
+ heapSnapshot._nodeIdx2PathEdgeIdx[this.idx] = edgeIdx;
209
+ heapSnapshot._nodeIdxHasPathEdge[this.idx] = 1;
210
+ }
211
+ get nodeIndex() {
212
+ return this.idx;
213
+ }
214
+ get retainedSize() {
215
+ return this.heapSnapshot._nodeIdx2RetainedSize[this.idx];
216
+ }
217
+ set retainedSize(size) {
218
+ const heapSnapshot = this.heapSnapshot;
219
+ heapSnapshot._nodeIdx2RetainedSize[this.idx] = size;
220
+ }
221
+ get dominatorNode() {
222
+ const heapSnapshot = this.heapSnapshot;
223
+ const nodeIdx2DominatorNodeIdx = heapSnapshot._nodeIdx2DominatorNodeIdx;
224
+ if (this.idx >= nodeIdx2DominatorNodeIdx.length) {
225
+ (0, HeapUtils_1.throwError)(new Error('invalid idx: ' + this.idx));
226
+ }
227
+ if (heapSnapshot._nodeIdxHasDominatorNode[this.idx] === 0) {
228
+ return null;
229
+ }
230
+ const dominatorNodeIdx = nodeIdx2DominatorNodeIdx[this.idx];
231
+ return new HeapNode(heapSnapshot, dominatorNodeIdx);
232
+ }
233
+ set dominatorNode(node) {
234
+ const heapSnapshot = this.heapSnapshot;
235
+ if (!node) {
236
+ heapSnapshot._nodeIdxHasDominatorNode[this.idx] = 0;
237
+ return;
238
+ }
239
+ const nodeIdx2DominatorNodeIdx = heapSnapshot._nodeIdx2DominatorNodeIdx;
240
+ const dominatorNodeIdx = node.nodeIndex;
241
+ if (this.idx >= nodeIdx2DominatorNodeIdx.length ||
242
+ dominatorNodeIdx >= nodeIdx2DominatorNodeIdx.length) {
243
+ (0, HeapUtils_1.throwError)(new Error('invalid idx: ' + this.idx));
244
+ }
245
+ nodeIdx2DominatorNodeIdx[this.idx] = dominatorNodeIdx;
246
+ heapSnapshot._nodeIdxHasDominatorNode[this.idx] = 1;
247
+ }
248
+ get location() {
249
+ const heapSnapshot = this.heapSnapshot;
250
+ const locationIdx = heapSnapshot._nodeIdx2LocationIdx[this.idx];
251
+ if (locationIdx === undefined) {
252
+ return null;
253
+ }
254
+ return new HeapLocation_1.default(heapSnapshot, locationIdx);
255
+ }
256
+ // search reference by edge name and edge type
257
+ getReference(edgeName, edgeType) {
258
+ let ret = null;
259
+ this.forEachReference((edge) => {
260
+ if (edge.name_or_index !== edgeName) {
261
+ return;
262
+ }
263
+ if (edgeType != null && edge.type !== edgeType) {
264
+ return;
265
+ }
266
+ ret = edge;
267
+ return { stop: true };
268
+ });
269
+ return ret;
270
+ }
271
+ // search referenced node by edge name and edge type
272
+ getReferenceNode(edgeName, edgeType) {
273
+ const edge = this.getReference(edgeName, edgeType);
274
+ return edge && edge.toNode;
275
+ }
276
+ // search any referrer edge by edge name and edge type
277
+ getAnyReferrer(edgeName, edgeType) {
278
+ let ret = null;
279
+ this.forEachReferrer((edge) => {
280
+ if (edge.name_or_index !== edgeName) {
281
+ return;
282
+ }
283
+ if (edgeType != null && edge.type !== edgeType) {
284
+ return;
285
+ }
286
+ ret = edge;
287
+ return { stop: true };
288
+ });
289
+ return ret;
290
+ }
291
+ // search all referrer edges by edge name and edge type
292
+ getReferrers(edgeName, edgeType) {
293
+ return this.findReferrers((edge) => {
294
+ if (edge.name_or_index !== edgeName) {
295
+ return false;
296
+ }
297
+ if (edgeType != null && edge.type !== edgeType) {
298
+ return false;
299
+ }
300
+ return true;
301
+ });
302
+ }
303
+ // search any referrer node by edge name and edge type
304
+ getAnyReferrerNode(edgeName, edgeType) {
305
+ const edge = this.getAnyReferrer(edgeName, edgeType);
306
+ return edge && edge.fromNode;
307
+ }
308
+ // search all referrer nodes by edge name and edge type
309
+ getReferrerNodes(edgeName, edgeType) {
310
+ const ret = [];
311
+ const idSet = new Set();
312
+ this.forEachReferrer((edge) => {
313
+ if (edge.name_or_index !== edgeName) {
314
+ return;
315
+ }
316
+ if (edgeType != null && edge.type !== edgeType) {
317
+ return;
318
+ }
319
+ const fromNode = edge.fromNode;
320
+ if (idSet.has(fromNode.id)) {
321
+ return;
322
+ }
323
+ idSet.add(fromNode.id);
324
+ ret.push(fromNode);
325
+ return null;
326
+ });
327
+ return ret;
328
+ }
329
+ get isString() {
330
+ const type = this.type;
331
+ return (type === 'string' ||
332
+ type === 'sliced string' ||
333
+ type === 'concatenated string');
334
+ }
335
+ toStringNode() {
336
+ return this.isString
337
+ ? new HeapStringNode_1.default(this.heapSnapshot, this.idx)
338
+ : null;
339
+ }
340
+ }
341
+ exports.default = HeapNode;
342
+ // HeapStringNode has to be imported after exporting HeapNode
343
+ // since HeapStringNode imports and extends HeapNode
344
+ const HeapStringNode_1 = __importDefault(require("./HeapStringNode"));
@@ -0,0 +1,85 @@
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
+ * @emails oncall+ws_labs
8
+ * @lightSyntaxTransform
9
+ * @format
10
+ */
11
+ import type { IHeapNode, IHeapNodes, IHeapEdges, IHeapSnapshot, HeapNodeTypes, HeapEdgeTypes, HeapSnapshotMeta, RawHeapSnapshot, NumericDictionary, Nullable } from '../Types';
12
+ import HeapNode from './HeapNode';
13
+ export default class HeapSnapshot implements IHeapSnapshot {
14
+ snapshot: RawHeapSnapshot;
15
+ nodes: IHeapNodes;
16
+ _nodeCount: number;
17
+ edges: IHeapEdges;
18
+ _edgeCount: number;
19
+ _nodeId2NodeIdx: NumericDictionary;
20
+ _nodeIdxHasPathEdge: Uint8Array;
21
+ _nodeIdx2PathEdgeIdx: Uint32Array;
22
+ _nodeIdx2DominatorNodeIdx: Uint32Array;
23
+ _nodeIdxHasDominatorNode: Uint8Array;
24
+ _nodeIdx2RetainedSize: NumericDictionary;
25
+ _additionalAttributes: Uint8Array;
26
+ _nodeDetachednessOffset: number;
27
+ _externalDetachedness: Uint8Array;
28
+ _nodeIdx2LocationIdx: NumericDictionary;
29
+ _locationFieldsCount: number;
30
+ _locationCount: number;
31
+ _locationObjectIndexOffset: number;
32
+ _nodeFieldsCount: number;
33
+ _nodeIdOffset: number;
34
+ forwardEdges: number[];
35
+ _metaNode: HeapSnapshotMeta;
36
+ _nodeTypeOffset: number;
37
+ _nodeNameOffset: number;
38
+ _nodeSelfSizeOffset: number;
39
+ _nodeEdgeCountOffset: number;
40
+ _nodeTraceNodeIdOffset: number;
41
+ _nodeTypes: HeapNodeTypes;
42
+ _nodeArrayType: number;
43
+ _nodeHiddenType: number;
44
+ _nodeObjectType: number;
45
+ _nodeNativeType: number;
46
+ _nodeConsStringType: number;
47
+ _nodeSlicedStringType: number;
48
+ _nodeCodeType: number;
49
+ _nodeSyntheticType: number;
50
+ _edgeFieldsCount: number;
51
+ _edgeTypeOffset: number;
52
+ _edgeNameOrIndexOffset: number;
53
+ _edgeToNodeOffset: number;
54
+ _edgeTypes: HeapEdgeTypes;
55
+ _edgeElementType: number;
56
+ _edgeHiddenType: number;
57
+ _edgeInternalType: number;
58
+ _edgeShortcutType: number;
59
+ _edgeWeakType: number;
60
+ _edgeInvisibleType: number;
61
+ _locationScriptIdOffset: number;
62
+ _locationLineOffset: number;
63
+ _locationColumnOffset: number;
64
+ _firstEdgePointers: Uint32Array;
65
+ _retainingEdgeIndex2EdgeIndex: Uint32Array;
66
+ _firstRetainerIndex: Uint32Array;
67
+ _edgeIndex2SrcNodeIndex: Uint32Array;
68
+ constructor(snapshot: RawHeapSnapshot, _options?: Record<string, never>);
69
+ hasObjectWithClassName(className: string): boolean;
70
+ getAnyObjectWithClassName(className: string): Nullable<IHeapNode>;
71
+ hasObjectWithPropertyName(nameOrIndex: string | number): boolean;
72
+ hasObjectWithTag(tag: string): boolean;
73
+ getNodeById(id: number): Nullable<HeapNode>;
74
+ clearShortestPathInfo(): void;
75
+ _buildMetaData(): void;
76
+ _buildExtraMetaData(): void;
77
+ _buildLocationIdx(): void;
78
+ _buildNodeIdx(): void;
79
+ _calculateBasicInfo(): void;
80
+ _buildReferencesIndex(): void;
81
+ _buildReferrersIndex(): void;
82
+ _iterateDirectChildren(nodeIndex: number, edgeFilterCallback: (edgeType: number) => boolean, childCallback: (nodeIndex: number) => void): void;
83
+ _propagateDetachednessState(): void;
84
+ }
85
+ //# sourceMappingURL=HeapSnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeapSnapshot.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapSnapshot.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EAEV,UAAU,EACV,aAAa,EACb,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,QAAQ,EACT,MAAM,UAAU,CAAC;AAIlB,OAAO,QAAQ,MAAM,YAAY,CAAC;AAOlC,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,aAAa;IACjD,QAAQ,EAAE,eAAe,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,SAAM;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,SAAM;IAChB,eAAe,EAAE,iBAAiB,CAAM;IACxC,mBAAmB,EAAE,UAAU,CAAqB;IACpD,oBAAoB,EAAE,WAAW,CAAsB;IACvD,yBAAyB,EAAE,WAAW,CAAsB;IAC5D,wBAAwB,EAAE,UAAU,CAAqB;IACzD,qBAAqB,EAAE,iBAAiB,CAAM;IAC9C,qBAAqB,EAAE,UAAU,CAAqB;IACtD,uBAAuB,SAAM;IAC7B,qBAAqB,EAAE,UAAU,CAAqB;IACtD,oBAAoB,EAAE,iBAAiB,CAAM;IAC7C,oBAAoB,SAAM;IAC1B,cAAc,SAAM;IACpB,0BAA0B,SAAM;IAChC,gBAAgB,SAAM;IACtB,aAAa,SAAM;IACnB,YAAY,EAAE,MAAM,EAAE,CAAM;IAC5B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,eAAe,SAAM;IACrB,eAAe,SAAM;IACrB,mBAAmB,SAAM;IACzB,oBAAoB,SAAM;IAC1B,sBAAsB,SAAM;IAC5B,UAAU,EAAE,aAAa,CAAM;IAC/B,cAAc,SAAM;IACpB,eAAe,SAAM;IACrB,eAAe,SAAM;IACrB,eAAe,SAAM;IACrB,mBAAmB,SAAM;IACzB,qBAAqB,SAAM;IAC3B,aAAa,SAAM;IACnB,kBAAkB,SAAM;IAExB,gBAAgB,SAAM;IACtB,eAAe,SAAM;IACrB,sBAAsB,SAAM;IAC5B,iBAAiB,SAAM;IAEvB,UAAU,EAAE,aAAa,CAAM;IAC/B,gBAAgB,SAAM;IACtB,eAAe,SAAM;IACrB,iBAAiB,SAAM;IACvB,iBAAiB,SAAM;IACvB,aAAa,SAAM;IACnB,kBAAkB,SAAM;IAExB,uBAAuB,SAAM;IAC7B,mBAAmB,SAAM;IACzB,qBAAqB,SAAM;IAC3B,kBAAkB,EAAE,WAAW,CAAsB;IACrD,6BAA6B,EAAE,WAAW,CAAsB;IAChE,mBAAmB,EAAE,WAAW,CAAsB;IACtD,uBAAuB,EAAE,WAAW,CAAsB;gBAGrD,QAAQ,EAAE,eAAe,EAAE,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM;IAoD3E,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAWlD,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC;IAWjE,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO;IAWhE,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAyCtC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;IAQ3C,qBAAqB,IAAI,IAAI;IAI7B,cAAc,IAAI,IAAI;IAUtB,mBAAmB,IAAI,IAAI;IAkB3B,iBAAiB,IAAI,IAAI;IAiBzB,aAAa,IAAI,IAAI;IAcrB,mBAAmB,IAAI,IAAI;IA0D3B,qBAAqB,IAAI,IAAI;IAqB7B,oBAAoB,IAAI,IAAI;IAwE5B,sBAAsB,CACpB,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,EACjD,aAAa,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,GACzC,IAAI;IAsBP,2BAA2B,IAAI,IAAI;CAmGpC"}