@e2e-dev/web 0.11.0-canary-20260928184528

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 (121) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +5 -0
  3. package/README.md +138 -0
  4. package/dist/.build.json +1 -0
  5. package/dist/actions.d.ts +23 -0
  6. package/dist/actions.d.ts.map +1 -0
  7. package/dist/actions.js +174 -0
  8. package/dist/actions.js.map +1 -0
  9. package/dist/attempt-session.d.ts +77 -0
  10. package/dist/attempt-session.d.ts.map +1 -0
  11. package/dist/attempt-session.js +293 -0
  12. package/dist/attempt-session.js.map +1 -0
  13. package/dist/browser-connection.d.ts +34 -0
  14. package/dist/browser-connection.d.ts.map +1 -0
  15. package/dist/browser-connection.js +86 -0
  16. package/dist/browser-connection.js.map +1 -0
  17. package/dist/capture-scope.d.ts +21 -0
  18. package/dist/capture-scope.d.ts.map +1 -0
  19. package/dist/capture-scope.js +61 -0
  20. package/dist/capture-scope.js.map +1 -0
  21. package/dist/cdp-recovery.d.ts +29 -0
  22. package/dist/cdp-recovery.d.ts.map +1 -0
  23. package/dist/cdp-recovery.js +84 -0
  24. package/dist/cdp-recovery.js.map +1 -0
  25. package/dist/cdp-selectors.d.ts +15 -0
  26. package/dist/cdp-selectors.d.ts.map +1 -0
  27. package/dist/cdp-selectors.js +52 -0
  28. package/dist/cdp-selectors.js.map +1 -0
  29. package/dist/closed-shadow.d.ts +64 -0
  30. package/dist/closed-shadow.d.ts.map +1 -0
  31. package/dist/closed-shadow.js +142 -0
  32. package/dist/closed-shadow.js.map +1 -0
  33. package/dist/dialogs.d.ts +38 -0
  34. package/dist/dialogs.d.ts.map +1 -0
  35. package/dist/dialogs.js +87 -0
  36. package/dist/dialogs.js.map +1 -0
  37. package/dist/engine.d.ts +26 -0
  38. package/dist/engine.d.ts.map +1 -0
  39. package/dist/engine.js +176 -0
  40. package/dist/engine.js.map +1 -0
  41. package/dist/evaluation.d.ts +18 -0
  42. package/dist/evaluation.d.ts.map +1 -0
  43. package/dist/evaluation.js +35 -0
  44. package/dist/evaluation.js.map +1 -0
  45. package/dist/in-page/read-semantics.d.ts +28 -0
  46. package/dist/in-page/read-semantics.d.ts.map +1 -0
  47. package/dist/in-page/read-semantics.js +1178 -0
  48. package/dist/in-page/read-semantics.js.map +1 -0
  49. package/dist/index.d.ts +22 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +14 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/install.d.ts +40 -0
  54. package/dist/install.d.ts.map +1 -0
  55. package/dist/install.js +117 -0
  56. package/dist/install.js.map +1 -0
  57. package/dist/label-selector.d.ts +37 -0
  58. package/dist/label-selector.d.ts.map +1 -0
  59. package/dist/label-selector.js +53 -0
  60. package/dist/label-selector.js.map +1 -0
  61. package/dist/locators.d.ts +76 -0
  62. package/dist/locators.d.ts.map +1 -0
  63. package/dist/locators.js +289 -0
  64. package/dist/locators.js.map +1 -0
  65. package/dist/observation-capture.d.ts +12 -0
  66. package/dist/observation-capture.d.ts.map +1 -0
  67. package/dist/observation-capture.js +93 -0
  68. package/dist/observation-capture.js.map +1 -0
  69. package/dist/observation.d.ts +63 -0
  70. package/dist/observation.d.ts.map +1 -0
  71. package/dist/observation.js +280 -0
  72. package/dist/observation.js.map +1 -0
  73. package/dist/observe.d.ts +51 -0
  74. package/dist/observe.d.ts.map +1 -0
  75. package/dist/observe.js +105 -0
  76. package/dist/observe.js.map +1 -0
  77. package/dist/operation-budget.d.ts +11 -0
  78. package/dist/operation-budget.d.ts.map +1 -0
  79. package/dist/operation-budget.js +40 -0
  80. package/dist/operation-budget.js.map +1 -0
  81. package/dist/protected-app.d.ts +32 -0
  82. package/dist/protected-app.d.ts.map +1 -0
  83. package/dist/protected-app.js +39 -0
  84. package/dist/protected-app.js.map +1 -0
  85. package/dist/provider.d.ts +158 -0
  86. package/dist/provider.d.ts.map +1 -0
  87. package/dist/provider.js +311 -0
  88. package/dist/provider.js.map +1 -0
  89. package/dist/read-node.d.ts +152 -0
  90. package/dist/read-node.d.ts.map +1 -0
  91. package/dist/read-node.js +42 -0
  92. package/dist/read-node.js.map +1 -0
  93. package/dist/refs.d.ts +43 -0
  94. package/dist/refs.d.ts.map +1 -0
  95. package/dist/refs.js +85 -0
  96. package/dist/refs.js.map +1 -0
  97. package/dist/route-pattern.d.ts +13 -0
  98. package/dist/route-pattern.d.ts.map +1 -0
  99. package/dist/route-pattern.js +55 -0
  100. package/dist/route-pattern.js.map +1 -0
  101. package/dist/selector-engines.d.ts +6 -0
  102. package/dist/selector-engines.d.ts.map +1 -0
  103. package/dist/selector-engines.js +8 -0
  104. package/dist/selector-engines.js.map +1 -0
  105. package/dist/support.d.ts +147 -0
  106. package/dist/support.d.ts.map +1 -0
  107. package/dist/support.js +366 -0
  108. package/dist/support.js.map +1 -0
  109. package/dist/surface.d.ts +313 -0
  110. package/dist/surface.d.ts.map +1 -0
  111. package/dist/surface.js +691 -0
  112. package/dist/surface.js.map +1 -0
  113. package/dist/video.d.ts +59 -0
  114. package/dist/video.d.ts.map +1 -0
  115. package/dist/video.js +116 -0
  116. package/dist/video.js.map +1 -0
  117. package/dist/web.d.ts +191 -0
  118. package/dist/web.d.ts.map +1 -0
  119. package/dist/web.js +382 -0
  120. package/dist/web.js.map +1 -0
  121. package/package.json +67 -0
