@poe-platform/safe-bash 0.1.680 → 0.1.681

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 (169) hide show
  1. package/README.md +1 -1
  2. package/dist/safe-bash/commands/playwright/index.d.ts.map +1 -1
  3. package/dist/safe-bash/commands/playwright/index.js +77 -4
  4. package/dist/safe-bash/commands/playwright/index.js.map +1 -1
  5. package/dist/safe-bash/playwright/abilities.d.ts +24 -5
  6. package/dist/safe-bash/playwright/abilities.d.ts.map +1 -1
  7. package/dist/safe-bash/playwright/abilities.js +9 -4
  8. package/dist/safe-bash/playwright/abilities.js.map +1 -1
  9. package/dist/safe-bash/playwright/ability-execution.d.ts +6 -1
  10. package/dist/safe-bash/playwright/ability-execution.d.ts.map +1 -1
  11. package/dist/safe-bash/playwright/ability-execution.js +77 -5
  12. package/dist/safe-bash/playwright/ability-execution.js.map +1 -1
  13. package/dist/safe-bash/playwright/adapter.d.ts +467 -11
  14. package/dist/safe-bash/playwright/adapter.d.ts.map +1 -1
  15. package/dist/safe-bash/playwright/adapter.js +213 -4
  16. package/dist/safe-bash/playwright/adapter.js.map +1 -1
  17. package/dist/safe-bash/playwright/builtins.d.ts +44 -4
  18. package/dist/safe-bash/playwright/builtins.d.ts.map +1 -1
  19. package/dist/safe-bash/playwright/builtins.js +14 -9
  20. package/dist/safe-bash/playwright/builtins.js.map +1 -1
  21. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts +5 -0
  22. package/dist/safe-bash/playwright/canonical-locator-parser.d.ts.map +1 -0
  23. package/dist/safe-bash/playwright/canonical-locator-parser.js +146 -0
  24. package/dist/safe-bash/playwright/canonical-locator-parser.js.map +1 -0
  25. package/dist/safe-bash/playwright/capability-events.d.ts +15 -0
  26. package/dist/safe-bash/playwright/capability-events.d.ts.map +1 -0
  27. package/dist/safe-bash/playwright/capability-events.js +265 -0
  28. package/dist/safe-bash/playwright/capability-events.js.map +1 -0
  29. package/dist/safe-bash/playwright/capability-result.d.ts +33 -0
  30. package/dist/safe-bash/playwright/capability-result.d.ts.map +1 -0
  31. package/dist/safe-bash/playwright/capability-result.js +72 -0
  32. package/dist/safe-bash/playwright/capability-result.js.map +1 -0
  33. package/dist/safe-bash/playwright/config-ini.d.ts +3 -0
  34. package/dist/safe-bash/playwright/config-ini.d.ts.map +1 -0
  35. package/dist/safe-bash/playwright/config-ini.js +161 -0
  36. package/dist/safe-bash/playwright/config-ini.js.map +1 -0
  37. package/dist/safe-bash/playwright/controller.d.ts +39 -1
  38. package/dist/safe-bash/playwright/controller.d.ts.map +1 -1
  39. package/dist/safe-bash/playwright/controller.js +913 -77
  40. package/dist/safe-bash/playwright/controller.js.map +1 -1
  41. package/dist/safe-bash/playwright/devices.d.ts +229 -0
  42. package/dist/safe-bash/playwright/devices.d.ts.map +1 -0
  43. package/dist/safe-bash/playwright/devices.js +2740 -0
  44. package/dist/safe-bash/playwright/devices.js.map +1 -0
  45. package/dist/safe-bash/playwright/download-capabilities.d.ts +15 -0
  46. package/dist/safe-bash/playwright/download-capabilities.d.ts.map +1 -0
  47. package/dist/safe-bash/playwright/download-capabilities.js +161 -0
  48. package/dist/safe-bash/playwright/download-capabilities.js.map +1 -0
  49. package/dist/safe-bash/playwright/drop-capability.d.ts +3 -0
  50. package/dist/safe-bash/playwright/drop-capability.d.ts.map +1 -0
  51. package/dist/safe-bash/playwright/drop-capability.js +50 -0
  52. package/dist/safe-bash/playwright/drop-capability.js.map +1 -0
  53. package/dist/safe-bash/playwright/find.d.ts +8 -0
  54. package/dist/safe-bash/playwright/find.d.ts.map +1 -0
  55. package/dist/safe-bash/playwright/find.js +68 -0
  56. package/dist/safe-bash/playwright/find.js.map +1 -0
  57. package/dist/safe-bash/playwright/generated-locator.d.ts +4 -0
  58. package/dist/safe-bash/playwright/generated-locator.d.ts.map +1 -0
  59. package/dist/safe-bash/playwright/generated-locator.js +22 -0
  60. package/dist/safe-bash/playwright/generated-locator.js.map +1 -0
  61. package/dist/safe-bash/playwright/help.d.ts +4 -3
  62. package/dist/safe-bash/playwright/help.d.ts.map +1 -1
  63. package/dist/safe-bash/playwright/help.js +7 -52
  64. package/dist/safe-bash/playwright/help.js.map +1 -1
  65. package/dist/safe-bash/playwright/highlight.d.ts +8 -0
  66. package/dist/safe-bash/playwright/highlight.d.ts.map +1 -0
  67. package/dist/safe-bash/playwright/highlight.js +82 -0
  68. package/dist/safe-bash/playwright/highlight.js.map +1 -0
  69. package/dist/safe-bash/playwright/index.d.ts +5 -0
  70. package/dist/safe-bash/playwright/index.d.ts.map +1 -1
  71. package/dist/safe-bash/playwright/index.js +4 -0
  72. package/dist/safe-bash/playwright/index.js.map +1 -1
  73. package/dist/safe-bash/playwright/invocation.d.ts +24 -0
  74. package/dist/safe-bash/playwright/invocation.d.ts.map +1 -1
  75. package/dist/safe-bash/playwright/invocation.js +42 -10
  76. package/dist/safe-bash/playwright/invocation.js.map +1 -1
  77. package/dist/safe-bash/playwright/locator-selector.d.ts +5 -0
  78. package/dist/safe-bash/playwright/locator-selector.d.ts.map +1 -0
  79. package/dist/safe-bash/playwright/locator-selector.js +70 -0
  80. package/dist/safe-bash/playwright/locator-selector.js.map +1 -0
  81. package/dist/safe-bash/playwright/modal-capabilities.d.ts +20 -0
  82. package/dist/safe-bash/playwright/modal-capabilities.d.ts.map +1 -0
  83. package/dist/safe-bash/playwright/modal-capabilities.js +137 -0
  84. package/dist/safe-bash/playwright/modal-capabilities.js.map +1 -0
  85. package/dist/safe-bash/playwright/native-json-snapshot.d.ts +17 -0
  86. package/dist/safe-bash/playwright/native-json-snapshot.d.ts.map +1 -0
  87. package/dist/safe-bash/playwright/native-json-snapshot.js +94 -0
  88. package/dist/safe-bash/playwright/native-json-snapshot.js.map +1 -0
  89. package/dist/safe-bash/playwright/native-snapshot.d.ts +17 -0
  90. package/dist/safe-bash/playwright/native-snapshot.d.ts.map +1 -0
  91. package/dist/safe-bash/playwright/native-snapshot.js +164 -0
  92. package/dist/safe-bash/playwright/native-snapshot.js.map +1 -0
  93. package/dist/safe-bash/playwright/network-policy.d.ts +2 -0
  94. package/dist/safe-bash/playwright/network-policy.d.ts.map +1 -1
  95. package/dist/safe-bash/playwright/network-policy.js +1 -1
  96. package/dist/safe-bash/playwright/network-policy.js.map +1 -1
  97. package/dist/safe-bash/playwright/open-options.d.ts +14 -0
  98. package/dist/safe-bash/playwright/open-options.d.ts.map +1 -0
  99. package/dist/safe-bash/playwright/open-options.js +279 -0
  100. package/dist/safe-bash/playwright/open-options.js.map +1 -0
  101. package/dist/safe-bash/playwright/recording-capabilities.d.ts +6 -0
  102. package/dist/safe-bash/playwright/recording-capabilities.d.ts.map +1 -0
  103. package/dist/safe-bash/playwright/recording-capabilities.js +83 -0
  104. package/dist/safe-bash/playwright/recording-capabilities.js.map +1 -0
  105. package/dist/safe-bash/playwright/resource-limit.d.ts +6 -0
  106. package/dist/safe-bash/playwright/resource-limit.d.ts.map +1 -0
  107. package/dist/safe-bash/playwright/resource-limit.js +8 -0
  108. package/dist/safe-bash/playwright/resource-limit.js.map +1 -0
  109. package/dist/safe-bash/playwright/response.d.ts +22 -0
  110. package/dist/safe-bash/playwright/response.d.ts.map +1 -0
  111. package/dist/safe-bash/playwright/response.js +43 -0
  112. package/dist/safe-bash/playwright/response.js.map +1 -0
  113. package/dist/safe-bash/playwright/route-capabilities.d.ts +25 -0
  114. package/dist/safe-bash/playwright/route-capabilities.d.ts.map +1 -0
  115. package/dist/safe-bash/playwright/route-capabilities.js +138 -0
  116. package/dist/safe-bash/playwright/route-capabilities.js.map +1 -0
  117. package/dist/safe-bash/playwright/screenshot.d.ts +3 -1
  118. package/dist/safe-bash/playwright/screenshot.d.ts.map +1 -1
  119. package/dist/safe-bash/playwright/screenshot.js +15 -12
  120. package/dist/safe-bash/playwright/screenshot.js.map +1 -1
  121. package/dist/safe-bash/playwright/session-configuration.d.ts +35 -0
  122. package/dist/safe-bash/playwright/session-configuration.d.ts.map +1 -0
  123. package/dist/safe-bash/playwright/session-configuration.js +50 -0
  124. package/dist/safe-bash/playwright/session-configuration.js.map +1 -0
  125. package/dist/safe-bash/playwright/session-runtime.d.ts +8 -0
  126. package/dist/safe-bash/playwright/session-runtime.d.ts.map +1 -0
  127. package/dist/safe-bash/playwright/session-runtime.js +96 -0
  128. package/dist/safe-bash/playwright/session-runtime.js.map +1 -0
  129. package/dist/safe-bash/playwright/snapshot.d.ts +15 -2
  130. package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -1
  131. package/dist/safe-bash/playwright/snapshot.js +66 -7
  132. package/dist/safe-bash/playwright/snapshot.js.map +1 -1
  133. package/dist/safe-bash/playwright/standard-capabilities.d.ts +4 -0
  134. package/dist/safe-bash/playwright/standard-capabilities.d.ts.map +1 -0
  135. package/dist/safe-bash/playwright/standard-capabilities.js +248 -0
  136. package/dist/safe-bash/playwright/standard-capabilities.js.map +1 -0
  137. package/dist/safe-bash/playwright/storage-capabilities.d.ts +4 -0
  138. package/dist/safe-bash/playwright/storage-capabilities.d.ts.map +1 -0
  139. package/dist/safe-bash/playwright/storage-capabilities.js +120 -0
  140. package/dist/safe-bash/playwright/storage-capabilities.js.map +1 -0
  141. package/dist/safe-bash/playwright/storage-state.d.ts +8 -0
  142. package/dist/safe-bash/playwright/storage-state.d.ts.map +1 -0
  143. package/dist/safe-bash/playwright/storage-state.js +122 -0
  144. package/dist/safe-bash/playwright/storage-state.js.map +1 -0
  145. package/dist/safe-bash/playwright/target-screenshot.d.ts +9 -0
  146. package/dist/safe-bash/playwright/target-screenshot.d.ts.map +1 -0
  147. package/dist/safe-bash/playwright/target-screenshot.js +28 -0
  148. package/dist/safe-bash/playwright/target-screenshot.js.map +1 -0
  149. package/dist/safe-bash/playwright/targets.d.ts +12 -0
  150. package/dist/safe-bash/playwright/targets.d.ts.map +1 -0
  151. package/dist/safe-bash/playwright/targets.js +36 -0
  152. package/dist/safe-bash/playwright/targets.js.map +1 -0
  153. package/dist/safe-bash/playwright/tracing-capabilities.d.ts +12 -0
  154. package/dist/safe-bash/playwright/tracing-capabilities.d.ts.map +1 -0
  155. package/dist/safe-bash/playwright/tracing-capabilities.js +100 -0
  156. package/dist/safe-bash/playwright/tracing-capabilities.js.map +1 -0
  157. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts +6 -0
  158. package/dist/safe-bash/playwright/webmcp-capabilities.d.ts.map +1 -0
  159. package/dist/safe-bash/playwright/webmcp-capabilities.js +122 -0
  160. package/dist/safe-bash/playwright/webmcp-capabilities.js.map +1 -0
  161. package/dist/safe-bash/playwright/workspace-assets.d.ts +5 -0
  162. package/dist/safe-bash/playwright/workspace-assets.d.ts.map +1 -0
  163. package/dist/safe-bash/playwright/workspace-assets.js +17 -0
  164. package/dist/safe-bash/playwright/workspace-assets.js.map +1 -0
  165. package/dist/safe-bash/playwright/workspace.d.ts +3 -0
  166. package/dist/safe-bash/playwright/workspace.d.ts.map +1 -0
  167. package/dist/safe-bash/playwright/workspace.js +48 -0
  168. package/dist/safe-bash/playwright/workspace.js.map +1 -0
  169. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/playwright/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG5E;gFACgF;AAChF,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,uBAAuB,GAAG,SAAS,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+D5K"}
