@e2e-dev/web 0.11.0-canary-20260928184528 → 0.11.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 (57) hide show
  1. package/README.md +17 -14
  2. package/dist/.build.json +1 -1
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +24 -4
  5. package/dist/actions.js.map +1 -1
  6. package/dist/attempt-session.d.ts +38 -3
  7. package/dist/attempt-session.d.ts.map +1 -1
  8. package/dist/attempt-session.js +71 -16
  9. package/dist/attempt-session.js.map +1 -1
  10. package/dist/browser-connection.d.ts.map +1 -1
  11. package/dist/browser-connection.js +12 -1
  12. package/dist/browser-connection.js.map +1 -1
  13. package/dist/{web.d.ts → browser.d.ts} +18 -9
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/{web.js → browser.js} +35 -19
  16. package/dist/browser.js.map +1 -0
  17. package/dist/downloads.d.ts +29 -0
  18. package/dist/downloads.d.ts.map +1 -0
  19. package/dist/downloads.js +74 -0
  20. package/dist/downloads.js.map +1 -0
  21. package/dist/engine.d.ts +2 -2
  22. package/dist/engine.d.ts.map +1 -1
  23. package/dist/engine.js +113 -18
  24. package/dist/engine.js.map +1 -1
  25. package/dist/in-page/read-semantics.d.ts.map +1 -1
  26. package/dist/in-page/read-semantics.js +143 -34
  27. package/dist/in-page/read-semantics.js.map +1 -1
  28. package/dist/index.d.ts +19 -10
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +7 -5
  31. package/dist/index.js.map +1 -1
  32. package/dist/locators.d.ts.map +1 -1
  33. package/dist/locators.js +26 -7
  34. package/dist/locators.js.map +1 -1
  35. package/dist/protected-app.d.ts +6 -2
  36. package/dist/protected-app.d.ts.map +1 -1
  37. package/dist/protected-app.js +18 -5
  38. package/dist/protected-app.js.map +1 -1
  39. package/dist/provider-video.d.ts +48 -0
  40. package/dist/provider-video.d.ts.map +1 -0
  41. package/dist/provider-video.js +80 -0
  42. package/dist/provider-video.js.map +1 -0
  43. package/dist/provider.d.ts +100 -5
  44. package/dist/provider.d.ts.map +1 -1
  45. package/dist/provider.js +148 -14
  46. package/dist/provider.js.map +1 -1
  47. package/dist/surface.d.ts +57 -13
  48. package/dist/surface.d.ts.map +1 -1
  49. package/dist/surface.js +41 -10
  50. package/dist/surface.js.map +1 -1
  51. package/dist/video.d.ts +34 -10
  52. package/dist/video.d.ts.map +1 -1
  53. package/dist/video.js +19 -10
  54. package/dist/video.js.map +1 -1
  55. package/package.json +4 -4
  56. package/dist/web.d.ts.map +0 -1
  57. package/dist/web.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  /**
2
- * The `web` fixture: the browser-shaped deterministic surface this engine
2
+ * The `browser` fixture: the browser-shaped deterministic surface this engine
3
3
  * contributes. It lives here, not in core, because the harness knows the
4
4
  * engine contract and never a platform's fixture shape. Every async method
5
- * runs as a harness-recorded `web.<method>` step; `expect(web)` reaches the
5
+ * runs as a harness-recorded `browser.<method>` step; `expect(browser)` reaches the
6
6
  * matchers attached through `context.expectable`.
7
7
  *
8
8
  * Layering rule: validation (`resolveUrl`, JSON checks, cookie URLs, the
@@ -11,7 +11,8 @@
11
11
  * never re-implemented here: `context.app.resolveUrl` is the one place that
12
12
  * says which URLs a test may open.
13
13
  */
14
- import { Deadline, describePattern, matchesText, pollCondition, TestError, toTextPattern, urlMatches, validateJsonValue, } from 'e2e/engine';
14
+ import { Deadline, describePattern, EngineError, matchesText, pollCondition, TestError, toTextPattern, urlMatches, validateJsonValue, } from 'e2e/engine';
15
+ import { saveDownloadsTo, saveFromBrowser, saveLocally } from './downloads.js';
15
16
  import { isTestErrorCode, message as causeMessage, translatePwError } from './support.js';
