Socket
Socket
Sign inDemoInstall

playwright

Package Overview
Dependencies
Maintainers
4
Versions
4543
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

playwright - npm Package Compare versions

Comparing version 1.48.0-alpha-2024-09-11 to 1.48.0-alpha-2024-09-12

3

lib/runner/failureTracker.js

@@ -34,3 +34,4 @@ "use strict";

onTestEnd(test, result) {
if (result.status !== 'skipped' && result.status !== test.expectedStatus) ++this._failureCount;
// Test is considered failing after the last retry.
if (test.outcome() === 'unexpected' && test.results.length > test.retries) ++this._failureCount;
}

@@ -37,0 +38,0 @@ onWorkerError() {

@@ -7,3 +7,2 @@ "use strict";

exports.Runner = void 0;
var _utils = require("playwright-core/lib/utils");
var _webServerPlugin = require("../plugins/webServerPlugin");

@@ -58,3 +57,2 @@ var _projectUtils = require("./projectUtils");

const listOnly = config.cliListOnly;
const deadline = config.config.globalTimeout ? (0, _utils.monotonicTime)() + config.config.globalTimeout : 0;

@@ -69,15 +67,10 @@ // Legacy webServer support.

const reporter = new _internalReporter.InternalReporter([...reporters, lastRun]);
const taskRunner = listOnly ? (0, _tasks.createTaskRunnerForList)(config, reporter, 'in-process', {
const tasks = listOnly ? [(0, _tasks.createLoadTask)('in-process', {
failOnLoadErrors: true,
filterOnly: false
}), (0, _tasks.createReportBeginTask)()] : [...(0, _tasks.createGlobalSetupTasks)(config), (0, _tasks.createLoadTask)('in-process', {
filterOnly: true,
failOnLoadErrors: true
}) : (0, _tasks.createTaskRunner)(config, reporter);
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const taskStatus = await taskRunner.run(testRun, deadline);
let status = testRun.failureTracker.result();
if (status === 'passed' && taskStatus !== 'passed') status = taskStatus;
const modifiedResult = await reporter.onEnd({
status
});
if (modifiedResult && modifiedResult.status) status = modifiedResult.status;
await reporter.onExit();
}), ...(0, _tasks.createRunTestsTasks)(config)];
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), tasks, config.config.globalTimeout);

@@ -94,10 +87,7 @@ // Calling process.exit() might truncate large stdout/stderr output.

