@poe-platform/safe-bash 0.1.679 → 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.
- package/README.md +1 -1
- package/dist/safe-bash/commands/playwright/index.d.ts.map +1 -1
- package/dist/safe-bash/commands/playwright/index.js +77 -4
- package/dist/safe-bash/commands/playwright/index.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/awk-runtime.js +1 -3
- package/dist/safe-bash/commands/text-programs/awk-runtime.js.map +1 -1
- package/dist/safe-bash/commands/text-programs/regex.d.ts +3 -1
- package/dist/safe-bash/commands/text-programs/regex.d.ts.map +1 -1
- package/dist/safe-bash/commands/text-programs/regex.js +13 -7
- package/dist/safe-bash/commands/text-programs/regex.js.map +1 -1
- package/dist/safe-bash/core.browser.js +12 -9
- package/dist/safe-bash/core.browser.js.map +2 -2
- package/dist/safe-bash/playwright/abilities.d.ts +24 -5
- package/dist/safe-bash/playwright/abilities.d.ts.map +1 -1
- package/dist/safe-bash/playwright/abilities.js +9 -4
- package/dist/safe-bash/playwright/abilities.js.map +1 -1
- package/dist/safe-bash/playwright/ability-execution.d.ts +6 -1
- package/dist/safe-bash/playwright/ability-execution.d.ts.map +1 -1
- package/dist/safe-bash/playwright/ability-execution.js +77 -5
- package/dist/safe-bash/playwright/ability-execution.js.map +1 -1
- package/dist/safe-bash/playwright/adapter.d.ts +467 -11
- package/dist/safe-bash/playwright/adapter.d.ts.map +1 -1
- package/dist/safe-bash/playwright/adapter.js +213 -4
- package/dist/safe-bash/playwright/adapter.js.map +1 -1
- package/dist/safe-bash/playwright/builtins.d.ts +44 -4
- package/dist/safe-bash/playwright/builtins.d.ts.map +1 -1
- package/dist/safe-bash/playwright/builtins.js +14 -9
- package/dist/safe-bash/playwright/builtins.js.map +1 -1
- package/dist/safe-bash/playwright/canonical-locator-parser.d.ts +5 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.d.ts.map +1 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.js +146 -0
- package/dist/safe-bash/playwright/canonical-locator-parser.js.map +1 -0
- package/dist/safe-bash/playwright/capability-events.d.ts +15 -0
- package/dist/safe-bash/playwright/capability-events.d.ts.map +1 -0
- package/dist/safe-bash/playwright/capability-events.js +265 -0
- package/dist/safe-bash/playwright/capability-events.js.map +1 -0
- package/dist/safe-bash/playwright/capability-result.d.ts +33 -0
- package/dist/safe-bash/playwright/capability-result.d.ts.map +1 -0
- package/dist/safe-bash/playwright/capability-result.js +72 -0
- package/dist/safe-bash/playwright/capability-result.js.map +1 -0
- package/dist/safe-bash/playwright/config-ini.d.ts +3 -0
- package/dist/safe-bash/playwright/config-ini.d.ts.map +1 -0
- package/dist/safe-bash/playwright/config-ini.js +161 -0
- package/dist/safe-bash/playwright/config-ini.js.map +1 -0
- package/dist/safe-bash/playwright/controller.d.ts +39 -1
- package/dist/safe-bash/playwright/controller.d.ts.map +1 -1
- package/dist/safe-bash/playwright/controller.js +913 -77
- package/dist/safe-bash/playwright/controller.js.map +1 -1
- package/dist/safe-bash/playwright/devices.d.ts +229 -0
- package/dist/safe-bash/playwright/devices.d.ts.map +1 -0
- package/dist/safe-bash/playwright/devices.js +2740 -0
- package/dist/safe-bash/playwright/devices.js.map +1 -0
- package/dist/safe-bash/playwright/download-capabilities.d.ts +15 -0
- package/dist/safe-bash/playwright/download-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/download-capabilities.js +161 -0
- package/dist/safe-bash/playwright/download-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/drop-capability.d.ts +3 -0
- package/dist/safe-bash/playwright/drop-capability.d.ts.map +1 -0
- package/dist/safe-bash/playwright/drop-capability.js +50 -0
- package/dist/safe-bash/playwright/drop-capability.js.map +1 -0
- package/dist/safe-bash/playwright/find.d.ts +8 -0
- package/dist/safe-bash/playwright/find.d.ts.map +1 -0
- package/dist/safe-bash/playwright/find.js +68 -0
- package/dist/safe-bash/playwright/find.js.map +1 -0
- package/dist/safe-bash/playwright/generated-locator.d.ts +4 -0
- package/dist/safe-bash/playwright/generated-locator.d.ts.map +1 -0
- package/dist/safe-bash/playwright/generated-locator.js +22 -0
- package/dist/safe-bash/playwright/generated-locator.js.map +1 -0
- package/dist/safe-bash/playwright/help.d.ts +4 -3
- package/dist/safe-bash/playwright/help.d.ts.map +1 -1
- package/dist/safe-bash/playwright/help.js +7 -52
- package/dist/safe-bash/playwright/help.js.map +1 -1
- package/dist/safe-bash/playwright/highlight.d.ts +8 -0
- package/dist/safe-bash/playwright/highlight.d.ts.map +1 -0
- package/dist/safe-bash/playwright/highlight.js +82 -0
- package/dist/safe-bash/playwright/highlight.js.map +1 -0
- package/dist/safe-bash/playwright/index.d.ts +5 -0
- package/dist/safe-bash/playwright/index.d.ts.map +1 -1
- package/dist/safe-bash/playwright/index.js +4 -0
- package/dist/safe-bash/playwright/index.js.map +1 -1
- package/dist/safe-bash/playwright/invocation.d.ts +24 -0
- package/dist/safe-bash/playwright/invocation.d.ts.map +1 -1
- package/dist/safe-bash/playwright/invocation.js +42 -10
- package/dist/safe-bash/playwright/invocation.js.map +1 -1
- package/dist/safe-bash/playwright/locator-selector.d.ts +5 -0
- package/dist/safe-bash/playwright/locator-selector.d.ts.map +1 -0
- package/dist/safe-bash/playwright/locator-selector.js +70 -0
- package/dist/safe-bash/playwright/locator-selector.js.map +1 -0
- package/dist/safe-bash/playwright/modal-capabilities.d.ts +20 -0
- package/dist/safe-bash/playwright/modal-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/modal-capabilities.js +137 -0
- package/dist/safe-bash/playwright/modal-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/native-json-snapshot.d.ts +17 -0
- package/dist/safe-bash/playwright/native-json-snapshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/native-json-snapshot.js +94 -0
- package/dist/safe-bash/playwright/native-json-snapshot.js.map +1 -0
- package/dist/safe-bash/playwright/native-snapshot.d.ts +17 -0
- package/dist/safe-bash/playwright/native-snapshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/native-snapshot.js +164 -0
- package/dist/safe-bash/playwright/native-snapshot.js.map +1 -0
- package/dist/safe-bash/playwright/network-policy.d.ts +2 -0
- package/dist/safe-bash/playwright/network-policy.d.ts.map +1 -1
- package/dist/safe-bash/playwright/network-policy.js +1 -1
- package/dist/safe-bash/playwright/network-policy.js.map +1 -1
- package/dist/safe-bash/playwright/open-options.d.ts +14 -0
- package/dist/safe-bash/playwright/open-options.d.ts.map +1 -0
- package/dist/safe-bash/playwright/open-options.js +279 -0
- package/dist/safe-bash/playwright/open-options.js.map +1 -0
- package/dist/safe-bash/playwright/recording-capabilities.d.ts +6 -0
- package/dist/safe-bash/playwright/recording-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/recording-capabilities.js +83 -0
- package/dist/safe-bash/playwright/recording-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/resource-limit.d.ts +6 -0
- package/dist/safe-bash/playwright/resource-limit.d.ts.map +1 -0
- package/dist/safe-bash/playwright/resource-limit.js +8 -0
- package/dist/safe-bash/playwright/resource-limit.js.map +1 -0
- package/dist/safe-bash/playwright/response.d.ts +22 -0
- package/dist/safe-bash/playwright/response.d.ts.map +1 -0
- package/dist/safe-bash/playwright/response.js +43 -0
- package/dist/safe-bash/playwright/response.js.map +1 -0
- package/dist/safe-bash/playwright/route-capabilities.d.ts +25 -0
- package/dist/safe-bash/playwright/route-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/route-capabilities.js +138 -0
- package/dist/safe-bash/playwright/route-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/screenshot.d.ts +3 -1
- package/dist/safe-bash/playwright/screenshot.d.ts.map +1 -1
- package/dist/safe-bash/playwright/screenshot.js +15 -12
- package/dist/safe-bash/playwright/screenshot.js.map +1 -1
- package/dist/safe-bash/playwright/session-configuration.d.ts +35 -0
- package/dist/safe-bash/playwright/session-configuration.d.ts.map +1 -0
- package/dist/safe-bash/playwright/session-configuration.js +50 -0
- package/dist/safe-bash/playwright/session-configuration.js.map +1 -0
- package/dist/safe-bash/playwright/session-runtime.d.ts +8 -0
- package/dist/safe-bash/playwright/session-runtime.d.ts.map +1 -0
- package/dist/safe-bash/playwright/session-runtime.js +96 -0
- package/dist/safe-bash/playwright/session-runtime.js.map +1 -0
- package/dist/safe-bash/playwright/snapshot.d.ts +15 -2
- package/dist/safe-bash/playwright/snapshot.d.ts.map +1 -1
- package/dist/safe-bash/playwright/snapshot.js +66 -7
- package/dist/safe-bash/playwright/snapshot.js.map +1 -1
- package/dist/safe-bash/playwright/standard-capabilities.d.ts +4 -0
- package/dist/safe-bash/playwright/standard-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/standard-capabilities.js +248 -0
- package/dist/safe-bash/playwright/standard-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/storage-capabilities.d.ts +4 -0
- package/dist/safe-bash/playwright/storage-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/storage-capabilities.js +120 -0
- package/dist/safe-bash/playwright/storage-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/storage-state.d.ts +8 -0
- package/dist/safe-bash/playwright/storage-state.d.ts.map +1 -0
- package/dist/safe-bash/playwright/storage-state.js +122 -0
- package/dist/safe-bash/playwright/storage-state.js.map +1 -0
- package/dist/safe-bash/playwright/target-screenshot.d.ts +9 -0
- package/dist/safe-bash/playwright/target-screenshot.d.ts.map +1 -0
- package/dist/safe-bash/playwright/target-screenshot.js +28 -0
- package/dist/safe-bash/playwright/target-screenshot.js.map +1 -0
- package/dist/safe-bash/playwright/targets.d.ts +12 -0
- package/dist/safe-bash/playwright/targets.d.ts.map +1 -0
- package/dist/safe-bash/playwright/targets.js +36 -0
- package/dist/safe-bash/playwright/targets.js.map +1 -0
- package/dist/safe-bash/playwright/tracing-capabilities.d.ts +12 -0
- package/dist/safe-bash/playwright/tracing-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/tracing-capabilities.js +100 -0
- package/dist/safe-bash/playwright/tracing-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.d.ts +6 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.d.ts.map +1 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.js +122 -0
- package/dist/safe-bash/playwright/webmcp-capabilities.js.map +1 -0
- package/dist/safe-bash/playwright/workspace-assets.d.ts +5 -0
- package/dist/safe-bash/playwright/workspace-assets.d.ts.map +1 -0
- package/dist/safe-bash/playwright/workspace-assets.js +17 -0
- package/dist/safe-bash/playwright/workspace-assets.js.map +1 -0
- package/dist/safe-bash/playwright/workspace.d.ts +3 -0
- package/dist/safe-bash/playwright/workspace.d.ts.map +1 -0
- package/dist/safe-bash/playwright/workspace.js +48 -0
- package/dist/safe-bash/playwright/workspace.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { PlaywrightResourceLimitError } from './resource-limit.js';
|
|
2
|
+
import { canonicalPlaywrightDevices } from './devices.js';
|
|
3
|
+
export function createPlaywrightAdapter(sources, options = {}) {
|
|
2
4
|
if (!sources || typeof sources !== 'object' || Object.keys(sources).some(engine => !['chromium', 'firefox', 'webkit'].includes(engine)))
|
|
3
5
|
throw new TypeError('Invalid Playwright browser sources');
|
|
6
|
+
if (!options || typeof options !== 'object' || Object.keys(options).some(key => key !== 'devices') || options.devices !== undefined && (!options.devices || typeof options.devices !== 'object' || Array.isArray(options.devices)))
|
|
7
|
+
throw new TypeError('Invalid Playwright adapter options');
|
|
8
|
+
const devices = Object.freeze(structuredClone({ ...canonicalPlaywrightDevices, ...options.devices }));
|
|
4
9
|
const configured = new Map();
|
|
5
10
|
const browsers = {};
|
|
6
11
|
for (const engine of ["chromium", "firefox", "webkit"]) {
|
|
@@ -16,12 +21,16 @@ export function createPlaywrightAdapter(sources) {
|
|
|
16
21
|
}
|
|
17
22
|
return {
|
|
18
23
|
browsers: Object.freeze(browsers),
|
|
24
|
+
...(devices ? { devices } : {}),
|
|
19
25
|
async acquire(options) {
|
|
20
|
-
if (!options || typeof options !== 'object' || Object.keys(options).some(key => !['acquisitionId', 'session', 'browser', 'headless', 'signal'].includes(key))
|
|
26
|
+
if (!options || typeof options !== 'object' || Object.keys(options).some(key => !['acquisitionId', 'session', 'browser', 'headless', 'signal', 'contextOptions'].includes(key))
|
|
21
27
|
|| typeof options.headless !== 'boolean' || typeof options.acquisitionId !== 'string' || !options.acquisitionId
|
|
22
28
|
|| typeof options.session !== 'string' || !options.session
|
|
23
29
|
|| typeof options.signal?.throwIfAborted !== 'function')
|
|
24
30
|
throw new TypeError('Invalid Playwright acquisition options');
|
|
31
|
+
if (options.contextOptions !== undefined && (!options.contextOptions || typeof options.contextOptions !== 'object' || Array.isArray(options.contextOptions)))
|
|
32
|
+
throw new TypeError('Invalid Playwright context options');
|
|
33
|
+
const contextOptions = options.contextOptions === undefined ? undefined : structuredClone(options.contextOptions);
|
|
25
34
|
const source = configured.get(options.browser);
|
|
26
35
|
if (!source)
|
|
27
36
|
throw new Error(`Unsupported browser: ${options.browser}`);
|
|
@@ -36,6 +45,10 @@ export function createPlaywrightAdapter(sources) {
|
|
|
36
45
|
let contextCloseObserved = false;
|
|
37
46
|
let browserDisconnectedObserved = false;
|
|
38
47
|
let releasing;
|
|
48
|
+
let replacement;
|
|
49
|
+
const retiringContexts = new Set();
|
|
50
|
+
const captures = new Set();
|
|
51
|
+
const executions = new Set();
|
|
39
52
|
const listeners = new Set();
|
|
40
53
|
const detach = () => {
|
|
41
54
|
resource.browser.off("disconnected", onDisconnected);
|
|
@@ -64,6 +77,18 @@ export function createPlaywrightAdapter(sources) {
|
|
|
64
77
|
errors.push(error);
|
|
65
78
|
}
|
|
66
79
|
const interruption = Promise.resolve().then(() => resource.interrupt?.()).catch(error => { errors.push(error); });
|
|
80
|
+
await replacement?.catch(() => { });
|
|
81
|
+
await Promise.allSettled([...captures]);
|
|
82
|
+
await Promise.allSettled([...executions]);
|
|
83
|
+
for (const retired of retiringContexts) {
|
|
84
|
+
try {
|
|
85
|
+
await retired.close();
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
errors.push(error);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
retiringContexts.clear();
|
|
67
92
|
if (context) {
|
|
68
93
|
try {
|
|
69
94
|
await context.close();
|
|
@@ -113,7 +138,7 @@ export function createPlaywrightAdapter(sources) {
|
|
|
113
138
|
onDisconnected();
|
|
114
139
|
if (closed)
|
|
115
140
|
throw new Error("Playwright browser is closed");
|
|
116
|
-
context = await resource.browser.newContext();
|
|
141
|
+
context = await resource.browser.newContext(contextOptions);
|
|
117
142
|
context.on("close", onContextClosed);
|
|
118
143
|
options.signal.throwIfAborted();
|
|
119
144
|
if (!resource.browser.isConnected())
|
|
@@ -121,7 +146,191 @@ export function createPlaywrightAdapter(sources) {
|
|
|
121
146
|
if (closed)
|
|
122
147
|
throw new Error("Playwright browser closed during context acquisition");
|
|
123
148
|
return {
|
|
124
|
-
context,
|
|
149
|
+
get context() { return context; },
|
|
150
|
+
...(resource.captureSnapshotJSON ? { captureSnapshotJSON: ((page, captureOptions) => {
|
|
151
|
+
if (closed || releasing)
|
|
152
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
153
|
+
captureOptions.signal.throwIfAborted();
|
|
154
|
+
if (!Number.isSafeInteger(captureOptions.maxBytes) || captureOptions.maxBytes < 1)
|
|
155
|
+
return Promise.reject(new TypeError('Invalid Playwright snapshot capture options'));
|
|
156
|
+
const ownedOptions = Object.freeze({ ...captureOptions });
|
|
157
|
+
const operation = Promise.resolve().then(async () => {
|
|
158
|
+
ownedOptions.signal.throwIfAborted();
|
|
159
|
+
const result = await resource.captureSnapshotJSON(page, ownedOptions);
|
|
160
|
+
ownedOptions.signal.throwIfAborted();
|
|
161
|
+
return result;
|
|
162
|
+
});
|
|
163
|
+
captures.add(operation);
|
|
164
|
+
void operation.finally(() => captures.delete(operation)).catch(() => { });
|
|
165
|
+
return operation;
|
|
166
|
+
}) } : {}),
|
|
167
|
+
...(resource.generateActionCode ? { generateActionCode: ((request) => {
|
|
168
|
+
if (closed || releasing)
|
|
169
|
+
throw new Error('Playwright lease is closed');
|
|
170
|
+
if (!['typescript', 'python', 'java', 'csharp'].includes(request.language))
|
|
171
|
+
throw new Error('Invalid Playwright codegen language');
|
|
172
|
+
const result = resource.generateActionCode(structuredClone(request));
|
|
173
|
+
if (typeof result !== 'string')
|
|
174
|
+
throw new Error('Invalid generated Playwright action code');
|
|
175
|
+
return result;
|
|
176
|
+
}) } : {}),
|
|
177
|
+
...(resource.captureTrace ? { captureTrace: ((traceContext, captureOptions) => {
|
|
178
|
+
if (closed || releasing)
|
|
179
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
180
|
+
captureOptions.signal.throwIfAborted();
|
|
181
|
+
if (!Number.isSafeInteger(captureOptions.maxBytes) || captureOptions.maxBytes < 1)
|
|
182
|
+
return Promise.reject(new TypeError('Invalid Playwright trace capture options'));
|
|
183
|
+
const ownedOptions = Object.freeze({ ...captureOptions });
|
|
184
|
+
const operation = Promise.resolve().then(async () => {
|
|
185
|
+
ownedOptions.signal.throwIfAborted();
|
|
186
|
+
const result = await resource.captureTrace(traceContext, ownedOptions);
|
|
187
|
+
ownedOptions.signal.throwIfAborted();
|
|
188
|
+
return result;
|
|
189
|
+
});
|
|
190
|
+
captures.add(operation);
|
|
191
|
+
void operation.finally(() => captures.delete(operation)).catch(() => { });
|
|
192
|
+
return operation;
|
|
193
|
+
}) } : {}),
|
|
194
|
+
...(resource.captureDownload ? { captureDownload: ((download, captureOptions) => {
|
|
195
|
+
if (closed || releasing)
|
|
196
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
197
|
+
captureOptions.signal.throwIfAborted();
|
|
198
|
+
if (!Number.isSafeInteger(captureOptions.maxBytes) || captureOptions.maxBytes <= 0)
|
|
199
|
+
return Promise.reject(new TypeError('Invalid Playwright download capture options'));
|
|
200
|
+
const ownedOptions = Object.freeze({ ...captureOptions });
|
|
201
|
+
const operation = Promise.resolve().then(async () => {
|
|
202
|
+
ownedOptions.signal.throwIfAborted();
|
|
203
|
+
const bytes = await resource.captureDownload(download, ownedOptions);
|
|
204
|
+
ownedOptions.signal.throwIfAborted();
|
|
205
|
+
if (!(bytes instanceof Uint8Array) || bytes.byteLength > ownedOptions.maxBytes)
|
|
206
|
+
throw new PlaywrightResourceLimitError('Playwright download byte limit exceeded');
|
|
207
|
+
return bytes;
|
|
208
|
+
});
|
|
209
|
+
captures.add(operation);
|
|
210
|
+
void operation.finally(() => captures.delete(operation)).catch(() => { });
|
|
211
|
+
return operation;
|
|
212
|
+
}) } : {}),
|
|
213
|
+
...(resource.executeCode ? { executeCode: (executionOptions) => {
|
|
214
|
+
if (closed || releasing)
|
|
215
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
216
|
+
executionOptions.signal.throwIfAborted();
|
|
217
|
+
if (typeof executionOptions.source !== 'string' || !executionOptions.source.trim()
|
|
218
|
+
|| ![executionOptions.timeoutMs, executionOptions.maxOutputBytes, executionOptions.maxPages].every(value => Number.isSafeInteger(value) && value > 0))
|
|
219
|
+
return Promise.reject(new TypeError('Invalid Playwright code execution options'));
|
|
220
|
+
const ownedOptions = Object.freeze({ ...executionOptions });
|
|
221
|
+
const operation = Promise.resolve().then(async () => {
|
|
222
|
+
ownedOptions.signal.throwIfAborted();
|
|
223
|
+
const result = await resource.executeCode(ownedOptions);
|
|
224
|
+
ownedOptions.signal.throwIfAborted();
|
|
225
|
+
return result;
|
|
226
|
+
});
|
|
227
|
+
executions.add(operation);
|
|
228
|
+
void operation.finally(() => executions.delete(operation)).catch(() => { });
|
|
229
|
+
return operation;
|
|
230
|
+
} } : {}),
|
|
231
|
+
...(resource.prepareFileBytes ? { prepareFileBytes: (bytes) => {
|
|
232
|
+
if (closed || releasing)
|
|
233
|
+
throw new Error('Playwright lease is closed');
|
|
234
|
+
const prepared = resource.prepareFileBytes(bytes);
|
|
235
|
+
if (!(prepared instanceof Uint8Array) || prepared.byteLength !== bytes.byteLength)
|
|
236
|
+
throw new Error('Invalid native Playwright file buffer');
|
|
237
|
+
return prepared;
|
|
238
|
+
} } : {}),
|
|
239
|
+
...(resource.captureArtifact ? { captureArtifact: (produce, captureOptions) => {
|
|
240
|
+
if (closed || releasing)
|
|
241
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
242
|
+
captureOptions.signal.throwIfAborted();
|
|
243
|
+
if (!Number.isSafeInteger(captureOptions.maxBytes) || captureOptions.maxBytes <= 0 || !captureOptions.extension || [...captureOptions.extension].some(character => !'abcdefghijklmnopqrstuvwxyz0123456789'.includes(character)))
|
|
244
|
+
throw new Error('Invalid Playwright artifact capture options');
|
|
245
|
+
const operation = Promise.resolve().then(async () => {
|
|
246
|
+
let active = true, invoked = false, settled = false;
|
|
247
|
+
let pending;
|
|
248
|
+
let bytes;
|
|
249
|
+
let failure;
|
|
250
|
+
let failed = false;
|
|
251
|
+
try {
|
|
252
|
+
captureOptions.signal.throwIfAborted();
|
|
253
|
+
bytes = await resource.captureArtifact(path => {
|
|
254
|
+
if (!active || invoked)
|
|
255
|
+
return Promise.reject(new Error('Playwright artifact producer is closed'));
|
|
256
|
+
if (typeof path !== 'string' || !path || path.includes('\0'))
|
|
257
|
+
return Promise.reject(new Error('Invalid artifact temporary path'));
|
|
258
|
+
invoked = true;
|
|
259
|
+
pending = Promise.resolve().then(() => produce(path)).finally(() => { settled = true; });
|
|
260
|
+
void pending.catch(() => { });
|
|
261
|
+
return pending;
|
|
262
|
+
}, captureOptions);
|
|
263
|
+
if (!invoked || !settled)
|
|
264
|
+
throw new Error('Playwright artifact host acknowledged before producer completion');
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
failure = error;
|
|
268
|
+
failed = true;
|
|
269
|
+
}
|
|
270
|
+
active = false;
|
|
271
|
+
try {
|
|
272
|
+
await pending;
|
|
273
|
+
}
|
|
274
|
+
catch (error) {
|
|
275
|
+
if (!failed) {
|
|
276
|
+
failure = error;
|
|
277
|
+
failed = true;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
captureOptions.signal.throwIfAborted();
|
|
281
|
+
if (failed)
|
|
282
|
+
throw failure;
|
|
283
|
+
if (!(bytes instanceof Uint8Array) || bytes.byteLength > captureOptions.maxBytes)
|
|
284
|
+
throw new PlaywrightResourceLimitError('Playwright artifact capture byte limit exceeded');
|
|
285
|
+
return bytes;
|
|
286
|
+
});
|
|
287
|
+
captures.add(operation);
|
|
288
|
+
void operation.finally(() => captures.delete(operation)).catch(() => { });
|
|
289
|
+
return operation;
|
|
290
|
+
} } : {}),
|
|
291
|
+
replaceContext(state, replaceOptions = {}) {
|
|
292
|
+
if (closed || releasing)
|
|
293
|
+
return Promise.reject(new Error('Playwright lease is closed'));
|
|
294
|
+
if (replacement)
|
|
295
|
+
return Promise.reject(new Error('Playwright context replacement is already in progress'));
|
|
296
|
+
const operation = (async () => {
|
|
297
|
+
replaceOptions.signal?.throwIfAborted();
|
|
298
|
+
let fresh;
|
|
299
|
+
try {
|
|
300
|
+
fresh = await resource.browser.newContext({ ...contextOptions, storageState: state });
|
|
301
|
+
replaceOptions.signal?.throwIfAborted();
|
|
302
|
+
if (closed || releasing || !resource.browser.isConnected())
|
|
303
|
+
throw new Error('Playwright lease closed during context replacement');
|
|
304
|
+
const previous = context;
|
|
305
|
+
previous.off('close', onContextClosed);
|
|
306
|
+
context = fresh;
|
|
307
|
+
fresh = undefined;
|
|
308
|
+
contextCloseObserved = false;
|
|
309
|
+
context.on('close', onContextClosed);
|
|
310
|
+
retiringContexts.add(previous);
|
|
311
|
+
await previous.close();
|
|
312
|
+
retiringContexts.delete(previous);
|
|
313
|
+
replaceOptions.signal?.throwIfAborted();
|
|
314
|
+
return context;
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
if (fresh) {
|
|
318
|
+
try {
|
|
319
|
+
await fresh.close();
|
|
320
|
+
}
|
|
321
|
+
catch (cleanup) {
|
|
322
|
+
retiringContexts.add(fresh);
|
|
323
|
+
throw new AggregateError([error, cleanup], 'Playwright context replacement and cleanup failed');
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
throw error;
|
|
327
|
+
}
|
|
328
|
+
})();
|
|
329
|
+
replacement = operation;
|
|
330
|
+
void operation.finally(() => { if (replacement === operation)
|
|
331
|
+
replacement = undefined; }).catch(() => { });
|
|
332
|
+
return operation;
|
|
333
|
+
},
|
|
125
334
|
onClosed(listener) {
|
|
126
335
|
if (closed) {
|
|
127
336
|
listener();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/playwright/adapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/playwright/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,16 +15,40 @@ export declare const playwrightBuiltinCommands: {
|
|
|
15
15
|
readonly arity: readonly [1, 1];
|
|
16
16
|
readonly details: "Closes the selected owned session. Closing an absent session is safe; use open to start it again.";
|
|
17
17
|
};
|
|
18
|
+
readonly attach: {
|
|
19
|
+
readonly arity: readonly [1, 2];
|
|
20
|
+
readonly details: "Attach to a browser provided by an authenticated attachment broker.";
|
|
21
|
+
};
|
|
22
|
+
readonly detach: {
|
|
23
|
+
readonly arity: readonly [1, 1];
|
|
24
|
+
readonly details: "Detach from an attached browser.";
|
|
25
|
+
};
|
|
18
26
|
readonly 'close-all': {
|
|
19
27
|
readonly arity: readonly [1, 1];
|
|
20
28
|
readonly details: "Closes sessions owned by this controller, not unrelated host browsers.";
|
|
21
29
|
};
|
|
22
|
-
readonly
|
|
30
|
+
readonly 'kill-all': {
|
|
23
31
|
readonly arity: readonly [1, 1];
|
|
32
|
+
readonly details: "Forcefully retire all owned browser sessions.";
|
|
33
|
+
};
|
|
34
|
+
readonly snapshot: {
|
|
35
|
+
readonly arity: readonly [1, 2];
|
|
24
36
|
readonly details: "--filename <path> writes UTF-8 snapshot text to the virtual filesystem instead of stdout.\nUse the emitted refs (for example e1) with click/fill; snapshot again after changes.\nA new snapshot, navigation or tab change invalidates old refs. Byte/ref limits apply.";
|
|
25
37
|
};
|
|
26
|
-
readonly
|
|
38
|
+
readonly find: {
|
|
39
|
+
readonly arity: readonly [1, 2];
|
|
40
|
+
readonly details: "Search the page snapshot for text or a regular expression.";
|
|
41
|
+
};
|
|
42
|
+
readonly 'generate-locator': {
|
|
27
43
|
readonly arity: readonly [2, 2];
|
|
44
|
+
readonly details: "Generate a Playwright locator for an element.";
|
|
45
|
+
};
|
|
46
|
+
readonly highlight: {
|
|
47
|
+
readonly arity: readonly [1, 2];
|
|
48
|
+
readonly details: "Show or remove a persistent element highlight.";
|
|
49
|
+
};
|
|
50
|
+
readonly click: {
|
|
51
|
+
readonly arity: readonly [2, 3];
|
|
28
52
|
readonly details: "The target must still be connected to the current page.";
|
|
29
53
|
};
|
|
30
54
|
readonly fill: {
|
|
@@ -36,8 +60,8 @@ export declare const playwrightBuiltinCommands: {
|
|
|
36
60
|
readonly details: "Acts on the selected tab through the injected keyboard capability.";
|
|
37
61
|
};
|
|
38
62
|
readonly screenshot: {
|
|
39
|
-
readonly arity: readonly [1,
|
|
40
|
-
readonly details: "
|
|
63
|
+
readonly arity: readonly [1, 2];
|
|
64
|
+
readonly details: "Save a page or element screenshot to a file.";
|
|
41
65
|
};
|
|
42
66
|
readonly 'tab-list': {
|
|
43
67
|
readonly arity: readonly [1, 1];
|
|
@@ -55,6 +79,22 @@ export declare const playwrightBuiltinCommands: {
|
|
|
55
79
|
readonly arity: readonly [1, 2];
|
|
56
80
|
readonly details: "Closes the selected tab when no index is given. Use tab-list to discover remaining tabs.";
|
|
57
81
|
};
|
|
82
|
+
readonly 'delete-data': {
|
|
83
|
+
readonly arity: readonly [1, 1];
|
|
84
|
+
readonly details: "Delete session data.";
|
|
85
|
+
};
|
|
86
|
+
readonly install: {
|
|
87
|
+
readonly arity: readonly [1, 1];
|
|
88
|
+
readonly details: "Initialize workspace and install standard skills.";
|
|
89
|
+
};
|
|
90
|
+
readonly 'install-browser': {
|
|
91
|
+
readonly arity: readonly [1, 2];
|
|
92
|
+
readonly details: "Use a browser installed by the configured provider.";
|
|
93
|
+
};
|
|
94
|
+
readonly 'config-print': {
|
|
95
|
+
readonly arity: readonly [1, 1];
|
|
96
|
+
readonly details: "Print effective browser configuration.";
|
|
97
|
+
};
|
|
58
98
|
};
|
|
59
99
|
export type PlaywrightBuiltinCommand = keyof typeof playwrightBuiltinCommands;
|
|
60
100
|
export declare const limitedForms: Partial<Record<PlaywrightBuiltinCommand, string>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/playwright/builtins.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB
|
|
1
|
+
{"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/playwright/builtins.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyB5B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,yBAAyB,CAAC;AAE9E,eAAO,MAAM,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAM,CAAC"}
|
|
@@ -3,21 +3,26 @@ export const playwrightBuiltinCommands = {
|
|
|
3
3
|
goto: { arity: [2, 2], details: 'Navigation accepts http:, https:, and about:blank. It invalidates snapshot refs.' },
|
|
4
4
|
list: { arity: [1, 1], details: 'Lists sessions owned by this controller. States: acquiring, open, closing, closed.' },
|
|
5
5
|
close: { arity: [1, 1], details: 'Closes the selected owned session. Closing an absent session is safe; use open to start it again.' },
|
|
6
|
+
attach: { arity: [1, 2], details: 'Attach to a browser provided by an authenticated attachment broker.' },
|
|
7
|
+
detach: { arity: [1, 1], details: 'Detach from an attached browser.' },
|
|
6
8
|
'close-all': { arity: [1, 1], details: 'Closes sessions owned by this controller, not unrelated host browsers.' },
|
|
7
|
-
|
|
8
|
-
|
|
9
|
+
'kill-all': { arity: [1, 1], details: 'Forcefully retire all owned browser sessions.' },
|
|
10
|
+
snapshot: { arity: [1, 2], details: '--filename <path> writes UTF-8 snapshot text to the virtual filesystem instead of stdout.\nUse the emitted refs (for example e1) with click/fill; snapshot again after changes.\nA new snapshot, navigation or tab change invalidates old refs. Byte/ref limits apply.' },
|
|
11
|
+
find: { arity: [1, 2], details: 'Search the page snapshot for text or a regular expression.' },
|
|
12
|
+
'generate-locator': { arity: [2, 2], details: 'Generate a Playwright locator for an element.' },
|
|
13
|
+
highlight: { arity: [1, 2], details: 'Show or remove a persistent element highlight.' },
|
|
14
|
+
click: { arity: [2, 3], details: 'The target must still be connected to the current page.' },
|
|
9
15
|
fill: { arity: [3, 3], details: 'Quote text containing spaces; use -- before literal arguments beginning with -.' },
|
|
10
16
|
press: { arity: [2, 2], details: 'Acts on the selected tab through the injected keyboard capability.' },
|
|
11
|
-
screenshot: { arity: [1,
|
|
17
|
+
screenshot: { arity: [1, 2], details: 'Save a page or element screenshot to a file.' },
|
|
12
18
|
'tab-list': { arity: [1, 1], details: 'Tabs have zero-based indexes; the selected tab is marked selected.' },
|
|
13
19
|
'tab-new': { arity: [1, 2], details: 'Opens and selects a tab, defaulting to about:blank. The host tab limit applies.' },
|
|
14
20
|
'tab-select': { arity: [2, 2], details: 'Use tab-list to discover indexes. Selecting a tab invalidates snapshot refs.' },
|
|
15
21
|
'tab-close': { arity: [1, 2], details: 'Closes the selected tab when no index is given. Use tab-list to discover remaining tabs.' },
|
|
22
|
+
'delete-data': { arity: [1, 1], details: 'Delete session data.' },
|
|
23
|
+
install: { arity: [1, 1], details: 'Initialize workspace and install standard skills.' },
|
|
24
|
+
'install-browser': { arity: [1, 2], details: 'Use a browser installed by the configured provider.' },
|
|
25
|
+
'config-print': { arity: [1, 1], details: 'Print effective browser configuration.' },
|
|
16
26
|
};
|
|
17
|
-
export const limitedForms = {
|
|
18
|
-
click: 'click: <target> must be an issued snapshot ref; the optional button argument is unsupported.',
|
|
19
|
-
fill: 'fill: <target> must be an issued snapshot ref, not a selector or text target.',
|
|
20
|
-
snapshot: 'snapshot: the optional target argument is unsupported; only full-page snapshots are available.',
|
|
21
|
-
screenshot: 'screenshot: the optional target argument is unsupported; element screenshots are unavailable.',
|
|
22
|
-
};
|
|
27
|
+
export const limitedForms = {};
|
|
23
28
|
//# sourceMappingURL=builtins.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/playwright/builtins.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,6KAA6K,EAAE;IAC/M,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,kFAAkF,EAAE;IACpH,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,oFAAoF,EAAE;IACtH,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,mGAAmG,EAAE;IACtI,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,wEAAwE,EAAE;IACjH,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,wQAAwQ,EAAE;IAC9S,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,yDAAyD,EAAE;IAC5F,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,iFAAiF,EAAE;IACnH,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,oEAAoE,EAAE;IACvG,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/playwright/builtins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canonical-locator-parser.d.ts","sourceRoot":"","sources":["../../src/playwright/canonical-locator-parser.ts"],"names":[],"mappings":"AA0BA,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,SAAgB;;;EA8CrG"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derived from Microsoft Playwright's packages/isomorphic/locatorParser.ts,
|
|
3
|
+
* locatorUtils.ts and stringUtils.ts as shipped with @playwright/cli 0.1.20.
|
|
4
|
+
* Copyright (c) Microsoft Corporation. Licensed under Apache-2.0.
|
|
5
|
+
* https://github.com/microsoft/playwright/blob/main/LICENSE
|
|
6
|
+
* Kept as data parsing only; expressions are never evaluated as host JavaScript.
|
|
7
|
+
* The native locator supplies round-trip validation in locator-selector.ts.
|
|
8
|
+
*/
|
|
9
|
+
function escapeRegexForSelector(re2) {
|
|
10
|
+
if (re2.unicode || Reflect.get(re2, 'unicodeSets'))
|
|
11
|
+
return String(re2);
|
|
12
|
+
return String(re2).replace(/(^|[^\\])(\\\\)*(["'`])/g, "$1$2\\$3").replace(/>>/g, "\\>\\>");
|
|
13
|
+
}
|
|
14
|
+
function escapeForTextSelector(text2, exact) {
|
|
15
|
+
if (typeof text2 !== "string")
|
|
16
|
+
return escapeRegexForSelector(text2);
|
|
17
|
+
return `${JSON.stringify(text2)}${exact ? "s" : "i"}`;
|
|
18
|
+
}
|
|
19
|
+
function escapeForAttributeSelector(value2, exact) {
|
|
20
|
+
if (typeof value2 !== "string")
|
|
21
|
+
return escapeRegexForSelector(value2);
|
|
22
|
+
return `"${value2.replace(/\\/g, "\\\\").replace(/["]/g, '\\"')}"${exact ? "s" : "i"}`;
|
|
23
|
+
}
|
|
24
|
+
function encodeTestIdAttributeName(testIdAttributeName2) {
|
|
25
|
+
return testIdAttributeName2.includes(",") ? JSON.stringify(testIdAttributeName2) : testIdAttributeName2;
|
|
26
|
+
}
|
|
27
|
+
export function parseCanonicalPlaywrightLocator(locator2, testIdAttributeName2 = 'data-testid') {
|
|
28
|
+
locator2 = locator2.replace(/AriaRole\s*\.\s*([\w]+)/g, (_, group) => group.toLowerCase()).replace(/(get_by_role|getByRole)\s*\(\s*(?:["'`])([^'"`]+)['"`]/g, (_, group1, group2) => `${group1}(${group2.toLowerCase()}`);
|
|
29
|
+
const params2 = [];
|
|
30
|
+
let template = "";
|
|
31
|
+
for (let i = 0; i < locator2.length; ++i) {
|
|
32
|
+
const quote5 = locator2[i];
|
|
33
|
+
if (quote5 !== '"' && quote5 !== "'" && quote5 !== "`" && quote5 !== "/") {
|
|
34
|
+
template += quote5;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
const isRegexEscaping = locator2[i - 1] === "r" || locator2[i] === "/";
|
|
38
|
+
++i;
|
|
39
|
+
let text2 = "";
|
|
40
|
+
while (i < locator2.length) {
|
|
41
|
+
if (locator2[i] === "\\") {
|
|
42
|
+
if (isRegexEscaping) {
|
|
43
|
+
if (locator2[i + 1] !== quote5)
|
|
44
|
+
text2 += locator2[i];
|
|
45
|
+
++i;
|
|
46
|
+
text2 += locator2[i];
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
++i;
|
|
50
|
+
if (locator2[i] === "n")
|
|
51
|
+
text2 += "\n";
|
|
52
|
+
else if (locator2[i] === "r")
|
|
53
|
+
text2 += "\r";
|
|
54
|
+
else if (locator2[i] === "t")
|
|
55
|
+
text2 += " ";
|
|
56
|
+
else
|
|
57
|
+
text2 += locator2[i];
|
|
58
|
+
}
|
|
59
|
+
++i;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (locator2[i] !== quote5) {
|
|
63
|
+
text2 += locator2[i++];
|
|
64
|
+
continue;
|
|
65
|
+
}
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
params2.push({ quote: quote5, text: text2 });
|
|
69
|
+
template += (quote5 === "/" ? "r" : "") + "$" + params2.length;
|
|
70
|
+
}
|
|
71
|
+
template = template.toLowerCase().replace(/get_by_alt_text/g, "getbyalttext").replace(/get_by_test_id/g, "getbytestid").replace(/get_by_([\w]+)/g, "getby$1").replace(/has_not_text/g, "hasnottext").replace(/has_text/g, "hastext").replace(/has_not/g, "hasnot").replace(/frame_locator/g, "framelocator").replace(/content_frame/g, "contentframe").replace(/[{}\s]/g, "").replace(/new\(\)/g, "").replace(/new[\w]+\.[\w]+options\(\)/g, "").replace(/\.set/g, ",set").replace(/\.or_\(/g, "or(").replace(/\.and_\(/g, "and(").replace(/:/g, "=").replace(/,re\.ignorecase/g, "i").replace(/,pattern.case_insensitive/g, "i").replace(/,regexoptions.ignorecase/g, "i").replace(/re.compile\(([^)]+)\)/g, "$1").replace(/pattern.compile\(([^)]+)\)/g, "r$1").replace(/newregex\(([^)]+)\)/g, "r$1").replace(/string=/g, "=").replace(/regex=/g, "=").replace(/,,/g, ",").replace(/,\)/g, ")");
|
|
72
|
+
const preferredQuote = params2.map((p) => p.quote).filter((quote5) => "'\"`".includes(quote5))[0];
|
|
73
|
+
return { selector: transform(template, params2, testIdAttributeName2), preferredQuote };
|
|
74
|
+
}
|
|
75
|
+
function countParams(template) {
|
|
76
|
+
return [...template.matchAll(/\$\d+/g)].length;
|
|
77
|
+
}
|
|
78
|
+
function shiftParams(template, sub) {
|
|
79
|
+
return template.replace(/\$(\d+)/g, (_, ordinal) => `$${Number(ordinal) - sub}`);
|
|
80
|
+
}
|
|
81
|
+
function transform(template, params2, testIdAttributeName2) {
|
|
82
|
+
while (true) {
|
|
83
|
+
const hasMatch = template.match(/filter\(,?(has=|hasnot=|sethas\(|sethasnot\()/);
|
|
84
|
+
if (!hasMatch)
|
|
85
|
+
break;
|
|
86
|
+
const start3 = hasMatch.index + hasMatch[0].length;
|
|
87
|
+
let balance = 0;
|
|
88
|
+
let end = start3;
|
|
89
|
+
for (; end < template.length; end++) {
|
|
90
|
+
if (template[end] === "(")
|
|
91
|
+
balance++;
|
|
92
|
+
else if (template[end] === ")")
|
|
93
|
+
balance--;
|
|
94
|
+
if (balance < 0)
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
let prefix = template.substring(0, start3);
|
|
98
|
+
let extraSymbol = 0;
|
|
99
|
+
if (["sethas(", "sethasnot("].includes(hasMatch[1])) {
|
|
100
|
+
extraSymbol = 1;
|
|
101
|
+
prefix = prefix.replace(/sethas\($/, "has=").replace(/sethasnot\($/, "hasnot=");
|
|
102
|
+
}
|
|
103
|
+
const paramsCountBeforeHas = countParams(template.substring(0, start3));
|
|
104
|
+
const hasTemplate = shiftParams(template.substring(start3, end), paramsCountBeforeHas);
|
|
105
|
+
const paramsCountInHas = countParams(hasTemplate);
|
|
106
|
+
const hasParams = params2.slice(paramsCountBeforeHas, paramsCountBeforeHas + paramsCountInHas);
|
|
107
|
+
const hasSelector = JSON.stringify(transform(hasTemplate, hasParams, testIdAttributeName2));
|
|
108
|
+
template = prefix.replace(/=$/, "2=") + `$${paramsCountBeforeHas + 1}` + shiftParams(template.substring(end + extraSymbol), paramsCountInHas - 1);
|
|
109
|
+
const paramsBeforeHas = params2.slice(0, paramsCountBeforeHas);
|
|
110
|
+
const paramsAfterHas = params2.slice(paramsCountBeforeHas + paramsCountInHas);
|
|
111
|
+
params2 = paramsBeforeHas.concat([{ quote: '"', text: hasSelector }]).concat(paramsAfterHas);
|
|
112
|
+
}
|
|
113
|
+
template = template.replace(/,set([\w]+)\(([^)]+)\)/g, (_, group1, group2) => "," + group1.toLowerCase() + "=" + group2.toLowerCase()).replace(/framelocator\(\)/g, "internal:control=any-frame").replace(/framelocator\(([^)]+)\)/g, "$1.internal:control=enter-frame").replace(/contentframe(\(\))?/g, "internal:control=enter-frame").replace(/locator\(([^)]+),hastext=([^),]+)\)/g, "locator($1).internal:has-text=$2").replace(/locator\(([^)]+),hasnottext=([^),]+)\)/g, "locator($1).internal:has-not-text=$2").replace(/locator\(([^)]+),hastext=([^),]+)\)/g, "locator($1).internal:has-text=$2").replace(/locator\(([^)]+)\)/g, "$1").replace(/getbyrole\(([^)]+)\)/g, "internal:role=$1").replace(/getbytext\(([^)]+)\)/g, "internal:text=$1").replace(/getbylabel\(([^)]+)\)/g, "internal:label=$1").replace(/getbytestid\(([^)]+)\)/g, `internal:testid=[${encodeTestIdAttributeName(testIdAttributeName2)}=$1]`).replace(/getby(placeholder|alt|title)(?:text)?\(([^)]+)\)/g, "internal:attr=[$1=$2]").replace(/first(\(\))?/g, "nth=0").replace(/last(\(\))?/g, "nth=-1").replace(/nth\(([^)]+)\)/g, "nth=$1").replace(/filter\(,?visible=true\)/g, "visible=true").replace(/filter\(,?visible=false\)/g, "visible=false").replace(/\.visible(\(\))?(?!=)/g, ".visible=true").replace(/filter\(,?hastext=([^)]+)\)/g, "internal:has-text=$1").replace(/filter\(,?hasnottext=([^)]+)\)/g, "internal:has-not-text=$1").replace(/filter\(,?has2=([^)]+)\)/g, "internal:has=$1").replace(/filter\(,?hasnot2=([^)]+)\)/g, "internal:has-not=$1").replace(/,exact=false/g, "").replace(/(,name=\$\d+)(,description=\$\d+),exact=true/g, "$1s$2s").replace(/,exact=true/g, "s").replace(/,includehidden=/g, ",include-hidden=").replace(/,/g, "][");
|
|
114
|
+
const parts = template.split(".");
|
|
115
|
+
for (let index = 0; index < parts.length - 1; index++) {
|
|
116
|
+
if (parts[index] === "internal:control=enter-frame" && parts[index + 1].startsWith("nth=")) {
|
|
117
|
+
const [nth] = parts.splice(index, 1);
|
|
118
|
+
parts.splice(index + 1, 0, nth);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return parts.map((t) => {
|
|
122
|
+
if (!t.startsWith("internal:") || t === "internal:control")
|
|
123
|
+
return t.replace(/\$(\d+)/g, (_, ordinal) => {
|
|
124
|
+
const param = params2[+ordinal - 1];
|
|
125
|
+
return param.text;
|
|
126
|
+
});
|
|
127
|
+
t = t.includes("[") ? t.replace(/\]/, "") + "]" : t;
|
|
128
|
+
t = t.replace(/(?:r)\$(\d+)(i)?/g, (_, ordinal, suffix) => {
|
|
129
|
+
const param = params2[+ordinal - 1];
|
|
130
|
+
if (t.startsWith("internal:attr") || t.startsWith("internal:testid") || t.startsWith("internal:role"))
|
|
131
|
+
return escapeForAttributeSelector(new RegExp(param.text), false) + (suffix || "");
|
|
132
|
+
return escapeForTextSelector(new RegExp(param.text, suffix), false);
|
|
133
|
+
}).replace(/\$(\d+)(i|s)?/g, (_, ordinal, suffix) => {
|
|
134
|
+
const param = params2[+ordinal - 1];
|
|
135
|
+
if (t.startsWith("internal:has=") || t.startsWith("internal:has-not="))
|
|
136
|
+
return param.text;
|
|
137
|
+
if (t.startsWith("internal:testid"))
|
|
138
|
+
return escapeForAttributeSelector(param.text, true);
|
|
139
|
+
if (t.startsWith("internal:attr") || t.startsWith("internal:role"))
|
|
140
|
+
return escapeForAttributeSelector(param.text, suffix === "s");
|
|
141
|
+
return escapeForTextSelector(param.text, suffix === "s");
|
|
142
|
+
});
|
|
143
|
+
return t;
|
|
144
|
+
}).join(" >> ");
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=canonical-locator-parser.js.map
|