@midscene/cli 0.9.0 → 0.9.1-beta-20250110041124.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/dist/es/index.js +50 -29
- package/dist/lib/index.js +50 -29
- package/package.json +3 -3
package/dist/es/index.js
CHANGED
|
@@ -12137,7 +12137,7 @@ var require_package2 = __commonJS({
|
|
|
12137
12137
|
module.exports = {
|
|
12138
12138
|
name: "@midscene/cli",
|
|
12139
12139
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
12140
|
-
version: "0.9.0",
|
|
12140
|
+
version: "0.9.1-beta-20250110041124.0",
|
|
12141
12141
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
12142
12142
|
homepage: "https://midscenejs.com/",
|
|
12143
12143
|
"jsnext:source": "./src/index.ts",
|
|
@@ -13382,7 +13382,8 @@ import { readFileSync } from "fs";
|
|
|
13382
13382
|
import { basename as basename2, extname } from "path";
|
|
13383
13383
|
import { ScriptPlayer, parseYamlScript } from "@midscene/web/yaml";
|
|
13384
13384
|
import { createServer } from "http-server";
|
|
13385
|
-
import
|
|
13385
|
+
import assert from "assert";
|
|
13386
|
+
import { AgentOverChromeBridge } from "@midscene/web/bridge-mode";
|
|
13386
13387
|
import { puppeteerAgentForTarget } from "@midscene/web/puppeteer";
|
|
13387
13388
|
function playYamlFiles(files, options) {
|
|
13388
13389
|
return __async(this, null, function* () {
|
|
@@ -13395,40 +13396,60 @@ function playYamlFiles(files, options) {
|
|
|
13395
13396
|
keepWindow: options == null ? void 0 : options.keepWindow,
|
|
13396
13397
|
testId: fileName
|
|
13397
13398
|
};
|
|
13398
|
-
const player = new ScriptPlayer(
|
|
13399
|
-
|
|
13400
|
-
|
|
13401
|
-
|
|
13402
|
-
|
|
13403
|
-
|
|
13404
|
-
|
|
13405
|
-
|
|
13406
|
-
|
|
13407
|
-
|
|
13408
|
-
|
|
13409
|
-
|
|
13410
|
-
|
|
13411
|
-
}
|
|
13412
|
-
|
|
13413
|
-
|
|
13414
|
-
} else {
|
|
13415
|
-
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
|
|
13416
|
-
}
|
|
13417
|
-
target.url = urlToVisit;
|
|
13399
|
+
const player = new ScriptPlayer(script, (target) => __async(this, null, function* () {
|
|
13400
|
+
const freeFn = [];
|
|
13401
|
+
let localServer;
|
|
13402
|
+
let urlToVisit;
|
|
13403
|
+
if (target.serve) {
|
|
13404
|
+
assert(typeof target.url === "string", "url is required in serve mode");
|
|
13405
|
+
localServer = yield launchServer(target.serve);
|
|
13406
|
+
const serverAddress = localServer.server.address();
|
|
13407
|
+
freeFn.push({
|
|
13408
|
+
name: "local_server",
|
|
13409
|
+
fn: () => localServer == null ? void 0 : localServer.server.close()
|
|
13410
|
+
});
|
|
13411
|
+
if (target.url.startsWith("/")) {
|
|
13412
|
+
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
|
|
13413
|
+
} else {
|
|
13414
|
+
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
|
|
13418
13415
|
}
|
|
13419
|
-
|
|
13416
|
+
target.url = urlToVisit;
|
|
13417
|
+
}
|
|
13418
|
+
if (!target.bridgeMode) {
|
|
13419
|
+
const { agent: agent2, freeFn: newFreeFn } = yield puppeteerAgentForTarget(
|
|
13420
13420
|
target,
|
|
13421
13421
|
preference
|
|
13422
13422
|
);
|
|
13423
13423
|
freeFn.push(...newFreeFn);
|
|
13424
|
-
return { agent, freeFn };
|
|
13425
|
-
}
|
|
13426
|
-
(
|
|
13427
|
-
|
|
13428
|
-
|
|
13424
|
+
return { agent: agent2, freeFn };
|
|
13425
|
+
}
|
|
13426
|
+
assert(
|
|
13427
|
+
target.bridgeMode === "newTabWithUrl" || target.bridgeMode === "currentTab",
|
|
13428
|
+
`bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
|
|
13429
|
+
);
|
|
13430
|
+
if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
|
|
13431
|
+
console.warn(
|
|
13432
|
+
"puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode, will be ignored"
|
|
13433
|
+
);
|
|
13434
|
+
}
|
|
13435
|
+
const agent = new AgentOverChromeBridge();
|
|
13436
|
+
if (target.bridgeMode === "newTabWithUrl") {
|
|
13437
|
+
yield agent.connectNewTabWithUrl(target.url);
|
|
13438
|
+
} else {
|
|
13439
|
+
if (target.url) {
|
|
13440
|
+
console.warn('url will be ignored in bridge mode with "currentTab"');
|
|
13429
13441
|
}
|
|
13442
|
+
yield agent.connectCurrentTab();
|
|
13430
13443
|
}
|
|
13431
|
-
|
|
13444
|
+
freeFn.push({
|
|
13445
|
+
name: "destroy_agent_over_chrome_bridge",
|
|
13446
|
+
fn: () => agent.destroy()
|
|
13447
|
+
});
|
|
13448
|
+
return {
|
|
13449
|
+
agent,
|
|
13450
|
+
freeFn
|
|
13451
|
+
};
|
|
13452
|
+
}));
|
|
13432
13453
|
fileContextList.push({ file, player });
|
|
13433
13454
|
}
|
|
13434
13455
|
if (isTTY) {
|
package/dist/lib/index.js
CHANGED
|
@@ -5351,7 +5351,7 @@ var require_package2 = __commonJS({
|
|
|
5351
5351
|
module2.exports = {
|
|
5352
5352
|
name: "@midscene/cli",
|
|
5353
5353
|
description: "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
5354
|
-
version: "0.9.0",
|
|
5354
|
+
version: "0.9.1-beta-20250110041124.0",
|
|
5355
5355
|
repository: "https://github.com/web-infra-dev/midscene",
|
|
5356
5356
|
homepage: "https://midscenejs.com/",
|
|
5357
5357
|
"jsnext:source": "./src/index.ts",
|
|
@@ -13198,7 +13198,8 @@ function getRenderedRowCount(contents, stream2) {
|
|
|
13198
13198
|
}
|
|
13199
13199
|
|
|
13200
13200
|
// src/yaml-runner.ts
|
|
13201
|
-
var
|
|
13201
|
+
var import_node_assert = __toESM(require("assert"));
|
|
13202
|
+
var import_bridge_mode = require("@midscene/web/bridge-mode");
|
|
13202
13203
|
var import_puppeteer = require("@midscene/web/puppeteer");
|
|
13203
13204
|
var launchServer = (dir) => __async(void 0, null, function* () {
|
|
13204
13205
|
return new Promise((resolve, reject) => {
|
|
@@ -13222,40 +13223,60 @@ function playYamlFiles(files, options) {
|
|
|
13222
13223
|
keepWindow: options == null ? void 0 : options.keepWindow,
|
|
13223
13224
|
testId: fileName
|
|
13224
13225
|
};
|
|
13225
|
-
const player = new import_yaml2.ScriptPlayer(
|
|
13226
|
-
|
|
13227
|
-
|
|
13228
|
-
|
|
13229
|
-
|
|
13230
|
-
|
|
13231
|
-
|
|
13232
|
-
|
|
13233
|
-
|
|
13234
|
-
|
|
13235
|
-
|
|
13236
|
-
|
|
13237
|
-
|
|
13238
|
-
}
|
|
13239
|
-
|
|
13240
|
-
|
|
13241
|
-
} else {
|
|
13242
|
-
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
|
|
13243
|
-
}
|
|
13244
|
-
target.url = urlToVisit;
|
|
13226
|
+
const player = new import_yaml2.ScriptPlayer(script, (target) => __async(this, null, function* () {
|
|
13227
|
+
const freeFn = [];
|
|
13228
|
+
let localServer;
|
|
13229
|
+
let urlToVisit;
|
|
13230
|
+
if (target.serve) {
|
|
13231
|
+
(0, import_node_assert.default)(typeof target.url === "string", "url is required in serve mode");
|
|
13232
|
+
localServer = yield launchServer(target.serve);
|
|
13233
|
+
const serverAddress = localServer.server.address();
|
|
13234
|
+
freeFn.push({
|
|
13235
|
+
name: "local_server",
|
|
13236
|
+
fn: () => localServer == null ? void 0 : localServer.server.close()
|
|
13237
|
+
});
|
|
13238
|
+
if (target.url.startsWith("/")) {
|
|
13239
|
+
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}${target.url}`;
|
|
13240
|
+
} else {
|
|
13241
|
+
urlToVisit = `http://${serverAddress == null ? void 0 : serverAddress.address}:${serverAddress == null ? void 0 : serverAddress.port}/${target.url}`;
|
|
13245
13242
|
}
|
|
13246
|
-
|
|
13243
|
+
target.url = urlToVisit;
|
|
13244
|
+
}
|
|
13245
|
+
if (!target.bridgeMode) {
|
|
13246
|
+
const { agent: agent2, freeFn: newFreeFn } = yield (0, import_puppeteer.puppeteerAgentForTarget)(
|
|
13247
13247
|
target,
|
|
13248
13248
|
preference
|
|
13249
13249
|
);
|
|
13250
13250
|
freeFn.push(...newFreeFn);
|
|
13251
|
-
return { agent, freeFn };
|
|
13252
|
-
}
|
|
13253
|
-
(
|
|
13254
|
-
|
|
13255
|
-
|
|
13251
|
+
return { agent: agent2, freeFn };
|
|
13252
|
+
}
|
|
13253
|
+
(0, import_node_assert.default)(
|
|
13254
|
+
target.bridgeMode === "newTabWithUrl" || target.bridgeMode === "currentTab",
|
|
13255
|
+
`bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
|
|
13256
|
+
);
|
|
13257
|
+
if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
|
|
13258
|
+
console.warn(
|
|
13259
|
+
"puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode, will be ignored"
|
|
13260
|
+
);
|
|
13261
|
+
}
|
|
13262
|
+
const agent = new import_bridge_mode.AgentOverChromeBridge();
|
|
13263
|
+
if (target.bridgeMode === "newTabWithUrl") {
|
|
13264
|
+
yield agent.connectNewTabWithUrl(target.url);
|
|
13265
|
+
} else {
|
|
13266
|
+
if (target.url) {
|
|
13267
|
+
console.warn('url will be ignored in bridge mode with "currentTab"');
|
|
13256
13268
|
}
|
|
13269
|
+
yield agent.connectCurrentTab();
|
|
13257
13270
|
}
|
|
13258
|
-
|
|
13271
|
+
freeFn.push({
|
|
13272
|
+
name: "destroy_agent_over_chrome_bridge",
|
|
13273
|
+
fn: () => agent.destroy()
|
|
13274
|
+
});
|
|
13275
|
+
return {
|
|
13276
|
+
agent,
|
|
13277
|
+
freeFn
|
|
13278
|
+
};
|
|
13279
|
+
}));
|
|
13259
13280
|
fileContextList.push({ file, player });
|
|
13260
13281
|
}
|
|
13261
13282
|
if (isTTY) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/cli",
|
|
3
3
|
"description": "An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language. See https://midscenejs.com/ for details.",
|
|
4
|
-
"version": "0.9.0",
|
|
4
|
+
"version": "0.9.1-beta-20250110041124.0",
|
|
5
5
|
"repository": "https://github.com/web-infra-dev/midscene",
|
|
6
6
|
"homepage": "https://midscenejs.com/",
|
|
7
7
|
"jsnext:source": "./src/index.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"puppeteer": "23.0.2",
|
|
19
19
|
"http-server": "14.1.1",
|
|
20
|
-
"@midscene/core": "0.9.0",
|
|
21
|
-
"@midscene/web": "0.9.0"
|
|
20
|
+
"@midscene/core": "0.9.1-beta-20250110041124.0",
|
|
21
|
+
"@midscene/web": "0.9.1-beta-20250110041124.0"
|
|
22
22
|
},
|
|
23
23
|
"devDependencies": {
|
|
24
24
|
"@modern-js/module-tools": "2.60.6",
|