package/dist/web.js ADDED
@@ -0,0 +1,382 @@
1
+ /**
2
+ * The `web` fixture: the browser-shaped deterministic surface this engine
3
+ * contributes. It lives here, not in core, because the harness knows the
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
6
+ * matchers attached through `context.expectable`.
7
+ *
8
+ * Layering rule: validation (`resolveUrl`, JSON checks, cookie URLs, the
9
+ * download trigger) runs outside `surface.guard`, so a runner error keeps its
10
+ * classification and only Playwright faults are translated. The URL rule is
11
+ * never re-implemented here: `context.app.resolveUrl` is the one place that
12
+ * says which URLs a test may open.
13
+ */
14
+ import { Deadline, describePattern, matchesText, pollCondition, TestError, toTextPattern, urlMatches, validateJsonValue, } from 'e2e/engine';
15
+ import { isTestErrorCode, message as causeMessage, translatePwError } from './support.js';
16
+ import { compileEvaluation } from './evaluation.js';
17
+ import { routePatternMatches, routePatternsEqual } from './route-pattern.js';
18
+ /**
19
+ * Reads the body once the response is known and keeps the outcome: a body
20
+ * that arrived decodes to text on every call, a body the browser could not
21
+ * read rejects every call with `ACTION_FAILED` naming the cause. Swallowing
22
+ * that failure would hand the test an empty string the server never sent,
23
+ * indistinguishable from a real empty body. The browser reports the reason
24
+ * on the request (`net::ERR_CONTENT_LENGTH_MISMATCH` for a connection cut
25
+ * short of the declared length, `net::ERR_ABORTED` for a request the page
26
+ * aborted), and the protocol error behind the read is the fallback, as for a
27
+ * redirect, whose body the browser never keeps.
28
+ */
29
+ async function readResponseBody(response) {
30
+ try {
31
+ const text = new TextDecoder().decode(await response.body());
32
+ return () => Promise.resolve(text);
33
+ }
34
+ catch (cause) {
35
+ const reason = response.request().failure()?.errorText ?? causeMessage(cause);
36
+ const error = new TestError('ACTION_FAILED', `waitForResponse: response body could not be read: ${reason}`);
37
+ return () => Promise.reject(error);
38
+ }
39
+ }
40
+ /** Builds the `web` fixture for one attempt over the shared surface. */
41
+ export function createWebFixture(surface, context) {
42
+ const latch = surface.latch;
43
+ const routes = [];
44
+ /**
45
+ * Relative URLs and URL matching need the configured base. Resolving the
46
+ * empty reference yields the base itself, and lets the harness raise
47
+ * `APP_URL_REQUIRED` when there is none.
48
+ */
49
+ const baseHref = () => context.app.resolveUrl('');
50
+ /**
51
+ * A navigation's budget: the call's own timeout, else the test timeout the
52
+ * harness gives `app.open` - a document load is not an action and must not
53
+ * be cut at the action timeout.
54
+ */
55
+ const navigation = (options, run) => {
56
+ const operation = context.operation(options?.timeout ?? context.timeouts.test);
57
+ return surface.guard(operation, 'navigation', run);
58
+ };
59
+ /** An assertion-style budget: the given timeout or the assertion timeout, clamped to the test. */
60
+ const deadlineFor = (timeout) => new Deadline(context.operation(timeout ?? context.timeouts.assertion).timeoutMs);
61
+ const currentUrl = () => surface.guard(context.operation(), 'url', async () => surface.requirePage().url());
62
+ const currentTitle = () => surface.guard(context.operation(), 'title', () => surface.requirePage().title());
63
+ const expectation = createWebExpectation({ currentUrl, currentTitle, baseHref, deadlineFor, context });
64
+ const web = {
65
+ goto(url, options) {
66
+ const resolved = context.app.resolveUrl(url);
67
+ return navigation(options, async (operation) => {
68
+ const page = await surface.ensurePage();
69
+ await page.goto(resolved, {
70
+ waitUntil: options?.waitUntil ?? 'load',
71
+ timeout: operation.timeoutMs,
72
+ });
73
+ });
74
+ },
75
+ reload: (options) => navigation(options, async (operation) => {
76
+ await surface.requirePage().reload({ waitUntil: 'load', timeout: operation.timeoutMs });
77
+ }),
78
+ back: (options) => navigation(options, async (operation) => {
79
+ await surface.requirePage().goBack({ waitUntil: 'load', timeout: operation.timeoutMs });
80
+ }),
81
+ forward: (options) => navigation(options, async (operation) => {
82
+ await surface.requirePage().goForward({ waitUntil: 'load', timeout: operation.timeoutMs });
83
+ }),
84
+ url: currentUrl,
85
+ title: currentTitle,
86
+ // The same poll as `expect(web).toHaveURL`, exposed as a wait.
87
+ 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)]),
90
+ async evaluate(fn, arg) {
91
+ const source = typeof fn === 'string' ? fn : fn.toString();
92
+ validateJsonValue(arg, 'evaluate argument');
93
+ const evaluate = compileEvaluation(source, arg !== undefined);
94
+ // JSON safety is checked above; Playwright's recursive argument type cannot expand JsonValue.
95
+ const input = arg;
96
+ const result = await surface.guard(context.operation(), 'evaluate', () => surface.requirePage().evaluate(evaluate, input));
97
+ if (!result.ok)
98
+ throw new TestError('EVALUATE_FAILED', result.message);
99
+ validateJsonValue(result.value, 'evaluate result');
100
+ return result.value;
101
+ },
102
+ route(pattern, handler) {
103
+ const wirePattern = toTextPattern(pattern);
104
+ const predicate = (url) => routePatternMatches(wirePattern, url.href);
105
+ // Playwright never surfaces a throwing route handler to the test, so a
106
+ // contract violation (no decision, two decisions) or a failing handler
107
+ // is latched on the surface and fails the next step with its real cause.
108
+ const handleRoute = async (route) => {
109
+ let decided = false;
110
+ const decide = (name) => {
111
+ if (decided) {
112
+ throw new TestError('ACTION_FAILED', `route handler already decided; ${name} called twice`);
113
+ }
114
+ decided = true;
115
+ };
116
+ const postData = route.request().postData();
117
+ const publicRoute = {
118
+ request: {
119
+ url: route.request().url(),
120
+ method: route.request().method(),
121
+ headers: route.request().headers(),
122
+ ...(postData === null ? {} : { postData }),
123
+ },
124
+ fulfill: async (response) => {
125
+ decide('fulfill');
126
+ await route.fulfill({
127
+ status: response.status ?? 200,
128
+ headers: response.headers ?? {},
129
+ ...('json' in response && response.json !== undefined
130
+ ? { json: response.json }
131
+ : 'body' in response && response.body !== undefined
132
+ ? { body: response.body }
133
+ : { body: '' }),
134
+ });
135
+ },
136
+ continue: async () => {
137
+ decide('continue');
138
+ await route.fallback();
139
+ },
140
+ abort: async () => {
141
+ decide('abort');
142
+ await route.abort();
143
+ },
144
+ };
145
+ try {
146
+ await handler(publicRoute);
147
+ if (!decided) {
148
+ throw new TestError('ACTION_FAILED', 'route handler returned without calling fulfill, continue, or abort');
149
+ }
150
+ }
151
+ catch (cause) {
152
+ latch.latch(cause instanceof Error
153
+ ? cause
154
+ : new TestError('ACTION_FAILED', `route handler failed: ${causeMessage(cause)}`));
155
+ if (!decided)
156
+ await route.abort().catch(() => undefined);
157
+ }
158
+ };
159
+ // Tracked so the attempt end waits for a handler still running and
160
+ // collects what it latched.
161
+ const pwHandler = (route) => {
162
+ const work = handleRoute(route);
163
+ latch.track('route', work);
164
+ return work;
165
+ };
166
+ return surface.guard(context.operation(), 'route', async () => {
167
+ routes.push({ pattern: wirePattern, pwHandler, predicate });
168
+ await surface.route(predicate, pwHandler);
169
+ });
170
+ },
171
+ unroute(pattern) {
172
+ const wirePattern = toTextPattern(pattern);
173
+ return surface.guard(context.operation(), 'unroute', async () => {
174
+ for (let i = routes.length - 1; i >= 0; i -= 1) {
175
+ const stored = routes[i];
176
+ if (routePatternsEqual(stored.pattern, wirePattern)) {
177
+ await surface.unroute(stored.predicate, stored.pwHandler);
178
+ routes.splice(i, 1);
179
+ }
180
+ }
181
+ });
182
+ },
183
+ waitForResponse(pattern, options) {
184
+ const wirePattern = toTextPattern(pattern);
185
+ const operation = context.operation(options?.timeout);
186
+ return surface.guard(operation, 'waitForResponse', async (currentOperation) => {
187
+ const response = await surface.requirePage().waitForResponse((candidate) => routePatternMatches(wirePattern, candidate.url()), { timeout: currentOperation.timeoutMs });
188
+ const body = await readResponseBody(response);
189
+ return {
190
+ url: response.url(),
191
+ status: response.status(),
192
+ headers: response.headers(),
193
+ json: async () => JSON.parse(await body()),
194
+ text: body,
195
+ };
196
+ });
197
+ },
198
+ cookies: () => surface.guard(context.operation(), 'cookies', async () => {
199
+ const cookies = await surface.requireContext().cookies();
200
+ return cookies.map((cookie) => ({
201
+ name: cookie.name,
202
+ value: cookie.value,
203
+ domain: cookie.domain,
204
+ path: cookie.path,
205
+ ...(cookie.expires >= 0 ? { expires: Math.floor(cookie.expires) } : {}),
206
+ httpOnly: cookie.httpOnly,
207
+ secure: cookie.secure,
208
+ ...(cookie.sameSite !== undefined ? { sameSite: cookie.sameSite } : {}),
209
+ }));
210
+ }),
211
+ setCookies(cookies) {
212
+ const scheme = new URL(baseHref()).protocol === 'https:' ? 'https' : 'http';
213
+ // The harness's URL rule decides which cookie targets are admitted; a
214
+ // domain cookie is checked as the origin it would be sent to.
215
+ for (const cookie of cookies) {
216
+ context.app.resolveUrl(cookie.url === undefined ? `${scheme}://${cookie.domain.replace(/^\./, '')}` : cookie.url);
217
+ }
218
+ return surface.guard(context.operation(), 'setCookies', async () => {
219
+ await surface.requireContext().addCookies(cookies.map((cookie) => ({
220
+ name: cookie.name,
221
+ value: cookie.value,
222
+ ...(cookie.url === undefined
223
+ ? { domain: cookie.domain, path: cookie.path ?? '/' }
224
+ : { url: cookie.url }),
225
+ ...(cookie.expires !== undefined ? { expires: cookie.expires } : {}),
226
+ ...(cookie.httpOnly !== undefined ? { httpOnly: cookie.httpOnly } : {}),
227
+ ...(cookie.secure !== undefined ? { secure: cookie.secure } : {}),
228
+ ...(cookie.sameSite !== undefined ? { sameSite: cookie.sameSite } : {}),
229
+ })));
230
+ });
231
+ },
232
+ setViewport: (size) => surface.guard(context.operation(), 'setViewport', async () => {
233
+ await surface.requirePage().setViewportSize(size);
234
+ context.attachViewport({ width: size.width, height: size.height, scale: 1 });
235
+ }),
236
+ // Async so the harness records the registration as a `web.onDialog` step.
237
+ async onDialog(handler) {
238
+ const unsubscribe = surface.dialogs.add(handler);
239
+ return async () => unsubscribe();
240
+ },
241
+ async waitForDownload(trigger, options) {
242
+ const operation = context.operation(options?.timeout);
243
+ let triggerFailure;
244
+ return surface.guard(operation, 'download', async (currentOperation) => {
245
+ const waiter = surface.requirePage()
246
+ .waitForEvent('download', { timeout: currentOperation.timeoutMs });
247
+ // The trigger may fail before the waiter settles; absorb its later rejection.
248
+ waiter.catch(() => undefined);
249
+ try {
250
+ await trigger();
251
+ }
252
+ catch (cause) {
253
+ triggerFailure = { cause };
254
+ throw cause;
255
+ }
256
+ const download = await waiter;
257
+ const suggestedFilename = download.suggestedFilename();
258
+ const { relative, absolute } = surface.artifactPath('downloads', suggestedFilename, '');
259
+ await download.saveAs(absolute);
260
+ context.attachArtifact('download', relative);
261
+ return { path: relative, suggestedFilename };
262
+ }, (cause, label) => {
263
+ // The trigger is test code, so its errors keep their original classification.
264
+ if (triggerFailure !== undefined && Object.is(cause, triggerFailure.cause))
265
+ throw cause;
266
+ return translatePwError(cause, label);
267
+ });
268
+ },
269
+ keyboard: {
270
+ press: (key) => surface.guard(context.operation(), 'keyboard.press', () => surface.requirePage().keyboard.press(key)),
271
+ type: (text) => surface.guard(context.operation(), 'keyboard.type', () => surface.requirePage().keyboard.type(text)),
272
+ },
273
+ mouse: {
274
+ move: (x, y) => surface.guard(context.operation(), 'mouse.move', () => surface.requirePage().mouse.move(x, y)),
275
+ wheel: (deltaX, deltaY) => surface.guard(context.operation(), 'mouse.wheel', () => surface.requirePage().mouse.wheel(deltaX, deltaY)),
276
+ down: () => surface.guard(context.operation(), 'mouse.down', () => surface.requirePage().mouse.down()),
277
+ up: () => surface.guard(context.operation(), 'mouse.up', () => surface.requirePage().mouse.up()),
278
+ },
279
+ };
280
+ const action = { kind: 'resource' };
281
+ const navigationCall = { kind: 'resource', timeout: false };
282
+ const matchers = {
283
+ toHaveURL: { kind: 'assertion', timeout: false, label: (expected) => String(expected) },
284
+ toHaveTitle: { kind: 'assertion', timeout: false, label: (expected) => String(expected) },
285
+ toHaveClass: { kind: 'assertion', timeout: false, label: (_target, expected) => String(expected) },
286
+ get not() { return matchers; },
287
+ };
288
+ return context.fixture('web', context.expectable(web, () => context.fixture('expect', expectation, matchers)), {
289
+ goto: { ...navigationCall, label: (url) => url },
290
+ reload: navigationCall,
291
+ back: navigationCall,
292
+ forward: navigationCall,
293
+ url: action,
294
+ title: action,
295
+ waitForURL: { ...navigationCall, verifies: true, label: (url) => String(url) },
296
+ evaluate: action,
297
+ route: { ...action, label: (pattern) => String(pattern) },
298
+ unroute: { ...action, label: (pattern) => String(pattern) },
299
+ waitForResponse: { ...action, timeout: (_pattern, options) => options?.timeout, label: (pattern) => String(pattern) },
300
+ cookies: action,
301
+ setCookies: action,
302
+ setViewport: action,
303
+ onDialog: action,
304
+ waitForDownload: { ...action, timeout: (_trigger, options) => options?.timeout },
305
+ keyboard: { press: { ...action, label: (key) => key }, type: { ...action, label: (text) => `${text.length} chars` } },
306
+ mouse: { move: action, wheel: action, down: action, up: action },
307
+ });
308
+ }
309
+ /** `expect(web)` matchers: URL, title, and class polling against the assertion budget. */
310
+ function createWebExpectation(deps, negated = false) {
311
+ const poll = async (api, label, condition, observed, timeout) => {
312
+ await pollCondition({
313
+ deadline: deps.deadlineFor(timeout),
314
+ signal: deps.context.signal,
315
+ negated,
316
+ evaluate: condition,
317
+ onTimeout: async () => new TestError('ASSERTION_FAILED', `expect.${negated ? 'not.' : ''}${api} failed\nexpected: ${negated ? 'not ' : ''}${label}\nobserved: ${await observed()}`),
318
+ });
319
+ };
320
+ return {
321
+ get not() {
322
+ return createWebExpectation(deps, !negated);
323
+ },
324
+ toHaveURL(expected, options) {
325
+ const label = typeof expected === 'string' ? expected : String(expected);
326
+ const target = deps.baseHref();
327
+ return poll('toHaveURL', `URL ${label}`, async () => urlMatches(await deps.currentUrl(), expected, target), async () => `URL ${await deps.currentUrl()}`, options?.timeout);
328
+ },
329
+ toHaveTitle(expected, options) {
330
+ const pattern = toTextPattern(expected, { exact: true });
331
+ return poll('toHaveTitle', `title ${describePattern(pattern)}`, async () => matchesText(await deps.currentTitle(), pattern), async () => `title ${JSON.stringify(await deps.currentTitle())}`, options?.timeout);
332
+ },
333
+ toHaveClass(target, expected, options) {
334
+ const pattern = toTextPattern(expected, { exact: true });
335
+ return poll('toHaveClass', `class ${describePattern(pattern)}`, async () => {
336
+ try {
337
+ const value = await target.getAttribute('class');
338
+ if (value === null)
339
+ return false;
340
+ const normalized = value.trim().split(/\s+/).join(' ');
341
+ return matchesText(normalized, pattern);
342
+ }
343
+ catch (error) {
344
+ if (isTestErrorCode(error, 'LOCATOR_NOT_FOUND'))
345
+ return undefined;
346
+ throw error;
347
+ }
348
+ }, async () => {
349
+ try {
350
+ const value = await target.getAttribute('class');
351
+ if (value === null)
352
+ return 'no class attribute';
353
+ return `class ${JSON.stringify(value)}`;
354
+ }
355
+ catch (error) {
356
+ if (isTestErrorCode(error, 'LOCATOR_NOT_FOUND'))
357
+ return 'no node';
358
+ throw error;
359
+ }
360
+ }, options?.timeout);
361
+ },
362
+ };
363
+ }
364
+ function requireSelector(method, selector) {
365
+ if (typeof selector !== 'string' || selector.length === 0) {
366
+ throw new TestError('INVALID_LOCATOR', `${method}() requires a nonempty selector`);
367
+ }
368
+ return selector;
369
+ }
370
+ /**
371
+ * The scope for the innermost of `frames` (outermost first). Every query and
372
+ * both escape hatches compile through the same `frame` chain, so a `locator`
373
+ * inside it resolves against the innermost document.
374
+ */
375
+ function frameScreen(context, frames) {
376
+ const scope = (expression) => frames.reduceRight((source, selector) => ({ kind: 'frame', selector, source }), expression);
377
+ return Object.assign(context.screen(scope), {
378
+ locator: (selector) => context.locator(scope({ kind: 'selector', selector: requireSelector('locator', selector) })),
379
+ frameLocator: (selector) => frameScreen(context, [...frames, requireSelector('frameLocator', selector)]),
380
+ });
381
+ }
382
+ //# sourceMappingURL=web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../src/web.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@e2e-dev/web",
3
+ "version": "0.11.0-canary-20260928184528",
4
+ "description": "Web engine for e2e agentic end-to-end testing, built on Playwright",
5
+ "keywords": [
6
+ "e2e",
7
+ "testing",
8
+ "agentic",
9
+ "end-to-end",
10
+ "playwright",
11
+ "engine"
12
+ ],
13
+ "license": "Apache-2.0",
14
+ "contributors": [
15
+ "Oskar Kwaśniewski <oskar@tester.army>",
16
+ "Szymon Rybczak <szymon@tester.army>"
17
+ ],
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/tester-army/e2e.git",
21
+ "directory": "packages/web"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/tester-army/e2e/issues"
25
+ },
26
+ "homepage": "https://github.com/tester-army/e2e/tree/main/packages/web#readme",
27
+ "publishConfig": {
28
+ "registry": "https://registry.npmjs.org/",
29
+ "access": "public",
30
+ "provenance": false,
31
+ "tag": "beta"
32
+ },
33
+ "type": "module",
34
+ "exports": {
35
+ ".": {
36
+ "types": "./dist/index.d.ts",
37
+ "default": "./dist/index.js"
38
+ }
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "NOTICE"
43
+ ],
44
+ "peerDependencies": {
45
+ "e2e": "0.15.0-canary-20260928184528",
46
+ "playwright": ">=1.63.0 <2"
47
+ },
48
+ "devDependencies": {
49
+ "@types/node": "26.6.2",
50
+ "e2e": "0.15.0-canary-20260928184528",
51
+ "@types/pngjs": "6.0.5",
52
+ "pngjs": "7.0.0",
53
+ "playwright": "1.63.0",
54
+ "typescript": "7.0.2",
55
+ "vitest": "5.0.1"
56
+ },
57
+ "engines": {
58
+ "node": ">=22.12.0"
59
+ },
60
+ "scripts": {
61
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && tsc --project tsconfig.build.json && node ../../scripts/stamp-dist.ts",
62
+ "typecheck": "tsc --noEmit",
63
+ "test": "vitest run",
64
+ "test:watch": "vitest",
65
+ "test:unit": "vitest run tests/unit"
66
+ }
67
+ }