@@ -0,0 +1,82 @@
1
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
2
+ /** Older Cloudflare clients have only a single temporary native highlight. This
3
+ * page-owned overlay supplies persistent styling/removal with no host state. */
4
+ export async function updatePlaywrightHighlight(page, target, options) {
5
+ const update = (input) => {
6
+ const browser = globalThis;
7
+ const key = Symbol.for('safe-bash.playwright.highlights');
8
+ let state = Reflect.get(globalThis, key);
9
+ const element = input.target;
10
+ if (input.hide) {
11
+ if (!state)
12
+ return true;
13
+ for (const [node, entry] of state.entries)
14
+ if (!element || node === element) {
15
+ entry.overlay.remove();
16
+ state.entries.delete(node);
17
+ }
18
+ if (!state.entries.size) {
19
+ browser.removeEventListener('scroll', state.refresh, true);
20
+ browser.removeEventListener('resize', state.refresh);
21
+ Reflect.deleteProperty(globalThis, key);
22
+ }
23
+ return true;
24
+ }
25
+ if (!element?.isConnected)
26
+ throw new Error('Highlight target is detached');
27
+ if (!state) {
28
+ const entries = new Map();
29
+ const holder = { entries, refresh() {
30
+ for (const entry of entries.values()) {
31
+ if (!entry.target.isConnected) {
32
+ entry.overlay.remove();
33
+ entries.delete(entry.target);
34
+ continue;
35
+ }
36
+ const box = entry.target.getBoundingClientRect();
37
+ Object.assign(entry.overlay.style, { left: `${box.x}px`, top: `${box.y}px`, width: `${box.width}px`, height: `${box.height}px` });
38
+ }
39
+ } };
40
+ state = holder;
41
+ Reflect.set(globalThis, key, state);
42
+ browser.addEventListener('scroll', holder.refresh, true);
43
+ browser.addEventListener('resize', holder.refresh);
44
+ }
45
+ if (!state.entries.has(element) && state.entries.size >= 128)
46
+ return false;
47
+ let entry = state.entries.get(element);
48
+ if (!entry) {
49
+ const overlay = browser.document.createElement('div');
50
+ overlay.setAttribute('aria-hidden', 'true');
51
+ entry = { target: element, overlay };
52
+ state.entries.set(element, entry);
53
+ browser.document.documentElement.appendChild(overlay);
54
+ }
55
+ entry.overlay.style.cssText = 'position:fixed;pointer-events:none;z-index:2147483647;box-sizing:border-box;outline:2px solid #1a73e8;background:#1a73e833;' + (input.style ?? '');
56
+ state.refresh();
57
+ return true;
58
+ };
59
+ let result;
60
+ if (target)
61
+ result = await target.evaluate((node, { source, hide, style }) => {
62
+ const operation = eval(`(${source})`);
63
+ return operation({ target: node, hide, ...(style === undefined ? {} : { style }) });
64
+ }, { source: update.toString(), hide: options.hide, style: options.style });
65
+ else {
66
+ if (!page.evaluate)
67
+ throw new Error('Browser highlight evaluation unavailable');
68
+ const input = { target: undefined, hide: options.hide, ...(options.style === undefined ? {} : { style: options.style }) };
69
+ const frames = page.frames?.();
70
+ if (frames?.length && frames.every(frame => frame.evaluate)) {
71
+ result = true;
72
+ for (const frame of frames)
73
+ if (!await frame.evaluate(update, input))
74
+ result = false;
75
+ }
76
+ else
77
+ result = await page.evaluate(update, input);
78
+ }
79
+ if (!result)
80
+ throw new PlaywrightResourceLimitError('Playwright highlight retention limit exceeded');
81
+ }
82
+ //# sourceMappingURL=highlight.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../src/playwright/highlight.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@ export * from './billing.js';
3
3
  export * from './controller.js';