16
17
  import { compileEvaluation } from './evaluation.js';
17
18
  import { routePatternMatches, routePatternsEqual } from './route-pattern.js';
@@ -37,8 +38,8 @@ async function readResponseBody(response) {
37
38
  return () => Promise.reject(error);
38
39
  }
39
40
  }
40
- /** Builds the `web` fixture for one attempt over the shared surface. */
41
- export function createWebFixture(surface, context) {
41
+ /** Builds the `browser` fixture for one attempt over the shared surface. */
42
+ export function createBrowserFixture(surface, context) {
42
43
  const latch = surface.latch;
43
44
  const routes = [];
44
45
  /**
@@ -60,8 +61,8 @@ export function createWebFixture(surface, context) {
60
61
  const deadlineFor = (timeout) => new Deadline(context.operation(timeout ?? context.timeouts.assertion).timeoutMs);
61
62
  const currentUrl = () => surface.guard(context.operation(), 'url', async () => surface.requirePage().url());
62
63
  const currentTitle = () => surface.guard(context.operation(), 'title', () => surface.requirePage().title());
63
- const expectation = createWebExpectation({ currentUrl, currentTitle, baseHref, deadlineFor, context });
64
- const web = {
64
+ const expectation = createBrowserExpectation({ currentUrl, currentTitle, baseHref, deadlineFor, context });
65
+ const browser = {
65
66
  goto(url, options) {
66
67
  const resolved = context.app.resolveUrl(url);
67
68
  return navigation(options, async (operation) => {
@@ -83,10 +84,10 @@ export function createWebFixture(surface, context) {
83
84
  }),
84
85
  url: currentUrl,
85
86
  title: currentTitle,
86
- // The same poll as `expect(web).toHaveURL`, exposed as a wait.
87
+ // The same poll as `expect(browser).toHaveURL`, exposed as a wait.
87
88
  waitForURL: (url, options) => expectation.toHaveURL(url, options),
88
- locator: (selector) => context.locator({ kind: 'selector', selector: requireSelector('web.locator', selector) }),
89
- frameLocator: (selector) => frameScreen(context, [requireSelector('web.frameLocator', selector)]),
89
+ locator: (selector) => context.locator({ kind: 'selector', selector: requireSelector('browser.locator', selector) }),
90
+ frameLocator: (selector) => frameScreen(context, [requireSelector('browser.frameLocator', selector)]),
90
91
  async evaluate(fn, arg) {
91
92
  const source = typeof fn === 'string' ? fn : fn.toString();
92
93
  validateJsonValue(arg, 'evaluate argument');
@@ -230,10 +231,10 @@ export function createWebFixture(surface, context) {
230
231
  });
231
232
  },
232
233
  setViewport: (size) => surface.guard(context.operation(), 'setViewport', async () => {
233
- await surface.requirePage().setViewportSize(size);
234
+ await surface.setViewport(size);
234
235
  context.attachViewport({ width: size.width, height: size.height, scale: 1 });
235
236
  }),
236
- // Async so the harness records the registration as a `web.onDialog` step.
237
+ // Async so the harness records the registration as a `browser.onDialog` step.
237
238
  async onDialog(handler) {
238
239
  const unsubscribe = surface.dialogs.add(handler);
239
240
  return async () => unsubscribe();
@@ -241,11 +242,16 @@ export function createWebFixture(surface, context) {
241
242
  async waitForDownload(trigger, options) {
242
243
  const operation = context.operation(options?.timeout);
243
244
  let triggerFailure;
245
+ let awaiting;
244
246
  return surface.guard(operation, 'download', async (currentOperation) => {
247
+ const remote = surface.remoteDownloads();
248
+ if (remote !== undefined)
249
+ await saveDownloadsTo(surface.requirePage(), remote.dir);
245
250
  const waiter = surface.requirePage()
246
251
  .waitForEvent('download', { timeout: currentOperation.timeoutMs });
247
252
  // The trigger may fail before the waiter settles; absorb its later rejection.
248
253
  waiter.catch(() => undefined);
254
+ const triggerStart = Date.now();
249
255
  try {
250
256
  await trigger();
251
257
  }
@@ -253,17 +259,27 @@ export function createWebFixture(surface, context) {
253
259
  triggerFailure = { cause };
254
260
  throw cause;
255
261
  }
262
+ awaiting = { waitMs: currentOperation.timeoutMs, triggerMs: Date.now() - triggerStart };
256
263
  const download = await waiter;
264
+ awaiting = undefined;
257
265
  const suggestedFilename = download.suggestedFilename();
258
266
  const { relative, absolute } = surface.artifactPath('downloads', suggestedFilename, '');
259
- await download.saveAs(absolute);
267
+ if (remote === undefined)
268
+ await saveLocally(download, absolute, surface.unservedDownloads());
269
+ else
270
+ await saveFromBrowser(download, remote, absolute, currentOperation.signal);
260
271
  context.attachArtifact('download', relative);
261
272
  return { path: relative, suggestedFilename };
262
273
  }, (cause, label) => {
263
274
  // The trigger is test code, so its errors keep their original classification.
264
275
  if (triggerFailure !== undefined && Object.is(cause, triggerFailure.cause))
265
276
  throw cause;
266
- return translatePwError(cause, label);
277
+ const translated = translatePwError(cause, label);
278
+ // The waiter's clock starts before the trigger runs, so the message names both.
279
+ if (awaiting !== undefined && translated instanceof EngineError && translated.code === 'OPERATION_TIMEOUT') {
280
+ return new TestError('ACTION_FAILED', `no download started within ${awaiting.waitMs}ms; the trigger resolved after ${awaiting.triggerMs}ms`, { cause });
281
+ }
282
+ return translated;
267
283
  });
268
284
  },
269
285
  keyboard: {
@@ -285,7 +301,7 @@ export function createWebFixture(surface, context) {
285
301
  toHaveClass: { kind: 'assertion', timeout: false, label: (_target, expected) => String(expected) },
286
302
  get not() { return matchers; },
287
303
  };
288
- return context.fixture('web', context.expectable(web, () => context.fixture('expect', expectation, matchers)), {
304
+ return context.fixture('browser', context.expectable(browser, () => context.fixture('expect', expectation, matchers)), {
289
305
  goto: { ...navigationCall, label: (url) => url },
290
306
  reload: navigationCall,
291
307
  back: navigationCall,
@@ -306,8 +322,8 @@ export function createWebFixture(surface, context) {
306
322
  mouse: { move: action, wheel: action, down: action, up: action },
307
323
  });
308
324
  }
309
- /** `expect(web)` matchers: URL, title, and class polling against the assertion budget. */
310
- function createWebExpectation(deps, negated = false) {
325
+ /** `expect(browser)` matchers: URL, title, and class polling against the assertion budget. */
326
+ function createBrowserExpectation(deps, negated = false) {
311
327
  const poll = async (api, label, condition, observed, timeout) => {
312
328
  await pollCondition({
313
329
  deadline: deps.deadlineFor(timeout),
@@ -319,7 +335,7 @@ function createWebExpectation(deps, negated = false) {
319
335
  };
320
336
  return {
321
337
  get not() {
322
- return createWebExpectation(deps, !negated);
338
+ return createBrowserExpectation(deps, !negated);
323
339
  },
324
340
  toHaveURL(expected, options) {
325
341
  const label = typeof expected === 'string' ? expected : String(expected);
@@ -379,4 +395,4 @@ function frameScreen(context, frames) {
379
395
  frameLocator: (selector) => frameScreen(context, [...frames, requireSelector('frameLocator', selector)]),
380
396
  });
381
397
  }
382
- //# sourceMappingURL=web.js.map
398
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Downloads from a browser on another machine. Playwright asks a CDP-attached
3
+ * browser to save each file under a directory of the runner's, which a
4
+ * remote browser does not have, so the download is canceled. A provider
5
+ * that serves downloads names a directory on the browser's own disk; the
6
+ * browser saves there, and the provider reads each finished file back.
7
+ */
8
+ import type { Download, Page } from 'playwright';
9
+ import type { LeaseDownloads } from './provider.ts';
10
+ /**
11
+ * Has the browser behind `page` save the downloads of the page's context
12
+ * under `dir` on its own disk, each file named by its download id, with the
13
+ * download events Playwright's waiter reads left on.
14
+ */
15
+ export declare function saveDownloadsTo(page: Page, dir: string): Promise<void>;
16
+ /**
17
+ * Copies a finished download off the browser's disk to `file` through the
18
+ * provider: it lies under `dir`, named by its download id, as
19
+ * `saveDownloadsTo` had the browser name it. A download that failed or was
20
+ * canceled fails with the browser's reason.
21
+ */
22
+ export declare function saveFromBrowser(download: Download, downloads: LeaseDownloads, file: string, signal: AbortSignal): Promise<void>;
23
+ /**
24
+ * Saves a download Playwright received for the runner to `file`. When the
25
+ * file may have stayed on another machine, `unserved` says why, and a failed
26
+ * save names it.
27
+ */
28
+ export declare function saveLocally(download: Download, file: string, unserved: string | undefined): Promise<void>;
29
+ //# sourceMappingURL=downloads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.d.ts","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAuB,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAMpD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuB5E;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrI;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAO/G"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Downloads from a browser on another machine. Playwright asks a CDP-attached
3
+ * browser to save each file under a directory of the runner's, which a
4
+ * remote browser does not have, so the download is canceled. A provider
5
+ * that serves downloads names a directory on the browser's own disk; the
6
+ * browser saves there, and the provider reads each finished file back.
7
+ */
8
+ import { writeFile } from 'node:fs/promises';
9
+ import path from 'node:path';
10
+ import { EngineError } from 'e2e/engine';
11
+ import { invalidState, message } from './support.js';
12
+ /** One browser-level CDP session per connection: a download behavior lives as long as the session that set it. */
13
+ const browserSessions = new WeakMap();
14
+ /**
15
+ * Has the browser behind `page` save the downloads of the page's context
16
+ * under `dir` on its own disk, each file named by its download id, with the
17
+ * download events Playwright's waiter reads left on.
18
+ */
19
+ export async function saveDownloadsTo(page, dir) {
20
+ const context = page.context();
21
+ const browser = context.browser();
22
+ if (browser === null)
23
+ throw invalidState('the page has no browser to set a download directory on');
24
+ const pageSession = await context.newCDPSession(page);
25
+ let browserContextId;
26
+ try {
27
+ ({ targetInfo: { browserContextId } } = await pageSession.send('Target.getTargetInfo'));
28
+ }
29
+ finally {
30
+ await pageSession.detach().catch(() => undefined);
31
+ }
32
+ let session = browserSessions.get(browser);
33
+ if (session === undefined) {
34
+ session = browser.newBrowserCDPSession();
35
+ browserSessions.set(browser, session);
36
+ session.catch(() => browserSessions.delete(browser));
37
+ }
38
+ await (await session).send('Browser.setDownloadBehavior', {
39
+ behavior: 'allowAndName',
40
+ downloadPath: dir,
41
+ eventsEnabled: true,
42
+ ...(browserContextId === undefined ? {} : { browserContextId }),
43
+ });
44
+ }
45
+ /**
46
+ * Copies a finished download off the browser's disk to `file` through the
47
+ * provider: it lies under `dir`, named by its download id, as
48
+ * `saveDownloadsTo` had the browser name it. A download that failed or was
49
+ * canceled fails with the browser's reason.
50
+ */
51
+ export async function saveFromBrowser(download, downloads, file, signal) {
52
+ const failure = await download.failure();
53
+ if (failure !== null)
54
+ throw new EngineError('ENGINE_FAILURE', `download failed: ${failure}`, { retryable: false });
55
+ // Playwright names its own record of the file by the same download id.
56
+ const saved = path.posix.join(downloads.dir, path.basename(await download.path()));
57
+ await writeFile(file, await downloads.read(saved, signal));
58
+ }
59
+ /**
60
+ * Saves a download Playwright received for the runner to `file`. When the
61
+ * file may have stayed on another machine, `unserved` says why, and a failed
62
+ * save names it.
63
+ */
64
+ export async function saveLocally(download, file, unserved) {
65
+ try {
66
+ await download.saveAs(file);
67
+ }
68
+ catch (cause) {
69
+ if (unserved === undefined)
70
+ throw cause;
71
+ throw new EngineError('ENGINE_FAILURE', `download failed: ${message(cause)}; ${unserved}`, { retryable: false, cause });
72
+ }
73
+ }
74
+ //# sourceMappingURL=downloads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"downloads.js","sourceRoot":"","sources":["../src/downloads.ts"],"names":[],"mappings":"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"}
package/dist/engine.d.ts CHANGED
@@ -2,7 +2,7 @@
2
2
  * The Playwright engine for e2e: a browser body built with the
3
3
  * public `defineEngine`, validated by the same rules and graded by the same
4
4
  * capabilities as any other engine. Core imports nothing from here; this
5
- * package imports the contract from `e2e/engine` and contributes the `web`
5
+ * package imports the contract from `e2e/engine` and contributes the `browser`
6
6
  * fixture the way a device engine contributes `device`.
7
7
  */
8
8
  import type { BrowserContext, Page } from 'playwright';
@@ -13,7 +13,7 @@ import { type WebOptions } from './surface.ts';
13
13
  * that replaces the toolset wholesale (spec chapter 16) and drives the page with
14
14
  * its own Playwright tooling. Both accessors read the current attempt: the
15
15
  * context exists from `startAttempt`, the page from the first `app.open()` or
16
- * `web.goto()`, and either throws `INVALID_STATE` before that. The harness
16
+ * `browser.goto()`, and either throws `INVALID_STATE` before that. The harness
17
17
  * remains the notary for what it witnesses; a caller here acts out of band.
18
18
  */
19
19
  export interface PlaywrightLiveSurface {
@@ -1 +1 @@
1
- {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAMlE;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC;CACxC;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS,CAIjF;AAED,wBAAgB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAyF1D"}
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EASL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAqB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AASlE;;;;;;;GAOG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,cAAc,CAAC;CACxC;AAED,2FAA2F;AAC3F,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS,CAIjF;AAED,wBAAgB,GAAG,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAsG1D"}
package/dist/engine.js CHANGED
@@ -2,14 +2,16 @@
2
2
  * The Playwright engine for e2e: a browser body built with the
3
3
  * public `defineEngine`, validated by the same rules and graded by the same
4
4
  * capabilities as any other engine. Core imports nothing from here; this
5
- * package imports the contract from `e2e/engine` and contributes the `web`
5
+ * package imports the contract from `e2e/engine` and contributes the `browser`
6
6
  * fixture the way a device engine contributes `device`.
7
7
  */
8
- import { ConfigurationError, defineEngine, LOCATOR_ACTION_KINDS, POINTER_ACTION_KINDS, obj, } from 'e2e/engine';
8
+ import { ConfigurationError, defineEngine, isSecret, LOCATOR_ACTION_KINDS, POINTER_ACTION_KINDS, rejectUnknownKeys, } from 'e2e/engine';
9
9
  import { createRequire } from 'node:module';
10
10
  import { asBrowserProvider } from './provider.js';
11
11
  import { PlaywrightSurface } from './surface.js';
12
- import { createWebFixture } from './web.js';
12
+ import { createBrowserFixture } from './browser.js';
13
+ /** App fields only a device target reads. */
14
+ const NATIVE_APP_KEYS = ['bundleId', 'appPath', 'launchArguments', 'permissions'];
13
15
  /** Creates one Playwright engine: one browser per worker, one context per attempt. */
14
16
  const surfaces = new WeakMap();
15
17
  /** The live surface of a handle this module created, or undefined for any other engine. */
@@ -20,31 +22,41 @@ export function surfaceOf(engine) {
20
22
  return { page: () => surface.requirePage(), context: () => surface.requireContext() };
21
23
  }
22
24
  export function web(options = {}) {
25
+ if ('allowedOrigins' in options) {
26
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ allowedOrigins }) is gone: navigation and secret fills are not gated by origin; remove the option');
27
+ }
28
+ if ('video' in options) {
29
+ throw new ConfigurationError('INVALID_CONFIG', "web({ video }) was renamed web({ screencast }): it takes { size?, quality? } for the page screencast; which attempts record is the video mode on the config or a target");
30
+ }
31
+ rejectUnknownKeys('web()', options, WEB_OPTION_KEYS);
23
32
  const provider = typeof options.browser === 'object' && options.browser !== null ? asBrowserProvider(options.browser) : undefined;
24
33
  if (provider !== undefined && options.connect !== undefined) {
25
34
  throw new ConfigurationError('INVALID_CONFIG', `web({ browser, connect }) names two browser sources; browser provider "${provider.name}" leases its own browsers, so remove connect`);
26
35
  }
36
+ if (isRecord(options.connect))
37
+ rejectUnknownKeys('web({ connect })', options.connect, ['cdpEndpoint', 'reconnectEndpoint']);
27
38
  if (options.connect !== undefined && typeof options.browser === 'string' && options.browser !== 'chromium') {
28
39
  throw new ConfigurationError('INVALID_CONFIG', `web({ connect }) requires the chromium browser; CDP attach is chromium-only, got "${options.browser}"`);
29
40
  }
30
- if ('allowedOrigins' in options) {
31
- throw new ConfigurationError('INVALID_CONFIG', 'web({ allowedOrigins }) is gone: navigation and secret fills are not gated by origin; remove the option');
32
- }
33
41
  if (options.headers !== undefined)
34
42
  validateHeaders(options.headers);
35
43
  if (options.basicAuth !== undefined)
36
44
  validateBasicAuth(options.basicAuth);
37
45
  if (options.testIdAttribute !== undefined)
38
46
  validateTestIdAttribute(options.testIdAttribute);
47
+ if (options.userAgent !== undefined)
48
+ validateUserAgent(options.userAgent, options.headers);
49
+ if (options.screencast !== undefined)
50
+ validateScreencast(options.screencast);
39
51
  const reconnecting = options.connect?.reconnectEndpoint !== undefined;
40
52
  if (reconnecting && typeof options.connect?.reconnectEndpoint !== 'function') {
41
53
  throw new ConfigurationError('INVALID_CONFIG', 'connect.reconnectEndpoint must be a function');
42
54
  }
43
55
  // A per-attempt lease rides the same persistent context as `reconnectEndpoint`, with the same limits.
44
56
  const recoverable = reconnecting || provider?.scope === 'attempt';
45
- if (recoverable && (options.headers !== undefined || options.basicAuth !== undefined)) {
46
- const mode = provider === undefined ? 'connect.reconnectEndpoint' : `browser provider "${provider.name}" with scope "attempt"`;
47
- throw new ConfigurationError('INVALID_CONFIG', `${mode} uses a persistent context; headers and basicAuth require a newly created context`);
57
+ const mode = provider === undefined ? 'connect.reconnectEndpoint' : `browser provider "${provider.name}" with scope "attempt"`;
58
+ if (recoverable && (options.headers !== undefined || options.basicAuth !== undefined || options.userAgent !== undefined)) {
59
+ throw new ConfigurationError('INVALID_CONFIG', `${mode} uses a persistent context; headers, basicAuth, and userAgent require a newly created context`);
48
60
  }
49
61
  const surface = new PlaywrightSurface(options);
50
62
  const handle = defineEngine({
@@ -64,6 +76,8 @@ export function web(options = {}) {
64
76
  perform: (ref, action, operation) => surface.perform(ref, action, operation),
65
77
  // A browser honors every action kind of the contract; `actions.ts` dispatches each.
66
78
  actions: LOCATOR_ACTION_KINDS,
79
+ // Playwright holds each modifier for the click.
80
+ tapModifiers: true,
67
81
  // A page takes every pointer action of the contract at a bare point too.
68
82
  performAt: (point, action, operation) => surface.performAt(point, action, operation),
69
83
  pointerActions: POINTER_ACTION_KINDS,
@@ -71,12 +85,13 @@ export function web(options = {}) {
71
85
  type: (text, keyboardOptions, operation) => surface.typeText(text, keyboardOptions, operation),
72
86
  press: (key, operation) => surface.pressKey(key, operation),
73
87
  },
74
- app: declaredApp(options),
88
+ validateApp,
89
+ ...(isSecret(options.basicAuth?.password) ? { secrets: [options.basicAuth.password] } : {}),
75
90
  session: {
76
91
  open: (url, operation) => surface.open(url, operation),
77
92
  back: (operation) => surface.back(operation),
78
93
  restart: (operation) => surface.restart(operation),
79
- ...(recoverable ? {} : { reset: (operation) => surface.reset(operation) }),
94
+ reset: recoverable ? () => Promise.reject(persistentContextLimit('app.clearState()', mode, provider !== undefined)) : (operation) => surface.reset(operation),
80
95
  },
81
96
  artifacts: {
82
97
  screenshot: (label, operation) => surface.screenshot(label, operation),
@@ -94,12 +109,32 @@ export function web(options = {}) {
94
109
  },
95
110
  }),
96
111
  fixtures: {
97
- web: (context) => createWebFixture(surface, context),
112
+ browser: (context) => createBrowserFixture(surface, context),
98
113
  },
99
114
  });
100
115
  surfaces.set(handle, surface);
101
116
  return handle;
102
117
  }
118
+ /** Every option `web()` takes, kept equal to `WebOptions` by the compiler. */
119
+ const WEB_OPTION_KEYS = Object.keys({
120
+ browser: true,
121
+ viewport: true,
122
+ screencast: true,
123
+ connect: true,
124
+ headers: true,
125
+ basicAuth: true,
126
+ testIdAttribute: true,
127
+ userAgent: true,
128
+ });
129
+ /**
130
+ * What a persistent context rules out, named with its cause: `what` replaces
131
+ * the browser context, which `mode` never does. A per-attempt lease starts
132
+ * every attempt on a fresh browser already, and worker scope has the reset.
133
+ */
134
+ function persistentContextLimit(what, mode, leased) {
135
+ const remedy = leased ? '; every attempt already starts on a fresh browser, and scope "worker" can clear one mid-test' : '';
136
+ return new ConfigurationError('UNSUPPORTED_CAPABILITY', `${what} is unavailable with ${mode}: it replaces the browser context, and the attempt rides one persistent context${remedy}`);
137
+ }
103
138
  /** An HTTP header field name: one or more `token` characters (RFC 9110). */
104
139
  const HEADER_NAME = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
105
140
  /** A control character no HTTP field value may carry; a horizontal tab is the one the grammar allows. */
@@ -136,6 +171,7 @@ function validateBasicAuth(basicAuth) {
136
171
  if (!isRecord(basicAuth)) {
137
172
  throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) must be an object with username and password');
138
173
  }
174
+ rejectUnknownKeys('web({ basicAuth })', basicAuth, ['username', 'password']);
139
175
  const { username, password } = basicAuth;
140
176
  if (typeof username !== 'string' || username === '') {
141
177
  throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a non-empty username string');
@@ -143,8 +179,24 @@ function validateBasicAuth(basicAuth) {
143
179
  if (username.includes(':')) {
144
180
  throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) username must not contain ":"');
145
181
  }
146
- if (typeof password !== 'string') {
147
- throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a password string');
182
+ if (typeof password !== 'string' && !isSecret(password)) {
183
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ basicAuth }) requires a password string or secrets.get(name)');
184
+ }
185
+ }
186
+ /**
187
+ * Refuses a user agent the browser could not send (not a string, empty, or
188
+ * carrying a control character) and one a `user-agent` header would override
189
+ * on the app's site while `navigator.userAgent` kept reporting it.
190
+ */
191
+ function validateUserAgent(userAgent, headers) {
192
+ if (typeof userAgent !== 'string' || userAgent === '') {
193
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) must be a non-empty string');
194
+ }
195
+ if (FIELD_VALUE_CONTROL.test(userAgent)) {
196
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) must not contain a control character');
197
+ }
198
+ if (headers !== undefined && Object.keys(headers).some((name) => name.toLowerCase() === 'user-agent')) {
199
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ userAgent }) and a user-agent header in web({ headers }) conflict; set userAgent only');
148
200
  }
149
201
  }
150
202
  /**
@@ -153,16 +205,59 @@ function validateBasicAuth(basicAuth) {
153
205
  * and every `testId` query would fail silently.
154
206
  */
155
207
  const ATTRIBUTE_NAME = /^[A-Za-z_:][A-Za-z0-9_:.-]*$/;
208
+ /** `web({ screencast })`: a whole-pixel frame size and a 0-100 JPEG quality, each optional. */
209
+ function validateScreencast(screencast) {
210
+ if (!isPlainObject(screencast)) {
211
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast }) must be a plain object: { size?, quality? }');
212
+ }
213
+ for (const key of Object.keys(screencast)) {
214
+ if (key !== 'size' && key !== 'quality') {
215
+ throw new ConfigurationError('INVALID_CONFIG', `web({ screencast }) has unknown key "${key}"; it is { size?, quality? }, and which attempts record is the config's video`);
216
+ }
217
+ }
218
+ const { size, quality } = screencast;
219
+ if (size !== undefined) {
220
+ const fields = isPlainObject(size) ? size : {};
221
+ const { width, height } = fields;
222
+ const unknownKey = Object.keys(fields).find((key) => key !== 'width' && key !== 'height');
223
+ if (unknownKey !== undefined) {
224
+ throw new ConfigurationError('INVALID_CONFIG', `web({ screencast: { size } }) has unknown key "${unknownKey}"; it is { width, height }`);
225
+ }
226
+ if (!Number.isInteger(width) || !Number.isInteger(height) || width < 1 || height < 1) {
227
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast: { size } }) must be { width, height } in whole pixels, each at least 1');
228
+ }
229
+ }
230
+ if (quality !== undefined && (!Number.isInteger(quality) || quality < 0 || quality > 100)) {
231
+ throw new ConfigurationError('INVALID_CONFIG', 'web({ screencast: { quality } }) must be an integer from 0 through 100');
232
+ }
233
+ }
234
+ /** An object literal (or `Object.create(null)`): not an array, a class instance, or a primitive. */
235
+ function isPlainObject(value) {
236
+ if (typeof value !== 'object' || value === null)
237
+ return false;
238
+ const prototype = Object.getPrototypeOf(value);
239
+ return prototype === Object.prototype || prototype === null;
240
+ }
156
241
  /** Refuses a test-id attribute no element could carry, at config load. */
