chrome-devtools-axi 0.1.4 → 0.1.6
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 -0
- package/dist/bin/chrome-devtools-axi-bridge.d.ts +2 -0
- package/dist/bin/chrome-devtools-axi-bridge.js +7 -0
- package/dist/bin/chrome-devtools-axi-bridge.js.map +1 -0
- package/dist/src/bridge.d.ts +31 -1
- package/dist/src/bridge.js +144 -64
- package/dist/src/bridge.js.map +1 -1
- package/dist/src/cli.d.ts +1 -1
- package/dist/src/cli.js +161 -70
- package/dist/src/cli.js.map +1 -1
- package/dist/src/client.d.ts +6 -5
- package/dist/src/client.js +18 -11
- package/dist/src/client.js.map +1 -1
- package/dist/src/hooks.js +11 -4
- package/dist/src/hooks.js.map +1 -1
- package/dist/src/run.d.ts +35 -0
- package/dist/src/run.js +226 -0
- package/dist/src/run.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -80,6 +80,7 @@ Execute `npm i -g chrome-devtools-axi` and run `chrome-devtools-axi` for browser
|
|
|
80
80
|
| `back` | Navigate back |
|
|
81
81
|
| `wait <ms\|text>` | Wait for time or text to appear |
|
|
82
82
|
| `eval <js>` | Evaluate JavaScript in page context |
|
|
83
|
+
| `run` | Execute a multi-step script from stdin |
|
|
83
84
|
|
|
84
85
|
### Interaction
|
|
85
86
|
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
import { getErrorMessage, runBridge } from "../src/bridge.js";
|
|
3
|
+
runBridge().catch((error) => {
|
|
4
|
+
process.stderr.write(`[chrome-devtools-axi] Fatal: ${getErrorMessage(error)}\n`);
|
|
5
|
+
process.exit(1);
|
|
6
|
+
});
|
|
7
|
+
//# sourceMappingURL=chrome-devtools-axi-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-devtools-axi-bridge.js","sourceRoot":"","sources":["../../bin/chrome-devtools-axi-bridge.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE9D,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/src/bridge.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
1
|
/**
|
|
3
2
|
* Persistent MCP bridge server for chrome-devtools-axi.
|
|
4
3
|
*
|
|
@@ -10,4 +9,35 @@
|
|
|
10
9
|
*
|
|
11
10
|
* Writes a PID file to ~/.chrome-devtools-axi/bridge.pid on startup.
|
|
12
11
|
*/
|
|
12
|
+
import { type IncomingMessage, type Server, type ServerResponse } from "node:http";
|
|
13
|
+
export interface BridgeContentBlock {
|
|
14
|
+
type: string;
|
|
15
|
+
text?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface BridgeCallPayload {
|
|
18
|
+
name: string;
|
|
19
|
+
args: Record<string, unknown>;
|
|
20
|
+
}
|
|
21
|
+
interface BridgeToolDescription {
|
|
22
|
+
name: string;
|
|
23
|
+
description?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface BridgeClient {
|
|
26
|
+
listTools(): Promise<{
|
|
27
|
+
tools: BridgeToolDescription[];
|
|
28
|
+
}>;
|
|
29
|
+
callTool(request: {
|
|
30
|
+
name: string;
|
|
31
|
+
arguments: Record<string, unknown>;
|
|
32
|
+
}): Promise<unknown>;
|
|
33
|
+
close(): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare function isBridgeClientConnected(client: BridgeClient): Promise<boolean>;
|
|
36
|
+
export declare function getErrorMessage(error: unknown): string;
|
|
37
|
+
export declare function extractToolText(content: BridgeContentBlock[]): string;
|
|
38
|
+
export declare function parseBridgeCallPayload(body: string): BridgeCallPayload;
|
|
39
|
+
export declare function resolveBridgeScript(importMetaDir: string): string;
|
|
40
|
+
export declare function handleBridgeRequest(client: BridgeClient, req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
41
|
+
export declare function createBridgeServer(client: BridgeClient): Server;
|
|
42
|
+
export declare function runBridge(port?: number): Promise<void>;
|
|
13
43
|
export {};
|
package/dist/src/bridge.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
#!/usr/bin/env tsx
|
|
2
1
|
/**
|
|
3
2
|
* Persistent MCP bridge server for chrome-devtools-axi.
|
|
4
3
|
*
|
|
@@ -13,12 +12,21 @@
|
|
|
13
12
|
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
|
14
13
|
import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
|
|
15
14
|
import { createServer } from "node:http";
|
|
16
|
-
import {
|
|
17
|
-
import { join } from "node:path";
|
|
15
|
+
import { existsSync, mkdirSync, unlinkSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { join, resolve } from "node:path";
|
|
18
17
|
import { homedir } from "node:os";
|
|
19
|
-
const
|
|
18
|
+
const DEFAULT_PORT = Number.parseInt(process.env.CHROME_DEVTOOLS_AXI_PORT ?? "9224", 10);
|
|
20
19
|
const STATE_DIR = join(homedir(), ".chrome-devtools-axi");
|
|
21
20
|
const PID_FILE = join(STATE_DIR, "bridge.pid");
|
|
21
|
+
export async function isBridgeClientConnected(client) {
|
|
22
|
+
try {
|
|
23
|
+
await client.listTools();
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
22
30
|
function writePidFile(port) {
|
|
23
31
|
mkdirSync(STATE_DIR, { recursive: true });
|
|
24
32
|
writeFileSync(PID_FILE, JSON.stringify({ pid: process.pid, port }));
|
|
@@ -31,79 +39,151 @@ function removePidFile() {
|
|
|
31
39
|
// Already gone — fine
|
|
32
40
|
}
|
|
33
41
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
42
|
+
export function getErrorMessage(error) {
|
|
43
|
+
return error instanceof Error ? error.message : String(error);
|
|
44
|
+
}
|
|
45
|
+
export function extractToolText(content) {
|
|
46
|
+
return content
|
|
47
|
+
.filter((block) => block.type === "text" && typeof block.text === "string")
|
|
48
|
+
.map((block) => block.text)
|
|
49
|
+
.join("\n");
|
|
50
|
+
}
|
|
51
|
+
function getToolContent(result) {
|
|
52
|
+
if (!result || typeof result !== "object" || !("content" in result) || !Array.isArray(result.content)) {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
return result.content;
|
|
56
|
+
}
|
|
57
|
+
export function parseBridgeCallPayload(body) {
|
|
58
|
+
let payload;
|
|
59
|
+
try {
|
|
60
|
+
payload = JSON.parse(body);
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
throw new Error("Invalid bridge request payload");
|
|
64
|
+
}
|
|
65
|
+
if (typeof payload.name !== "string" || payload.name.length === 0) {
|
|
66
|
+
throw new Error("Invalid bridge request payload");
|
|
67
|
+
}
|
|
68
|
+
if (payload.args === undefined) {
|
|
69
|
+
return { name: payload.name, args: {} };
|
|
70
|
+
}
|
|
71
|
+
if (payload.args === null || typeof payload.args !== "object" || Array.isArray(payload.args)) {
|
|
72
|
+
throw new Error("Invalid bridge request payload");
|
|
73
|
+
}
|
|
74
|
+
return { name: payload.name, args: payload.args };
|
|
75
|
+
}
|
|
76
|
+
export function resolveBridgeScript(importMetaDir) {
|
|
77
|
+
const builtScript = resolve(importMetaDir, "../bin/chrome-devtools-axi-bridge.js");
|
|
78
|
+
const sourceScript = builtScript.replace(/\.js$/, ".ts");
|
|
79
|
+
return existsSync(sourceScript) ? sourceScript : builtScript;
|
|
80
|
+
}
|
|
81
|
+
async function readRequestBody(req) {
|
|
82
|
+
let body = "";
|
|
83
|
+
for await (const chunk of req) {
|
|
84
|
+
body += typeof chunk === "string" ? chunk : chunk.toString("utf-8");
|
|
85
|
+
}
|
|
86
|
+
return body;
|
|
87
|
+
}
|
|
88
|
+
function writeJson(res, statusCode, payload) {
|
|
89
|
+
res.statusCode = statusCode;
|
|
90
|
+
res.end(JSON.stringify(payload));
|
|
91
|
+
}
|
|
92
|
+
async function handleToolsRequest(client, res) {
|
|
93
|
+
const result = await client.listTools();
|
|
94
|
+
writeJson(res, 200, result.tools.map((tool) => ({
|
|
95
|
+
name: tool.name,
|
|
96
|
+
description: tool.description,
|
|
97
|
+
})));
|
|
98
|
+
}
|
|
99
|
+
async function handleCallRequest(client, req, res) {
|
|
100
|
+
const body = await readRequestBody(req);
|
|
101
|
+
const payload = parseBridgeCallPayload(body);
|
|
102
|
+
const result = await client.callTool({ name: payload.name, arguments: payload.args });
|
|
103
|
+
writeJson(res, 200, { result: extractToolText(getToolContent(result)) });
|
|
104
|
+
}
|
|
105
|
+
export async function handleBridgeRequest(client, req, res) {
|
|
106
|
+
res.setHeader("Content-Type", "application/json");
|
|
107
|
+
if (req.method === "GET" && req.url === "/health") {
|
|
108
|
+
if (await isBridgeClientConnected(client)) {
|
|
109
|
+
writeJson(res, 200, { status: "ok" });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
writeJson(res, 503, { error: "Not connected" });
|
|
48
113
|
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
try {
|
|
49
117
|
if (req.method === "GET" && req.url === "/tools") {
|
|
50
|
-
|
|
51
|
-
const result = await client.listTools();
|
|
52
|
-
const tools = result.tools.map((t) => ({
|
|
53
|
-
name: t.name,
|
|
54
|
-
description: t.description,
|
|
55
|
-
}));
|
|
56
|
-
res.end(JSON.stringify(tools));
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
res.statusCode = 500;
|
|
60
|
-
res.end(JSON.stringify({ error: err.message }));
|
|
61
|
-
}
|
|
118
|
+
await handleToolsRequest(client, res);
|
|
62
119
|
return;
|
|
63
120
|
}
|
|
64
121
|
if (req.method === "POST" && req.url === "/call") {
|
|
65
|
-
|
|
66
|
-
for await (const chunk of req)
|
|
67
|
-
body += chunk;
|
|
68
|
-
try {
|
|
69
|
-
const { name, args } = JSON.parse(body);
|
|
70
|
-
const result = await client.callTool({ name, arguments: args ?? {} });
|
|
71
|
-
const parts = [];
|
|
72
|
-
for (const block of result.content) {
|
|
73
|
-
if (block.type === "text" && block.text)
|
|
74
|
-
parts.push(block.text);
|
|
75
|
-
}
|
|
76
|
-
res.end(JSON.stringify({ result: parts.join("\n") }));
|
|
77
|
-
}
|
|
78
|
-
catch (err) {
|
|
79
|
-
res.statusCode = 500;
|
|
80
|
-
res.end(JSON.stringify({ error: err.message }));
|
|
81
|
-
}
|
|
122
|
+
await handleCallRequest(client, req, res);
|
|
82
123
|
return;
|
|
83
124
|
}
|
|
84
|
-
|
|
85
|
-
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
writeJson(res, 500, { error: getErrorMessage(error) });
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
writeJson(res, 404, { error: "not found" });
|
|
131
|
+
}
|
|
132
|
+
export function createBridgeServer(client) {
|
|
133
|
+
return createServer((req, res) => {
|
|
134
|
+
void handleBridgeRequest(client, req, res);
|
|
86
135
|
});
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
136
|
+
}
|
|
137
|
+
function logBridgeMessage(message) {
|
|
138
|
+
process.stderr.write(`[chrome-devtools-axi] ${message}\n`);
|
|
139
|
+
}
|
|
140
|
+
function writeReadySignal() {
|
|
141
|
+
process.stdout.write("READY\n");
|
|
142
|
+
}
|
|
143
|
+
function createTransport() {
|
|
144
|
+
return new StdioClientTransport({
|
|
145
|
+
command: "npx",
|
|
146
|
+
args: ["-y", "chrome-devtools-mcp@latest", "--headless", "--isolated"],
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
function createBridgeClient() {
|
|
150
|
+
return new Client({ name: "chrome-devtools-axi-bridge", version: "1.0.0" });
|
|
151
|
+
}
|
|
152
|
+
async function closeServer(server) {
|
|
153
|
+
await new Promise((resolve, reject) => {
|
|
154
|
+
server.close((error) => {
|
|
155
|
+
if (error) {
|
|
156
|
+
reject(error);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
resolve();
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
export async function runBridge(port = DEFAULT_PORT) {
|
|
165
|
+
const transport = createTransport();
|
|
166
|
+
const client = createBridgeClient();
|
|
167
|
+
await client.connect(transport);
|
|
168
|
+
logBridgeMessage("Connected to chrome-devtools-mcp");
|
|
169
|
+
const server = createBridgeServer(client);
|
|
170
|
+
server.listen(port, "127.0.0.1", () => {
|
|
171
|
+
writePidFile(port);
|
|
172
|
+
logBridgeMessage(`Listening on http://127.0.0.1:${port}`);
|
|
173
|
+
writeReadySignal();
|
|
92
174
|
});
|
|
93
|
-
// Graceful shutdown
|
|
94
175
|
const shutdown = async () => {
|
|
95
176
|
removePidFile();
|
|
96
|
-
server
|
|
177
|
+
await closeServer(server);
|
|
97
178
|
await client.close();
|
|
98
179
|
await transport.close();
|
|
99
180
|
process.exit(0);
|
|
100
181
|
};
|
|
101
|
-
process.on("SIGTERM",
|
|
102
|
-
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
182
|
+
process.on("SIGTERM", () => {
|
|
183
|
+
void shutdown();
|
|
184
|
+
});
|
|
185
|
+
process.on("SIGINT", () => {
|
|
186
|
+
void shutdown();
|
|
187
|
+
});
|
|
188
|
+
}
|
|
109
189
|
//# sourceMappingURL=bridge.js.map
|
package/dist/src/bridge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAA0D,MAAM,WAAW,CAAC;AACjG,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AACzF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,sBAAsB,CAAC,CAAC;AAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AAuB/C,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAoB;IAChE,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,aAAa;IACpB,IAAI,CAAC;QACH,UAAU,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA6B;IAC3D,OAAO,OAAO;SACX,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;SAC1E,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,MAAe;IACrC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACtG,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,MAAM,CAAC,OAA+B,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,OAA2C,CAAC;IAChD,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAuC,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7F,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAA+B,EAAE,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,aAAqB;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,sCAAsC,CAAC,CAAC;IACnF,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACzD,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;AAC/D,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,GAAoB;IACjD,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,EAAE,CAAC;QAC9B,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,GAAmB,EAAE,UAAkB,EAAE,OAAgB;IAC1E,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,MAAoB,EAAE,GAAmB;IACzE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC;IACxC,SAAS,CACP,GAAG,EACH,GAAG,EACH,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;KAC9B,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,MAAoB,EACpB,GAAoB,EACpB,GAAmB;IAEnB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACtF,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAoB,EACpB,GAAoB,EACpB,GAAmB;IAEnB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;IAElD,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAClD,IAAI,MAAM,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1C,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,IAAI,GAAG,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACjD,MAAM,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;YACjD,MAAM,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC1C,OAAO;QACT,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAoB;IACrD,OAAO,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC/B,KAAK,mBAAmB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,OAAO,IAAI,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,gBAAgB;IACvB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,oBAAoB,CAAC;QAC9B,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,4BAA4B,EAAE,YAAY,EAAE,YAAY,CAAC;KACvE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAc;IACvC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACrB,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAI,GAAG,YAAY;IACjD,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;IACpC,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,gBAAgB,CAAC,kCAAkC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;QACpC,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,gBAAgB,CAAC,iCAAiC,IAAI,EAAE,CAAC,CAAC;QAC1D,gBAAgB,EAAE,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,aAAa,EAAE,CAAC;QAChB,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,KAAK,QAAQ,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/cli.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export declare function parseFillFormArgs(args: string[]): {
|
|
|
21
21
|
value: string;
|
|
22
22
|
}[];
|
|
23
23
|
};
|
|
24
|
-
export interface EmulateArgs {
|
|
24
|
+
export interface EmulateArgs extends Record<string, unknown> {
|
|
25
25
|
viewport?: string;
|
|
26
26
|
colorScheme?: string;
|
|
27
27
|
networkConditions?: string;
|