const reporter = new _internalReporter.InternalReporter([errorReporter]);
const taskRunner = (0, _tasks.createTaskRunnerForRelatedTestFiles)(this._config, reporter, 'in-process', true);
const testRun = new _tasks.TestRun(this._config);
reporter.onConfigure(this._config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(this._config, reporter), [...(0, _tasks.createPluginSetupTasks)(this._config), (0, _tasks.createLoadTask)('in-process', {
failOnLoadErrors: true,
filterOnly: false,
populateDependencies: true
})]);
if (status !== 'passed') return {

@@ -113,10 +103,9 @@ errors: errorReporter.errors(),

const reporter = new _internalReporter.InternalReporter([(0, _reporters.createErrorCollectingReporter)(true)]);
const taskRunner = (0, _tasks.createTaskRunnerForDevServer)(this._config, reporter, 'in-process', true);
const testRun = new _tasks.TestRun(this._config);
reporter.onConfigure(this._config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(this._config, reporter), [...(0, _tasks.createPluginSetupTasks)(this._config), (0, _tasks.createLoadTask)('in-process', {
failOnLoadErrors: true,
filterOnly: false
}), (0, _tasks.createStartDevServerTask)(), {
title: 'wait until interrupted',
setup: async () => new Promise(() => {})
}]);
return {

@@ -128,10 +117,3 @@ status

const reporter = new _internalReporter.InternalReporter([(0, _reporters.createErrorCollectingReporter)(true)]);
const taskRunner = (0, _tasks.createTaskRunnerForClearCache)(this._config, reporter, 'in-process', true);
const testRun = new _tasks.TestRun(this._config);
reporter.onConfigure(this._config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(this._config, reporter), [...(0, _tasks.createPluginSetupTasks)(this._config), (0, _tasks.createClearCacheTask)(this._config)]);
return {

@@ -138,0 +120,0 @@ status

@@ -28,5 +28,2 @@ "use strict";

class TaskRunner {
static create(reporter, globalTimeoutForError = 0) {
return new TaskRunner(reporter, globalTimeoutForError);
}
constructor(reporter, globalTimeoutForError) {

@@ -42,7 +39,4 @@ this._tasks = [];

}
addTask(name, task) {
this._tasks.push({
name,
task
});
addTask(task) {
this._tasks.push(task);
}

@@ -64,9 +58,6 @@ async run(context, deadline, cancelPromise) {

const taskLoop = async () => {
for (const {
name,
task
} of this._tasks) {
currentTaskName = name;
for (const task of this._tasks) {
currentTaskName = task.title;
if (this._interrupted) break;
(0, _utilsBundle.debug)('pw:test:task')(`"${name}" started`);
(0, _utilsBundle.debug)('pw:test:task')(`"${task.title}" started`);
const errors = [];

@@ -77,10 +68,8 @@ const softErrors = [];

teardownRunner._tasks.unshift({
name: `teardown for ${name}`,
task: {
setup: task.teardown
}
title: `teardown for ${task.title}`,
setup: task.teardown
});
await ((_task$setup = task.setup) === null || _task$setup === void 0 ? void 0 : _task$setup.call(task, this._reporter, context, errors, softErrors));
await ((_task$setup = task.setup) === null || _task$setup === void 0 ? void 0 : _task$setup.call(task, context, errors, softErrors));
} catch (e) {
(0, _utilsBundle.debug)('pw:test:task')(`error in "${name}": `, e);
(0, _utilsBundle.debug)('pw:test:task')(`error in "${task.title}": `, e);
errors.push((0, _util.serializeError)(e));

@@ -97,3 +86,3 @@ } finally {

}
(0, _utilsBundle.debug)('pw:test:task')(`"${name}" finished`);
(0, _utilsBundle.debug)('pw:test:task')(`"${task.title}" finished`);
}

@@ -100,0 +89,0 @@ };

@@ -7,10 +7,12 @@ "use strict";

exports.TestRun = void 0;
exports.createTaskRunner = createTaskRunner;
exports.createTaskRunnerForClearCache = createTaskRunnerForClearCache;
exports.createTaskRunnerForDevServer = createTaskRunnerForDevServer;
exports.createTaskRunnerForList = createTaskRunnerForList;
exports.createTaskRunnerForListFiles = createTaskRunnerForListFiles;
exports.createTaskRunnerForRelatedTestFiles = createTaskRunnerForRelatedTestFiles;
exports.createTaskRunnerForTestServer = createTaskRunnerForTestServer;
exports.createTaskRunnerForWatchSetup = createTaskRunnerForWatchSetup;
exports.createClearCacheTask = createClearCacheTask;
exports.createGlobalSetupTasks = createGlobalSetupTasks;
exports.createListFilesTask = createListFilesTask;
exports.createLoadTask = createLoadTask;
exports.createPluginSetupTasks = createPluginSetupTasks;
exports.createReportBeginTask = createReportBeginTask;
exports.createRunTestsTasks = createRunTestsTasks;
exports.createStartDevServerTask = createStartDevServerTask;
exports.runTasks = runTasks;
exports.runTasksDeferCleanup = runTasksDeferCleanup;
var _fs = _interopRequireDefault(require("fs"));

@@ -50,4 +52,5 @@ var _path = _interopRequireDefault(require("path"));

class TestRun {
constructor(config) {
constructor(config, reporter) {
this.config = void 0;
this.reporter = void 0;
this.failureTracker = void 0;

@@ -59,2 +62,3 @@ this.rootSuite = undefined;

this.config = config;
this.reporter = reporter;
this.failureTracker = new _failureTracker.FailureTracker(config);

@@ -64,89 +68,45 @@ }

exports.TestRun = TestRun;
function createTaskRunner(config, reporter) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
addGlobalSetupTasks(taskRunner, config);
taskRunner.addTask('load tests', createLoadTask('in-process', {
filterOnly: true,
failOnLoadErrors: true
}));
addRunTasks(taskRunner, config);
return taskRunner;
async function runTasks(testRun, tasks, globalTimeout, cancelPromise) {
const deadline = globalTimeout ? (0, _utils.monotonicTime)() + globalTimeout : 0;
const taskRunner = new _taskRunner.TaskRunner(testRun.reporter, globalTimeout || 0);
for (const task of tasks) taskRunner.addTask(task);
testRun.reporter.onConfigure(testRun.config.config);
const status = await taskRunner.run(testRun, deadline, cancelPromise);
return await finishTaskRun(testRun, status);
}
function createTaskRunnerForWatchSetup(config, reporter) {
const taskRunner = _taskRunner.TaskRunner.create(reporter);
addGlobalSetupTasks(taskRunner, config);
return taskRunner;
async function runTasksDeferCleanup(testRun, tasks) {
const taskRunner = new _taskRunner.TaskRunner(testRun.reporter, 0);
for (const task of tasks) taskRunner.addTask(task);
testRun.reporter.onConfigure(testRun.config.config);
const {
status,
cleanup
} = await taskRunner.runDeferCleanup(testRun, 0);
return {
status: await finishTaskRun(testRun, status),
cleanup
};
}
function createTaskRunnerForTestServer(config, reporter) {
const taskRunner = _taskRunner.TaskRunner.create(reporter);
taskRunner.addTask('load tests', createLoadTask('out-of-process', {
filterOnly: true,
failOnLoadErrors: false,
doNotRunDepsOutsideProjectFilter: true
}));
addRunTasks(taskRunner, config);
return taskRunner;
async function finishTaskRun(testRun, status) {
if (status === 'passed') status = testRun.failureTracker.result();
const modifiedResult = await testRun.reporter.onEnd({
status
});
if (modifiedResult && modifiedResult.status) status = modifiedResult.status;
await testRun.reporter.onExit();
return status;
}
function addGlobalSetupTasks(taskRunner, config) {
if (!config.configCLIOverrides.preserveOutputDir && !process.env.PW_TEST_NO_REMOVE_OUTPUT_DIRS) taskRunner.addTask('clear output', createRemoveOutputDirsTask());
for (const plugin of config.plugins) taskRunner.addTask('plugin setup', createPluginSetupTask(plugin));
if (config.config.globalSetup || config.config.globalTeardown) taskRunner.addTask('global setup', createGlobalSetupTask());
function createGlobalSetupTasks(config) {
const tasks = [];
if (!config.configCLIOverrides.preserveOutputDir && !process.env.PW_TEST_NO_REMOVE_OUTPUT_DIRS) tasks.push(createRemoveOutputDirsTask());
tasks.push(...createPluginSetupTasks(config));
if (config.config.globalSetup || config.config.globalTeardown) tasks.push(createGlobalSetupTask());
return tasks;
}
function addRunTasks(taskRunner, config) {
taskRunner.addTask('create phases', createPhasesTask());
taskRunner.addTask('report begin', createReportBeginTask());
for (const plugin of config.plugins) taskRunner.addTask('plugin begin', createPluginBeginTask(plugin));
taskRunner.addTask('test suite', createRunTestsTask());
return taskRunner;
function createRunTestsTasks(config) {
return [createPhasesTask(), createReportBeginTask(), ...config.plugins.map(plugin => createPluginBeginTask(plugin)), createRunTestsTask()];
}
function createTaskRunnerForList(config, reporter, mode, options) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
taskRunner.addTask('load tests', createLoadTask(mode, {
...options,
filterOnly: false
}));
taskRunner.addTask('report begin', createReportBeginTask());
return taskRunner;
}
function createTaskRunnerForListFiles(config, reporter) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
taskRunner.addTask('load tests', createListFilesTask());
taskRunner.addTask('report begin', createReportBeginTask());
return taskRunner;
}
function createTaskRunnerForDevServer(config, reporter, mode, setupAndWait) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
if (setupAndWait) {
for (const plugin of config.plugins) taskRunner.addTask('plugin setup', createPluginSetupTask(plugin));
}
taskRunner.addTask('load tests', createLoadTask(mode, {
failOnLoadErrors: true,
filterOnly: false
}));
taskRunner.addTask('start dev server', createStartDevServerTask());
if (setupAndWait) {
taskRunner.addTask('wait until interrupted', {
setup: async () => new Promise(() => {})
});
}
return taskRunner;
}
function createTaskRunnerForRelatedTestFiles(config, reporter, mode, setupPlugins) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
if (setupPlugins) {
for (const plugin of config.plugins) taskRunner.addTask('plugin setup', createPluginSetupTask(plugin));
}
taskRunner.addTask('load tests', createLoadTask(mode, {
failOnLoadErrors: true,
filterOnly: false,
populateDependencies: true
}));
return taskRunner;
}
function createTaskRunnerForClearCache(config, reporter, mode, setupPlugins) {
const taskRunner = _taskRunner.TaskRunner.create(reporter, config.config.globalTimeout);
if (setupPlugins) {
for (const plugin of config.plugins) taskRunner.addTask('plugin setup', createPluginSetupTask(plugin));
}
taskRunner.addTask('clear cache', {
function createClearCacheTask(config) {
return {
title: 'clear cache',
setup: async () => {

@@ -159,12 +119,10 @@ await (0, _util2.removeDirAndLogToConsole)(_compilationCache.cacheDir);

}
});
return taskRunner;
};
}
function createReportBeginTask() {
return {
setup: async (reporter, {
rootSuite
}) => {
var _reporter$onBegin;
(_reporter$onBegin = reporter.onBegin) === null || _reporter$onBegin === void 0 || _reporter$onBegin.call(reporter, rootSuite);
title: 'report begin',
setup: async testRun => {
var _testRun$reporter$onB, _testRun$reporter;
(_testRun$reporter$onB = (_testRun$reporter = testRun.reporter).onBegin) === null || _testRun$reporter$onB === void 0 || _testRun$reporter$onB.call(_testRun$reporter, testRun.rootSuite);
},

@@ -174,6 +132,7 @@ teardown: async ({}) => {}

}
function createPluginSetupTask(plugin) {
return {
setup: async (reporter, {
config
function createPluginSetupTasks(config) {
return config.plugins.map(plugin => ({
title: 'plugin setup',
setup: async ({
reporter
}) => {

@@ -188,11 +147,10 @@ var _plugin$instance2, _plugin$instance2$set;

}
};
}));
}
function createPluginBeginTask(plugin) {
return {
setup: async (reporter, {
rootSuite
}) => {
title: 'plugin begin',
setup: async testRun => {
var _plugin$instance4, _plugin$instance4$beg;
await ((_plugin$instance4 = plugin.instance) === null || _plugin$instance4 === void 0 || (_plugin$instance4$beg = _plugin$instance4.begin) === null || _plugin$instance4$beg === void 0 ? void 0 : _plugin$instance4$beg.call(_plugin$instance4, rootSuite));
await ((_plugin$instance4 = plugin.instance) === null || _plugin$instance4 === void 0 || (_plugin$instance4$beg = _plugin$instance4.begin) === null || _plugin$instance4$beg === void 0 ? void 0 : _plugin$instance4$beg.call(_plugin$instance4, testRun.rootSuite));
},

@@ -210,3 +168,4 @@ teardown: async () => {

return {
setup: async (reporter, {
title: 'global setup',
setup: async ({
config

@@ -219,3 +178,3 @@ }) => {

},
teardown: async (reporter, {
teardown: async ({
config

@@ -231,3 +190,4 @@ }) => {

return {
setup: async (reporter, {
title: 'clear output',
setup: async ({
config

@@ -255,3 +215,4 @@ }) => {

return {
setup: async (reporter, testRun, errors) => {
title: 'load tests',
setup: async (testRun, errors) => {
testRun.rootSuite = await (0, _loadUtils.createRootSuite)(testRun, errors, false);

@@ -282,3 +243,4 @@ testRun.failureTracker.onRootSuite(testRun.rootSuite);

return {
setup: async (reporter, testRun, errors, softErrors) => {
title: 'load tests',
setup: async (testRun, errors, softErrors) => {
await (0, _loadUtils.collectProjectsAndTestFiles)(testRun, !!options.doNotRunDepsOutsideProjectFilter);

@@ -311,3 +273,4 @@ await (0, _loadUtils.loadFileSuites)(testRun, mode, options.failOnLoadErrors ? errors : softErrors);

return {
setup: async (reporter, testRun) => {
title: 'create phases',
setup: async testRun => {
let maxConcurrentTestGroups = 0;

@@ -339,3 +302,3 @@ const processed = new Set();

const phase = {
dispatcher: new _dispatcher.Dispatcher(testRun.config, reporter, testRun.failureTracker),
dispatcher: new _dispatcher.Dispatcher(testRun.config, testRun.reporter, testRun.failureTracker),
projects: []

@@ -364,3 +327,4 @@ };

return {
setup: async (reporter, {
title: 'test suite',
setup: async ({
phases,

@@ -423,3 +387,3 @@ failureTracker

},
teardown: async (reporter, {
teardown: async ({
phases

@@ -435,4 +399,7 @@ }) => {

return {
setup: async (reporter, testRun, errors, softErrors) => {
if (testRun.config.plugins.some(plugin => !!plugin.devServerCleanup)) {
title: 'start dev server',
setup: async ({
config
}, errors, softErrors) => {
if (config.plugins.some(plugin => !!plugin.devServerCleanup)) {
errors.push({

@@ -443,12 +410,14 @@ message: `DevServer is already running`

}
for (const plugin of testRun.config.plugins) {
for (const plugin of config.plugins) {
var _plugin$instance7, _plugin$instance7$sta;
plugin.devServerCleanup = await ((_plugin$instance7 = plugin.instance) === null || _plugin$instance7 === void 0 || (_plugin$instance7$sta = _plugin$instance7.startDevServer) === null || _plugin$instance7$sta === void 0 ? void 0 : _plugin$instance7$sta.call(_plugin$instance7));
}
if (!testRun.config.plugins.some(plugin => !!plugin.devServerCleanup)) errors.push({
if (!config.plugins.some(plugin => !!plugin.devServerCleanup)) errors.push({
message: `DevServer is not available in the package you are using. Did you mean to use component testing?`
});
},
teardown: async (reporter, testRun) => {
for (const plugin of testRun.config.plugins) {
teardown: async ({
config
}) => {
for (const plugin of config.plugins) {
var _plugin$devServerClea;

@@ -455,0 +424,0 @@ await ((_plugin$devServerClea = plugin.devServerCleanup) === null || _plugin$devServerClea === void 0 ? void 0 : _plugin$devServerClea.call(plugin));

@@ -152,22 +152,8 @@ "use strict";

};
const taskRunner = (0, _tasks.createTaskRunnerForWatchSetup)(config, reporter);
reporter.onConfigure(config.config);
const testRun = new _tasks.TestRun(config);
const {
status,
cleanup: globalCleanup
} = await taskRunner.runDeferCleanup(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
if (status !== 'passed') {
await globalCleanup();
return {
report,
status
};
}
this._globalSetup = {
cleanup: globalCleanup,
cleanup
} = await (0, _tasks.runTasksDeferCleanup)(new _tasks.TestRun(config, reporter), [...(0, _tasks.createGlobalSetupTasks)(config)]);
if (status !== 'passed') await cleanup();else this._globalSetup = {
cleanup,
report

@@ -200,21 +186,10 @@ };

};
const taskRunner = (0, _tasks.createTaskRunnerForDevServer)(config, reporter, 'out-of-process', false);
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const {
status,
cleanup
} = await taskRunner.runDeferCleanup(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
if (status !== 'passed') {
await cleanup();
return {
report,
status
};
}
this._devServer = {
} = await (0, _tasks.runTasksDeferCleanup)(new _tasks.TestRun(config, reporter), [(0, _tasks.createLoadTask)('out-of-process', {
failOnLoadErrors: true,
filterOnly: false
}), (0, _tasks.createStartDevServerTask)()]);
if (status !== 'passed') await cleanup();else this._devServer = {
cleanup,

@@ -241,10 +216,3 @@ report

if (!config) return;
const taskRunner = (0, _tasks.createTaskRunnerForClearCache)(config, reporter, 'out-of-process', false);
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
await (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), [(0, _tasks.createClearCacheTask)(config)]);
}

@@ -263,10 +231,3 @@ async listFiles(params) {

config.cliProjectFilter = (_params$projects = params.projects) !== null && _params$projects !== void 0 && _params$projects.length ? params.projects : undefined;
const taskRunner = (0, _tasks.createTaskRunnerForListFiles)(config, reporter);
reporter.onConfigure(config.config);
const testRun = new _tasks.TestRun(config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), [(0, _tasks.createListFilesTask)(), (0, _tasks.createReportBeginTask)()]);
return {

@@ -316,12 +277,6 @@ report,

config.cliListOnly = true;
const taskRunner = (0, _tasks.createTaskRunnerForList)(config, reporter, 'out-of-process', {
failOnLoadErrors: false
});
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), [(0, _tasks.createLoadTask)('out-of-process', {
failOnLoadErrors: false,
filterOnly: false
}), (0, _tasks.createReportBeginTask)()]);
return {

@@ -408,11 +363,9 @@ config,

const reporter = new _internalReporter.InternalReporter([...configReporters, wireReporter]);
const taskRunner = (0, _tasks.createTaskRunnerForTestServer)(config, reporter);
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const stop = new _utils.ManualPromise();
const run = taskRunner.run(testRun, 0, stop).then(async status => {
await reporter.onEnd({
status
});
await reporter.onExit();
const tasks = [(0, _tasks.createLoadTask)('out-of-process', {
filterOnly: true,
failOnLoadErrors: false,
doNotRunDepsOutsideProjectFilter: true
}), ...(0, _tasks.createRunTestsTasks)(config)];
const run = (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), tasks, 0, stop).then(async status => {
this._testRun = undefined;

@@ -445,10 +398,7 @@ return status;

};
const taskRunner = (0, _tasks.createTaskRunnerForRelatedTestFiles)(config, reporter, 'out-of-process', false);
const testRun = new _tasks.TestRun(config);
reporter.onConfigure(config.config);
const status = await taskRunner.run(testRun, 0);
await reporter.onEnd({
status
});
await reporter.onExit();
const status = await (0, _tasks.runTasks)(new _tasks.TestRun(config, reporter), [(0, _tasks.createLoadTask)('out-of-process', {
failOnLoadErrors: true,
filterOnly: false,
populateDependencies: true
})]);
if (status !== 'passed') return {

@@ -455,0 +405,0 @@ errors: errorReporter.errors(),

{
"name": "playwright",
"version": "1.48.0-alpha-2024-09-11",
"version": "1.48.0-alpha-2024-09-12",
"description": "A high-level API to automate web browsers",

@@ -59,3 +59,3 @@ "repository": {

"dependencies": {
"playwright-core": "1.48.0-alpha-2024-09-11"
"playwright-core": "1.48.0-alpha-2024-09-12"
},

@@ -62,0 +62,0 @@ "optionalDependencies": {

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc