@memlab/heap-analysis 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/BaseAnalysis.d.ts +82 -5
- package/dist/BaseAnalysis.js +78 -12
- package/dist/PluginUtils.d.ts +267 -1
- package/dist/PluginUtils.js +268 -3
- package/dist/__tests__/package.test.d.ts +2 -0
- package/dist/__tests__/package.test.js +85 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +9 -5
- package/dist/plugins/CollectionsHoldingStaleAnalysis.d.ts +5 -0
- package/dist/plugins/CollectionsHoldingStaleAnalysis.js +11 -0
- package/dist/plugins/DetachedDOMElementAnalysis.d.ts +5 -0
- package/dist/plugins/DetachedDOMElementAnalysis.js +11 -0
- package/dist/plugins/GlobalVariableAnalysis/GlobalVariableAnalysis.d.ts +6 -0
- package/dist/plugins/GlobalVariableAnalysis/GlobalVariableAnalysis.js +13 -0
- package/dist/plugins/ObjectFanoutAnalysis.d.ts +5 -0
- package/dist/plugins/ObjectFanoutAnalysis.js +12 -0
- package/dist/plugins/ObjectShallowAnalysis.d.ts +27 -1
- package/dist/plugins/ObjectShallowAnalysis.js +25 -0
- package/dist/plugins/ObjectShapeAnalysis.d.ts +5 -0
- package/dist/plugins/ObjectShapeAnalysis.js +11 -0
- package/dist/plugins/ObjectSizeAnalysis.d.ts +5 -0
- package/dist/plugins/ObjectSizeAnalysis.js +12 -0
- package/dist/plugins/ObjectUnboundGrowthAnalysis.d.ts +5 -0
- package/dist/plugins/ObjectUnboundGrowthAnalysis.js +11 -0
- package/dist/plugins/ShapeUnboundGrowthAnalysis.d.ts +11 -15
- package/dist/plugins/ShapeUnboundGrowthAnalysis.js +16 -1
- package/dist/plugins/StringAnalysis.d.ts +34 -2
- package/dist/plugins/StringAnalysis.js +32 -3
- package/dist/plugins/UnmountedReactFiberNodesAnalysis.d.ts +5 -0
- package/dist/plugins/UnmountedReactFiberNodesAnalysis.js +11 -0
- package/package.json +1 -1
- package/dist/BaseAnalysis.d.ts.map +0 -1
- package/dist/HeapAnalysisLoader.d.ts.map +0 -1
- package/dist/PluginUtils.d.ts.map +0 -1
- package/dist/__tests__/HeapAnalysis.test.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/options/HeapAnalysisSnapshotDirectoryOption.d.ts.map +0 -1
- package/dist/options/HeapAnalysisSnapshotFileOption.d.ts.map +0 -1
- package/dist/plugins/CollectionsHoldingStaleAnalysis.d.ts.map +0 -1
- package/dist/plugins/DetachedDOMElementAnalysis.d.ts.map +0 -1
- package/dist/plugins/GlobalVariableAnalysis/BuiltInGlobalVariables.d.ts.map +0 -1
- package/dist/plugins/GlobalVariableAnalysis/GlobalVariableAnalysis.d.ts.map +0 -1
- package/dist/plugins/ObjectFanoutAnalysis.d.ts.map +0 -1
- package/dist/plugins/ObjectShallowAnalysis.d.ts.map +0 -1
- package/dist/plugins/ObjectShapeAnalysis.d.ts.map +0 -1
- package/dist/plugins/ObjectSizeAnalysis.d.ts.map +0 -1
- package/dist/plugins/ObjectUnboundGrowthAnalysis.d.ts.map +0 -1
- package/dist/plugins/ShapeUnboundGrowthAnalysis.d.ts.map +0 -1
- package/dist/plugins/StringAnalysis.d.ts.map +0 -1
- package/dist/plugins/UnmountedReactFiberNodesAnalysis.d.ts.map +0 -1
|
@@ -10,10 +10,17 @@
|
|
|
10
10
|
import type { HeapAnalysisOptions } from '../PluginUtils';
|
|
11
11
|
import { BaseOption } from '@memlab/core';
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* duplicated object pattern information
|
|
15
|
+
*/
|
|
16
|
+
export declare type ObjectRecord = {
|
|
17
|
+
/** number of duplicated objects with this pattern */
|
|
14
18
|
n: number;
|
|
19
|
+
/** aggregated retained sizes of all duplicated objects with this pattern */
|
|
15
20
|
size: number;
|
|
21
|
+
/** heap object ids of the duplicated JS objects */
|
|
16
22
|
ids: string[];
|
|
23
|
+
/** duplicated object pattern */
|
|
17
24
|
obj: string;
|
|
18
25
|
};
|
|
19
26
|
declare class ObjectShallowAnalysis extends BaseAnalysis {
|
|
@@ -22,11 +29,30 @@ declare class ObjectShallowAnalysis extends BaseAnalysis {
|
|
|
22
29
|
private topDupObjInSize;
|
|
23
30
|
private topDupObjInSizeListSize;
|
|
24
31
|
private objectPatternsStat;
|
|
32
|
+
/**
|
|
33
|
+
* get CLI command name for this memory analysis;
|
|
34
|
+
* use it with `memlab analyze <ANALYSIS_NAME>` in CLI
|
|
35
|
+
* @returns command name
|
|
36
|
+
*/
|
|
25
37
|
getCommandName(): string;
|
|
38
|
+
/**
|
|
39
|
+
* get a textual description of the memory analysis
|
|
40
|
+
* @returns textual description
|
|
41
|
+
* @internal
|
|
42
|
+
*/
|
|
26
43
|
getDescription(): string;
|
|
44
|
+
/** @internal */
|
|
27
45
|
getOptions(): BaseOption[];
|
|
46
|
+
/** @internal */
|
|
47
|
+
analyzeSnapshotsInDirectory(directory: string): Promise<void>;
|
|
48
|
+
/** @internal */
|
|
28
49
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
50
|
+
/**
|
|
51
|
+
* get the top duplicated object in terms of duplicated object count
|
|
52
|
+
* @returns an array of the top-duplicated objects' information
|
|
53
|
+
*/
|
|
29
54
|
getTopDuplicatedObjectInCount(): ObjectRecord[];
|
|
55
|
+
/** @ignore */
|
|
30
56
|
private getPreprocessedObjectMap;
|
|
31
57
|
private nodeToObject;
|
|
32
58
|
private static objectPatternsToObserve;
|
|
@@ -35,15 +35,35 @@ class ObjectShallowAnalysis extends BaseAnalysis_1.default {
|
|
|
35
35
|
this.topDupObjInSizeListSize = 10;
|
|
36
36
|
this.objectPatternsStat = {};
|
|
37
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* get CLI command name for this memory analysis;
|
|
40
|
+
* use it with `memlab analyze <ANALYSIS_NAME>` in CLI
|
|
41
|
+
* @returns command name
|
|
42
|
+
*/
|
|
38
43
|
getCommandName() {
|
|
39
44
|
return 'object-shallow';
|
|
40
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* get a textual description of the memory analysis
|
|
48
|
+
* @returns textual description
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
41
51
|
getDescription() {
|
|
42
52
|
return 'Get objects by key and value, without recursing into sub-objects';
|
|
43
53
|
}
|
|
54
|
+
/** @internal */
|
|
44
55
|
getOptions() {
|
|
45
56
|
return [new HeapAnalysisSnapshotFileOption_1.default()];
|
|
46
57
|
}
|
|
58
|
+
/** @internal */
|
|
59
|
+
analyzeSnapshotsInDirectory(directory) {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
62
|
+
const d = directory;
|
|
63
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotsInDirectory`);
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/** @internal */
|
|
47
67
|
process(options) {
|
|
48
68
|
return __awaiter(this, void 0, void 0, function* () {
|
|
49
69
|
const snapshot = yield PluginUtils_1.default.loadHeapSnapshot(options);
|
|
@@ -54,9 +74,14 @@ class ObjectShallowAnalysis extends BaseAnalysis_1.default {
|
|
|
54
74
|
this.print();
|
|
55
75
|
});
|
|
56
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* get the top duplicated object in terms of duplicated object count
|
|
79
|
+
* @returns an array of the top-duplicated objects' information
|
|
80
|
+
*/
|
|
57
81
|
getTopDuplicatedObjectInCount() {
|
|
58
82
|
return this.topDupObjInCnt;
|
|
59
83
|
}
|
|
84
|
+
/** @ignore */
|
|
60
85
|
getPreprocessedObjectMap(snapshot) {
|
|
61
86
|
core_1.info.overwrite('building object map...');
|
|
62
87
|
const objectMap = Object.create(null);
|
|
@@ -12,8 +12,13 @@ import { BaseOption } from '@memlab/core';
|
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
13
|
declare class ObjectShapeAnalysis extends BaseAnalysis {
|
|
14
14
|
getCommandName(): string;
|
|
15
|
+
/** @internal */
|
|
15
16
|
getDescription(): string;
|
|
17
|
+
/** @internal */
|
|
16
18
|
getOptions(): BaseOption[];
|
|
19
|
+
/** @internal */
|
|
20
|
+
analyzeSnapshotsInDirectory(directory: string): Promise<void>;
|
|
21
|
+
/** @internal */
|
|
17
22
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
18
23
|
}
|
|
19
24
|
export default ObjectShapeAnalysis;
|
|
@@ -29,12 +29,23 @@ class ObjectShapeAnalysis extends BaseAnalysis_1.default {
|
|
|
29
29
|
getCommandName() {
|
|
30
30
|
return 'shape';
|
|
31
31
|
}
|
|
32
|
+
/** @internal */
|
|
32
33
|
getDescription() {
|
|
33
34
|
return 'List the shapes that retained most memory';
|
|
34
35
|
}
|
|
36
|
+
/** @internal */
|
|
35
37
|
getOptions() {
|
|
36
38
|
return [new HeapAnalysisSnapshotFileOption_1.default()];
|
|
37
39
|
}
|
|
40
|
+
/** @internal */
|
|
41
|
+
analyzeSnapshotsInDirectory(directory) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
44
|
+
const d = directory;
|
|
45
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotsInDirectory`);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
38
49
|
process(options) {
|
|
39
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
51
|
const snapshotPath = PluginUtils_1.default.getSnapshotFileForAnalysis(options);
|
|
@@ -12,8 +12,13 @@ import { BaseOption } from '@memlab/core';
|
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
13
|
declare class ObjectSizeRankAnalysis extends BaseAnalysis {
|
|
14
14
|
getCommandName(): string;
|
|
15
|
+
/** @internal */
|
|
15
16
|
getDescription(): string;
|
|
17
|
+
/** @internal */
|
|
16
18
|
getOptions(): BaseOption[];
|
|
19
|
+
/** @internal */
|
|
20
|
+
analyzeSnapshotsInDirectory(directory: string): Promise<void>;
|
|
21
|
+
/** @internal */
|
|
17
22
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
18
23
|
}
|
|
19
24
|
export default ObjectSizeRankAnalysis;
|
|
@@ -21,6 +21,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
21
21
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
22
|
};
|
|
23
23
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
const core_1 = require("@memlab/core");
|
|
24
25
|
const BaseAnalysis_1 = __importDefault(require("../BaseAnalysis"));
|
|
25
26
|
const PluginUtils_1 = __importDefault(require("../PluginUtils"));
|
|
26
27
|
const HeapAnalysisSnapshotFileOption_1 = __importDefault(require("../options/HeapAnalysisSnapshotFileOption"));
|
|
@@ -28,12 +29,23 @@ class ObjectSizeRankAnalysis extends BaseAnalysis_1.default {
|
|
|
28
29
|
getCommandName() {
|
|
29
30
|
return 'object-size';
|
|
30
31
|
}
|
|
32
|
+
/** @internal */
|
|
31
33
|
getDescription() {
|
|
32
34
|
return 'Get the largest objects in heap';
|
|
33
35
|
}
|
|
36
|
+
/** @internal */
|
|
34
37
|
getOptions() {
|
|
35
38
|
return [new HeapAnalysisSnapshotFileOption_1.default()];
|
|
36
39
|
}
|
|
40
|
+
/** @internal */
|
|
41
|
+
analyzeSnapshotsInDirectory(directory) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
44
|
+
const d = directory;
|
|
45
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotsInDirectory`);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
37
49
|
process(options) {
|
|
38
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
39
51
|
const snapshot = yield PluginUtils_1.default.loadHeapSnapshot(options);
|
|
@@ -12,8 +12,13 @@ import { BaseOption } from '@memlab/core';
|
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
13
|
declare class ObjectUnboundGrowthAnalysis extends BaseAnalysis {
|
|
14
14
|
getCommandName(): string;
|
|
15
|
+
/** @internal */
|
|
15
16
|
getDescription(): string;
|
|
17
|
+
/** @internal */
|
|
16
18
|
getOptions(): BaseOption[];
|
|
19
|
+
/** @internal */
|
|
20
|
+
analyzeSnapshotFromFile(file: string): Promise<void>;
|
|
21
|
+
/** @internal */
|
|
17
22
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
18
23
|
}
|
|
19
24
|
export default ObjectUnboundGrowthAnalysis;
|
|
@@ -29,12 +29,23 @@ class ObjectUnboundGrowthAnalysis extends BaseAnalysis_1.default {
|
|
|
29
29
|
getCommandName() {
|
|
30
30
|
return 'unbound-object';
|
|
31
31
|
}
|
|
32
|
+
/** @internal */
|
|
32
33
|
getDescription() {
|
|
33
34
|
return 'Check unbound object growth';
|
|
34
35
|
}
|
|
36
|
+
/** @internal */
|
|
35
37
|
getOptions() {
|
|
36
38
|
return [new HeapAnalysisSnapshotDirectoryOption_1.default()];
|
|
37
39
|
}
|
|
40
|
+
/** @internal */
|
|
41
|
+
analyzeSnapshotFromFile(file) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
44
|
+
const f = file;
|
|
45
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotFromFile`);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
38
49
|
process(options) {
|
|
39
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
51
|
const snapshotDir = PluginUtils_1.default.getSnapshotDirForAnalysis(options);
|
|
@@ -7,20 +7,9 @@
|
|
|
7
7
|
* @emails oncall+ws_labs
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
-
import type { IHeapSnapshot } from '@memlab/core';
|
|
11
10
|
import type { HeapAnalysisOptions } from '../PluginUtils';
|
|
12
11
|
import { BaseOption } from '@memlab/core';
|
|
13
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
14
|
-
declare type ShapesInfo = {
|
|
15
|
-
[shape: string]: ShapeInfo;
|
|
16
|
-
};
|
|
17
|
-
declare type ShapeInfo = {
|
|
18
|
-
shape: string;
|
|
19
|
-
n: number;
|
|
20
|
-
examples: number[];
|
|
21
|
-
size: number;
|
|
22
|
-
ids: Set<number>;
|
|
23
|
-
};
|
|
24
13
|
declare type ShapeSummary = {
|
|
25
14
|
shape: string;
|
|
26
15
|
counts: number[];
|
|
@@ -28,14 +17,21 @@ declare type ShapeSummary = {
|
|
|
28
17
|
examples: number[];
|
|
29
18
|
};
|
|
30
19
|
export default class ShapeUnboundGrowthAnalysis extends BaseAnalysis {
|
|
20
|
+
private shapesOfInterest;
|
|
21
|
+
private shapesWithUnboundGrowth;
|
|
31
22
|
getCommandName(): string;
|
|
23
|
+
/** @internal */
|
|
32
24
|
getDescription(): string;
|
|
25
|
+
/** @internal */
|
|
33
26
|
getOptions(): BaseOption[];
|
|
34
|
-
|
|
35
|
-
|
|
27
|
+
/** @internal */
|
|
28
|
+
analyzeSnapshotFromFile(file: string): Promise<void>;
|
|
29
|
+
getShapesWithUnboundGrowth(): ShapeSummary[];
|
|
30
|
+
/** @internal */
|
|
31
|
+
process(options: HeapAnalysisOptions): Promise<void>;
|
|
36
32
|
private retrieveShapesOfInterest;
|
|
37
|
-
getShapesInfo
|
|
38
|
-
getSummary
|
|
33
|
+
private getShapesInfo;
|
|
34
|
+
private getSummary;
|
|
39
35
|
private print;
|
|
40
36
|
}
|
|
41
37
|
export {};
|
|
@@ -30,24 +30,39 @@ class ShapeUnboundGrowthAnalysis extends BaseAnalysis_1.default {
|
|
|
30
30
|
constructor() {
|
|
31
31
|
super(...arguments);
|
|
32
32
|
this.shapesOfInterest = null;
|
|
33
|
+
this.shapesWithUnboundGrowth = [];
|
|
33
34
|
}
|
|
34
35
|
getCommandName() {
|
|
35
36
|
return 'unbound-shape';
|
|
36
37
|
}
|
|
38
|
+
/** @internal */
|
|
37
39
|
getDescription() {
|
|
38
40
|
return 'Get shapes with unbound growth';
|
|
39
41
|
}
|
|
42
|
+
/** @internal */
|
|
40
43
|
getOptions() {
|
|
41
44
|
return [new HeapAnalysisSnapshotDirectoryOption_1.default()];
|
|
42
45
|
}
|
|
46
|
+
/** @internal */
|
|
47
|
+
analyzeSnapshotFromFile(file) {
|
|
48
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
50
|
+
const f = file;
|
|
51
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotFromFile`);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
getShapesWithUnboundGrowth() {
|
|
55
|
+
return this.shapesWithUnboundGrowth;
|
|
56
|
+
}
|
|
57
|
+
/** @internal */
|
|
43
58
|
process(options) {
|
|
44
59
|
return __awaiter(this, void 0, void 0, function* () {
|
|
45
60
|
let list = yield PluginUtils_1.default.snapshotMapReduce(this.getShapesInfo.bind(this), this.getSummary, options);
|
|
46
61
|
this.retrieveShapesOfInterest(list);
|
|
47
62
|
list = yield PluginUtils_1.default.snapshotMapReduce(this.getShapesInfo.bind(this), this.getSummary, options);
|
|
48
63
|
this.shapesOfInterest = null;
|
|
64
|
+
this.shapesWithUnboundGrowth = list;
|
|
49
65
|
this.print(list);
|
|
50
|
-
return list;
|
|
51
66
|
});
|
|
52
67
|
}
|
|
53
68
|
retrieveShapesOfInterest(list) {
|
|
@@ -10,24 +10,57 @@
|
|
|
10
10
|
import type { HeapAnalysisOptions } from '../PluginUtils';
|
|
11
11
|
import { BaseOption } from '@memlab/core';
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* duplicated string pattern information
|
|
15
|
+
*/
|
|
16
|
+
export declare type StringRecord = {
|
|
17
|
+
/** number of duplicated strings with this pattern */
|
|
14
18
|
n: number;
|
|
19
|
+
/** aggregated retained sizes of all duplicated strings with this pattern */
|
|
15
20
|
size: number;
|
|
21
|
+
/** heap object ids of the duplicated string */
|
|
16
22
|
ids: string[];
|
|
23
|
+
/** duplicated string pattern */
|
|
17
24
|
str?: string;
|
|
18
25
|
};
|
|
26
|
+
/**
|
|
27
|
+
* This analysis finds duplicated string instance in JavaScript heap
|
|
28
|
+
* and rank them based on the duplicated string size and count.
|
|
29
|
+
*/
|
|
19
30
|
export default class StringAnalysis extends BaseAnalysis {
|
|
20
31
|
private topDupStrInCnt;
|
|
21
32
|
private topDupStrInCntListSize;
|
|
22
33
|
private topDupStrInSize;
|
|
23
34
|
private topDupStrInSizeListSize;
|
|
24
35
|
private stringPatternsStat;
|
|
36
|
+
/**
|
|
37
|
+
* get the top duplicated string in terms of duplicated string count
|
|
38
|
+
* @returns an array of the top-duplicated strings' information
|
|
39
|
+
*/
|
|
25
40
|
getTopDuplicatedStringsInCount(): StringRecord[];
|
|
41
|
+
/**
|
|
42
|
+
* collect statistics for specified string patterns
|
|
43
|
+
* pattern name -> string pattern checker
|
|
44
|
+
*/
|
|
26
45
|
private static stringPatternsToObserve;
|
|
46
|
+
/**
|
|
47
|
+
* get CLI command name for this memory analysis;
|
|
48
|
+
* use it with `memlab analyze <ANALYSIS_NAME>` in CLI
|
|
49
|
+
* @returns command name
|
|
50
|
+
*/
|
|
27
51
|
getCommandName(): string;
|
|
52
|
+
/**
|
|
53
|
+
* get a textual description of the memory analysis
|
|
54
|
+
* @returns textual description
|
|
55
|
+
* @internal
|
|
56
|
+
*/
|
|
28
57
|
getDescription(): string;
|
|
58
|
+
/** @internal */
|
|
29
59
|
getOptions(): BaseOption[];
|
|
60
|
+
/** @internal */
|
|
61
|
+
analyzeSnapshotsInDirectory(directory: string): Promise<void>;
|
|
30
62
|
private static shouldIgnoreNode;
|
|
63
|
+
/** @internal */
|
|
31
64
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
32
65
|
private getPreprocessedStringMap;
|
|
33
66
|
private rankRecords;
|
|
@@ -36,5 +69,4 @@ export default class StringAnalysis extends BaseAnalysis {
|
|
|
36
69
|
private calculateStringPatternsStatistics;
|
|
37
70
|
private print;
|
|
38
71
|
}
|
|
39
|
-
export {};
|
|
40
72
|
//# sourceMappingURL=StringAnalysis.d.ts.map
|
|
@@ -26,6 +26,10 @@ const core_1 = require("@memlab/core");
|
|
|
26
26
|
const BaseAnalysis_1 = __importDefault(require("../BaseAnalysis"));
|
|
27
27
|
const PluginUtils_1 = __importDefault(require("../PluginUtils"));
|
|
28
28
|
const HeapAnalysisSnapshotFileOption_1 = __importDefault(require("../options/HeapAnalysisSnapshotFileOption"));
|
|
29
|
+
/**
|
|
30
|
+
* This analysis finds duplicated string instance in JavaScript heap
|
|
31
|
+
* and rank them based on the duplicated string size and count.
|
|
32
|
+
*/
|
|
29
33
|
class StringAnalysis extends BaseAnalysis_1.default {
|
|
30
34
|
constructor() {
|
|
31
35
|
super(...arguments);
|
|
@@ -35,18 +39,41 @@ class StringAnalysis extends BaseAnalysis_1.default {
|
|
|
35
39
|
this.topDupStrInSizeListSize = 10;
|
|
36
40
|
this.stringPatternsStat = {};
|
|
37
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* get the top duplicated string in terms of duplicated string count
|
|
44
|
+
* @returns an array of the top-duplicated strings' information
|
|
45
|
+
*/
|
|
38
46
|
getTopDuplicatedStringsInCount() {
|
|
39
47
|
return this.topDupStrInCnt;
|
|
40
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* get CLI command name for this memory analysis;
|
|
51
|
+
* use it with `memlab analyze <ANALYSIS_NAME>` in CLI
|
|
52
|
+
* @returns command name
|
|
53
|
+
*/
|
|
41
54
|
getCommandName() {
|
|
42
55
|
return 'string';
|
|
43
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* get a textual description of the memory analysis
|
|
59
|
+
* @returns textual description
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
44
62
|
getDescription() {
|
|
45
63
|
return 'Analyze string in heap';
|
|
46
64
|
}
|
|
65
|
+
/** @internal */
|
|
47
66
|
getOptions() {
|
|
48
67
|
return [new HeapAnalysisSnapshotFileOption_1.default()];
|
|
49
68
|
}
|
|
69
|
+
/** @internal */
|
|
70
|
+
analyzeSnapshotsInDirectory(directory) {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
72
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
73
|
+
const d = directory;
|
|
74
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotsInDirectory`);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
50
77
|
static shouldIgnoreNode(node) {
|
|
51
78
|
if (!core_1.utils.isStringNode(node) || core_1.utils.isSlicedStringNode(node)) {
|
|
52
79
|
return true;
|
|
@@ -56,6 +83,7 @@ class StringAnalysis extends BaseAnalysis_1.default {
|
|
|
56
83
|
const hasCodeDominator = dominators.reduce((prev, cur) => prev && cur.type !== 'code', true);
|
|
57
84
|
return !hasCodeDominator;
|
|
58
85
|
}
|
|
86
|
+
/** @internal */
|
|
59
87
|
process(options) {
|
|
60
88
|
return __awaiter(this, void 0, void 0, function* () {
|
|
61
89
|
const snapshot = yield PluginUtils_1.default.loadHeapSnapshot(options);
|
|
@@ -66,7 +94,6 @@ class StringAnalysis extends BaseAnalysis_1.default {
|
|
|
66
94
|
this.print();
|
|
67
95
|
});
|
|
68
96
|
}
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
70
97
|
getPreprocessedStringMap(snapshot) {
|
|
71
98
|
core_1.info.overwrite('building string map...');
|
|
72
99
|
const stringMap = Object.create(null);
|
|
@@ -182,8 +209,10 @@ class StringAnalysis extends BaseAnalysis_1.default {
|
|
|
182
209
|
}
|
|
183
210
|
}
|
|
184
211
|
exports.default = StringAnalysis;
|
|
185
|
-
|
|
186
|
-
|
|
212
|
+
/**
|
|
213
|
+
* collect statistics for specified string patterns
|
|
214
|
+
* pattern name -> string pattern checker
|
|
215
|
+
*/
|
|
187
216
|
StringAnalysis.stringPatternsToObserve = {
|
|
188
217
|
// all strings (excluding sliced strings)
|
|
189
218
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -12,8 +12,13 @@ import { BaseOption } from '@memlab/core';
|
|
|
12
12
|
import BaseAnalysis from '../BaseAnalysis';
|
|
13
13
|
export default class UnmountedFiberNodeAnalysis extends BaseAnalysis {
|
|
14
14
|
getCommandName(): string;
|
|
15
|
+
/** @internal */
|
|
15
16
|
getDescription(): string;
|
|
17
|
+
/** @internal */
|
|
16
18
|
getOptions(): BaseOption[];
|
|
19
|
+
/** @internal */
|
|
20
|
+
analyzeSnapshotsInDirectory(directory: string): Promise<void>;
|
|
21
|
+
/** @internal */
|
|
17
22
|
process(options: HeapAnalysisOptions): Promise<void>;
|
|
18
23
|
}
|
|
19
24
|
//# sourceMappingURL=UnmountedReactFiberNodesAnalysis.d.ts.map
|
|
@@ -29,12 +29,23 @@ class UnmountedFiberNodeAnalysis extends BaseAnalysis_1.default {
|
|
|
29
29
|
getCommandName() {
|
|
30
30
|
return 'unmounted-fiber-node';
|
|
31
31
|
}
|
|
32
|
+
/** @internal */
|
|
32
33
|
getDescription() {
|
|
33
34
|
return 'Get unmounted React Fiber nodes';
|
|
34
35
|
}
|
|
36
|
+
/** @internal */
|
|
35
37
|
getOptions() {
|
|
36
38
|
return [new HeapAnalysisSnapshotFileOption_1.default()];
|
|
37
39
|
}
|
|
40
|
+
/** @internal */
|
|
41
|
+
analyzeSnapshotsInDirectory(directory) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
44
|
+
const d = directory;
|
|
45
|
+
throw core_1.utils.haltOrThrow(`${this.constructor.name} does not support analyzeSnapshotsInDirectory`);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** @internal */
|
|
38
49
|
process(options) {
|
|
39
50
|
return __awaiter(this, void 0, void 0, function* () {
|
|
40
51
|
const snapshot = yield PluginUtils_1.default.loadHeapSnapshot(options);
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BaseAnalysis.d.ts","sourceRoot":"","sources":["../src/BaseAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAC,UAAU,EAA0B,MAAM,cAAc,CAAC;AAuBjE,uBAAe,QAAQ;cAEL,OAAO,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAM5D,GAAG,CACd,OAAO,GAAE,mBAAqD,GAC7D,OAAO,CAAC,QAAQ,CAAC;IAKP,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAUxD,2BAA2B,CACtC,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,QAAQ,CAAC;CASrB;AAED,cAAM,YAAa,SAAQ,QAAQ;IAGjC,cAAc,IAAI,MAAM;IAOxB,cAAc,IAAI,MAAM;cAUR,OAAO,CAErB,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,QAAQ,CAAC;IAMpB,UAAU,IAAI,UAAU,EAAE;CAG3B;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeapAnalysisLoader.d.ts","sourceRoot":"","sources":["../src/HeapAnalysisLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAE/C,cAAM,kBAAkB;IACtB,OAAO,CAAC,OAAO,CAAwC;IAEhD,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC;IASnD,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;CA4BhC;;AAED,wBAAwC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PluginUtils.d.ts","sourceRoot":"","sources":["../src/PluginUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACzC,OAAO,EACL,aAAa,EACb,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EAER,YAAY,EAEb,MAAM,cAAc,CAAC;AAKtB,oBAAY,mBAAmB,GAAG;IAChC,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAmBF,iBAAS,qBAAqB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAYvD;AAiDD,aAAK,eAAe,GAAG;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AACF,iBAAS,uBAAuB,CAC9B,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,UAAU,GAAG,eAAoB,GACzC,IAAI,CAgBN;AA4ED,iBAAS,yBAAyB,CAChC,QAAQ,EAAE,SAAS,EAAE,EACrB,OAAO,GAAE,UAAU,GAAG,eAAoB,GACzC,IAAI,CAON;AAED,iBAAS,0BAA0B,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAS3D;AAED,iBAAS,0BAA0B,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM,CAWxE;AAED,iBAAS,yBAAyB,CAChC,OAAO,EAAE,mBAAmB,GAC3B,QAAQ,CAAC,MAAM,CAAC,CASlB;AAED,iBAAe,gBAAgB,CAC7B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,aAAa,CAAC,CAGxB;AAYD,iBAAe,iBAAiB,CAAC,EAAE,EAAE,EAAE,EACrC,WAAW,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,EAAE,EACrE,cAAc,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EACrC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,EAAE,CAAC,CAqBb;AAED,iBAAS,yBAAyB,CAChC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAChB,QAAQ,EAAE,aAAa,EACvB,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,EACzC,aAAa,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,GACzC,MAAM,CAWR;AAED,iBAAS,uBAAuB,CAC9B,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,EAC1C,QAAQ,SAAK,GACZ,SAAS,EAAE,CAoBb;;;;;;;;;;;;;;;;;;AAED,wBAYE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeapAnalysis.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/HeapAnalysis.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAC,OAAO,IAAI,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAC,OAAO,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAC,OAAO,IAAI,sBAAsB,EAAC,MAAM,yDAAyD,CAAC;AAC1G,OAAO,EAAC,OAAO,IAAI,+BAA+B,EAAC,MAAM,2CAA2C,CAAC;AACrG,OAAO,EAAC,OAAO,IAAI,qBAAqB,EAAC,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAC,OAAO,IAAI,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAC,OAAO,IAAI,0BAA0B,EAAC,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAC,OAAO,IAAI,oBAAoB,EAAC,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAC,OAAO,IAAI,mBAAmB,EAAC,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EAAC,OAAO,IAAI,2BAA2B,EAAC,MAAM,uCAAuC,CAAC;AAC7F,OAAO,EAAC,OAAO,IAAI,cAAc,EAAC,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,eAAe,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeapAnalysisSnapshotDirectoryOption.d.ts","sourceRoot":"","sources":["../../src/options/HeapAnalysisSnapshotDirectoryOption.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAC,UAAU,EAAE,YAAY,EAAQ,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,mCAAoC,SAAQ,UAAU;IACzE,aAAa,IAAI,MAAM;IAIvB,cAAc,IAAI,MAAM;IAIxB,gBAAgB,IAAI,MAAM,EAAE;IAItB,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HeapAnalysisSnapshotFileOption.d.ts","sourceRoot":"","sources":["../../src/options/HeapAnalysisSnapshotFileOption.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AAGzC,OAAO,EAAC,UAAU,EAAE,YAAY,EAAQ,MAAM,cAAc,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,8BAA+B,SAAQ,UAAU;IACpE,aAAa,IAAI,MAAM;IAIvB,cAAc,IAAI,MAAM;IAIxB,gBAAgB,IAAI,MAAM,EAAE;IAItB,KAAK,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAWnE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CollectionsHoldingStaleAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/CollectionsHoldingStaleAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAc,UAAU,EAAC,MAAM,cAAc,CAAC;AACrD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAgD3C,MAAM,CAAC,OAAO,OAAO,+BAAgC,SAAQ,YAAY;IAChE,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAI/B,UAAU,IAAI,UAAU,EAAE;IAI1B,OAAO,CAAC,qBAAqB,CAO1B;IAEG,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D,OAAO,CAAC,6BAA6B;IAoBrC,OAAO,CAAC,KAAK;CAgCd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DetachedDOMElementAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/DetachedDOMElementAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAQ,UAAU,EAAC,MAAM,cAAc,CAAC;AAC/C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,YAAY;IAClE,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAI1B,OAAO,CAAC,gBAAgB,CAAmB;IAEpC,mBAAmB,IAAI,SAAS,EAAE;IAInC,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BuiltInGlobalVariables.d.ts","sourceRoot":"","sources":["../../../src/plugins/GlobalVariableAnalysis/BuiltInGlobalVariables.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;;AAEH,wBAoiCG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"GlobalVariableAnalysis.d.ts","sourceRoot":"","sources":["../../../src/plugins/GlobalVariableAnalysis/GlobalVariableAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAI9C,cAAM,sBAAuB,SAAQ,YAAY;IAC/C,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D,OAAO,CAAC,mBAAmB;IAkB3B,OAAO,CAAC,kBAAkB;CAoB3B;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectFanoutAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ObjectFanoutAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAIxD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,cAAM,oBAAqB,SAAQ,YAAY;IAC7C,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM1D,OAAO,CAAC,wBAAwB;CA2BjC;AAED,eAAe,oBAAoB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectShallowAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ObjectShallowAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAc,UAAU,EAAY,MAAM,cAAc,CAAC;AAChE,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAS3C,aAAK,YAAY,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAiBF,cAAM,qBAAsB,SAAQ,YAAY;IAC9C,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,sBAAsB,CAAM;IACpC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,kBAAkB,CAAyB;IAEnD,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD,6BAA6B,IAAI,YAAY,EAAE;IAItD,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAGpC;IAEF,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,oCAAoC;IAS5C,OAAO,CAAC,mCAAmC;IAS3C,OAAO,CAAC,iCAAiC;IA6BzC,OAAO,CAAC,KAAK;CA8Cd;AAED,eAAe,qBAAqB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectShapeAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ObjectShapeAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAW,UAAU,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,cAAM,mBAAoB,SAAQ,YAAY;IAC5C,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAI3D;AAED,eAAe,mBAAmB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectSizeAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ObjectSizeAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,cAAM,sBAAuB,SAAQ,YAAY;IAC/C,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3D;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ObjectUnboundGrowthAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ObjectUnboundGrowthAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAmB,UAAU,EAAC,MAAM,cAAc,CAAC;AAC1D,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAI3C,cAAM,2BAA4B,SAAQ,YAAY;IACpD,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAM3D;AAED,eAAe,2BAA2B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ShapeUnboundGrowthAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/ShapeUnboundGrowthAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAW,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAC,UAAU,EAAkC,MAAM,cAAc,CAAC;AAEzE,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAG3C,aAAK,UAAU,GAAG;IAChB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,KAAK,EAAE,MAAM,CAAC;IACd,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAClB,CAAC;AAEF,aAAK,YAAY,GAAG;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,YAAY;IAC3D,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAI/B,UAAU,IAAI,UAAU,EAAE;IAI1B,OAAO,CAAC,gBAAgB,CAA+B;IAE1C,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB3E,OAAO,CAAC,wBAAwB;IAOhC,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,UAAU;IAoDlD,UAAU,CAAC,cAAc,EAAE,UAAU,EAAE,GAAG,YAAY,EAAE;IAyDxD,OAAO,CAAC,KAAK;CAmBd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StringAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/StringAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAGxD,OAAO,EAAc,UAAU,EAAC,MAAM,cAAc,CAAC;AACrD,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAQ3C,aAAK,YAAY,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAiBF,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,YAAY;IACtD,OAAO,CAAC,cAAc,CAAsB;IAC5C,OAAO,CAAC,sBAAsB,CAAM;IACpC,OAAO,CAAC,eAAe,CAAsB;IAC7C,OAAO,CAAC,uBAAuB,CAAM;IACrC,OAAO,CAAC,kBAAkB,CAAyB;IAE5C,8BAA8B,IAAI,YAAY,EAAE;IAMvD,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAmCpC;IAEK,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAI/B,UAAU,IAAI,UAAU,EAAE;IAI1B,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAczB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU1D,OAAO,CAAC,wBAAwB;IAwBhC,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,oCAAoC;IAS5C,OAAO,CAAC,mCAAmC;IAS3C,OAAO,CAAC,iCAAiC;IA6BzC,OAAO,CAAC,KAAK;CA4Cd"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"UnmountedReactFiberNodesAnalysis.d.ts","sourceRoot":"","sources":["../../src/plugins/UnmountedReactFiberNodesAnalysis.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gBAAgB,CAAC;AAExD,OAAO,EAAQ,UAAU,EAAC,MAAM,cAAc,CAAC;AAE/C,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAG3C,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,YAAY;IAClE,cAAc,IAAI,MAAM;IAIxB,cAAc,IAAI,MAAM;IAIxB,UAAU,IAAI,UAAU,EAAE;IAIpB,OAAO,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQ3D"}
|