@memlab/core
Version:
memlab core libraries
117 lines (116 loc) • 4.72 kB
JavaScript
;
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @oncall memory_lab
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Config_1 = __importDefault(require("./Config"));
const Console_1 = __importDefault(require("./Console"));
const Constant_1 = __importDefault(require("./Constant"));
const chalk_1 = __importDefault(require("chalk"));
const fs_1 = __importDefault(require("fs"));
class BrowserInfo {
constructor() {
this._browserVersion = Constant_1.default.unset;
this._puppeteerConfig = {};
this._consoleMessages = [];
}
clear() {
this._consoleMessages = [];
}
recordBrowserVersion(version) {
this._browserVersion = version;
}
recordPuppeteerConfig(puppeteerConfig) {
this._puppeteerConfig = puppeteerConfig;
}
load(browserInfo) {
this._browserVersion = browserInfo._browserVersion;
this._puppeteerConfig = browserInfo._puppeteerConfig;
this._consoleMessages = browserInfo._consoleMessages;
}
formatConsoleMessage(message, options = {}) {
if (!message) {
return [];
}
const type = `${message.type()}`;
if (type === 'startGroup' ||
type === 'endGroup' ||
type === 'groupStart' ||
type === 'groupEnd') {
return [];
}
const text = message.text();
return text.split('\n').map(line => {
let consoleInfo = `[console.${type}]`;
consoleInfo = options.color ? chalk_1.default.blue(consoleInfo) : consoleInfo;
return `${consoleInfo}: ${line}`;
});
}
formatDialogMessage(dialog, options = {}) {
if (!dialog || !dialog.message()) {
return '';
}
let typeInfo = `[dialog ${dialog.type()}]`;
typeInfo = options.color ? chalk_1.default.blue(typeInfo) : typeInfo;
return `${typeInfo}: ${dialog.message()}`;
}
addMarker(marker) {
this._consoleMessages.push(marker);
}
summarizeConsoleMessage() {
return this._consoleMessages.join('\n');
}
dump() {
const file = Config_1.default.browserInfoSummary;
const consoleSummary = this.summarizeConsoleMessage();
const summary = `Web Console Output:\n${consoleSummary}`;
fs_1.default.writeFileSync(file, summary, 'utf-8');
}
monitorWebConsole(page) {
page.on('console', message => {
let msgList = this.formatConsoleMessage(message);
this._consoleMessages = this._consoleMessages.concat(msgList);
if (Config_1.default.verbose || Config_1.default.dumpWebConsole) {
msgList = this.formatConsoleMessage(message, { color: true });
if (msgList.length > 0) {
Console_1.default.highLevel(msgList.join('\n'));
}
}
message.args().forEach(handle => handle.dispose());
});
const handleError = (err) => {
this._consoleMessages.push(err.toString());
Console_1.default.error(err.message);
};
page.on('pageerror', handleError);
page.on('error', handleError);
page.on('dialog', (dialog) => __awaiter(this, void 0, void 0, function* () {
let msg = this.formatDialogMessage(dialog);
this._consoleMessages.push(msg);
if (Config_1.default.verbose || Config_1.default.dumpWebConsole) {
msg = this.formatDialogMessage(dialog, { color: true });
Console_1.default.highLevel(msg);
}
// dialog will be auto accepted or dismissed in setupPage
}));
}
}
exports.default = new BrowserInfo();