4
4
  export * from './catalog.js';
5
5
  export * from './network-policy.js';
6
+ export { parsePlaywrightStorageState } from './storage-state.js';
7
+ export { parsePlaywrightContextOptions } from './open-options.js';
8
+ export { PlaywrightResourceLimitError } from './resource-limit.js';
9
+ export { parsePlaywrightSessionConfiguration, type PlaywrightSessionConfiguration } from './session-configuration.js';
10
+ export type { PlaywrightCommandResult } from './response.js';
6
11
  export type { PlaywrightAbilities, PlaywrightAbility, PlaywrightAbilityRequest } from './abilities.js';
7
12
  export type { PlaywrightInvocation } from './invocation.js';
8
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACvG,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,mCAAmC,EAAE,KAAK,8BAA8B,EAAE,MAAM,4BAA4B,CAAC;AACtH,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACvG,YAAY,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC"}
@@ -3,4 +3,8 @@ export * from './billing.js';
3
3
  export * from './controller.js';
4
4
  export * from './catalog.js';
5
5
  export * from './network-policy.js';
6
+ export { parsePlaywrightStorageState } from './storage-state.js';
7
+ export { parsePlaywrightContextOptions } from './open-options.js';
8
+ export { PlaywrightResourceLimitError } from './resource-limit.js';
9
+ export { parsePlaywrightSessionConfiguration } from './session-configuration.js';
6
10
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/playwright/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,mCAAmC,EAAuC,MAAM,4BAA4B,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import type { BrowserEngine, PlaywrightAdapter } from './adapter.js';
2
2
  import { type PlaywrightCommand } from './catalog.js';