157
242
  function validateTestIdAttribute(attribute) {
158
243
  if (typeof attribute !== 'string' || !ATTRIBUTE_NAME.test(attribute)) {
159
244
  throw new ConfigurationError('INVALID_CONFIG', `web({ testIdAttribute }) must be an attribute name such as "data-testid", got ${JSON.stringify(attribute)}`);
160
245
  }
161
246
  }
162
- /** The app-declaration half of the options, so browser knobs never reach the manifest. */
163
- function declaredApp(options) {
164
- const { url, environment, identity, command, readyUrl, services } = options;
165
- return obj({ url, environment, identity, command, readyUrl, services });
247
+ /**
248
+ * A browser target opens a URL: without `app.url` there is nothing for
249
+ * `app.open()` to open, and the fields that describe an installed device app
250
+ * have nothing to act on here.
251
+ */
252
+ function validateApp(app, { targetName }) {
253
+ for (const key of NATIVE_APP_KEYS) {
254
+ if (app[key] !== undefined) {
255
+ throw new ConfigurationError('INVALID_CONFIG', `target "${targetName}" declares app.${key}, which describes an installed device app; a web() target opens app.url`);
256
+ }
257
+ }
258
+ if (app.url === undefined) {
259
+ throw new ConfigurationError('INVALID_CONFIG', `target "${targetName}" needs app.url: a web() target opens the app at a URL, targets: [{ engine: web(), app: { url: 'http://localhost:3000' } }]`);
260
+ }
166
261
  }
167
262
  /** This package's published version, read through require resolution. */
168
263
  function ownVersion() {
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"read-semantics.d.ts","sourceRoot":"","sources":["../../src/in-page/read-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAgC,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,YAAY,WACpD,OAAO,WACP;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KAC5E,cAAc,CAAC,IAAI,CAunCrB,CAAC"}
1
+ {"version":3,"file":"read-semantics.d.ts","sourceRoot":"","sources":["../../src/in-page/read-semantics.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAgC,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElG;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,GAAI,IAAI,SAAS,YAAY,WACpD,OAAO,WACP;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,mBAAmB,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,KAC5E,cAAc,CAAC,IAAI,CAquCrB,CAAC"}