UNPKG

3.8 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6const puppeteer_1 = require("puppeteer");
7const signale_1 = require("signale");
8const got_1 = __importDefault(require("got"));
9const fs_extra_1 = require("fs-extra");
10const path_1 = require("path");
11const navigation_1 = require("./commands/navigation");
12const save_page_as_1 = require("./commands/save-page-as");
13const files_1 = require("./commands/files");
14const timers_1 = require("./commands/timers");
15const mouse_1 = require("./commands/mouse");
16/**
17 *
18 * @param commandsOrFile - Commands for Pupper or a file path/URL
19 * @example puppet("path/to/commands.puppet")
20 * @example puppet("https://example.com/commands.puppet")
21 * @example puppet(["go to example.com", "download page as PDF"])
22 */
23exports.puppet = async (commandsOrFile) => {
24 if (typeof commandsOrFile === "string") {
25 if (commandsOrFile.startsWith("https://") ||
26 commandsOrFile.startsWith("http://")) {
27 const commands = await got_1.default.get(commandsOrFile);
28 return _puppet(commands.body.split("\n"));
29 }
30 const commands = await fs_extra_1.readFile(path_1.join(".", commandsOrFile), "utf8");
31 return _puppet(commands.split("\n"));
32 }
33 else if (Array.isArray(commandsOrFile)) {
34 return _puppet(commandsOrFile);
35 }
36 throw new Error("Argument must be a string or an array of strings");
37};
38/**
39 * Runs Puppet commands
40 * @param commands - Commands to run
41 */
42const _puppet = async (commands) => {
43 commands = commands.map((i) => i.toLocaleLowerCase().trim()).filter((i) => i);
44 signale_1.start("Starting Puppet");
45 const browser = await puppeteer_1.launch();
46 const page = await browser.newPage();
47 let lastResult = undefined;
48 for await (const command of commands) {
49 lastResult = await _command(command, page, lastResult);
50 }
51 const result = { commands, url: page.url() };
52 await browser.close();
53 signale_1.success("Completed Puppet commands");
54 return result;
55};
56const _command = async (command, page, lastResult) => {
57 signale_1.debug("Running command", command);
58 if (command.startsWith("go") ||
59 command.startsWith("open") ||
60 command.startsWith("navigate"))
61 return navigation_1.navigateTo(command, page, lastResult);
62 if ((command.startsWith("save") || command.startsWith("get")) &&
63 command.endsWith(" pdf"))
64 return save_page_as_1.saveAsPdf(command, page, lastResult);
65 if ((command.startsWith("save") || command.startsWith("get")) &&
66 command.endsWith(" html"))
67 return save_page_as_1.saveAsHtml(command, page, lastResult);
68 if (command.startsWith("save"))
69 return files_1.saveToFile(command, page, lastResult);
70 if (command.includes("screenshot"))
71 return save_page_as_1.screenshot(command, page, lastResult);
72 if (command.startsWith("wait for"))
73 if (command.includes("navigation"))
74 return timers_1.waitForNavigation(command, page, lastResult);
75 else
76 return timers_1.waitForTime(command, page, lastResult);
77 if (command.startsWith("move") ||
78 (command.startsWith("click") &&
79 (command.includes("point") ||
80 command.includes("coordinate") ||
81 command.includes("mouse"))))
82 return mouse_1.triggerMouseClickMove(command, page, lastResult);
83 throw new Error(`Command not understood: ${command}`);
84};
85// puppet([
86// "go to example.com",
87// "wait for 3 seconds",
88// "save to screenshot.html",
89// "click on more information link",
90// "wait for navigation",
91// ]);
92//# sourceMappingURL=index.js.map
\No newline at end of file