3
3
  import type { RegisteredPlaywrightAbility } from './abilities.js';
4
+ import type { PlaywrightMouseButton, PlaywrightModifier } from './adapter.js';
4
5
  export interface PlaywrightInvocation {
5
6
  readonly args: readonly string[];
6
7
  readonly env: Readonly<Record<string, string>>;
@@ -9,9 +10,23 @@ export interface PlaywrightInvocation {
9
10
  readonly readArtifact?: ((filename: string, maxBytes: number) => Promise<Uint8Array>) | undefined;
10
11
  readonly writeArtifact?: ((bytes: Uint8Array, filename?: string) => Promise<void>) | undefined;
11
12
  readonly registerCleanup?: ((cleanup: () => Promise<void>) => void) | undefined;
13
+ readonly workspace?: {
14
+ readonly cwd: string;
15
+ readonly home?: string;
16
+ mkdir(path: string): Promise<void>;
17
+ exists(path: string): Promise<boolean>;
18
+ listFiles?(directory: string, maxEntries: number): Promise<readonly {
19
+ readonly filename: string;
20
+ readonly size: number;
21
+ readonly mtimeMs: number;
22
+ }[]>;
23
+ removeFile?(filename: string): Promise<void>;
24
+ };
12
25
  }
13
26
  export type ParsedInvocation = {
14
27
  command: PlaywrightCommand;
28
+ json: boolean;
29
+ raw: boolean;
15
30
  session: string;
16
31
  args: readonly string[];
17
32
  options: Readonly<Record<string, string | boolean | readonly string[]>>;
@@ -24,10 +39,19 @@ export type ParsedInvocation = {
24
39
  filename?: string;
25
40
  fullPage: boolean;
26
41
  imageType: 'png' | 'jpeg';
42
+ button?: PlaywrightMouseButton;
43
+ modifiers?: PlaywrightModifier[];
44
+ scale: 'css' | 'device';
27
45
  };
28
46
  export declare function validatePlaywrightSessionName(session: unknown): asserts session is string;
29
47
  export declare function parseInvocation(invocation: PlaywrightInvocation, abilities: ReadonlyMap<PlaywrightCommand, RegisteredPlaywrightAbility>, adapter?: PlaywrightAdapter): ParsedInvocation | {
30
48
  command: 'help';
31
49
  topic?: PlaywrightCommand | 'tab';
50
+ json: boolean;
51
+ raw: boolean;
52
+ } | {
53
+ command: 'version';
54
+ json: boolean;
55
+ raw: boolean;
32
56
  };
33
57
  //# sourceMappingURL=invocation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAA4B,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAElE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/C,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,SAAS,CAAC;IAClG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/F,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACjF;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;CAC3B,CAAC;AAEF,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,MAAM,CAEzF;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,oBAAoB,EAAE,SAAS,EAAE,WAAW,CAAC,iBAAiB,EAAE,2BAA2B,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,iBAAiB,GAAG,KAAK,CAAA;CAAE,CA4GhP"}
1
+ {"version":3,"file":"invocation.d.ts","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { playwrightCommandCatalog } from './catalog.js';
2
+ import { playwrightCommandReference } from './command-reference.js';
2
3
  export function validatePlaywrightSessionName(session) {
3
4
  if (typeof session !== 'string' || !session || session.length > 128 || [...session].some(char => !'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-'.includes(char)))
4
5
  throw new Error('Invalid session name');
@@ -9,6 +10,8 @@ export function parseInvocation(invocation, abilities, adapter) {
9
10
  const knownOptions = new Map(Object.values(playwrightCommandCatalog).flatMap(command => Object.entries(command.options)));
10
11
  knownOptions.set('headless', { type: 'boolean', description: '' });
11
12
  knownOptions.set('session', { type: 'string', description: '' });
13
+ for (const flag of ['json', 'raw', 'version'])
14
+ knownOptions.set(flag, { type: 'boolean', description: '' });
12
15
  let help = false;
13
16
  let literal = false;
14
17
  for (let index = 0; index < invocation.args.length; index++) {
@@ -26,14 +29,14 @@ export function parseInvocation(invocation, abilities, adapter) {
26
29
  }
27
30
  const separator = arg.indexOf('=');
28
31
  const flag = separator === -1 ? arg : arg.slice(0, separator);
29
- const key = flag === '-s' ? 'session' : flag === '-g' ? 'global' : flag.slice(2);
32
+ const key = flag === '-s' ? 'session' : flag === '-g' ? 'global' : flag === '-v' ? 'version' : flag.slice(2);
30
33
  if ((flag === '-h' || flag === '--help') && separator === -1) {
31
34
  help = true;
32
35
  continue;
33
36
  }
34
37
  const definition = knownOptions.get(key);
35
- if (!definition || flag !== '-s' && flag !== '-g' && !flag.startsWith('--'))
36
- throw new Error(`Unsupported option: ${arg}`);
38
+ if (!definition || flag !== '-s' && flag !== '-g' && flag !== '-v' && !flag.startsWith('--'))
39
+ throw new Error(`Unknown option: ${arg}`);
37
40
  let value;
38
41
  if (definition.type === 'boolean') {
39
42
  if (separator !== -1)
@@ -57,17 +60,23 @@ export function parseInvocation(invocation, abilities, adapter) {
57
60
  help = true;
58
61
  positional.shift();
59
62
  }
60
- if (!positional.length && !supplied.size)
63
+ const json = supplied.has('json');
64
+ const raw = supplied.has('raw');
65
+ if (supplied.has('version'))
66
+ return { command: 'version', json, raw };
67
+ supplied.delete('json');
68
+ supplied.delete('raw');
69
+ if (!positional.length)
61
70
  help = true;
62
71
  if (help && (positional.length === 0 || positional.length === 1 && positional[0] === 'tab'))
63
- return { command: 'help', ...(positional[0] === 'tab' ? { topic: 'tab' } : {}) };
72
+ return { command: 'help', json, raw, ...(positional[0] === 'tab' ? { topic: 'tab' } : {}) };
64
73
  if (positional[0] === 'tab')
65
74
  positional.splice(0, 2, `tab-${positional[1] ?? ''}`);
66
75
  const command = positional.shift();
67
76
  if (!Object.hasOwn(playwrightCommandCatalog, command))
68
77
  throw new Error(`Unsupported command: ${command ?? ''}`);
69
78
  if (help)
70
- return { command: 'help', topic: command };
79
+ return { command: 'help', topic: command, json, raw };
71
80
  const ability = abilities.get(command);
72
81
  if (!ability)
73
82
  throw new Error(`Playwright ability not enabled: ${command}`);
@@ -89,10 +98,11 @@ export function parseInvocation(invocation, abilities, adapter) {
89
98
  const [min, max] = ability.arity;
90
99
  if (positional.length < min || positional.length > max)
91
100
  throw new Error(`Invalid arguments for ${command}`);
92
- const parsed = { command, session, args: Object.freeze(positional), options: Object.freeze(options), browser: 'chromium', headless: true, fullPage: false, imageType: 'png' };
101
+ const reference = playwrightCommandReference[command];
102
+ const parsed = { command, json, raw: raw || ('raw' in reference && reference.raw), session, args: Object.freeze(positional), options: Object.freeze(options), browser: 'chromium', headless: true, fullPage: false, imageType: 'png', scale: 'css' };
93
103
  if (ability.execute)
94
104
  return parsed;
95
- const browser = options.browser ?? 'chromium';
105
+ const browser = options.browser === 'chrome' ? 'chromium' : options.browser ?? 'chromium';
96
106
  if (browser !== 'chromium' && browser !== 'firefox' && browser !== 'webkit')
97
107
  throw new Error(`Unsupported browser: ${browser}`);
98
108
  parsed.browser = browser;
@@ -100,6 +110,7 @@ export function parseInvocation(invocation, abilities, adapter) {
100
110
  throw new Error('Invalid option: --headless');
101
111
  parsed.headless = !options.headed;
102
112
  parsed.fullPage = options['full-page'] === true;
113
+ parsed.scale = options.hires ? 'device' : 'css';
103
114
  if (options.filename !== undefined) {
104
115
  const filename = options.filename;
105
116
  if (!filename)
@@ -126,6 +137,17 @@ export function parseInvocation(invocation, abilities, adapter) {
126
137
  else if (!lower.endsWith('.png'))
127
138
  throw new Error('Unsupported screenshot extension; use png or jpeg');
128
139
  }
140
+ if (command === 'screenshot') {
141
+ if (options.type !== undefined) {
142
+ if (options.type !== 'png' && options.type !== 'jpeg')
143
+ throw new Error(`Unsupported screenshot type: ${String(options.type)}`);
144
+ parsed.imageType = options.type;
145
+ }
146
+ if (positional[0])
147
+ parsed.ref = positional[0];
148
+ if (parsed.ref && parsed.fullPage)
149
+ throw new Error('fullPage cannot be used with element screenshots.');
150
+ }
129
151
  const url = command === 'open' || command === 'goto' || command === 'tab-new' ? positional[0] : undefined;
130
152
  if (url !== undefined) {
131
153
  const parsedUrl = new URL(url);
@@ -135,10 +157,20 @@ export function parseInvocation(invocation, abilities, adapter) {
135
157
  }
136
158
  if (command === 'click' || command === 'fill') {
137
159
  const ref = positional[0];
138
- if (ref[0] !== 'e' || ref.length < 2 || [...ref.slice(1)].some(char => !'0123456789'.includes(char)))
139
- throw new Error('Action requires a snapshot ref');
160
+ if (!ref)
161
+ throw new Error('Missing target');
140
162
  parsed.ref = ref;
141
163
  }
164
+ if (command === 'click') {
165
+ const button = positional[1] ?? 'left';
166
+ if (!['left', 'right', 'middle'].includes(button))
167
+ throw new Error(`Unknown mouse button: ${button}`);
168
+ parsed.button = button;
169
+ const modifiers = options.modifiers === undefined ? [] : typeof options.modifiers === 'string' ? [options.modifiers] : options.modifiers;
170
+ if (!Array.isArray(modifiers) || modifiers.some(modifier => !['Alt', 'Control', 'ControlOrMeta', 'Meta', 'Shift'].includes(modifier)))
171
+ throw new Error('Invalid click modifiers');
172
+ parsed.modifiers = modifiers;
173
+ }
142
174
  if (command === 'fill')
143
175
  parsed.value = positional[1];
144
176
  if (command === 'press') {
@@ -1 +1 @@
1
- {"version":3,"file":"invocation.js","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invocation.js","sourceRoot":"","sources":["../../src/playwright/invocation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAA0B,MAAM,cAAc,CAAC;AAEhF,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AA0CpE,MAAM,UAAU,6BAA6B,CAAC,OAAgB;IAC5D,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,kEAAkE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AAChO,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAAgC,EAAE,SAAsE,EAAE,OAA2B;IACnK,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAgC,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1H,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACnE,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IACjE,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC;QAAE,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5G,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC5D,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAE,CAAC;QACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAClG,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACzH,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;YAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAAC,SAAS;QAAC,CAAC;QACnF,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC9D,MAAM,GAAG,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7G,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC;YAAC,SAAS;QAAC,CAAC;QACxF,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;QACxI,IAAI,KAAuB,CAAC;QAC5B,IAAI,UAAU,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,SAAS,KAAK,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,EAAE,CAAC,CAAC;YAChE,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,IAAI,UAAU,CAAC,aAAa,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrJ,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACzF,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;YACtM,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;QACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC5B,CAAC;IACD,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QAAC,IAAI,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAAC,CAAC;IAClE,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IACtE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC;IACpC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzL,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,KAAK;QAAE,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAuB,CAAC;IACxD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,OAAO,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;IAChH,IAAI,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAChE,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,OAAO,EAAE,CAAC,CAAC;IAC5E,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC9C,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC/F,MAAM,OAAO,GAAI,aAAa,EAAE,CAAC,CAAC,CAAwB,IAAI,UAAU,CAAC,GAAG,CAAC,sBAAsB,IAAI,SAAS,CAAC;IACjH,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3B,MAAM,OAAO,GAAyD,EAAE,CAAC;IACzE,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAClE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAkB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC;IACzF,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IACjC,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IAC5G,MAAM,SAAS,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,MAAM,GAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,SAAS,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACvQ,IAAI,OAAO,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IACnC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC;IAC1F,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;IAChI,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IACtF,MAAM,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;IAClC,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAkB,CAAC;QAC5C,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACvE,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IACD,IAAI,OAAO,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9D,IAAI,OAAO,UAAU,CAAC,aAAa,KAAK,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC/G,CAAC;IACD,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAC5E,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,OAAO,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,IAAI,OAAO,KAAK,YAAY,IAAI,MAAM,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC;aAC5E,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;QAC7B,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC/H,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;QAClC,CAAC;QACD,IAAI,UAAU,CAAC,CAAC,CAAC;YAAE,MAAM,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1G,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC/B,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,GAAG,KAAK,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAC9I,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC5C,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;QACvC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAC;QACtG,MAAM,CAAC,MAAM,GAAG,MAA+B,CAAC;QAChD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QACzI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAClL,MAAM,CAAC,SAAS,GAAG,SAAiC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,KAAK,MAAM;QAAE,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAE,CAAC;IACtD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACjG,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC9I,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;IACnB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { PlaywrightPage } from './adapter.js';
2
+ export declare function setPlaywrightTestIdAttribute(page: PlaywrightPage, attribute: string | undefined): void;
3
+ /** Parse standard generated locator syntax without evaluating agent code. */
4
+ export declare function playwrightLocatorSelector(page: PlaywrightPage, target: string): string;
5
+ //# sourceMappingURL=locator-selector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator-selector.d.ts","sourceRoot":"","sources":["../../src/playwright/locator-selector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAInD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAItG;AAoCD,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQtF"}
@@ -0,0 +1,70 @@
1
+ import { parseCanonicalPlaywrightLocator } from './canonical-locator-parser.js';
2
+ const testIdAttributes = new WeakMap();
3
+ export function setPlaywrightTestIdAttribute(page, attribute) {
4
+ const key = page.mainFrame?.() ?? page;
5
+ if (attribute === undefined)
6
+ testIdAttributes.delete(key);
7
+ else
8
+ testIdAttributes.set(key, attribute);
9
+ }
10
+ // The native generator prefers locator(...).contentFrame(); the CLI also
11
+ // accepts the equivalent frameLocator(...) spelling, including nth/first/last.
12
+ function normalizeFrameAliases(value) {
13
+ let output = '', start = 0, quote = '', escaped = false;
14
+ for (let index = 0; index < value.length; index++) {
15
+ const char = value[index];
16
+ if (quote) {
17
+ if (escaped)
18
+ escaped = false;
19
+ else if (char === '\\')
20
+ escaped = true;
21
+ else if (char === quote)
22
+ quote = '';
23
+ continue;
24
+ }
25
+ if ('\'"`/'.includes(char)) {
26
+ quote = char;
27
+ continue;
28
+ }
29
+ if (!value.startsWith('locator(', index) || index && value[index - 1] !== '.')
30
+ continue;
31
+ let depth = 1, end = index + 'locator('.length, innerQuote = '', innerEscaped = false;
32
+ for (; end < value.length; end++) {
33
+ const next = value[end];
34
+ if (innerQuote) {
35
+ if (innerEscaped)
36
+ innerEscaped = false;
37
+ else if (next === '\\')
38
+ innerEscaped = true;
39
+ else if (next === innerQuote)
40
+ innerQuote = '';
41
+ }
42
+ else if ('\'"`/'.includes(next))
43
+ innerQuote = next;
44
+ else if (next === '(')
45
+ depth++;
46
+ else if (next === ')' && --depth === 0)
47
+ break;
48
+ }
49
+ const suffix = value.slice(end + 1).match(/^(\.(?:first|last)\(\)|\.nth\(-?\d+\))?\.contentFrame\(\)/);
50
+ if (!suffix)
51
+ continue;
52
+ output += value.slice(start, index) + 'frameLocator' + value.slice(index + 'locator'.length, end + 1) + (suffix[1] ?? '');
53
+ index = end + suffix[0].length;
54
+ start = index + 1;
55
+ }
56
+ return output + value.slice(start);
57
+ }
58
+ /** Parse standard generated locator syntax without evaluating agent code. */
59
+ export function playwrightLocatorSelector(page, target) {
60
+ const expression = target.trim();
61
+ const method = expression.slice(0, expression.indexOf('(')).trim();
62
+ if (!['locator', 'frameLocator', 'getByRole', 'getByText', 'getByLabel', 'getByPlaceholder', 'getByAltText', 'getByTitle', 'getByTestId'].includes(method))
63
+ return target;
64
+ const { selector } = parseCanonicalPlaywrightLocator(expression, testIdAttributes.get(page.mainFrame?.() ?? page));
65
+ const digest = (value) => normalizeFrameAliases(value.replace(/\s/g, '')).replace(/\\?["`]/g, "'").replace(/,\{\}/g, '');
66
+ if (digest(page.locator(selector).toString()) !== digest(expression))
67
+ throw new Error(`Invalid Playwright locator: ${target}`);
68
+ return selector;
69
+ }
70
+ //# sourceMappingURL=locator-selector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locator-selector.js","sourceRoot":"","sources":["../../src/playwright/locator-selector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { PlaywrightAbility, PlaywrightAbilityRequest } from './abilities.js';
2
+ import type { PlaywrightContext, PlaywrightDialog, PlaywrightFileChooser, PlaywrightPage } from './adapter.js';
3
+ import type { PlaywrightCommand } from './catalog.js';
4
+ export type PlaywrightModal = {
5
+ kind: 'dialog';
6
+ dialog: PlaywrightDialog;
7
+ } | {
8
+ kind: 'filechooser';
9
+ fileChooser: PlaywrightFileChooser;
10
+ };
11
+ export declare function getPlaywrightModal(page: PlaywrightPage): PlaywrightModal | undefined;
12
+ export declare function onPlaywrightModal(page: PlaywrightPage, listener: (modal: PlaywrightModal | undefined) => void): () => void;
13
+ export declare function observePlaywrightModals(context: PlaywrightContext, registerCleanup: (cleanup: () => Promise<void>) => void): void;
14
+ export declare function readPlaywrightFiles(request: PlaywrightAbilityRequest, paths: readonly string[]): Promise<{
15
+ name: string;
16
+ mimeType: string;
17
+ buffer: Uint8Array;
18
+ }[]>;
19
+ export declare const playwrightModalAbilities: Partial<Record<PlaywrightCommand, PlaywrightAbility>>;
20
+ //# sourceMappingURL=modal-capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-capabilities.d.ts","sourceRoot":"","sources":["../../src/playwright/modal-capabilities.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC/G,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAItD,MAAM,MAAM,eAAe,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAazI,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,CAA6C;AAClI,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,GAAG,MAAM,IAAI,CAI1H;AAQD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAkCjI;AAYD,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,EAAE,CAAC,CAaxK;AAqBD,eAAO,MAAM,wBAAwB,EAAE,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAG1F,CAAC"}
@@ -0,0 +1,137 @@
1
+ import { PlaywrightResourceLimitError } from './resource-limit.js';
2
+ import { capabilityResult, requirePage, requireSession, unsupported } from './capability-result.js';
3
+ import { basename } from '../contracts/path.js';
4
+ const pages = new WeakMap();
5
+ const contexts = new WeakSet();
6
+ function identity(page) { return page.mainFrame?.() ?? page; }
7
+ function state(page) {
8
+ const key = identity(page);
9
+ let result = pages.get(key);
10
+ if (!result) {
11
+ result = { listeners: new Set() };
12
+ pages.set(key, result);
13
+ }
14
+ return result;
15
+ }
16
+ export function getPlaywrightModal(page) { return pages.get(identity(page))?.modal; }
17
+ export function onPlaywrightModal(page, listener) {
18
+ const current = state(page);
19
+ current.listeners.add(listener);
20
+ return () => { current.listeners.delete(listener); };
21
+ }
22
+ function update(page, modal) {
23
+ const current = state(page);
24
+ if (modal)
25
+ current.modal = modal;
26
+ else
27
+ delete current.modal;
28
+ for (const listener of current.listeners)
29
+ listener(modal);
30
+ }
31
+ export function observePlaywrightModals(context, registerCleanup) {
32
+ if (contexts.has(context))
33
+ return;
34
+ contexts.add(context);
35
+ const observed = new Map();
36
+ let closed = false;
37
+ const attach = (page) => {
38
+ if (closed || observed.has(identity(page)))
39
+ return;
40
+ state(page);
41
+ const chooser = (fileChooser) => { if (!closed)
42
+ update(page, { kind: 'filechooser', fileChooser }); };
43
+ const close = () => { update(page, undefined); };
44
+ observed.set(identity(page), { page, chooser, close });
45
+ page.on?.('filechooser', chooser);
46
+ page.on?.('close', close);
47
+ };
48
+ const dialog = (dialog) => {
49
+ const page = dialog.page();
50
+ if (!closed && page) {
51
+ attach(page);
52
+ update(page, { kind: 'dialog', dialog });
53
+ }
54
+ };
55
+ const close = async () => {
56
+ if (closed)
57
+ return;
58
+ closed = true;
59
+ context.off('page', attach);
60
+ context.off('dialog', dialog);
61
+ for (const [key, { page, chooser, close }] of observed) {
62
+ page.off?.('filechooser', chooser);
63
+ page.off?.('close', close);
64
+ update(page, undefined);
65
+ pages.delete(key);
66
+ }
67
+ observed.clear();
68
+ contexts.delete(context);
69
+ };
70
+ registerCleanup(close);
71
+ try {
72
+ context.on('page', attach);
73
+ context.on('dialog', dialog);
74
+ for (const page of context.pages())
75
+ attach(page);
76
+ }
77
+ catch (error) {
78
+ void close();
79
+ throw error;
80
+ }
81
+ }
82
+ const dialog = { scope: 'session', async execute(request) {
83
+ const page = requirePage(request);
84
+ const modal = getPlaywrightModal(page);
85
+ if (modal?.kind !== 'dialog')
86
+ throw new Error('No dialog visible');
87
+ if (request.command === 'dialog-accept')
88
+ await modal.dialog.accept(request.args[0]);
89
+ else
90
+ await modal.dialog.dismiss();
91
+ if (getPlaywrightModal(page) === modal)
92
+ update(page, undefined);
93
+ return capabilityResult('');
94
+ } };
95
+ export async function readPlaywrightFiles(request, paths) {
96
+ const maximum = Math.min(request.limits?.maxArtifactBytes ?? 8 * 1024 * 1024, request.limits?.maxCommandBytes ?? 1048576);
97
+ const files = [];
98
+ let total = 0;
99
+ for (const path of paths) {
100
+ request.signal.throwIfAborted();
101
+ const bytes = await request.readFile(path);
102
+ total += bytes.byteLength;
103
+ if (total > maximum)
104
+ throw new PlaywrightResourceLimitError('Playwright upload byte limit exceeded');
105
+ // Empty MIME delegates filename inference to the native Playwright provider.
106
+ files.push({ name: basename(path), mimeType: '', buffer: bytes });
107
+ }
108
+ return files;
109
+ }
110
+ const upload = { scope: 'session', async execute(request) {
111
+ const page = requirePage(request);
112
+ const modal = getPlaywrightModal(page);
113
+ if (modal?.kind !== 'filechooser')
114
+ throw new Error('No file chooser visible');
115
+ if (!modal.fileChooser.isMultiple() && request.args.length > 1)
116
+ throw new Error('Non-multiple file input can only accept a single file');
117
+ const session = requireSession(request);
118
+ if (!session.prepareFileBytes)
119
+ unsupported('native upload buffers');
120
+ const files = await readPlaywrightFiles(request, request.args);
121
+ request.signal.throwIfAborted();
122
+ const nativeFiles = files.map(file => {
123
+ const buffer = session.prepareFileBytes(file.buffer);
124
+ if (!(buffer instanceof Uint8Array) || buffer.byteLength !== file.buffer.byteLength)
125
+ throw new Error('Invalid native Playwright file buffer');
126
+ return { ...file, buffer };
127
+ });
128
+ await modal.fileChooser.setFiles(nativeFiles, { timeout: request.limits?.actionTimeoutMs ?? 30000 });
129
+ if (getPlaywrightModal(page) === modal)
130
+ update(page, undefined);
131
+ return capabilityResult(`await fileChooser.setFiles(${JSON.stringify(request.args)})`);
132
+ } };
133
+ export const playwrightModalAbilities = {
134
+ 'dialog-accept': dialog, 'dialog-dismiss': dialog,
135
+ upload,
136
+ };
137
+ //# sourceMappingURL=modal-capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-capabilities.js","sourceRoot":"","sources":["../../src/playwright/modal-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAInE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACpG,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIhD,MAAM,KAAK,GAAG,IAAI,OAAO,EAAsB,CAAC;AAChD,MAAM,QAAQ,GAAG,IAAI,OAAO,EAAqB,CAAC;AAClD,SAAS,QAAQ,CAAC,IAAoB,IAAY,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;AAEtF,SAAS,KAAK,CAAC,IAAoB;IACjC,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QAAC,MAAM,GAAG,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAAC,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAoB,IAAiC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AAClI,MAAM,UAAU,iBAAiB,CAAC,IAAoB,EAAE,QAAsD;IAC5G,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAChC,OAAO,GAAG,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AACD,SAAS,MAAM,CAAC,IAAoB,EAAE,KAAkC;IACtE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,KAAK;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC;;QAC5B,OAAO,OAAO,CAAC,KAAK,CAAC;IAC1B,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,SAAS;QAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA0B,EAAE,eAAuD;IACzH,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO;IAClC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA0G,CAAC;IACnI,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,MAAM,GAAG,CAAC,IAAoB,EAAE,EAAE;QACtC,IAAI,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO;QACnD,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,MAAM,OAAO,GAAG,CAAC,WAAkC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7H,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,EAAE,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC5B,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,MAAwB,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAAC,CAAC;IAClF,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE;QACvB,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC3D,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;YACvD,IAAI,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/D,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxB,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;QACD,QAAQ,CAAC,KAAK,EAAE,CAAC;QAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC;IACF,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACzD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;YAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAAC,KAAK,KAAK,EAAE,CAAC;QAAC,MAAM,KAAK,CAAC;IAAC,CAAC;AAChD,CAAC;AAED,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QACzE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,IAAI,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACnE,IAAI,OAAO,CAAC,OAAO,KAAK,eAAe;YAAE,MAAM,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;;YAC/E,MAAM,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChE,OAAO,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC;AAEJ,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAiC,EAAE,KAAwB;IACnG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,gBAAgB,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,IAAI,OAAO,CAAC,CAAC;IAC1H,MAAM,KAAK,GAA6D,EAAE,CAAC;IAC3E,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC3C,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QAC1B,IAAI,KAAK,GAAG,OAAO;YAAE,MAAM,IAAI,4BAA4B,CAAC,uCAAuC,CAAC,CAAC;QACrG,6EAA6E;QAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,MAAM,GAAsB,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QACzE,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE,IAAI,KAAK,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC9E,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;QACzI,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,gBAAgB;YAAE,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/D,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,CAAC,MAAM,YAAY,UAAU,CAAC,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,MAAM,CAAC,UAAU;gBAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC9I,OAAO,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,IAAI,KAAK,EAAE,CAAC,CAAC;QACrG,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,KAAK;YAAE,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAChE,OAAO,gBAAgB,CAAC,8BAA8B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzF,CAAC,EAAE,CAAC;AAEJ,MAAM,CAAC,MAAM,wBAAwB,GAA0D;IAC7F,eAAe,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM;IACjD,MAAM;CACP,CAAC"}