@browsers-cli/se-cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +379 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +17 -0
- package/dist/config.js +80 -0
- package/dist/config.js.map +1 -0
- package/dist/daemon/backend.d.ts +9 -0
- package/dist/daemon/backend.js +52 -0
- package/dist/daemon/backend.js.map +1 -0
- package/dist/daemon/server.d.ts +1 -0
- package/dist/daemon/server.js +341 -0
- package/dist/daemon/server.js.map +1 -0
- package/dist/daemon/tools/check.d.ts +7 -0
- package/dist/daemon/tools/check.js +20 -0
- package/dist/daemon/tools/check.js.map +1 -0
- package/dist/daemon/tools/click.d.ts +4 -0
- package/dist/daemon/tools/click.js +14 -0
- package/dist/daemon/tools/click.js.map +1 -0
- package/dist/daemon/tools/eval.d.ts +5 -0
- package/dist/daemon/tools/eval.js +18 -0
- package/dist/daemon/tools/eval.js.map +1 -0
- package/dist/daemon/tools/fill.d.ts +6 -0
- package/dist/daemon/tools/fill.js +25 -0
- package/dist/daemon/tools/fill.js.map +1 -0
- package/dist/daemon/tools/find.d.ts +5 -0
- package/dist/daemon/tools/find.js +84 -0
- package/dist/daemon/tools/find.js.map +1 -0
- package/dist/daemon/tools/goto.d.ts +4 -0
- package/dist/daemon/tools/goto.js +25 -0
- package/dist/daemon/tools/goto.js.map +1 -0
- package/dist/daemon/tools/index.d.ts +1 -0
- package/dist/daemon/tools/index.js +37 -0
- package/dist/daemon/tools/index.js.map +1 -0
- package/dist/daemon/tools/navigation.d.ts +4 -0
- package/dist/daemon/tools/navigation.js +21 -0
- package/dist/daemon/tools/navigation.js.map +1 -0
- package/dist/daemon/tools/press.d.ts +4 -0
- package/dist/daemon/tools/press.js +23 -0
- package/dist/daemon/tools/press.js.map +1 -0
- package/dist/daemon/tools/screenshot.d.ts +5 -0
- package/dist/daemon/tools/screenshot.js +57 -0
- package/dist/daemon/tools/screenshot.js.map +1 -0
- package/dist/daemon/tools/select.d.ts +5 -0
- package/dist/daemon/tools/select.js +13 -0
- package/dist/daemon/tools/select.js.map +1 -0
- package/dist/daemon/tools/shared.d.ts +4 -0
- package/dist/daemon/tools/shared.js +35 -0
- package/dist/daemon/tools/shared.js.map +1 -0
- package/dist/daemon/tools/snapshot.d.ts +6 -0
- package/dist/daemon/tools/snapshot.js +90 -0
- package/dist/daemon/tools/snapshot.js.map +1 -0
- package/dist/daemon/tools/title.d.ts +2 -0
- package/dist/daemon/tools/title.js +8 -0
- package/dist/daemon/tools/title.js.map +1 -0
- package/dist/daemon/tools/type.d.ts +4 -0
- package/dist/daemon/tools/type.js +9 -0
- package/dist/daemon/tools/type.js.map +1 -0
- package/dist/daemon/tools/url.d.ts +2 -0
- package/dist/daemon/tools/url.js +8 -0
- package/dist/daemon/tools/url.js.map +1 -0
- package/dist/minimist.d.ts +10 -0
- package/dist/minimist.js +52 -0
- package/dist/minimist.js.map +1 -0
- package/dist/output.d.ts +6 -0
- package/dist/output.js +32 -0
- package/dist/output.js.map +1 -0
- package/dist/program.d.ts +2 -0
- package/dist/program.js +200 -0
- package/dist/program.js.map +1 -0
- package/dist/protocol.d.ts +29 -0
- package/dist/protocol.js +3 -0
- package/dist/protocol.js.map +1 -0
- package/dist/registry.d.ts +19 -0
- package/dist/registry.js +91 -0
- package/dist/registry.js.map +1 -0
- package/dist/response.d.ts +23 -0
- package/dist/response.js +64 -0
- package/dist/response.js.map +1 -0
- package/dist/session.d.ts +23 -0
- package/dist/session.js +264 -0
- package/dist/session.js.map +1 -0
- package/dist/snapshot/aria-snapshot.d.ts +1 -0
- package/dist/snapshot/aria-snapshot.js +200 -0
- package/dist/snapshot/aria-snapshot.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill.js","sourceRoot":"","sources":["../../../src/daemon/tools/fill.ts"],"names":[],"mappings":";;AAIA,oCAqBC;AAxBD,qCAAmD;AACnD,2DAAyC;AAElC,KAAK,UAAU,YAAY,CAChC,MAAW,EACX,MAA2D,EAC3D,QAAkB;IAElB,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,uEAAuE;IACvE,oEAAoE;IACpE,uEAAuE;IACvE,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAG,CAAC,OAAO,EAAE,GAAG,EAAE,wBAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAG,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IACD,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,QAAQ,CAAC,OAAO,CAAC,4BAA4B,IAAA,mBAAU,EAAC,MAAM,CAAC,MAAM,CAAC,eAAe,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;IACxG,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_find = browser_find;
|
|
4
|
+
const aria_snapshot_1 = require("../../snapshot/aria-snapshot");
|
|
5
|
+
/** Wait for document.body to have at least one child element, then generate snapshot. */
|
|
6
|
+
async function getSnapshotYaml(driver) {
|
|
7
|
+
const script = (0, aria_snapshot_1.generateAriaSnapshotScript)();
|
|
8
|
+
// First, wait for the page body to have content. readyState 'complete'
|
|
9
|
+
// doesn't guarantee the DOM is fully rendered (especially for JS-heavy pages).
|
|
10
|
+
try {
|
|
11
|
+
await driver.wait(async () => {
|
|
12
|
+
const ready = await driver.executeScript('return document.readyState === "complete" && document.body && document.body.children.length > 0;');
|
|
13
|
+
return ready === true;
|
|
14
|
+
}, 5000, 'Page body not ready');
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
// Continue even if the wait times out — the snapshot may still work.
|
|
18
|
+
}
|
|
19
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
20
|
+
try {
|
|
21
|
+
const result = await driver.executeScript(`const options = { target: arguments[0], depth: arguments[1] }; return (${script})(options);`, null, 50);
|
|
22
|
+
const yaml = typeof result === 'string' ? result : '';
|
|
23
|
+
if (yaml)
|
|
24
|
+
return yaml;
|
|
25
|
+
// Empty result — the page may not have loaded yet. Wait and retry.
|
|
26
|
+
await new Promise(r => setTimeout(r, 500));
|
|
27
|
+
}
|
|
28
|
+
catch (e) {
|
|
29
|
+
if (attempt === 2)
|
|
30
|
+
throw e;
|
|
31
|
+
await new Promise(r => setTimeout(r, 500));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return '';
|
|
35
|
+
}
|
|
36
|
+
async function browser_find(driver, params, response) {
|
|
37
|
+
let yaml;
|
|
38
|
+
try {
|
|
39
|
+
yaml = await getSnapshotYaml(driver);
|
|
40
|
+
}
|
|
41
|
+
catch (e) {
|
|
42
|
+
response.addError(`Failed to generate snapshot for find: ${e.message}`);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (!yaml) {
|
|
46
|
+
response.addResult('No matches found.');
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const lines = yaml.split('\n');
|
|
50
|
+
const matches = [];
|
|
51
|
+
if (params.regex) {
|
|
52
|
+
let pattern = params.regex;
|
|
53
|
+
let flags = '';
|
|
54
|
+
const slashMatch = pattern.match(/^\/(.+)\/([gimuy]*)$/);
|
|
55
|
+
if (slashMatch) {
|
|
56
|
+
pattern = slashMatch[1];
|
|
57
|
+
flags = slashMatch[2];
|
|
58
|
+
}
|
|
59
|
+
const re = new RegExp(pattern, flags);
|
|
60
|
+
lines.forEach((line, i) => {
|
|
61
|
+
if (re.test(line)) {
|
|
62
|
+
const start = Math.max(0, i - 3);
|
|
63
|
+
const end = Math.min(lines.length, i + 4);
|
|
64
|
+
matches.push(...lines.slice(start, end), '---');
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else if (params.text) {
|
|
69
|
+
lines.forEach((line, i) => {
|
|
70
|
+
if (line.includes(params.text)) {
|
|
71
|
+
const start = Math.max(0, i - 3);
|
|
72
|
+
const end = Math.min(lines.length, i + 4);
|
|
73
|
+
matches.push(...lines.slice(start, end), '---');
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
if (matches.length === 0) {
|
|
78
|
+
response.addResult('No matches found.');
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
response.addResult(matches.join('\n'));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=find.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../../src/daemon/tools/find.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_goto = browser_goto;
|
|
4
|
+
async function browser_goto(driver, params, response) {
|
|
5
|
+
await driver.get(params.url);
|
|
6
|
+
// Wait for the document to be fully loaded AND for the body to have
|
|
7
|
+
// at least one child element. readyState 'interactive' can fire before
|
|
8
|
+
// the body is populated, causing empty snapshots in find/snapshot commands.
|
|
9
|
+
try {
|
|
10
|
+
await driver.wait(async () => {
|
|
11
|
+
const state = await driver.executeScript('return document.readyState === "complete" && document.body && document.body.children.length > 0;');
|
|
12
|
+
return state === true;
|
|
13
|
+
}, 10000, 'Page did not reach ready state');
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
// Don't fail the navigation if the wait times out — the page may
|
|
17
|
+
// still be usable. The caller can retry snapshot/find if needed.
|
|
18
|
+
}
|
|
19
|
+
const title = await driver.getTitle();
|
|
20
|
+
const url = await driver.getCurrentUrl();
|
|
21
|
+
response.addPage({ url, title });
|
|
22
|
+
response.addCode(`await driver.get('${params.url}');`);
|
|
23
|
+
response.addResult(`navigated to ${params.url}`);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=goto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goto.js","sourceRoot":"","sources":["../../../src/daemon/tools/goto.ts"],"names":[],"mappings":";;AAEA,oCA2BC;AA3BM,KAAK,UAAU,YAAY,CAAC,MAAW,EAAE,MAAuB,EAAE,QAAkB;IACzF,MAAM,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAE7B,oEAAoE;IACpE,uEAAuE;IACvE,4EAA4E;IAC5E,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CACf,KAAK,IAAI,EAAE;YACT,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CACtC,kGAAkG,CACnG,CAAC;YACF,OAAO,KAAK,KAAK,IAAI,CAAC;QACxB,CAAC,EACD,KAAK,EACL,gCAAgC,CACjC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;QACjE,iEAAiE;IACnE,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,gBAAgB,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const tools: Record<string, (driver: any, params: any, response: any) => Promise<void>>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tools = void 0;
|
|
4
|
+
const goto_1 = require("./goto");
|
|
5
|
+
const navigation_1 = require("./navigation");
|
|
6
|
+
const title_1 = require("./title");
|
|
7
|
+
const url_1 = require("./url");
|
|
8
|
+
const click_1 = require("./click");
|
|
9
|
+
const fill_1 = require("./fill");
|
|
10
|
+
const type_1 = require("./type");
|
|
11
|
+
const press_1 = require("./press");
|
|
12
|
+
const select_1 = require("./select");
|
|
13
|
+
const check_1 = require("./check");
|
|
14
|
+
const snapshot_1 = require("./snapshot");
|
|
15
|
+
const find_1 = require("./find");
|
|
16
|
+
const screenshot_1 = require("./screenshot");
|
|
17
|
+
const eval_1 = require("./eval");
|
|
18
|
+
exports.tools = {
|
|
19
|
+
browser_goto: goto_1.browser_goto,
|
|
20
|
+
browser_go_back: navigation_1.browser_go_back,
|
|
21
|
+
browser_go_forward: navigation_1.browser_go_forward,
|
|
22
|
+
browser_reload: navigation_1.browser_reload,
|
|
23
|
+
browser_title: title_1.browser_title,
|
|
24
|
+
browser_url: url_1.browser_url,
|
|
25
|
+
browser_click: click_1.browser_click,
|
|
26
|
+
browser_fill: fill_1.browser_fill,
|
|
27
|
+
browser_type: type_1.browser_type,
|
|
28
|
+
browser_press: press_1.browser_press,
|
|
29
|
+
browser_select: select_1.browser_select,
|
|
30
|
+
browser_check: check_1.browser_check,
|
|
31
|
+
browser_uncheck: check_1.browser_uncheck,
|
|
32
|
+
browser_snapshot: snapshot_1.browser_snapshot,
|
|
33
|
+
browser_find: find_1.browser_find,
|
|
34
|
+
browser_screenshot: screenshot_1.browser_screenshot,
|
|
35
|
+
browser_eval: eval_1.browser_eval,
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/daemon/tools/index.ts"],"names":[],"mappings":";;;AAAA,iCAAsC;AACtC,6CAAmF;AACnF,mCAAwC;AACxC,+BAAoC;AACpC,mCAAwC;AACxC,iCAAsC;AACtC,iCAAsC;AACtC,mCAAwC;AACxC,qCAA0C;AAC1C,mCAAyD;AACzD,yCAA8C;AAC9C,iCAAsC;AACtC,6CAAkD;AAClD,iCAAsC;AAEzB,QAAA,KAAK,GAA+E;IAC/F,YAAY,EAAZ,mBAAY;IACZ,eAAe,EAAf,4BAAe;IACf,kBAAkB,EAAlB,+BAAkB;IAClB,cAAc,EAAd,2BAAc;IACd,aAAa,EAAb,qBAAa;IACb,WAAW,EAAX,iBAAW;IACX,aAAa,EAAb,qBAAa;IACb,YAAY,EAAZ,mBAAY;IACZ,YAAY,EAAZ,mBAAY;IACZ,aAAa,EAAb,qBAAa;IACb,cAAc,EAAd,uBAAc;IACd,aAAa,EAAb,qBAAa;IACb,eAAe,EAAf,uBAAe;IACf,gBAAgB,EAAhB,2BAAgB;IAChB,YAAY,EAAZ,mBAAY;IACZ,kBAAkB,EAAlB,+BAAkB;IAClB,YAAY,EAAZ,mBAAY;CACb,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Response } from '../../response';
|
|
2
|
+
export declare function browser_go_back(driver: any, _params: any, response: Response): Promise<void>;
|
|
3
|
+
export declare function browser_go_forward(driver: any, _params: any, response: Response): Promise<void>;
|
|
4
|
+
export declare function browser_reload(driver: any, _params: any, response: Response): Promise<void>;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_go_back = browser_go_back;
|
|
4
|
+
exports.browser_go_forward = browser_go_forward;
|
|
5
|
+
exports.browser_reload = browser_reload;
|
|
6
|
+
async function browser_go_back(driver, _params, response) {
|
|
7
|
+
await driver.navigate().back();
|
|
8
|
+
response.addCode(`await driver.navigate().back();`);
|
|
9
|
+
response.addResult('navigated back');
|
|
10
|
+
}
|
|
11
|
+
async function browser_go_forward(driver, _params, response) {
|
|
12
|
+
await driver.navigate().forward();
|
|
13
|
+
response.addCode(`await driver.navigate().forward();`);
|
|
14
|
+
response.addResult('navigated forward');
|
|
15
|
+
}
|
|
16
|
+
async function browser_reload(driver, _params, response) {
|
|
17
|
+
await driver.navigate().refresh();
|
|
18
|
+
response.addCode(`await driver.navigate().refresh();`);
|
|
19
|
+
response.addResult('reloaded');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=navigation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../../src/daemon/tools/navigation.ts"],"names":[],"mappings":";;AAEA,0CAIC;AAED,gDAIC;AAED,wCAIC;AAhBM,KAAK,UAAU,eAAe,CAAC,MAAW,EAAE,OAAY,EAAE,QAAkB;IACjF,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;IACpD,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;AACvC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,MAAW,EAAE,OAAY,EAAE,QAAkB;IACpF,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;AAC1C,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAW,EAAE,OAAY,EAAE,QAAkB;IAChF,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IACvD,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_press = browser_press;
|
|
4
|
+
const selenium_webdriver_1 = require("selenium-webdriver");
|
|
5
|
+
const KEY_MAP = {
|
|
6
|
+
'Enter': selenium_webdriver_1.Key.ENTER,
|
|
7
|
+
'Tab': selenium_webdriver_1.Key.TAB,
|
|
8
|
+
'Escape': selenium_webdriver_1.Key.ESCAPE,
|
|
9
|
+
'Backspace': selenium_webdriver_1.Key.BACK_SPACE,
|
|
10
|
+
'ArrowDown': selenium_webdriver_1.Key.ARROW_DOWN,
|
|
11
|
+
'ArrowUp': selenium_webdriver_1.Key.ARROW_UP,
|
|
12
|
+
'ArrowLeft': selenium_webdriver_1.Key.ARROW_LEFT,
|
|
13
|
+
'ArrowRight': selenium_webdriver_1.Key.ARROW_RIGHT,
|
|
14
|
+
'Space': selenium_webdriver_1.Key.SPACE,
|
|
15
|
+
};
|
|
16
|
+
async function browser_press(driver, params, response) {
|
|
17
|
+
const key = KEY_MAP[params.key] || params.key;
|
|
18
|
+
await driver.switchTo().activeElement().sendKeys(key);
|
|
19
|
+
const codeKey = params.key in KEY_MAP ? `Key.${params.key.toUpperCase()}` : `'${params.key}'`;
|
|
20
|
+
response.addCode(`await driver.switchTo().activeElement().sendKeys(${codeKey});`);
|
|
21
|
+
response.addResult(`pressed ${params.key}`);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=press.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"press.js","sourceRoot":"","sources":["../../../src/daemon/tools/press.ts"],"names":[],"mappings":";;AAeA,sCAMC;AApBD,2DAAyC;AAEzC,MAAM,OAAO,GAA2B;IACtC,OAAO,EAAE,wBAAG,CAAC,KAAK;IAClB,KAAK,EAAE,wBAAG,CAAC,GAAG;IACd,QAAQ,EAAE,wBAAG,CAAC,MAAM;IACpB,WAAW,EAAE,wBAAG,CAAC,UAAU;IAC3B,WAAW,EAAE,wBAAG,CAAC,UAAU;IAC3B,SAAS,EAAE,wBAAG,CAAC,QAAQ;IACvB,WAAW,EAAE,wBAAG,CAAC,UAAU;IAC3B,YAAY,EAAE,wBAAG,CAAC,WAAW;IAC7B,OAAO,EAAE,wBAAG,CAAC,KAAK;CACnB,CAAC;AAEK,KAAK,UAAU,aAAa,CAAC,MAAW,EAAE,MAAuB,EAAE,QAAkB;IAC1F,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;IAC9C,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC;IAC9F,QAAQ,CAAC,OAAO,CAAC,oDAAoD,OAAO,IAAI,CAAC,CAAC;IAClF,QAAQ,CAAC,SAAS,CAAC,WAAW,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.browser_screenshot = browser_screenshot;
|
|
37
|
+
const shared_1 = require("./shared");
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
async function browser_screenshot(driver, params, response) {
|
|
41
|
+
let image;
|
|
42
|
+
if (params.target) {
|
|
43
|
+
const el = await (0, shared_1.findElement)(driver, params.target);
|
|
44
|
+
image = Buffer.from(await el.takeScreenshot(), 'base64');
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
image = Buffer.from(await driver.takeScreenshot(), 'base64');
|
|
48
|
+
}
|
|
49
|
+
const outDir = path.join(process.cwd(), '.se-cli');
|
|
50
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
51
|
+
const filename = params.filename ? (0, shared_1.safeFilename)(params.filename) : `screenshot-${Date.now()}.png`;
|
|
52
|
+
const file = path.join(outDir, filename);
|
|
53
|
+
fs.writeFileSync(file, image);
|
|
54
|
+
response.addCode(`const image = await driver.takeScreenshot(); fs.writeFileSync('${filename}', Buffer.from(image, 'base64'));`);
|
|
55
|
+
response.addResult(`[Screenshot](.se-cli/${filename})`);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=screenshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screenshot.js","sourceRoot":"","sources":["../../../src/daemon/tools/screenshot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,gDAqBC;AAzBD,qCAAqD;AACrD,uCAAyB;AACzB,2CAA6B;AAEtB,KAAK,UAAU,kBAAkB,CACtC,MAAW,EACX,MAA8C,EAC9C,QAAkB;IAElB,IAAI,KAAa,CAAC;IAClB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IACnD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAA,qBAAY,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAClG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAE9B,QAAQ,CAAC,OAAO,CAAC,kEAAkE,QAAQ,mCAAmC,CAAC,CAAC;IAChI,QAAQ,CAAC,SAAS,CAAC,wBAAwB,QAAQ,GAAG,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_select = browser_select;
|
|
4
|
+
const shared_1 = require("./shared");
|
|
5
|
+
async function browser_select(driver, params, response) {
|
|
6
|
+
const el = await (0, shared_1.findElement)(driver, params.target);
|
|
7
|
+
const { Select } = require('selenium-webdriver');
|
|
8
|
+
const select = new Select(el);
|
|
9
|
+
await select.selectByVisibleText(params.value);
|
|
10
|
+
response.addCode(`const select = new Select(driver.findElement(${(0, shared_1.byToString)(params.target)})); await select.selectByVisibleText('${params.value}');`);
|
|
11
|
+
response.addResult(`selected ${params.value}`);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=select.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../src/daemon/tools/select.ts"],"names":[],"mappings":";;AAGA,wCAWC;AAbD,qCAAmD;AAE5C,KAAK,UAAU,cAAc,CAClC,MAAW,EACX,MAAyC,EACzC,QAAkB;IAElB,MAAM,EAAE,GAAG,MAAM,IAAA,oBAAW,EAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,gDAAgD,IAAA,mBAAU,EAAC,MAAM,CAAC,MAAM,CAAC,yCAAyC,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;IACtJ,QAAQ,CAAC,SAAS,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function safeFilename(filename: string): string;
|
|
2
|
+
export declare function resolveTarget(target: string): Promise<any>;
|
|
3
|
+
export declare function findElement(driver: any, target: string): Promise<any>;
|
|
4
|
+
export declare function byToString(target: string): string;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.safeFilename = safeFilename;
|
|
4
|
+
exports.resolveTarget = resolveTarget;
|
|
5
|
+
exports.findElement = findElement;
|
|
6
|
+
exports.byToString = byToString;
|
|
7
|
+
const selenium_webdriver_1 = require("selenium-webdriver");
|
|
8
|
+
function safeFilename(filename) {
|
|
9
|
+
// Reject any path separator (both POSIX and Windows) so behavior is
|
|
10
|
+
// platform-independent. `path.basename` alone treats `\` as a regular
|
|
11
|
+
// character on Linux, which would let Windows-style traversal slip through.
|
|
12
|
+
if (filename.includes('/') || filename.includes('\\')) {
|
|
13
|
+
throw new Error(`Invalid filename: path separators are not allowed. Got: ${filename}`);
|
|
14
|
+
}
|
|
15
|
+
return filename;
|
|
16
|
+
}
|
|
17
|
+
async function resolveTarget(target) {
|
|
18
|
+
const refMatch = target.match(/^e\d+$/);
|
|
19
|
+
if (refMatch) {
|
|
20
|
+
return selenium_webdriver_1.By.css(`[data-se-ref="${target}"]`);
|
|
21
|
+
}
|
|
22
|
+
return selenium_webdriver_1.By.css(target);
|
|
23
|
+
}
|
|
24
|
+
async function findElement(driver, target) {
|
|
25
|
+
const by = await resolveTarget(target);
|
|
26
|
+
return driver.findElement(by);
|
|
27
|
+
}
|
|
28
|
+
function byToString(target) {
|
|
29
|
+
const refMatch = target.match(/^e\d+$/);
|
|
30
|
+
if (refMatch) {
|
|
31
|
+
return `By.css('[data-se-ref="${target}"]')`;
|
|
32
|
+
}
|
|
33
|
+
return `By.css('${target}')`;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=shared.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/daemon/tools/shared.ts"],"names":[],"mappings":";;AAEA,oCAQC;AAED,sCAMC;AAED,kCAGC;AAED,gCAMC;AA/BD,2DAAwC;AAExC,SAAgB,YAAY,CAAC,QAAgB;IAC3C,oEAAoE;IACpE,sEAAsE;IACtE,4EAA4E;IAC5E,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,IAAI,KAAK,CAAC,2DAA2D,QAAQ,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAEM,KAAK,UAAU,aAAa,CAAC,MAAc;IAChD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,uBAAE,CAAC,GAAG,CAAC,iBAAiB,MAAM,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,uBAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,MAAW,EAAE,MAAc;IAC3D,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,UAAU,CAAC,MAAc;IACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACxC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,yBAAyB,MAAM,MAAM,CAAC;IAC/C,CAAC;IACD,OAAO,WAAW,MAAM,IAAI,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.browser_snapshot = browser_snapshot;
|
|
37
|
+
const aria_snapshot_1 = require("../../snapshot/aria-snapshot");
|
|
38
|
+
const shared_1 = require("./shared");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
async function browser_snapshot(driver, params, response) {
|
|
42
|
+
const script = (0, aria_snapshot_1.generateAriaSnapshotScript)();
|
|
43
|
+
let yaml = '';
|
|
44
|
+
// Wait for the page body to have content before generating the snapshot.
|
|
45
|
+
// readyState 'complete' doesn't guarantee the DOM is fully rendered.
|
|
46
|
+
if (!params.target) {
|
|
47
|
+
try {
|
|
48
|
+
await driver.wait(async () => {
|
|
49
|
+
const ready = await driver.executeScript('return document.readyState === "complete" && document.body && document.body.children.length > 0;');
|
|
50
|
+
return ready === true;
|
|
51
|
+
}, 5000, 'Page body not ready');
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Continue even if the wait times out — the snapshot may still work.
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Retry up to 3 times — the page may still be loading and
|
|
58
|
+
// executeScript can return empty on the first attempt.
|
|
59
|
+
for (let attempt = 0; attempt < 3; attempt++) {
|
|
60
|
+
try {
|
|
61
|
+
const result = await driver.executeScript(`const options = { target: arguments[0], depth: arguments[1] }; return (${script})(options);`, params.target || null, params.depth || 50);
|
|
62
|
+
yaml = typeof result === 'string' ? result : '';
|
|
63
|
+
if (yaml)
|
|
64
|
+
break;
|
|
65
|
+
await new Promise(r => setTimeout(r, 500));
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
if (attempt === 2) {
|
|
69
|
+
response.addError(`Failed to generate snapshot: ${e.message}`);
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
await new Promise(r => setTimeout(r, 500));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
if (!yaml) {
|
|
76
|
+
response.addError('Snapshot returned empty result — the page may not have loaded yet.');
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
if (params.filename) {
|
|
80
|
+
const outDir = path.join(process.cwd(), '.se-cli');
|
|
81
|
+
fs.mkdirSync(outDir, { recursive: true });
|
|
82
|
+
const file = path.join(outDir, (0, shared_1.safeFilename)(params.filename));
|
|
83
|
+
fs.writeFileSync(file, yaml);
|
|
84
|
+
response.addResult(`[Snapshot](.se-cli/${params.filename})`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
response.addResult(yaml);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../src/daemon/tools/snapshot.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4CA8DC;AAnED,gEAA0E;AAC1E,qCAAwC;AACxC,uCAAyB;AACzB,2CAA6B;AAEtB,KAAK,UAAU,gBAAgB,CACpC,MAAW,EACX,MAA8D,EAC9D,QAAkB;IAElB,MAAM,MAAM,GAAG,IAAA,0CAA0B,GAAE,CAAC;IAC5C,IAAI,IAAI,GAAG,EAAE,CAAC;IAEd,yEAAyE;IACzE,qEAAqE;IACrE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,IAAI,CACf,KAAK,IAAI,EAAE;gBACT,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,aAAa,CACtC,kGAAkG,CACnG,CAAC;gBACF,OAAO,KAAK,KAAK,IAAI,CAAC;YACxB,CAAC,EACD,IAAI,EACJ,qBAAqB,CACtB,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,qEAAqE;QACvE,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,uDAAuD;IACvD,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CACvC,0EAA0E,MAAM,aAAa,EAC7F,MAAM,CAAC,MAAM,IAAI,IAAI,EACrB,MAAM,CAAC,KAAK,IAAI,EAAE,CACnB,CAAC;YACF,IAAI,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,QAAQ,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/D,OAAO;YACT,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,QAAQ,CAAC,QAAQ,CAAC,oEAAoE,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QACnD,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAA,qBAAY,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9D,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,QAAQ,CAAC,SAAS,CAAC,sBAAsB,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;IAC/D,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_title = browser_title;
|
|
4
|
+
async function browser_title(driver, _params, response) {
|
|
5
|
+
const title = await driver.getTitle();
|
|
6
|
+
response.addResult(title);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=title.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"title.js","sourceRoot":"","sources":["../../../src/daemon/tools/title.ts"],"names":[],"mappings":";;AAEA,sCAGC;AAHM,KAAK,UAAU,aAAa,CAAC,MAAW,EAAE,OAAY,EAAE,QAAkB;IAC/E,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_type = browser_type;
|
|
4
|
+
async function browser_type(driver, params, response) {
|
|
5
|
+
await driver.switchTo().activeElement().sendKeys(params.value);
|
|
6
|
+
response.addCode(`await driver.switchTo().activeElement().sendKeys('${params.value}');`);
|
|
7
|
+
response.addResult('typed');
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.js","sourceRoot":"","sources":["../../../src/daemon/tools/type.ts"],"names":[],"mappings":";;AAGA,oCAIC;AAJM,KAAK,UAAU,YAAY,CAAC,MAAW,EAAE,MAAyB,EAAE,QAAkB;IAC3F,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,QAAQ,CAAC,OAAO,CAAC,qDAAqD,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC;IACzF,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.browser_url = browser_url;
|
|
4
|
+
async function browser_url(driver, _params, response) {
|
|
5
|
+
const url = await driver.getCurrentUrl();
|
|
6
|
+
response.addResult(url);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../../src/daemon/tools/url.ts"],"names":[],"mappings":";;AAEA,kCAGC;AAHM,KAAK,UAAU,WAAW,CAAC,MAAW,EAAE,OAAY,EAAE,QAAkB;IAC7E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ParseOptions {
|
|
2
|
+
boolean: string[];
|
|
3
|
+
string: string[];
|
|
4
|
+
alias: Record<string, string>;
|
|
5
|
+
}
|
|
6
|
+
export interface ParsedArgs {
|
|
7
|
+
_: string[];
|
|
8
|
+
[key: string]: any;
|
|
9
|
+
}
|
|
10
|
+
export declare function parseArgs(argv: string[], opts: ParseOptions): ParsedArgs;
|
package/dist/minimist.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseArgs = parseArgs;
|
|
4
|
+
function parseArgs(argv, opts) {
|
|
5
|
+
const result = { _: [] };
|
|
6
|
+
const allBoolean = new Set(opts.boolean);
|
|
7
|
+
const allString = new Set(opts.string);
|
|
8
|
+
for (const [alias, full] of Object.entries(opts.alias)) {
|
|
9
|
+
if (allBoolean.has(full))
|
|
10
|
+
allBoolean.add(alias);
|
|
11
|
+
if (allString.has(full))
|
|
12
|
+
allString.add(alias);
|
|
13
|
+
}
|
|
14
|
+
let i = 0;
|
|
15
|
+
while (i < argv.length) {
|
|
16
|
+
const arg = argv[i];
|
|
17
|
+
if (arg === '--') {
|
|
18
|
+
result._.push(...argv.slice(i + 1));
|
|
19
|
+
break;
|
|
20
|
+
}
|
|
21
|
+
const eqMatch = arg.match(/^(-{1,2})([\w-]+)=(.*)$/);
|
|
22
|
+
if (eqMatch) {
|
|
23
|
+
const isShort = eqMatch[1] === '-';
|
|
24
|
+
const key = isShort ? (opts.alias[eqMatch[2]] || eqMatch[2]) : eqMatch[2];
|
|
25
|
+
result[key] = eqMatch[3];
|
|
26
|
+
i++;
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const flagMatch = arg.match(/^(-{1,2})([\w-]+)$/);
|
|
30
|
+
if (flagMatch) {
|
|
31
|
+
const isShort = flagMatch[1] === '-';
|
|
32
|
+
const key = isShort ? (opts.alias[flagMatch[2]] || flagMatch[2]) : flagMatch[2];
|
|
33
|
+
if (allBoolean.has(key)) {
|
|
34
|
+
result[key] = true;
|
|
35
|
+
i++;
|
|
36
|
+
}
|
|
37
|
+
else if (allString.has(key) && i + 1 < argv.length) {
|
|
38
|
+
result[key] = argv[i + 1];
|
|
39
|
+
i += 2;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
result[key] = true;
|
|
43
|
+
i++;
|
|
44
|
+
}
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
result._.push(arg);
|
|
48
|
+
i++;
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=minimist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimist.js","sourceRoot":"","sources":["../src/minimist.ts"],"names":[],"mappings":";;AAWA,8BAkDC;AAlDD,SAAgB,SAAS,CAAC,IAAc,EAAE,IAAkB;IAC1D,MAAM,MAAM,GAAe,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACjB,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrD,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YACnC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACzB,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QAED,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAClD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC;YACrC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAChF,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACnB,CAAC,EAAE,CAAC;YACN,CAAC;iBAAM,IAAI,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrD,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC1B,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;gBACnB,CAAC,EAAE,CAAC;YACN,CAAC;YACD,SAAS;QACX,CAAC;QAED,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC,EAAE,CAAC;IACN,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|