@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,31 @@
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 type { ParsedArgs } from 'minimist';
11
+ import type { AnyRecord } from './Types';
12
+ import { MemLabConfig } from './Config';
13
+ declare abstract class Option {
14
+ private optionalFlag;
15
+ getOptionName(): string;
16
+ getOptionShortcut(): string | null;
17
+ protected parse(_config: MemLabConfig, _args: ParsedArgs): Promise<AnyRecord | void>;
18
+ run(config: MemLabConfig, args: ParsedArgs): Promise<AnyRecord | void>;
19
+ optional(): BaseOption;
20
+ required(): BaseOption;
21
+ isOptional(): boolean;
22
+ }
23
+ export default class BaseOption extends Option {
24
+ getOptionName(): string;
25
+ getOptionShortcut(): string | null;
26
+ getExampleValues(): string[];
27
+ getDescription(): string;
28
+ protected parse(_config: MemLabConfig, _args: ParsedArgs): Promise<AnyRecord | void>;
29
+ }
30
+ export {};
31
+ //# sourceMappingURL=BaseOption.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseOption.d.ts","sourceRoot":"","sources":["../../src/lib/BaseOption.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAGvC,OAAO,EAAC,YAAY,EAAC,MAAM,UAAU,CAAC;AAEtC,uBAAe,MAAM;IACnB,OAAO,CAAC,YAAY,CAAQ;IAG5B,aAAa,IAAI,MAAM;IAMvB,iBAAiB,IAAI,MAAM,GAAG,IAAI;cAKlB,KAAK,CAEnB,OAAO,EAAE,YAAY,EAErB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAMtB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAgB5E,QAAQ,IAAI,UAAU;IAKtB,QAAQ,IAAI,UAAU;IAKtB,UAAU,IAAI,OAAO;CAGtB;AAED,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAE5C,aAAa,IAAI,MAAM;IAMvB,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAMlC,gBAAgB,IAAI,MAAM,EAAE;IAK5B,cAAc,IAAI,MAAM;cAMR,KAAK,CAEnB,OAAO,EAAE,YAAY,EAErB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAI7B"}
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ * @emails oncall+ws_labs
9
+ * @format
10
+ */
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ const Utils_1 = __importDefault(require("./Utils"));
25
+ class Option {
26
+ constructor() {
27
+ this.optionalFlag = true;
28
+ }
29
+ // option long name, e.g., --verbose
30
+ getOptionName() {
31
+ const className = this.constructor.name;
32
+ throw new Error(`${className}.getOptionName is not implemented`);
33
+ }
34
+ // option shortcut, e.g., -v
35
+ getOptionShortcut() {
36
+ const className = this.constructor.name;
37
+ throw new Error(`${className}.getOptionShortcut is not implemented`);
38
+ }
39
+ parse(
40
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
41
+ _config,
42
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
+ _args) {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ const className = this.constructor.name;
46
+ throw new Error(`${className}.parse is not implemented`);
47
+ });
48
+ }
49
+ // DO NOT OVERRIDE
50
+ run(config, args) {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ // check presence of required flag
53
+ if (!this.optionalFlag) {
54
+ const keys = new Set(Object.keys(args));
55
+ if (!keys.has(this.getOptionName())) {
56
+ const shortcut = this.getOptionShortcut();
57
+ if (!shortcut || !keys.has(shortcut)) {
58
+ Utils_1.default.haltOrThrow(`command line argument --${this.getOptionName()} is required`);
59
+ }
60
+ }
61
+ }
62
+ return yield this.parse(config, args);
63
+ });
64
+ }
65
+ optional() {
66
+ this.optionalFlag = true;
67
+ return this;
68
+ }
69
+ required() {
70
+ this.optionalFlag = false;
71
+ return this;
72
+ }
73
+ isOptional() {
74
+ return this.optionalFlag;
75
+ }
76
+ }
77
+ class BaseOption extends Option {
78
+ // option long name, e.g., --verbose
79
+ getOptionName() {
80
+ const className = this.constructor.name;
81
+ throw Utils_1.default.haltOrThrow(`${className}.getCommandName is not implemented`);
82
+ }
83
+ // option shortcut, e.g., -v
84
+ getOptionShortcut() {
85
+ return null;
86
+ }
87
+ // get a list of example values
88
+ // examples will be displayed in helper text
89
+ getExampleValues() {
90
+ return [];
91
+ }
92
+ // description of this option (printed in helper text)
93
+ getDescription() {
94
+ const className = this.constructor.name;
95
+ throw new Error(`${className}.getDescription is not implemented`);
96
+ }
97
+ // Do the memory analysis and print results in this callback
98
+ parse(
99
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
100
+ _config,
101
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
102
+ _args) {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ const className = this.constructor.name;
105
+ throw new Error(`${className}.parse is not implemented`);
106
+ });
107
+ }
108
+ }
109
+ exports.default = BaseOption;
@@ -0,0 +1,33 @@
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 type { ConsoleMessage, Dialog, LaunchOptions, Page } from 'puppeteer';
11
+ import type { IBrowserInfo } from './Types';
12
+ declare type Options = {
13
+ color?: boolean;
14
+ };
15
+ declare class BrowserInfo {
16
+ _browserVersion: string;
17
+ _puppeteerConfig: LaunchOptions;
18
+ _consoleMessages: string[];
19
+ constructor();
20
+ clear(): void;
21
+ setBrowserVersion(version: string): void;
22
+ setPuppeteerConfig(puppeteerConfig: LaunchOptions): void;
23
+ load(browserInfo: IBrowserInfo): void;
24
+ formatConsoleMessage(message: ConsoleMessage, options?: Options): string[];
25
+ formatDialogMessage(dialog: Dialog, options?: Options): string;
26
+ addMarker(marker: string): void;
27
+ summarizeConsoleMessage(): string;
28
+ dump(): void;
29
+ monitorWebConsole(page: Page): void;
30
+ }
31
+ declare const _default: BrowserInfo;
32
+ export default _default;
33
+ //# sourceMappingURL=BrowserInfo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserInfo.d.ts","sourceRoot":"","sources":["../../src/lib/BrowserInfo.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AAC3E,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,SAAS,CAAC;AAC1C,aAAK,OAAO,GAAG;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAC,CAAC;AAQjC,cAAM,WAAW;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,aAAa,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;;IAQ3B,KAAK;IAIL,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIxC,kBAAkB,CAAC,eAAe,EAAE,aAAa,GAAG,IAAI;IAIxD,IAAI,CAAC,WAAW,EAAE,YAAY,GAAG,IAAI;IAMrC,oBAAoB,CAClB,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,OAAY,GACpB,MAAM,EAAE;IAqBX,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,GAAG,MAAM;IASlE,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B,uBAAuB,IAAI,MAAM;IAIjC,IAAI,IAAI,IAAI;IAOZ,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;CA8BpC;;AAED,wBAAiC"}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ /**
3
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
4
+ *
5
+ * This source code is licensed under the MIT license found in the
6
+ * LICENSE file in the root directory of this source tree.
7
+ *
8
+ * @emails oncall+ws_labs
9
+ * @format
10
+ */
11
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
+ return new (P || (P = Promise))(function (resolve, reject) {
14
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
18
+ });
19
+ };
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ const Config_1 = __importDefault(require("./Config"));
25
+ const Console_1 = __importDefault(require("./Console"));
26
+ const Constant_1 = __importDefault(require("./Constant"));
27
+ const chalk_1 = __importDefault(require("chalk"));
28
+ const fs_1 = __importDefault(require("fs"));
29
+ class BrowserInfo {
30
+ constructor() {
31
+ this._browserVersion = Constant_1.default.unset;
32
+ this._puppeteerConfig = {};
33
+ this._consoleMessages = [];
34
+ }
35
+ clear() {
36
+ this._consoleMessages = [];
37
+ }
38
+ setBrowserVersion(version) {
39
+ this._browserVersion = version;
40
+ }
41
+ setPuppeteerConfig(puppeteerConfig) {
42
+ this._puppeteerConfig = puppeteerConfig;
43
+ }
44
+ load(browserInfo) {
45
+ this._browserVersion = browserInfo._browserVersion;
46
+ this._puppeteerConfig = browserInfo._puppeteerConfig;
47
+ this._consoleMessages = browserInfo._consoleMessages;
48
+ }
49
+ formatConsoleMessage(message, options = {}) {
50
+ if (!message) {
51
+ return [];
52
+ }
53
+ const type = `${message.type()}`;
54
+ if (type === 'startGroup' ||
55
+ type === 'endGroup' ||
56
+ type === 'groupStart' ||
57
+ type === 'groupEnd') {
58
+ return [];
59
+ }
60
+ const text = message.text();
61
+ return text.split('\n').map(line => {
62
+ let consoleInfo = `[console.${type}]`;
63
+ consoleInfo = options.color ? chalk_1.default.blue(consoleInfo) : consoleInfo;
64
+ return `${consoleInfo}: ${line}`;
65
+ });
66
+ }
67
+ formatDialogMessage(dialog, options = {}) {
68
+ if (!dialog || !dialog.message()) {
69
+ return '';
70
+ }
71
+ let typeInfo = `[dialog ${dialog.type()}]`;
72
+ typeInfo = options.color ? chalk_1.default.blue(typeInfo) : typeInfo;
73
+ return `${typeInfo}: ${dialog.message()}`;
74
+ }
75
+ addMarker(marker) {
76
+ this._consoleMessages.push(marker);
77
+ }
78
+ summarizeConsoleMessage() {
79
+ return this._consoleMessages.join('\n');
80
+ }
81
+ dump() {
82
+ const file = Config_1.default.browserInfoSummary;
83
+ const consoleSummary = this.summarizeConsoleMessage();
84
+ const summary = `Web Console Output:\n${consoleSummary}`;
85
+ fs_1.default.writeFileSync(file, summary, 'utf-8');
86
+ }
87
+ monitorWebConsole(page) {
88
+ page.on('console', message => {
89
+ let msgList = this.formatConsoleMessage(message);
90
+ this._consoleMessages = this._consoleMessages.concat(msgList);
91
+ if (Config_1.default.verbose || Config_1.default.dumpWebConsole) {
92
+ msgList = this.formatConsoleMessage(message, { color: true });
93
+ if (msgList.length > 0) {
94
+ Console_1.default.highLevel(msgList.join('\n'));
95
+ }
96
+ }
97
+ message.args().forEach(handle => handle.dispose());
98
+ });
99
+ const handleError = (err) => {
100
+ this._consoleMessages.push(err.toString());
101
+ Console_1.default.error(err.message);
102
+ };
103
+ page.on('pageerror', handleError);
104
+ page.on('error', handleError);
105
+ // automatically accept dialog
106
+ page.on('dialog', (dialog) => __awaiter(this, void 0, void 0, function* () {
107
+ let msg = this.formatDialogMessage(dialog);
108
+ this._consoleMessages.push(msg);
109
+ if (Config_1.default.verbose || Config_1.default.dumpWebConsole) {
110
+ msg = this.formatDialogMessage(dialog, { color: true });
111
+ Console_1.default.highLevel(msg);
112
+ }
113
+ yield dialog.accept();
114
+ }));
115
+ }
116
+ }
117
+ exports.default = new BrowserInfo();
@@ -0,0 +1,203 @@
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 type { LaunchOptions, Permission } from 'puppeteer';
11
+ import type { AnyFunction, AnyValue, IClusterStrategy, IRunningMode, IScenario, Nullable, Optional, QuickExperiment, ILeakFilter } from './Types';
12
+ interface BrowserLaunchArgumentOptions {
13
+ headless?: boolean;
14
+ userDataDir?: string;
15
+ devtools?: boolean;
16
+ debuggingPort?: number;
17
+ args?: string[];
18
+ }
19
+ interface BrowserConnectOptions {
20
+ ignoreHTTPSErrors?: boolean;
21
+ defaultViewport?: AnyValue | null;
22
+ slowMo?: number;
23
+ targetFilter?: AnyFunction;
24
+ }
25
+ interface Device {
26
+ name: string;
27
+ userAgent: string;
28
+ viewport: {
29
+ width: number;
30
+ height: number;
31
+ deviceScaleFactor: number;
32
+ isMobile: boolean;
33
+ hasTouch: boolean;
34
+ isLandscape: boolean;
35
+ };
36
+ }
37
+ declare type ConfigOption = {
38
+ workDir?: string;
39
+ };
40
+ export declare enum ErrorHandling {
41
+ Halt = 1,
42
+ Throw = 2
43
+ }
44
+ export declare class MemLabConfig {
45
+ snapshotHasDetachedness: boolean;
46
+ specifiedEngine: boolean;
47
+ verbose: boolean;
48
+ jsEngine: string;
49
+ _reportLeaksInTimers: boolean;
50
+ _deviceManualOverridden: boolean;
51
+ _timerNodes: string[];
52
+ _timerEdges: string[];
53
+ targetApp: string;
54
+ targetTab: string;
55
+ analysisMode: string;
56
+ focusFiberNodeId: number;
57
+ isFB: boolean;
58
+ machineSupportsXVFB: boolean;
59
+ useXVFB: boolean;
60
+ browserDir: string;
61
+ dataBaseDir: string;
62
+ userDataDir: string;
63
+ curDataDir: string;
64
+ runMetaFile: string;
65
+ snapshotSequenceFile: string;
66
+ exploreResultFile: string;
67
+ singleReportSummary: string;
68
+ browserInfoSummary: string;
69
+ unboundObjectCSV: string;
70
+ viewJsonFile: string;
71
+ reportBaseDir: string;
72
+ reportDistDir: string;
73
+ reportOutDir: string;
74
+ previewReportDir: string;
75
+ inputDataDir: string;
76
+ persistentDataDir: string;
77
+ consoleLogFile: string;
78
+ cookieSettingFile: string;
79
+ traceClusterFile: string;
80
+ traceClusterOutDir: string;
81
+ traceJsonOutDir: string;
82
+ metricsOutDir: string;
83
+ reportScreenshotFile: string;
84
+ newUniqueClusterDir: string;
85
+ staleUniqueClusterDir: string;
86
+ currentUniqueClusterDir: string;
87
+ allClusterSummaryFile: string;
88
+ dataBuilderDataDir: string;
89
+ unclassifiedClusterDir: string;
90
+ externalCookiesFile: Optional<string>;
91
+ puppeteerConfig: LaunchOptions & BrowserLaunchArgumentOptions & BrowserConnectOptions;
92
+ openDevtoolsConsole: boolean;
93
+ emulateDevice: Nullable<Device>;
94
+ _browser: string;
95
+ addEnableGK: Set<string>;
96
+ addDisableGK: Set<string>;
97
+ qes: QuickExperiment[];
98
+ isOndemand: boolean;
99
+ useExternalSnapshot: boolean;
100
+ externalRunMetaFile: string;
101
+ externalSnapshotVisitOrderFile: string;
102
+ externalSnapshotDir: Nullable<string>;
103
+ externalSnapshotFilePaths: string[];
104
+ runningMode: IRunningMode;
105
+ dumpWebConsole: boolean;
106
+ clearConsole: boolean;
107
+ traverseDevToolsConsole: boolean;
108
+ skipWarmup: boolean;
109
+ skipSnapshot: boolean;
110
+ skipScreenshot: boolean;
111
+ skipScroll: boolean;
112
+ skipExtraOps: boolean;
113
+ skipGC: boolean;
114
+ isContinuousTest: boolean;
115
+ isTest: boolean;
116
+ isLocalPuppeteer: boolean;
117
+ isManualDebug: boolean;
118
+ warmupRepeat: number;
119
+ delayWhenNoPageLoadCheck: number;
120
+ repeatIntermediateTabs: number;
121
+ interactionFailRetry: number;
122
+ initialLoadFailRetry: number;
123
+ presenceCheckTimeout: number;
124
+ delayBeforeExitUponException: number;
125
+ windowWidth: number;
126
+ windowHeight: number;
127
+ disableScroll: boolean;
128
+ scrollRepeat: number;
129
+ extraWaitingForTarget: number;
130
+ extraWaitingForFinal: number;
131
+ defaultAfterClickDelay: number;
132
+ warmupPageLoadTimeout: number;
133
+ initialPageLoadTimeout: number;
134
+ waitAfterGC: number;
135
+ waitAfterPageLoad: number;
136
+ waitAfterOperation: number;
137
+ waitAfterScrolling: number;
138
+ waitAfterTyping: number;
139
+ stressTestRepeat: number;
140
+ avoidLeakWithoutDetachedElements: boolean;
141
+ hideBrowserLeak: boolean;
142
+ chaseWeakMapEdge: boolean;
143
+ detectFiberNodeLeak: boolean;
144
+ grantedPermissions: Permission[];
145
+ monotonicUnboundGrowthOnly: boolean;
146
+ unboundSizeThreshold: number;
147
+ resetGK: boolean;
148
+ defaultUserAgent: Nullable<string>;
149
+ dumpNodeInfo: boolean;
150
+ maxSearchSteps: number;
151
+ maxSearchReferences: number;
152
+ nodeToShowMoreInfo: Set<string>;
153
+ ignoreDevToolsConsoleLeak: boolean;
154
+ ignoreInternalNode: boolean;
155
+ nodeNameBlockList: Set<string>;
156
+ edgeNameBlockList: Set<string>;
157
+ nodeNameGreyList: Set<string>;
158
+ edgeNameGreyList: Set<string>;
159
+ localBrowserPort: number;
160
+ ignoreTypesInContinuousTest: Set<string>;
161
+ ignoreAppsInContinuousTest: Set<string>;
162
+ URLParamLengthLimit: number;
163
+ edgeIgnoreSetInShape: Set<string | number>;
164
+ nodeIgnoreSetInShape: Set<string>;
165
+ oversizeObjectAsLeak: boolean;
166
+ oversizeThreshold: number;
167
+ _isFullRun: boolean;
168
+ _scenario: Optional<IScenario>;
169
+ externalLeakFilter?: Optional<ILeakFilter>;
170
+ monoRepoDir: string;
171
+ muteConsole: boolean;
172
+ logUnclassifiedClusters: boolean;
173
+ errorHandling: ErrorHandling;
174
+ clusterStrategy: Optional<IClusterStrategy>;
175
+ constructor(options?: ConfigOption);
176
+ private initInternalConfigs;
177
+ private init;
178
+ getAdditionalConfigInContinuousTest(_app: string, _interaction: string): string[];
179
+ private static instance;
180
+ static getInstance(): MemLabConfig;
181
+ static resetConfigWithTranscientDir(): MemLabConfig;
182
+ private haltOrThrow;
183
+ setTarget(app: string, tab: string): void;
184
+ set scenario(scenario: Optional<IScenario>);
185
+ get scenario(): Optional<IScenario>;
186
+ set isFullRun(isFull: boolean);
187
+ get isFullRun(): boolean;
188
+ set browser(v: string);
189
+ get browser(): string;
190
+ get browserBinaryPath(): string;
191
+ set reportLeaksInTimers(flag: boolean);
192
+ get reportLeaksInTimers(): boolean;
193
+ setDevice(deviceName: string, options?: {
194
+ manualOverride?: boolean;
195
+ }): void;
196
+ private removeFromSet;
197
+ private addToSet;
198
+ enableXvfb(display: string): void;
199
+ disableXvfb(): void;
200
+ }
201
+ declare const config: MemLabConfig;
202
+ export default config;
203
+ //# sourceMappingURL=Config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Config.d.ts","sourceRoot":"","sources":["../../src/lib/Config.ts"],"names":[],"mappings":"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"}