@midscene/cli 0.14.3 → 0.14.4-beta-20250415065130.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/lib/index.js CHANGED
@@ -13950,7 +13950,7 @@ Usage: $0 [options] <path-to-yaml-script-file-or-directory>`
13950
13950
  default: false,
13951
13951
  description: "Keep the browser window open after the script finishes. This is useful when debugging, but will consume more resources"
13952
13952
  }
13953
- }).version("version", "Show version number", "0.14.3").help().wrap(yargs_default().terminalWidth());
13953
+ }).version("version", "Show version number", "0.14.4-beta-20250415065130.0").help().wrap(yargs_default().terminalWidth());
13954
13954
  const argv = await args.argv;
13955
13955
  return {
13956
13956
  path: argv._[0],
@@ -14595,6 +14595,7 @@ function getRenderedRowCount(contents, stream2) {
14595
14595
 
14596
14596
  // src/yaml-runner.ts
14597
14597
  var import_node_assert = __toESM(require("assert"));
14598
+ var import_android = require("@midscene/android");
14598
14599
  var import_bridge_mode = require("@midscene/web/bridge-mode");
14599
14600
  var import_puppeteer = require("@midscene/web/puppeteer");
14600
14601
  var launchServer = async (dir) => {
@@ -14621,60 +14622,86 @@ async function playYamlFiles(files, options) {
14621
14622
  };
14622
14623
  const player = new import_yaml.ScriptPlayer(script, async (target) => {
14623
14624
  const freeFn = [];
14624
- let localServer;
14625
- let urlToVisit;
14626
- if (target.serve) {
14627
- (0, import_node_assert.default)(typeof target.url === "string", "url is required in serve mode");
14628
- localServer = await launchServer(target.serve);
14629
- const serverAddress = localServer.server.address();
14630
- freeFn.push({
14631
- name: "local_server",
14632
- fn: () => localServer?.server.close()
14625
+ const webTarget = script.web || script.target;
14626
+ if (webTarget) {
14627
+ if (script.target) {
14628
+ console.warn(
14629
+ "target is deprecated, please use web instead. See https://midscenejs.com/automate-with-scripts-in-yaml for more information. Sorry for the inconvenience."
14630
+ );
14631
+ }
14632
+ let localServer;
14633
+ let urlToVisit;
14634
+ if (webTarget.serve) {
14635
+ (0, import_node_assert.default)(
14636
+ typeof webTarget.url === "string",
14637
+ "url is required in serve mode"
14638
+ );
14639
+ localServer = await launchServer(webTarget.serve);
14640
+ const serverAddress = localServer.server.address();
14641
+ freeFn.push({
14642
+ name: "local_server",
14643
+ fn: () => localServer?.server.close()
14644
+ });
14645
+ if (webTarget.url.startsWith("/")) {
14646
+ urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}${webTarget.url}`;
14647
+ } else {
14648
+ urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}/${webTarget.url}`;
14649
+ }
14650
+ webTarget.url = urlToVisit;
14651
+ }
14652
+ if (!webTarget.bridgeMode) {
14653
+ const { agent: agent2, freeFn: newFreeFn } = await (0, import_puppeteer.puppeteerAgentForTarget)(
14654
+ webTarget,
14655
+ preference
14656
+ );
14657
+ freeFn.push(...newFreeFn);
14658
+ return { agent: agent2, freeFn };
14659
+ }
14660
+ (0, import_node_assert.default)(
14661
+ webTarget.bridgeMode === "newTabWithUrl" || webTarget.bridgeMode === "currentTab",
14662
+ `bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${webTarget.bridgeMode}`
14663
+ );
14664
+ if (webTarget.userAgent || webTarget.viewportWidth || webTarget.viewportHeight || webTarget.viewportScale || webTarget.waitForNetworkIdle || webTarget.cookie) {
14665
+ console.warn(
14666
+ "puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode. They will be ignored."
14667
+ );
14668
+ }
14669
+ const agent = new import_bridge_mode.AgentOverChromeBridge({
14670
+ closeNewTabsAfterDisconnect: webTarget.closeNewTabsAfterDisconnect,
14671
+ cacheId: fileName
14633
14672
  });
14634
- if (target.url.startsWith("/")) {
14635
- urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}${target.url}`;
14673
+ if (webTarget.bridgeMode === "newTabWithUrl") {
14674
+ await agent.connectNewTabWithUrl(webTarget.url);
14636
14675
  } else {
14637
- urlToVisit = `http://${serverAddress?.address}:${serverAddress?.port}/${target.url}`;
14676
+ if (webTarget.url) {
14677
+ console.warn(
14678
+ 'url will be ignored in bridge mode with "currentTab"'
14679
+ );
14680
+ }
14681
+ await agent.connectCurrentTab();
14638
14682
  }
14639
- target.url = urlToVisit;
14683
+ freeFn.push({
14684
+ name: "destroy_agent_over_chrome_bridge",
14685
+ fn: () => agent.destroy()
14686
+ });
14687
+ return {
14688
+ agent,
14689
+ freeFn
14690
+ };
14640
14691
  }
14641
- if (!target.bridgeMode) {
14642
- const { agent: agent2, freeFn: newFreeFn } = await (0, import_puppeteer.puppeteerAgentForTarget)(
14643
- target,
14644
- preference
14645
- );
14646
- freeFn.push(...newFreeFn);
14647
- return { agent: agent2, freeFn };
14692
+ if (script.android) {
14693
+ const androidTarget = script.android;
14694
+ const agent = await (0, import_android.agentFromAdbDevice)(androidTarget.deviceId);
14695
+ await agent.launch(androidTarget.launch);
14696
+ freeFn.push({
14697
+ name: "destroy_android_agent",
14698
+ fn: () => agent.destroy()
14699
+ });
14700
+ return { agent, freeFn };
14648
14701
  }
14649
- (0, import_node_assert.default)(
14650
- target.bridgeMode === "newTabWithUrl" || target.bridgeMode === "currentTab",
14651
- `bridgeMode config value must be either "newTabWithUrl" or "currentTab", but got ${target.bridgeMode}`
14702
+ throw new Error(
14703
+ 'No valid target configuration found in the yaml script, should be either "web" or "android"'
14652
14704
  );
14653
- if (target.userAgent || target.viewportWidth || target.viewportHeight || target.viewportScale || target.waitForNetworkIdle || target.cookie) {
14654
- console.warn(
14655
- "puppeteer options (userAgent, viewportWidth, viewportHeight, viewportScale, waitForNetworkIdle, cookie) are not supported in bridge mode. They will be ignored."
14656
- );
14657
- }
14658
- const agent = new import_bridge_mode.AgentOverChromeBridge({
14659
- closeNewTabsAfterDisconnect: target.closeNewTabsAfterDisconnect,
14660
- cacheId: fileName
14661
- });
14662
- if (target.bridgeMode === "newTabWithUrl") {
14663
- await agent.connectNewTabWithUrl(target.url);
14664
- } else {
14665
- if (target.url) {
14666
- console.warn('url will be ignored in bridge mode with "currentTab"');
14667
- }
14668
- await agent.connectCurrentTab();
14669
- }
14670
- freeFn.push({
14671
- name: "destroy_agent_over_chrome_bridge",
14672
- fn: () => agent.destroy()
14673
- });
14674
- return {
14675
- agent,
14676
- freeFn
14677
- };
14678
14705
  });
14679
14706
  fileContextList.push({ file, player });
14680
14707
  }