page-with
Version:
A library for usage example-driven in-browser testing of your own libraries.
43 lines (42 loc) • 1.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createBrowser = exports.server = exports.browser = void 0;
const until_1 = require("@open-draft/until");
const playwright_1 = require("playwright");
const createLogger_1 = require("./internal/createLogger");
const PreviewServer_1 = require("./server/PreviewServer");
const log = (0, createLogger_1.createLogger)('browser');
async function createBrowser(options = {}) {
log('spawning a browser...');
exports.browser = await playwright_1.chromium.launch(Object.assign({}, {
headless: !process.env.DEBUG,
devtools: !!process.env.DEBUG,
args: ['--no-sandbox'],
}, options.launchOptions));
log('successfully spawned the browser!');
log('spawning a server...');
exports.server = new PreviewServer_1.PreviewServer(options.serverOptions);
const serverConnection = await (0, until_1.until)(() => exports.server.listen());
if (serverConnection.error) {
throw new Error(`Failed to create a server.\n${serverConnection.error}`);
}
const connection = serverConnection.data;
log('successfully spawned the server!', connection.url);
async function cleanup() {
log('cleaning up...');
if (process.env.DEBUG) {
log('cleanup prevented in DEBUG mode');
return Promise.resolve();
}
return Promise.all([exports.browser.close(), exports.server.close()]).then(() => {
log('successfully cleaned up all resources!');
});
}
process.on('exit', cleanup);
process.on('SIGKILL', cleanup);
return {
browser: exports.browser,
cleanup,
};
}
exports.createBrowser = createBrowser;