@memlab/core 1.1.4 → 1.1.5
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/dist/index.d.ts +4 -0
- package/dist/index.js +21 -1
- package/dist/lib/Config.d.ts +10 -9
- package/dist/lib/Config.js +2 -0
- package/dist/lib/PackageInfoLoader.d.ts +7 -0
- package/dist/lib/PackageInfoLoader.js +66 -0
- package/dist/lib/Types.d.ts +14 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* @emails oncall+ws_labs
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
/** @internal */
|
|
11
|
+
export declare function registerPackage(): Promise<void>;
|
|
10
12
|
export * from './lib/Types';
|
|
11
13
|
/** @internal */
|
|
12
14
|
export { default as config } from './lib/Config';
|
|
@@ -42,5 +44,7 @@ export { default as leakClusterLogger } from './logger/LeakClusterLogger';
|
|
|
42
44
|
export { default as NormalizedTrace } from './trace-cluster/TraceBucket';
|
|
43
45
|
/** @internal */
|
|
44
46
|
export { default as EvaluationMetric } from './trace-cluster/EvalutationMetric';
|
|
47
|
+
/** @internal */
|
|
48
|
+
export * from './lib/PackageInfoLoader';
|
|
45
49
|
export * from './lib/NodeHeap';
|
|
46
50
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -22,11 +22,29 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
|
|
|
22
22
|
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
23
23
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
24
24
|
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
25
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
36
|
};
|
|
28
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.EvaluationMetric = exports.NormalizedTrace = exports.leakClusterLogger = exports.ProcessManager = exports.modes = exports.constant = exports.analysis = exports.browserInfo = exports.serializer = exports.fileManager = exports.utils = exports.BaseOption = exports.info = exports.config = void 0;
|
|
38
|
+
exports.EvaluationMetric = exports.NormalizedTrace = exports.leakClusterLogger = exports.ProcessManager = exports.modes = exports.constant = exports.analysis = exports.browserInfo = exports.serializer = exports.fileManager = exports.utils = exports.BaseOption = exports.info = exports.config = exports.registerPackage = void 0;
|
|
39
|
+
const path_1 = __importDefault(require("path"));
|
|
40
|
+
const PackageInfoLoader_1 = require("./lib/PackageInfoLoader");
|
|
41
|
+
/** @internal */
|
|
42
|
+
function registerPackage() {
|
|
43
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
+
return PackageInfoLoader_1.PackageInfoLoader.registerPackage(path_1.default.join(__dirname, '..'));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
exports.registerPackage = registerPackage;
|
|
30
48
|
__exportStar(require("./lib/Types"), exports);
|
|
31
49
|
/** @internal */
|
|
32
50
|
var Config_1 = require("./lib/Config");
|
|
@@ -76,4 +94,6 @@ Object.defineProperty(exports, "NormalizedTrace", { enumerable: true, get: funct
|
|
|
76
94
|
/** @internal */
|
|
77
95
|
var EvalutationMetric_1 = require("./trace-cluster/EvalutationMetric");
|
|
78
96
|
Object.defineProperty(exports, "EvaluationMetric", { enumerable: true, get: function () { return __importDefault(EvalutationMetric_1).default; } });
|
|
97
|
+
/** @internal */
|
|
98
|
+
__exportStar(require("./lib/PackageInfoLoader"), exports);
|
|
79
99
|
__exportStar(require("./lib/NodeHeap"), exports);
|
package/dist/lib/Config.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
import type { LaunchOptions, Permission } from 'puppeteer';
|
|
11
|
-
import type { AnyFunction, AnyValue, IClusterStrategy, IRunningMode, IScenario, Nullable, Optional, QuickExperiment, ILeakFilter } from './Types';
|
|
11
|
+
import type { AnyFunction, AnyValue, IClusterStrategy, IRunningMode, IScenario, Nullable, Optional, QuickExperiment, ILeakFilter, IPackageInfo } from './Types';
|
|
12
12
|
interface BrowserLaunchArgumentOptions {
|
|
13
13
|
headless?: boolean;
|
|
14
14
|
userDataDir?: string;
|
|
@@ -44,14 +44,19 @@ export declare enum ErrorHandling {
|
|
|
44
44
|
}
|
|
45
45
|
/** @internal */
|
|
46
46
|
export declare class MemLabConfig {
|
|
47
|
-
snapshotHasDetachedness: boolean;
|
|
48
|
-
specifiedEngine: boolean;
|
|
49
|
-
verbose: boolean;
|
|
50
|
-
jsEngine: string;
|
|
51
47
|
_reportLeaksInTimers: boolean;
|
|
52
48
|
_deviceManualOverridden: boolean;
|
|
53
49
|
_timerNodes: string[];
|
|
54
50
|
_timerEdges: string[];
|
|
51
|
+
_isFullRun: boolean;
|
|
52
|
+
_scenario: Optional<IScenario>;
|
|
53
|
+
_isHeadfulBrowser: boolean;
|
|
54
|
+
_browser: string;
|
|
55
|
+
_packageInfo: IPackageInfo[];
|
|
56
|
+
snapshotHasDetachedness: boolean;
|
|
57
|
+
specifiedEngine: boolean;
|
|
58
|
+
verbose: boolean;
|
|
59
|
+
jsEngine: string;
|
|
55
60
|
targetApp: string;
|
|
56
61
|
targetTab: string;
|
|
57
62
|
analysisMode: string;
|
|
@@ -94,7 +99,6 @@ export declare class MemLabConfig {
|
|
|
94
99
|
puppeteerConfig: LaunchOptions & BrowserLaunchArgumentOptions & BrowserConnectOptions;
|
|
95
100
|
openDevtoolsConsole: boolean;
|
|
96
101
|
emulateDevice: Nullable<Device>;
|
|
97
|
-
_browser: string;
|
|
98
102
|
addEnableGK: Set<string>;
|
|
99
103
|
addDisableGK: Set<string>;
|
|
100
104
|
qes: QuickExperiment[];
|
|
@@ -169,9 +173,6 @@ export declare class MemLabConfig {
|
|
|
169
173
|
oversizeObjectAsLeak: boolean;
|
|
170
174
|
oversizeThreshold: number;
|
|
171
175
|
clusterRetainedSizeThreshold: number;
|
|
172
|
-
_isFullRun: boolean;
|
|
173
|
-
_scenario: Optional<IScenario>;
|
|
174
|
-
_isHeadfulBrowser: boolean;
|
|
175
176
|
externalLeakFilter?: Optional<ILeakFilter>;
|
|
176
177
|
monoRepoDir: string;
|
|
177
178
|
muteConsole: boolean;
|
package/dist/lib/Config.js
CHANGED
|
@@ -97,6 +97,8 @@ class MemLabConfig {
|
|
|
97
97
|
this.jsEngine = Constant_1.default.defaultEngine;
|
|
98
98
|
// the default browser (Chromium)
|
|
99
99
|
this._browser = 'chrome';
|
|
100
|
+
// a list of package information
|
|
101
|
+
this._packageInfo = [];
|
|
100
102
|
// a set of additional GKs to be enabled
|
|
101
103
|
this.addEnableGK = new Set();
|
|
102
104
|
// a set of additional GKs to be disabled
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.PackageInfoLoader = void 0;
|
|
16
|
+
/**
|
|
17
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
18
|
+
*
|
|
19
|
+
* This source code is licensed under the MIT license found in the
|
|
20
|
+
* LICENSE file in the root directory of this source tree.
|
|
21
|
+
*
|
|
22
|
+
* @emails oncall+ws_labs
|
|
23
|
+
* @format
|
|
24
|
+
*/
|
|
25
|
+
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
26
|
+
const path_1 = __importDefault(require("path"));
|
|
27
|
+
const Config_1 = __importDefault(require("./Config"));
|
|
28
|
+
const Utils_1 = __importDefault(require("./Utils"));
|
|
29
|
+
/** @internal */
|
|
30
|
+
class PackageInfoLoader {
|
|
31
|
+
static loadFrom(packageDirectory) {
|
|
32
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
33
|
+
let exists = yield fs_extra_1.default.pathExists(packageDirectory);
|
|
34
|
+
if (!exists) {
|
|
35
|
+
throw Utils_1.default.haltOrThrow(`package directory doesn't exist: ${packageDirectory}`);
|
|
36
|
+
}
|
|
37
|
+
let packageJSONFile = path_1.default.join(packageDirectory, 'package-oss.json');
|
|
38
|
+
exists = yield fs_extra_1.default.pathExists(packageJSONFile);
|
|
39
|
+
if (!exists) {
|
|
40
|
+
packageJSONFile = path_1.default.join(packageDirectory, 'package.json');
|
|
41
|
+
}
|
|
42
|
+
exists = yield fs_extra_1.default.pathExists(packageJSONFile);
|
|
43
|
+
if (!exists) {
|
|
44
|
+
throw Utils_1.default.haltOrThrow(`package.json doesn't exist: ${packageJSONFile}`);
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const metaData = yield fs_extra_1.default.readJSON(packageJSONFile, 'UTF-8');
|
|
48
|
+
return Object.assign(Object.assign({}, metaData), { packageLocation: packageDirectory });
|
|
49
|
+
}
|
|
50
|
+
catch (ex) {
|
|
51
|
+
throw Utils_1.default.haltOrThrow(Utils_1.default.getError(ex));
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
static registerPackage(packageDirectory) {
|
|
56
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if (!PackageInfoLoader.registeredPackages.has(packageDirectory)) {
|
|
58
|
+
PackageInfoLoader.registeredPackages.add(packageDirectory);
|
|
59
|
+
const packageInfo = yield PackageInfoLoader.loadFrom(packageDirectory);
|
|
60
|
+
Config_1.default._packageInfo.push(packageInfo);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.PackageInfoLoader = PackageInfoLoader;
|
|
66
|
+
PackageInfoLoader.registeredPackages = new Set();
|
package/dist/lib/Types.d.ts
CHANGED
|
@@ -120,6 +120,12 @@ export interface E2EScenarioSynthesizerConstructor {
|
|
|
120
120
|
new (config: Config): IE2EScenarioSynthesizer;
|
|
121
121
|
}
|
|
122
122
|
/** @internal */
|
|
123
|
+
export interface IPackageInfo {
|
|
124
|
+
name: string;
|
|
125
|
+
version: string;
|
|
126
|
+
packageLocation?: string;
|
|
127
|
+
}
|
|
128
|
+
/** @internal */
|
|
123
129
|
export interface IRunningMode {
|
|
124
130
|
setConfig(config: Config): void;
|
|
125
131
|
beforeRunning(visitPlan: IE2EScenarioVisitPlan): void;
|
|
@@ -451,6 +457,10 @@ export interface IScenario {
|
|
|
451
457
|
* `back` is the callback function that specifies how memlab should
|
|
452
458
|
* back/revert the `action` callback. Think of it as an undo action.
|
|
453
459
|
*
|
|
460
|
+
* * **Parameters**:
|
|
461
|
+
* * page: `Page` | the puppeteer [`Page`](https://pptr.dev/api/puppeteer.page)
|
|
462
|
+
* object, which provides APIs to interact with the web browser
|
|
463
|
+
*
|
|
454
464
|
* * **Examples**:
|
|
455
465
|
* ```typescript
|
|
456
466
|
* const scenario = {
|
|
@@ -675,6 +685,10 @@ export interface IDataBuilder {
|
|
|
675
685
|
/**
|
|
676
686
|
* Callback function to provide if the page is loaded.
|
|
677
687
|
* @param page - puppeteer's [Page](https://pptr.dev/api/puppeteer.page/) object.
|
|
688
|
+
* @returns a boolean value, if it returns `true`, memlab will consider
|
|
689
|
+
* the navigation completes, if it returns `false`, memlab will keep calling
|
|
690
|
+
* this callback until it returns `true`. This is an async callback, you can
|
|
691
|
+
* also `await` and returns `true` until some async logic is resolved.
|
|
678
692
|
*/
|
|
679
693
|
export declare type CheckPageLoadCallback = (page: Page) => Promise<boolean>;
|
|
680
694
|
/** @internal */
|