@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.
- package/README.md +11 -0
- package/dist/__tests__/parser/HeapParser.test.d.ts +11 -0
- package/dist/__tests__/parser/HeapParser.test.d.ts.map +1 -0
- package/dist/__tests__/parser/HeapParser.test.js +54 -0
- package/dist/__tests__/parser/NodeHeap.test.d.ts +11 -0
- package/dist/__tests__/parser/NodeHeap.test.d.ts.map +1 -0
- package/dist/__tests__/parser/NodeHeap.test.js +96 -0
- package/dist/__tests__/parser/StringNode.test.d.ts +11 -0
- package/dist/__tests__/parser/StringNode.test.d.ts.map +1 -0
- package/dist/__tests__/parser/StringNode.test.js +61 -0
- package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.d.ts +16 -0
- package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.d.ts.map +1 -0
- package/dist/__tests__/parser/traverse/HeapNodeTraverse.test.js +140 -0
- package/dist/__tests__/utils/utils.test.d.ts +11 -0
- package/dist/__tests__/utils/utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils/utils.test.js +81 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +62 -0
- package/dist/lib/BaseOption.d.ts +31 -0
- package/dist/lib/BaseOption.d.ts.map +1 -0
- package/dist/lib/BaseOption.js +109 -0
- package/dist/lib/BrowserInfo.d.ts +33 -0
- package/dist/lib/BrowserInfo.d.ts.map +1 -0
- package/dist/lib/BrowserInfo.js +117 -0
- package/dist/lib/Config.d.ts +203 -0
- package/dist/lib/Config.d.ts.map +1 -0
- package/dist/lib/Config.js +427 -0
- package/dist/lib/Console.d.ts +67 -0
- package/dist/lib/Console.d.ts.map +1 -0
- package/dist/lib/Console.js +344 -0
- package/dist/lib/Constant.d.ts +38 -0
- package/dist/lib/Constant.d.ts.map +1 -0
- package/dist/lib/Constant.js +58 -0
- package/dist/lib/FileManager.d.ts +69 -0
- package/dist/lib/FileManager.d.ts.map +1 -0
- package/dist/lib/FileManager.js +309 -0
- package/dist/lib/HeapAnalyzer.d.ts +51 -0
- package/dist/lib/HeapAnalyzer.d.ts.map +1 -0
- package/dist/lib/HeapAnalyzer.js +719 -0
- package/dist/lib/HeapParser.d.ts +19 -0
- package/dist/lib/HeapParser.d.ts.map +1 -0
- package/dist/lib/HeapParser.js +128 -0
- package/dist/lib/InternalValueSetter.d.ts +14 -0
- package/dist/lib/InternalValueSetter.d.ts.map +1 -0
- package/dist/lib/InternalValueSetter.js +43 -0
- package/dist/lib/NodeHeap.d.ts +16 -0
- package/dist/lib/NodeHeap.d.ts.map +1 -0
- package/dist/lib/NodeHeap.js +62 -0
- package/dist/lib/ProcessManager.d.ts +25 -0
- package/dist/lib/ProcessManager.d.ts.map +1 -0
- package/dist/lib/ProcessManager.js +67 -0
- package/dist/lib/Serializer.d.ts +49 -0
- package/dist/lib/Serializer.d.ts.map +1 -0
- package/dist/lib/Serializer.js +702 -0
- package/dist/lib/StringLoader.d.ts +26 -0
- package/dist/lib/StringLoader.d.ts.map +1 -0
- package/dist/lib/StringLoader.js +290 -0
- package/dist/lib/Types.d.ts +432 -0
- package/dist/lib/Types.d.ts.map +1 -0
- package/dist/lib/Types.js +11 -0
- package/dist/lib/Utils.d.ts +223 -0
- package/dist/lib/Utils.d.ts.map +1 -0
- package/dist/lib/Utils.js +1736 -0
- package/dist/lib/heap-data/HeapEdge.d.ts +27 -0
- package/dist/lib/heap-data/HeapEdge.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapEdge.js +75 -0
- package/dist/lib/heap-data/HeapLocation.d.ts +22 -0
- package/dist/lib/heap-data/HeapLocation.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapLocation.js +40 -0
- package/dist/lib/heap-data/HeapNode.d.ts +55 -0
- package/dist/lib/heap-data/HeapNode.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapNode.js +344 -0
- package/dist/lib/heap-data/HeapSnapshot.d.ts +85 -0
- package/dist/lib/heap-data/HeapSnapshot.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapSnapshot.js +462 -0
- package/dist/lib/heap-data/HeapStringNode.d.ts +18 -0
- package/dist/lib/heap-data/HeapStringNode.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapStringNode.js +43 -0
- package/dist/lib/heap-data/HeapUtils.d.ts +17 -0
- package/dist/lib/heap-data/HeapUtils.d.ts.map +1 -0
- package/dist/lib/heap-data/HeapUtils.js +25 -0
- package/dist/logger/LeakClusterLogger.d.ts +40 -0
- package/dist/logger/LeakClusterLogger.d.ts.map +1 -0
- package/dist/logger/LeakClusterLogger.js +228 -0
- package/dist/logger/LeakTraceDetailsLogger.d.ts +19 -0
- package/dist/logger/LeakTraceDetailsLogger.d.ts.map +1 -0
- package/dist/logger/LeakTraceDetailsLogger.js +50 -0
- package/dist/modes/BaseMode.d.ts +30 -0
- package/dist/modes/BaseMode.d.ts.map +1 -0
- package/dist/modes/BaseMode.js +95 -0
- package/dist/modes/InteractionTestMode.d.ts +23 -0
- package/dist/modes/InteractionTestMode.d.ts.map +1 -0
- package/dist/modes/InteractionTestMode.js +46 -0
- package/dist/modes/MeasureMode.d.ts +23 -0
- package/dist/modes/MeasureMode.d.ts.map +1 -0
- package/dist/modes/MeasureMode.js +58 -0
- package/dist/modes/RunningModes.d.ts +15 -0
- package/dist/modes/RunningModes.d.ts.map +1 -0
- package/dist/modes/RunningModes.js +40 -0
- package/dist/paths/TraceFinder.d.ts +31 -0
- package/dist/paths/TraceFinder.d.ts.map +1 -0
- package/dist/paths/TraceFinder.js +537 -0
- package/dist/trace-cluster/ClusterUtils.d.ts +14 -0
- package/dist/trace-cluster/ClusterUtils.d.ts.map +1 -0
- package/dist/trace-cluster/ClusterUtils.js +17 -0
- package/dist/trace-cluster/ClusterUtilsHelper.d.ts +38 -0
- package/dist/trace-cluster/ClusterUtilsHelper.d.ts.map +1 -0
- package/dist/trace-cluster/ClusterUtilsHelper.js +373 -0
- package/dist/trace-cluster/ClusteringHeuristics.d.ts +22 -0
- package/dist/trace-cluster/ClusteringHeuristics.d.ts.map +1 -0
- package/dist/trace-cluster/ClusteringHeuristics.js +23 -0
- package/dist/trace-cluster/EvalutationMetric.d.ts +22 -0
- package/dist/trace-cluster/EvalutationMetric.d.ts.map +1 -0
- package/dist/trace-cluster/EvalutationMetric.js +158 -0
- package/dist/trace-cluster/TraceBucket.d.ts +36 -0
- package/dist/trace-cluster/TraceBucket.d.ts.map +1 -0
- package/dist/trace-cluster/TraceBucket.js +238 -0
- package/dist/trace-cluster/TraceElement.d.ts +71 -0
- package/dist/trace-cluster/TraceElement.d.ts.map +1 -0
- package/dist/trace-cluster/TraceElement.js +182 -0
- package/dist/trace-cluster/strategies/TraceAsClusterStrategy.d.ts +15 -0
- package/dist/trace-cluster/strategies/TraceAsClusterStrategy.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/TraceAsClusterStrategy.js +37 -0
- package/dist/trace-cluster/strategies/TraceSimilarityStrategy.d.ts +15 -0
- package/dist/trace-cluster/strategies/TraceSimilarityStrategy.d.ts.map +1 -0
- package/dist/trace-cluster/strategies/TraceSimilarityStrategy.js +60 -0
- package/package.json +60 -0
- package/static/run-meta.json +10 -0
- package/static/visit-order.json +27 -0
|
@@ -0,0 +1,462 @@
|
|
|
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 Config_1 = __importDefault(require("../Config"));
|
|
17
|
+
const Console_1 = __importDefault(require("../Console"));
|
|
18
|
+
const HeapNode_1 = __importDefault(require("./HeapNode"));
|
|
19
|
+
const HeapEdge_1 = __importDefault(require("./HeapEdge"));
|
|
20
|
+
const HeapUtils_1 = require("./HeapUtils");
|
|
21
|
+
const EMPTY_UINT8_ARRAY = new Uint8Array(0);
|
|
22
|
+
const EMPTY_UINT32_ARRAY = new Uint32Array(0);
|
|
23
|
+
class HeapSnapshot {
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
+
constructor(snapshot, _options = {}) {
|
|
26
|
+
this._nodeCount = -1;
|
|
27
|
+
this._edgeCount = -1;
|
|
28
|
+
this._nodeId2NodeIdx = {};
|
|
29
|
+
this._nodeIdxHasPathEdge = EMPTY_UINT8_ARRAY;
|
|
30
|
+
this._nodeIdx2PathEdgeIdx = EMPTY_UINT32_ARRAY;
|
|
31
|
+
this._nodeIdx2DominatorNodeIdx = EMPTY_UINT32_ARRAY;
|
|
32
|
+
this._nodeIdxHasDominatorNode = EMPTY_UINT8_ARRAY;
|
|
33
|
+
this._nodeIdx2RetainedSize = {};
|
|
34
|
+
this._additionalAttributes = EMPTY_UINT8_ARRAY;
|
|
35
|
+
this._nodeDetachednessOffset = -1;
|
|
36
|
+
this._externalDetachedness = EMPTY_UINT8_ARRAY;
|
|
37
|
+
this._nodeIdx2LocationIdx = {};
|
|
38
|
+
this._locationFieldsCount = -1;
|
|
39
|
+
this._locationCount = -1;
|
|
40
|
+
this._locationObjectIndexOffset = -1;
|
|
41
|
+
this._nodeFieldsCount = -1;
|
|
42
|
+
this._nodeIdOffset = -1;
|
|
43
|
+
this.forwardEdges = [];
|
|
44
|
+
this._nodeTypeOffset = -1;
|
|
45
|
+
this._nodeNameOffset = -1;
|
|
46
|
+
this._nodeSelfSizeOffset = -1;
|
|
47
|
+
this._nodeEdgeCountOffset = -1;
|
|
48
|
+
this._nodeTraceNodeIdOffset = -1;
|
|
49
|
+
this._nodeTypes = [];
|
|
50
|
+
this._nodeArrayType = -1;
|
|
51
|
+
this._nodeHiddenType = -1;
|
|
52
|
+
this._nodeObjectType = -1;
|
|
53
|
+
this._nodeNativeType = -1;
|
|
54
|
+
this._nodeConsStringType = -1;
|
|
55
|
+
this._nodeSlicedStringType = -1;
|
|
56
|
+
this._nodeCodeType = -1;
|
|
57
|
+
this._nodeSyntheticType = -1;
|
|
58
|
+
this._edgeFieldsCount = -1;
|
|
59
|
+
this._edgeTypeOffset = -1;
|
|
60
|
+
this._edgeNameOrIndexOffset = -1;
|
|
61
|
+
this._edgeToNodeOffset = -1;
|
|
62
|
+
this._edgeTypes = [];
|
|
63
|
+
this._edgeElementType = -1;
|
|
64
|
+
this._edgeHiddenType = -1;
|
|
65
|
+
this._edgeInternalType = -1;
|
|
66
|
+
this._edgeShortcutType = -1;
|
|
67
|
+
this._edgeWeakType = -1;
|
|
68
|
+
this._edgeInvisibleType = -1;
|
|
69
|
+
this._locationScriptIdOffset = -1;
|
|
70
|
+
this._locationLineOffset = -1;
|
|
71
|
+
this._locationColumnOffset = -1;
|
|
72
|
+
this._firstEdgePointers = EMPTY_UINT32_ARRAY;
|
|
73
|
+
this._retainingEdgeIndex2EdgeIndex = EMPTY_UINT32_ARRAY;
|
|
74
|
+
this._firstRetainerIndex = EMPTY_UINT32_ARRAY;
|
|
75
|
+
this._edgeIndex2SrcNodeIndex = EMPTY_UINT32_ARRAY;
|
|
76
|
+
this.snapshot = snapshot;
|
|
77
|
+
this._metaNode = snapshot.snapshot.meta;
|
|
78
|
+
this._buildMetaData();
|
|
79
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
80
|
+
const self = this;
|
|
81
|
+
// virtual nodes
|
|
82
|
+
this.nodes = {
|
|
83
|
+
length: self._nodeCount,
|
|
84
|
+
get(idx) {
|
|
85
|
+
return new HeapNode_1.default(self, idx);
|
|
86
|
+
},
|
|
87
|
+
forEach(cb) {
|
|
88
|
+
for (let i = 0; i < this.length; i++) {
|
|
89
|
+
const ret = cb(this.get(i), i);
|
|
90
|
+
if (ret === false) {
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
forEachTraceable(cb) {
|
|
96
|
+
for (let i = 0; i < this.length; i++) {
|
|
97
|
+
const node = this.get(i);
|
|
98
|
+
if (!node.pathEdge) {
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
const ret = cb(node, i);
|
|
102
|
+
if (ret === false) {
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
// virtual edges
|
|
109
|
+
this.edges = {
|
|
110
|
+
length: self._edgeCount,
|
|
111
|
+
get(idx) {
|
|
112
|
+
return new HeapEdge_1.default(self, idx);
|
|
113
|
+
},
|
|
114
|
+
forEach(cb) {
|
|
115
|
+
for (let i = 0; i < this.length; i++) {
|
|
116
|
+
const ret = cb(this.get(i), i);
|
|
117
|
+
if (ret === false) {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
hasObjectWithClassName(className) {
|
|
125
|
+
let detected = false;
|
|
126
|
+
this.nodes.forEach((node) => {
|
|
127
|
+
if (node.name === className && node.type === 'object') {
|
|
128
|
+
detected = true;
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
return detected;
|
|
133
|
+
}
|
|
134
|
+
getAnyObjectWithClassName(className) {
|
|
135
|
+
let ret = null;
|
|
136
|
+
this.nodes.forEach((node) => {
|
|
137
|
+
if (node.name === className && node.type === 'object') {
|
|
138
|
+
ret = node;
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return ret;
|
|
143
|
+
}
|
|
144
|
+
hasObjectWithPropertyName(nameOrIndex) {
|
|
145
|
+
let detected = false;
|
|
146
|
+
this.edges.forEach((edge) => {
|
|
147
|
+
if (edge.name_or_index === nameOrIndex && edge.type === 'property') {
|
|
148
|
+
detected = true;
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
});
|
|
152
|
+
return detected;
|
|
153
|
+
}
|
|
154
|
+
hasObjectWithTag(tag) {
|
|
155
|
+
// get tagStore
|
|
156
|
+
let tagStore = null;
|
|
157
|
+
this.nodes.forEach((node) => {
|
|
158
|
+
if (node.name === 'MemLabTaggedStore' && node.type === 'object') {
|
|
159
|
+
tagStore = node;
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
if (tagStore == null) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const store = tagStore;
|
|
167
|
+
// get tagStore.taggedObjects
|
|
168
|
+
const taggedObjects = store.getReferenceNode('taggedObjects', 'property');
|
|
169
|
+
if (taggedObjects == null) {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
// get taggedObjects[tag]
|
|
173
|
+
const weakSet = taggedObjects.getReferenceNode(tag, 'property');
|
|
174
|
+
if (weakSet == null) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
// get weakSet.table
|
|
178
|
+
const table = weakSet.getReferenceNode('table');
|
|
179
|
+
if (table == null) {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
// check if the table has any weak reference to any object
|
|
183
|
+
const ref = table.findReference((edge) => edge.type === 'weak' && edge.toNode.name !== 'system / Oddball');
|
|
184
|
+
return ref != null;
|
|
185
|
+
}
|
|
186
|
+
getNodeById(id) {
|
|
187
|
+
if (!(id in this._nodeId2NodeIdx)) {
|
|
188
|
+
return null;
|
|
189
|
+
}
|
|
190
|
+
const idx = this._nodeId2NodeIdx[id];
|
|
191
|
+
return new HeapNode_1.default(this, idx);
|
|
192
|
+
}
|
|
193
|
+
clearShortestPathInfo() {
|
|
194
|
+
this._nodeIdxHasPathEdge = new Uint8Array(this._nodeCount);
|
|
195
|
+
}
|
|
196
|
+
_buildMetaData() {
|
|
197
|
+
this._calculateBasicInfo();
|
|
198
|
+
this._buildReferencesIndex();
|
|
199
|
+
this._buildReferrersIndex();
|
|
200
|
+
this._propagateDetachednessState();
|
|
201
|
+
this._buildNodeIdx();
|
|
202
|
+
this._buildLocationIdx();
|
|
203
|
+
this._buildExtraMetaData();
|
|
204
|
+
}
|
|
205
|
+
_buildExtraMetaData() {
|
|
206
|
+
Console_1.default.overwrite('building extra meta info...');
|
|
207
|
+
// maps node index to the edge index (from edge) of its shortest path to GC root
|
|
208
|
+
this._nodeIdx2PathEdgeIdx = new Uint32Array(this._nodeCount);
|
|
209
|
+
this._nodeIdxHasPathEdge = new Uint8Array(this._nodeCount);
|
|
210
|
+
// dominator node info
|
|
211
|
+
this._nodeIdx2DominatorNodeIdx = new Uint32Array(this._nodeCount);
|
|
212
|
+
this._nodeIdxHasDominatorNode = new Uint8Array(this._nodeCount);
|
|
213
|
+
// retained size info
|
|
214
|
+
this._nodeIdx2RetainedSize = Object.create(null);
|
|
215
|
+
// additional attributes
|
|
216
|
+
this._additionalAttributes = new Uint8Array(this._nodeCount);
|
|
217
|
+
// additional detachedness info
|
|
218
|
+
if (this._nodeDetachednessOffset < 0) {
|
|
219
|
+
this._externalDetachedness = new Uint8Array(this._nodeCount);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
_buildLocationIdx() {
|
|
223
|
+
Console_1.default.overwrite('building location index...');
|
|
224
|
+
this._nodeIdx2LocationIdx = Object.create(null);
|
|
225
|
+
// iterate over locations
|
|
226
|
+
const locations = this.snapshot.locations;
|
|
227
|
+
const locationFieldsCount = this._locationFieldsCount;
|
|
228
|
+
let locationIdx = 0;
|
|
229
|
+
while (locationIdx < this._locationCount) {
|
|
230
|
+
const id = locations[locationIdx * locationFieldsCount + this._locationObjectIndexOffset];
|
|
231
|
+
this._nodeIdx2LocationIdx[id] = locationIdx;
|
|
232
|
+
++locationIdx;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
_buildNodeIdx() {
|
|
236
|
+
Console_1.default.overwrite('building node index...');
|
|
237
|
+
this._nodeId2NodeIdx = Object.create(null);
|
|
238
|
+
// iterate over each node
|
|
239
|
+
const nodeValues = this.snapshot.nodes;
|
|
240
|
+
const nodeFieldsCount = this._nodeFieldsCount;
|
|
241
|
+
let nodeIdx = 0;
|
|
242
|
+
while (nodeIdx < this._nodeCount) {
|
|
243
|
+
const id = nodeValues[nodeIdx * nodeFieldsCount + this._nodeIdOffset];
|
|
244
|
+
this._nodeId2NodeIdx[id] = nodeIdx;
|
|
245
|
+
++nodeIdx;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
_calculateBasicInfo() {
|
|
249
|
+
Console_1.default.overwrite('calculating basic meta info...');
|
|
250
|
+
this.forwardEdges = this.snapshot.edges;
|
|
251
|
+
const meta = this._metaNode;
|
|
252
|
+
const nodeFields = meta.node_fields;
|
|
253
|
+
this._nodeTypeOffset = nodeFields.indexOf('type');
|
|
254
|
+
this._nodeNameOffset = nodeFields.indexOf('name');
|
|
255
|
+
this._nodeIdOffset = nodeFields.indexOf('id');
|
|
256
|
+
this._nodeSelfSizeOffset = nodeFields.indexOf('self_size');
|
|
257
|
+
this._nodeEdgeCountOffset = nodeFields.indexOf('edge_count');
|
|
258
|
+
this._nodeTraceNodeIdOffset = nodeFields.indexOf('trace_node_id');
|
|
259
|
+
this._nodeDetachednessOffset = nodeFields.indexOf('detachedness');
|
|
260
|
+
Config_1.default.snapshotHasDetachedness = this._nodeDetachednessOffset >= 0;
|
|
261
|
+
this._nodeFieldsCount = nodeFields.length;
|
|
262
|
+
const nodeTypes = meta.node_types[this._nodeTypeOffset];
|
|
263
|
+
this._nodeTypes = nodeTypes;
|
|
264
|
+
this._nodeArrayType = nodeTypes.indexOf('array');
|
|
265
|
+
this._nodeHiddenType = nodeTypes.indexOf('hidden');
|
|
266
|
+
this._nodeObjectType = nodeTypes.indexOf('object');
|
|
267
|
+
this._nodeNativeType = nodeTypes.indexOf('native');
|
|
268
|
+
this._nodeConsStringType = nodeTypes.indexOf('concatenated string');
|
|
269
|
+
this._nodeSlicedStringType = nodeTypes.indexOf('sliced string');
|
|
270
|
+
this._nodeCodeType = nodeTypes.indexOf('code');
|
|
271
|
+
this._nodeSyntheticType = nodeTypes.indexOf('synthetic');
|
|
272
|
+
const edgeFields = meta.edge_fields;
|
|
273
|
+
this._edgeFieldsCount = edgeFields.length;
|
|
274
|
+
this._edgeTypeOffset = edgeFields.indexOf('type');
|
|
275
|
+
this._edgeNameOrIndexOffset = edgeFields.indexOf('name_or_index');
|
|
276
|
+
this._edgeToNodeOffset = edgeFields.indexOf('to_node');
|
|
277
|
+
const edgeTypes = meta.edge_types[this._edgeTypeOffset];
|
|
278
|
+
edgeFields.push('invisible');
|
|
279
|
+
this._edgeTypes = edgeTypes;
|
|
280
|
+
this._edgeElementType = edgeFields.indexOf('element');
|
|
281
|
+
this._edgeHiddenType = edgeFields.indexOf('hidden');
|
|
282
|
+
this._edgeInternalType = edgeFields.indexOf('internal');
|
|
283
|
+
this._edgeShortcutType = edgeFields.indexOf('shortcut');
|
|
284
|
+
this._edgeWeakType = edgeFields.indexOf('weak');
|
|
285
|
+
this._edgeInvisibleType = edgeFields.indexOf('invisible');
|
|
286
|
+
const locationFields = meta.location_fields || [];
|
|
287
|
+
this._locationObjectIndexOffset = locationFields.indexOf('object_index');
|
|
288
|
+
this._locationScriptIdOffset = locationFields.indexOf('script_id');
|
|
289
|
+
this._locationLineOffset = locationFields.indexOf('line');
|
|
290
|
+
this._locationColumnOffset = locationFields.indexOf('column');
|
|
291
|
+
this._locationFieldsCount = locationFields.length;
|
|
292
|
+
const snapshot = this.snapshot;
|
|
293
|
+
this._nodeCount = snapshot.nodes.length / this._nodeFieldsCount;
|
|
294
|
+
this._edgeCount = this.forwardEdges.length / this._edgeFieldsCount;
|
|
295
|
+
this._locationCount = snapshot.locations.length / this._locationFieldsCount;
|
|
296
|
+
}
|
|
297
|
+
// create array that maps node index in node list to
|
|
298
|
+
// the node's first edge index in forward edge list
|
|
299
|
+
_buildReferencesIndex() {
|
|
300
|
+
Console_1.default.overwrite('building reference index...');
|
|
301
|
+
this._firstEdgePointers = new Uint32Array(this._nodeCount + 1);
|
|
302
|
+
const nodes = this.snapshot.nodes;
|
|
303
|
+
const nodeCount = this._nodeCount;
|
|
304
|
+
const firstEdgePointers = this._firstEdgePointers;
|
|
305
|
+
const nodeFieldsCount = this._nodeFieldsCount;
|
|
306
|
+
const edgeFieldsCount = this._edgeFieldsCount;
|
|
307
|
+
const nodeEdgeCountOffset = this._nodeEdgeCountOffset;
|
|
308
|
+
firstEdgePointers[nodeCount] = this.forwardEdges.length;
|
|
309
|
+
let edgePointer = 0;
|
|
310
|
+
for (let nodeIndex = 0; nodeIndex < nodeCount; ++nodeIndex) {
|
|
311
|
+
firstEdgePointers[nodeIndex] = edgePointer;
|
|
312
|
+
const nodeEdgeCountPointer = nodeIndex * nodeFieldsCount + nodeEdgeCountOffset;
|
|
313
|
+
edgePointer += nodes[nodeEdgeCountPointer] * edgeFieldsCount;
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
// build indexes for each node's retaining edge and retaining node
|
|
317
|
+
_buildReferrersIndex() {
|
|
318
|
+
Console_1.default.overwrite('building referrers index...');
|
|
319
|
+
// init data
|
|
320
|
+
const retainingEdgeCount = new Uint32Array(this._edgeCount);
|
|
321
|
+
this._retainingEdgeIndex2EdgeIndex = new Uint32Array(this._edgeCount);
|
|
322
|
+
// index of the first retainer edge in _retainingEdgeIndex2EdgeIndex
|
|
323
|
+
this._firstRetainerIndex = new Uint32Array(this._nodeCount + 1);
|
|
324
|
+
// map edge index to source node index
|
|
325
|
+
this._edgeIndex2SrcNodeIndex = new Uint32Array(this._edgeCount);
|
|
326
|
+
// calculate retainers
|
|
327
|
+
const edgeIndex2SrcNodeIndex = this._edgeIndex2SrcNodeIndex;
|
|
328
|
+
const retainingEdgeIndex2EdgeIndex = this._retainingEdgeIndex2EdgeIndex;
|
|
329
|
+
const firstRetainerIndex = this._firstRetainerIndex;
|
|
330
|
+
const forwardEdges = this.forwardEdges;
|
|
331
|
+
const edgeFieldsCount = this._edgeFieldsCount;
|
|
332
|
+
const nodeFieldsCount = this._nodeFieldsCount;
|
|
333
|
+
const edgeToNodeOffset = this._edgeToNodeOffset;
|
|
334
|
+
const firstEdgePointers = this._firstEdgePointers;
|
|
335
|
+
const nodeCount = this._nodeCount;
|
|
336
|
+
// calculate the number of retainer nodes for each node
|
|
337
|
+
// temporarily store the information in firstRetainerIndex
|
|
338
|
+
for (let toNodeFieldIndex = edgeToNodeOffset; toNodeFieldIndex < forwardEdges.length; toNodeFieldIndex += edgeFieldsCount) {
|
|
339
|
+
const toNodeIndex = forwardEdges[toNodeFieldIndex];
|
|
340
|
+
if (toNodeIndex % nodeFieldsCount) {
|
|
341
|
+
(0, HeapUtils_1.throwError)(new Error('Invalid toNodeIndex ' + toNodeIndex));
|
|
342
|
+
}
|
|
343
|
+
++firstRetainerIndex[toNodeIndex / nodeFieldsCount];
|
|
344
|
+
}
|
|
345
|
+
// calculate the actual first retainer node index info
|
|
346
|
+
// temporarily store the number of retainers in retainingNodes (sparsely)
|
|
347
|
+
for (let i = 0, firstUnusedRetainerSlot = 0; i < nodeCount; i++) {
|
|
348
|
+
const retainersCount = firstRetainerIndex[i];
|
|
349
|
+
firstRetainerIndex[i] = firstUnusedRetainerSlot;
|
|
350
|
+
retainingEdgeCount[firstUnusedRetainerSlot] = retainersCount;
|
|
351
|
+
firstUnusedRetainerSlot += retainersCount;
|
|
352
|
+
}
|
|
353
|
+
firstRetainerIndex[nodeCount] = retainingEdgeCount.length;
|
|
354
|
+
// calculate a compact array containing retainer node and retainer edge
|
|
355
|
+
let nextNodeFirstEdgePointer = firstEdgePointers[0];
|
|
356
|
+
for (let srcNodeIndex = 0; srcNodeIndex < nodeCount; ++srcNodeIndex) {
|
|
357
|
+
const firstEdgePointer = nextNodeFirstEdgePointer;
|
|
358
|
+
nextNodeFirstEdgePointer = firstEdgePointers[srcNodeIndex + 1];
|
|
359
|
+
for (let edgePointer = firstEdgePointer; edgePointer < nextNodeFirstEdgePointer; edgePointer += edgeFieldsCount) {
|
|
360
|
+
const toNodePointer = forwardEdges[edgePointer + edgeToNodeOffset];
|
|
361
|
+
if (toNodePointer % nodeFieldsCount) {
|
|
362
|
+
(0, HeapUtils_1.throwError)(Error('Invalid toNodeIndex ' + toNodePointer));
|
|
363
|
+
}
|
|
364
|
+
const toNodeIndex = toNodePointer / nodeFieldsCount;
|
|
365
|
+
const firstRetainerSlotIndex = firstRetainerIndex[toNodeIndex];
|
|
366
|
+
const nextUnusedRetainerSlotIndex = firstRetainerSlotIndex + --retainingEdgeCount[firstRetainerSlotIndex];
|
|
367
|
+
const edgeIndex = edgePointer / edgeFieldsCount;
|
|
368
|
+
retainingEdgeIndex2EdgeIndex[nextUnusedRetainerSlotIndex] = edgeIndex;
|
|
369
|
+
edgeIndex2SrcNodeIndex[edgeIndex] = srcNodeIndex;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
// a helper function that iterates the direct children of a given node
|
|
374
|
+
_iterateDirectChildren(nodeIndex, edgeFilterCallback, childCallback) {
|
|
375
|
+
const beginEdgePointer = this._firstEdgePointers[nodeIndex];
|
|
376
|
+
const endEdgePointer = this._firstEdgePointers[nodeIndex + 1];
|
|
377
|
+
for (let edgePointer = beginEdgePointer; edgePointer < endEdgePointer; edgePointer += this._edgeFieldsCount) {
|
|
378
|
+
const childNodePointer = this.forwardEdges[edgePointer + this._edgeToNodeOffset];
|
|
379
|
+
const childNodeIndex = childNodePointer / this._nodeFieldsCount;
|
|
380
|
+
const type = this.forwardEdges[edgePointer + this._edgeTypeOffset];
|
|
381
|
+
if (!edgeFilterCallback(type)) {
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
childCallback(childNodeIndex);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
// initial detachedness state is available at entry point to native node
|
|
388
|
+
// this helper function propagate the detachedness state to connected
|
|
389
|
+
// native node (mainly DOM elements)
|
|
390
|
+
_propagateDetachednessState() {
|
|
391
|
+
if (this._nodeDetachednessOffset === -1) {
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
Console_1.default.overwrite('propagating detachedness state...');
|
|
395
|
+
const visited = new Uint8Array(this._nodeCount);
|
|
396
|
+
const attached = [];
|
|
397
|
+
const detached = [];
|
|
398
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
399
|
+
const self = this;
|
|
400
|
+
const setNodeDetachState = function (snapshot, nodeIndex, detachedness) {
|
|
401
|
+
if (visited[nodeIndex] === 1) {
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
const nodePointer = nodeIndex * self._nodeFieldsCount;
|
|
405
|
+
// Do not propagate the state (and name change) through JavaScript.
|
|
406
|
+
// From V8: Every entry point into embedder code is a node that knows
|
|
407
|
+
// its own state. All embedder nodes have their node type set to native.
|
|
408
|
+
if (snapshot.nodes[nodePointer + self._nodeTypeOffset] !==
|
|
409
|
+
self._nodeNativeType) {
|
|
410
|
+
visited[nodeIndex] = 1;
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
snapshot.nodes[nodePointer + self._nodeDetachednessOffset] = detachedness;
|
|
414
|
+
if (detachedness === HeapUtils_1.NodeDetachState.Attached) {
|
|
415
|
+
attached.push(nodeIndex);
|
|
416
|
+
}
|
|
417
|
+
else if (detachedness === HeapUtils_1.NodeDetachState.Detached) {
|
|
418
|
+
detached.push(nodeIndex);
|
|
419
|
+
}
|
|
420
|
+
visited[nodeIndex] = 1;
|
|
421
|
+
};
|
|
422
|
+
const hiddenEdgeTypes = [
|
|
423
|
+
self._edgeHiddenType,
|
|
424
|
+
self._edgeInvisibleType,
|
|
425
|
+
self._edgeWeakType,
|
|
426
|
+
];
|
|
427
|
+
const filterEdge = function (edgeType) {
|
|
428
|
+
return hiddenEdgeTypes.indexOf(edgeType) < 0;
|
|
429
|
+
};
|
|
430
|
+
const propagate = function (snapshot, nodeIndex, detachedness) {
|
|
431
|
+
self._iterateDirectChildren(nodeIndex, filterEdge, childNodeIndex => setNodeDetachState(snapshot, childNodeIndex, detachedness));
|
|
432
|
+
};
|
|
433
|
+
// add attached and detached nodes to queue
|
|
434
|
+
for (let nodeIndex = 0; nodeIndex < this._nodeCount; ++nodeIndex) {
|
|
435
|
+
const state = this.snapshot.nodes[nodeIndex * this._nodeFieldsCount + this._nodeDetachednessOffset];
|
|
436
|
+
if (state === HeapUtils_1.NodeDetachState.Unknown) {
|
|
437
|
+
continue;
|
|
438
|
+
}
|
|
439
|
+
setNodeDetachState(this.snapshot, nodeIndex, state);
|
|
440
|
+
}
|
|
441
|
+
// if the parent is attached, then the child is also attached
|
|
442
|
+
while (attached.length > 0) {
|
|
443
|
+
const nodeIndex = attached.pop();
|
|
444
|
+
if (nodeIndex != null) {
|
|
445
|
+
propagate(this.snapshot, nodeIndex, HeapUtils_1.NodeDetachState.Attached);
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
// if the parent is not attached, then the child inherits the parent's state
|
|
449
|
+
while (detached.length > 0) {
|
|
450
|
+
const nodeIndex = detached.pop();
|
|
451
|
+
if (nodeIndex == null) {
|
|
452
|
+
continue; // make TS code strict mode happy
|
|
453
|
+
}
|
|
454
|
+
const detachedness = this.snapshot.nodes[nodeIndex * this._nodeFieldsCount + this._nodeDetachednessOffset];
|
|
455
|
+
if (detachedness === HeapUtils_1.NodeDetachState.Attached) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
458
|
+
propagate(this.snapshot, nodeIndex, HeapUtils_1.NodeDetachState.Detached);
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
exports.default = HeapSnapshot;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 { IHeapStringNode } from '../Types';
|
|
12
|
+
import type HeapSnapshot from './HeapSnapshot';
|
|
13
|
+
import HeapNode from './HeapNode';
|
|
14
|
+
export default class HeapStringNode extends HeapNode implements IHeapStringNode {
|
|
15
|
+
constructor(heapSnapshot: HeapSnapshot, idx: number);
|
|
16
|
+
get stringValue(): string;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=HeapStringNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeapStringNode.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapStringNode.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAE/C,OAAO,QAAQ,MAAM,YAAY,CAAC;AAGlC,MAAM,CAAC,OAAO,OAAO,cACnB,SAAQ,QACR,YAAW,eAAe;gBAEd,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM;IAInD,IAAI,WAAW,IAAI,MAAM,CAoBxB;CACF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 HeapNode_1 = __importDefault(require("./HeapNode"));
|
|
17
|
+
const HeapUtils_1 = require("./HeapUtils");
|
|
18
|
+
class HeapStringNode extends HeapNode_1.default {
|
|
19
|
+
constructor(heapSnapshot, idx) {
|
|
20
|
+
super(heapSnapshot, idx);
|
|
21
|
+
}
|
|
22
|
+
get stringValue() {
|
|
23
|
+
var _a, _b, _c;
|
|
24
|
+
const type = this.type;
|
|
25
|
+
if (type === 'concatenated string') {
|
|
26
|
+
const firstNode = (_a = this.getReferenceNode('first')) === null || _a === void 0 ? void 0 : _a.toStringNode();
|
|
27
|
+
const secondNode = (_b = this.getReferenceNode('second')) === null || _b === void 0 ? void 0 : _b.toStringNode();
|
|
28
|
+
if (firstNode == null || secondNode == null) {
|
|
29
|
+
throw (0, HeapUtils_1.throwError)(new Error('broken concatenated string'));
|
|
30
|
+
}
|
|
31
|
+
return firstNode.stringValue + secondNode.stringValue;
|
|
32
|
+
}
|
|
33
|
+
if (type === 'sliced string') {
|
|
34
|
+
const parentNode = (_c = this.getReferenceNode('parent')) === null || _c === void 0 ? void 0 : _c.toStringNode();
|
|
35
|
+
if (parentNode == null) {
|
|
36
|
+
throw (0, HeapUtils_1.throwError)(new Error('broken sliced string'));
|
|
37
|
+
}
|
|
38
|
+
return parentNode.stringValue;
|
|
39
|
+
}
|
|
40
|
+
return this.name;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.default = HeapStringNode;
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
export declare const NodeDetachState: {
|
|
12
|
+
Unknown: number;
|
|
13
|
+
Attached: number;
|
|
14
|
+
Detached: number;
|
|
15
|
+
};
|
|
16
|
+
export declare function throwError(error: Error): Error;
|
|
17
|
+
//# sourceMappingURL=HeapUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HeapUtils.d.ts","sourceRoot":"","sources":["../../../src/lib/heap-data/HeapUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,eAAO,MAAM,eAAe;;;;CAI3B,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAK9C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
exports.throwError = exports.NodeDetachState = void 0;
|
|
14
|
+
exports.NodeDetachState = {
|
|
15
|
+
Unknown: 0,
|
|
16
|
+
Attached: 1,
|
|
17
|
+
Detached: 2,
|
|
18
|
+
};
|
|
19
|
+
function throwError(error) {
|
|
20
|
+
if (error) {
|
|
21
|
+
error.stack;
|
|
22
|
+
}
|
|
23
|
+
throw error;
|
|
24
|
+
}
|
|
25
|
+
exports.throwError = throwError;
|
|
@@ -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
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
import { E2EStepInfo, TraceCluster, TraceClusterDiff, TraceClusterMetaInfo } from '../lib/Types';
|
|
11
|
+
declare class LeakClusterLogger {
|
|
12
|
+
_fileIdx: number;
|
|
13
|
+
constructor();
|
|
14
|
+
_loadClustersData(dir: string): Promise<TraceClusterMetaInfo[]>;
|
|
15
|
+
loadClusters(dir: string): Promise<TraceCluster[]>;
|
|
16
|
+
dumpReadableCluster(options?: {
|
|
17
|
+
metaFile?: string;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
loadClusterMeta(file: string): Promise<TraceClusterMetaInfo>;
|
|
20
|
+
logUnclassifiedClusters(clusters: TraceCluster[]): void;
|
|
21
|
+
logClusters(clusters: TraceCluster[], options?: {
|
|
22
|
+
clusterDiff?: TraceClusterDiff;
|
|
23
|
+
}): void;
|
|
24
|
+
logAllClusters(clusters: TraceCluster[][]): void;
|
|
25
|
+
logClusterDiff(clusterDiff: TraceClusterDiff): void;
|
|
26
|
+
_logStaleCluster(cluster: TraceCluster): void;
|
|
27
|
+
_logClusterToAdd(cluster: TraceCluster): void;
|
|
28
|
+
_saveClusterSummary(clusters: TraceCluster[]): void;
|
|
29
|
+
_logCluster(tabsOrder: E2EStepInfo[], cluster: TraceCluster, interactSummary: string, interactionVector: string[], options?: {
|
|
30
|
+
filepath?: string;
|
|
31
|
+
}): void;
|
|
32
|
+
_getTraceFilePath(cluster: TraceCluster): string;
|
|
33
|
+
_logSingleUnClassifiedCluster(tabsOrder: E2EStepInfo[], cluster: TraceCluster, interactSummary: string, interactionVector: string[], options?: {
|
|
34
|
+
filepath?: string;
|
|
35
|
+
}): void;
|
|
36
|
+
_getUnclassifiedTraceFilePath(cluster: TraceCluster): string;
|
|
37
|
+
}
|
|
38
|
+
declare const _default: LeakClusterLogger;
|
|
39
|
+
export default _default;
|
|
40
|
+
//# sourceMappingURL=LeakClusterLogger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LeakClusterLogger.d.ts","sourceRoot":"","sources":["../../src/logger/LeakClusterLogger.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,cAAc,CAAC;AAItB,cAAM,iBAAiB;IACrB,QAAQ,EAAE,MAAM,CAAC;;IAKX,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAW/D,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAalD,mBAAmB,CAAC,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAKlE,uBAAuB,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,IAAI;IAcvD,WAAW,CACT,QAAQ,EAAE,YAAY,EAAE,EACxB,OAAO,GAAE;QAAC,WAAW,CAAC,EAAE,gBAAgB,CAAA;KAAM,GAC7C,IAAI;IAoBP,cAAc,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,GAAG,IAAI;IAqBhD,cAAc,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAYnD,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAW7C,gBAAgB,CAAC,OAAO,EAAE,YAAY;IAWtC,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE;IAyB5C,WAAW,CACT,SAAS,EAAE,WAAW,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM;IAuBnC,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;IAKhD,6BAA6B,CAC3B,SAAS,EAAE,WAAW,EAAE,EACxB,OAAO,EAAE,YAAY,EACrB,eAAe,EAAE,MAAM,EACvB,iBAAiB,EAAE,MAAM,EAAE,EAC3B,OAAO,GAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAM;IAwBnC,6BAA6B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM;CAI7D;;AAED,wBAAuC"}
|