chrome-jig 0.3.0 → 0.4.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/README.md +41 -24
- package/SKILL.md +47 -12
- package/dist/chrome/connection.d.ts +3 -2
- package/dist/chrome/connection.d.ts.map +1 -1
- package/dist/chrome/connection.js +18 -11
- package/dist/chrome/connection.js.map +1 -1
- package/dist/cli.js +136 -108
- package/dist/cli.js.map +1 -1
- package/dist/commands/eval-file.d.ts +7 -0
- package/dist/commands/eval-file.d.ts.map +1 -0
- package/dist/commands/eval-file.js +19 -0
- package/dist/commands/eval-file.js.map +1 -0
- package/dist/commands/nrepl.d.ts +7 -1
- package/dist/commands/nrepl.d.ts.map +1 -1
- package/dist/commands/nrepl.js +11 -7
- package/dist/commands/nrepl.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/repl/repl.d.ts +1 -0
- package/dist/repl/repl.d.ts.map +1 -1
- package/dist/repl/repl.js +1 -1
- package/dist/repl/repl.js.map +1 -1
- package/dist/session/repl-protocol.d.ts +2 -0
- package/dist/session/repl-protocol.d.ts.map +1 -1
- package/dist/session/repl-protocol.js +5 -1
- package/dist/session/repl-protocol.js.map +1 -1
- package/editor/nvim/README.md +8 -8
- package/editor/nvim/lua/cjig/init.lua +180 -182
- package/package.json +13 -12
package/README.md
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
# Chrome Jig
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The DevTools console, from your terminal and editor.
|
|
4
4
|
|
|
5
5
|
## Why This Tool
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**Evaluate JavaScript in any browser tab from the command line.** Everything runs via CDP `Runtime.evaluate` — the same mechanism as the DevTools console. This bypasses Content-Security-Policy on any page. Globals persist across calls. No script tags, no CORS issues.
|
|
8
8
|
|
|
9
|
-
**
|
|
9
|
+
**Named script injection with auto-reload.** Register scripts in `.cjig.json`, inject by name, watch files for changes, auto re-inject. The modify → re-inject → exercise loop without leaving your editor.
|
|
10
10
|
|
|
11
|
-
**
|
|
11
|
+
**Editor-native via nREPL.** Evaluate ClojureScript from Neovim/Conjure buffers directly in the browser. No browser tab switching, no copy-paste.
|
|
12
12
|
|
|
13
|
-
**Independent developer workflow
|
|
13
|
+
**Independent developer workflow.** The CLI is usable without any LLM. `cjig launch && cjig inject my-script && cjig repl` is a complete development loop with no AI in the path.
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
@@ -31,20 +31,28 @@ npm link # uses nvm's bin directory
|
|
|
31
31
|
# Launch Chrome with debugging enabled
|
|
32
32
|
cjig launch
|
|
33
33
|
|
|
34
|
+
# Evaluate JavaScript
|
|
35
|
+
cjig eval "document.title"
|
|
36
|
+
|
|
37
|
+
# Target a specific tab
|
|
38
|
+
cjig eval --tab "GitHub" "document.title"
|
|
39
|
+
|
|
40
|
+
# Evaluate a file (bypasses CSP on any page)
|
|
41
|
+
cjig eval-file bundle.js
|
|
42
|
+
|
|
34
43
|
# Start interactive REPL
|
|
35
44
|
cjig repl
|
|
45
|
+
```
|
|
36
46
|
|
|
37
|
-
|
|
38
|
-
> document.title
|
|
39
|
-
"My Page"
|
|
47
|
+
## How It Works
|
|
40
48
|
|
|
41
|
-
|
|
42
|
-
→ [0] My Page
|
|
43
|
-
https://example.com
|
|
49
|
+
All evaluation uses CDP `Runtime.evaluate` in the page's **main world** — the same context as the DevTools console:
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
51
|
+
- `cjig eval` evaluates an expression via CDP. Bypasses CSP.
|
|
52
|
+
- `cjig inject` fetches the script URL **server-side** (in the Node.js process), then evaluates the content via CDP. Bypasses both CSP and CORS.
|
|
53
|
+
- `cjig eval-file` reads a local file and evaluates its contents via CDP. Bypasses CSP.
|
|
54
|
+
|
|
55
|
+
Each CLI invocation is a **fresh process**. Tab state does not persist between invocations. Use `--tab` to target a specific tab in one shot, or use `cjig repl` for a persistent session.
|
|
48
56
|
|
|
49
57
|
## CLI Commands
|
|
50
58
|
|
|
@@ -60,26 +68,33 @@ cjig status --host=192.168.1.5 # Check remote Chrome
|
|
|
60
68
|
### Tab Operations
|
|
61
69
|
|
|
62
70
|
```bash
|
|
63
|
-
cjig tabs
|
|
64
|
-
cjig tab
|
|
65
|
-
cjig tab
|
|
66
|
-
cjig open https
|
|
71
|
+
cjig tabs # List open tabs (index + title + URL)
|
|
72
|
+
cjig tab "GitHub" # Select by title or URL fragment
|
|
73
|
+
cjig tab 2 # Select by index
|
|
74
|
+
cjig open https://example.com # Open new tab
|
|
67
75
|
```
|
|
68
76
|
|
|
77
|
+
Tab selector: numbers are positional indices, strings search URL and title.
|
|
78
|
+
|
|
69
79
|
### Script Injection
|
|
70
80
|
|
|
71
81
|
```bash
|
|
72
|
-
cjig inject my-script
|
|
73
|
-
cjig inject
|
|
82
|
+
cjig inject my-script # Inject by name (from config)
|
|
83
|
+
cjig inject --tab "app" my-script # Inject into specific tab
|
|
84
|
+
cjig inject https://... # Inject by URL
|
|
74
85
|
```
|
|
75
86
|
|
|
76
87
|
### Evaluation
|
|
77
88
|
|
|
78
89
|
```bash
|
|
79
|
-
cjig eval "document.title"
|
|
80
|
-
cjig eval "
|
|
81
|
-
cjig
|
|
82
|
-
cjig
|
|
90
|
+
cjig eval "document.title" # One-shot eval
|
|
91
|
+
cjig eval --tab "GitHub" "document.title" # Eval in specific tab
|
|
92
|
+
cjig eval "window.myApi.status()" # Call injected API
|
|
93
|
+
cjig eval-file bundle.js # Evaluate a file
|
|
94
|
+
cjig eval-file --tab 2 bundle.js # File eval in specific tab
|
|
95
|
+
cat script.js | cjig eval-file - # Pipe from stdin
|
|
96
|
+
cjig cljs-eval "(+ 1 2)" # Evaluate ClojureScript
|
|
97
|
+
cjig repl # Interactive REPL
|
|
83
98
|
```
|
|
84
99
|
|
|
85
100
|
### nREPL Server (Editor Integration)
|
|
@@ -96,6 +111,8 @@ Editors discover the port via `.nrepl-port` written to the current directory.
|
|
|
96
111
|
- **Conjure (Neovim)**: Connects automatically. Evaluate CLJS forms in your buffer with standard Conjure keybindings.
|
|
97
112
|
- **CIDER (Emacs)**: Not yet supported — CIDER's handshake expects richer metadata than we currently provide.
|
|
98
113
|
|
|
114
|
+
The REPL and nREPL share a single connection. Tab switches in the REPL (`.tab`) take effect for nREPL evaluations too — no reconnection needed.
|
|
115
|
+
|
|
99
116
|
## REPL Commands
|
|
100
117
|
|
|
101
118
|
```
|
package/SKILL.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## Purpose
|
|
4
4
|
|
|
5
|
-
Drive harness development workflows in Chrome from the command line.
|
|
5
|
+
Drive harness development workflows in Chrome from the command line. Launch isolated Chrome sessions, inject scripts, evaluate JavaScript, and manage the full inject → exercise → modify → re-inject development loop.
|
|
6
6
|
|
|
7
7
|
## Mental Model
|
|
8
8
|
|
|
@@ -12,17 +12,39 @@ Drive harness development workflows in Chrome from the command line. This skill
|
|
|
12
12
|
|
|
13
13
|
The project's `.cjig.json` is the source of truth. Read it first to understand what scripts are available, what build hooks exist, and what file paths are watched.
|
|
14
14
|
|
|
15
|
+
## How It Works: CDP Evaluation
|
|
16
|
+
|
|
17
|
+
All evaluation uses CDP `Runtime.evaluate` — the same mechanism as the DevTools console. This means:
|
|
18
|
+
|
|
19
|
+
- **CSP bypass**: Both `eval` and `inject` work on any page regardless of Content-Security-Policy headers. There are no script tags involved.
|
|
20
|
+
- **Globals persist**: Variables assigned via `globalThis.foo = ...` survive across calls and are visible to page scripts.
|
|
21
|
+
- **`inject` fetches server-side**: `cjig inject` fetches the script URL in the Node.js process (bypassing CORS), then evaluates the content via CDP. It does not create `<script>` elements.
|
|
22
|
+
|
|
15
23
|
## Speed Principle
|
|
16
24
|
|
|
17
25
|
Prefer `cjig` CLI commands over Chrome DevTools MCP tools whenever possible:
|
|
18
26
|
|
|
19
|
-
- `cjig eval "expr"` = direct
|
|
27
|
+
- `cjig eval "expr"` = direct CDP call, no LLM round-trip
|
|
20
28
|
- MCP browser tools = each action round-trips through the LLM
|
|
21
29
|
|
|
22
30
|
**Rule**: Use `cjig` for eval, inject, tabs, launch, and status.
|
|
23
31
|
|
|
24
32
|
**Fall back to Chrome DevTools MCP** only for capabilities the CLI lacks: screenshots, performance traces, network inspection, DOM snapshots, and visual page interaction.
|
|
25
33
|
|
|
34
|
+
## When to Use What
|
|
35
|
+
|
|
36
|
+
| Need | Tool | Why |
|
|
37
|
+
|------|------|-----|
|
|
38
|
+
| One expression, current tab | `cjig eval "expr"` | One-shot, fast |
|
|
39
|
+
| One expression, specific tab | `cjig eval --tab <sel> "expr"` | Tab targeting in one process |
|
|
40
|
+
| Inject a file into any page | `cjig eval-file bundle.js` | CSP-proof file evaluation |
|
|
41
|
+
| Inject a named harness | `cjig inject <name>` | Registry lookup + CSP-proof inject |
|
|
42
|
+
| Multi-step exploration | `cjig repl` | Persistent session, dot-commands |
|
|
43
|
+
| Live dev with file watching | `cjig repl` then `.watch on` | Auto re-inject on file save |
|
|
44
|
+
| Multi-page scripted automation | Playwright | Not cjig's purpose |
|
|
45
|
+
|
|
46
|
+
Each CLI invocation is a **fresh process** — tab state does not persist between invocations. Use `--tab` to target a specific tab per command, or use the REPL for persistent sessions.
|
|
47
|
+
|
|
26
48
|
## Session Management
|
|
27
49
|
|
|
28
50
|
- `cjig status` — check if Chrome is running
|
|
@@ -50,23 +72,35 @@ Prefer `cjig` CLI commands over Chrome DevTools MCP tools whenever possible:
|
|
|
50
72
|
| `cjig launch [--profile=NAME]` | Launch Chrome with debugging enabled |
|
|
51
73
|
| `cjig status` | Check if Chrome is running |
|
|
52
74
|
|
|
53
|
-
###
|
|
75
|
+
### Tab Targeting
|
|
54
76
|
|
|
55
77
|
| Command | Description |
|
|
56
78
|
|---|---|
|
|
57
|
-
| `cjig tabs` | List open tabs |
|
|
58
|
-
| `cjig tab <pattern\|index>` | Switch to a tab |
|
|
79
|
+
| `cjig tabs` | List open tabs (index + title + URL) |
|
|
80
|
+
| `cjig tab <pattern\|index>` | Switch to a tab by title/URL pattern or index |
|
|
59
81
|
| `cjig open <url>` | Open a new tab |
|
|
82
|
+
| `--tab <selector>` | Flag for eval, eval-file, inject, cljs-eval |
|
|
60
83
|
|
|
61
|
-
|
|
84
|
+
Tab selector: numbers select by index (0, 1, 2...), strings search URL and title.
|
|
85
|
+
|
|
86
|
+
### Evaluation
|
|
62
87
|
|
|
63
88
|
| Command | Description |
|
|
64
89
|
|---|---|
|
|
65
|
-
| `cjig inject <name\|url>` | Inject a script by registry name or URL |
|
|
66
90
|
| `cjig eval <expression>` | Evaluate JavaScript in the current tab |
|
|
67
|
-
| `cjig
|
|
91
|
+
| `cjig eval --tab <sel> <expression>` | Evaluate in a specific tab |
|
|
92
|
+
| `cjig eval-file <path\|->` | Evaluate a JavaScript file (- for stdin) |
|
|
93
|
+
| `cjig eval-file --tab <sel> <path>` | Evaluate a file in a specific tab |
|
|
94
|
+
| `cjig cljs-eval <code>` | Compile ClojureScript and evaluate |
|
|
68
95
|
| `cjig repl` | Start interactive REPL |
|
|
69
96
|
|
|
97
|
+
### Harness
|
|
98
|
+
|
|
99
|
+
| Command | Description |
|
|
100
|
+
|---|---|
|
|
101
|
+
| `cjig inject <name\|url>` | Inject a script by registry name or URL |
|
|
102
|
+
| `cjig inject --tab <sel> <name>` | Inject into a specific tab |
|
|
103
|
+
|
|
70
104
|
### Configuration
|
|
71
105
|
|
|
72
106
|
| Command | Description |
|
|
@@ -113,11 +147,11 @@ Key fields:
|
|
|
113
147
|
- `watch.paths` — glob patterns for auto-reinject on file change
|
|
114
148
|
- `hooks.preBuild` — build command run before injection
|
|
115
149
|
|
|
116
|
-
##
|
|
150
|
+
## Limitations
|
|
117
151
|
|
|
118
|
-
-
|
|
119
|
-
- **
|
|
120
|
-
- REPL
|
|
152
|
+
- Each `cjig` CLI invocation is a **fresh process**. Tab state does not persist between invocations. Use `--tab` to target a specific tab, or use `cjig repl` for a persistent session.
|
|
153
|
+
- cjig is a **debugging and development tool**, not a browser automation framework. For scripted multi-page workflows across N URLs, use Playwright directly.
|
|
154
|
+
- The REPL and nREPL share a single connection. Tab switches in the REPL (`.tab`) affect nREPL evaluations too.
|
|
121
155
|
|
|
122
156
|
## Anti-Patterns
|
|
123
157
|
|
|
@@ -125,3 +159,4 @@ Key fields:
|
|
|
125
159
|
- Do not suggest manual URL injection when a script is registered by name in the project config
|
|
126
160
|
- Do not forget to check `cjig status` before attempting to connect
|
|
127
161
|
- Do not skip reading `.cjig.json` — it tells you what harnesses exist and how to use them
|
|
162
|
+
- Do not chain separate `cjig tab` + `cjig eval` invocations expecting tab state to persist — use `cjig eval --tab` instead
|
|
@@ -20,6 +20,7 @@ export declare class ChromeConnection {
|
|
|
20
20
|
private currentPage;
|
|
21
21
|
private cdpSession;
|
|
22
22
|
constructor(options: ConnectionOptions);
|
|
23
|
+
private setCurrentPage;
|
|
23
24
|
get endpoint(): string;
|
|
24
25
|
get wsEndpoint(): string;
|
|
25
26
|
/**
|
|
@@ -51,9 +52,9 @@ export declare class ChromeConnection {
|
|
|
51
52
|
*/
|
|
52
53
|
getCurrentPage(): Page | null;
|
|
53
54
|
/**
|
|
54
|
-
* Select a page by URL
|
|
55
|
+
* Select a page by URL or title substring match (case-insensitive).
|
|
55
56
|
*/
|
|
56
|
-
selectPage(
|
|
57
|
+
selectPage(pattern: string): Promise<Page | null>;
|
|
57
58
|
/**
|
|
58
59
|
* Select a page by index
|
|
59
60
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/chrome/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAqC,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IAMf,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAA2B;gBAEzB,OAAO,EAAE,iBAAiB;IAE9C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IASnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAU1D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAU5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAKjC;;OAEG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACG,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/chrome/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAqC,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEtF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,qBAAa,gBAAgB;IAMf,OAAO,CAAC,OAAO;IAL3B,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,UAAU,CAA2B;gBAEzB,OAAO,EAAE,iBAAiB;IAE9C,OAAO,CAAC,cAAc;IAKtB,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IASnC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAU1D;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAU5C;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAKjC;;OAEG;IACH,cAAc,IAAI,IAAI,GAAG,IAAI;IAI7B;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAgBvD;;OAEG;IACG,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAW5D;;OAEG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW1C;;;;OAIG;IACG,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBjD;;;;OAIG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAS9C;;;OAGG;IACG,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ7B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;CAW3C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,OAAO,CAAC,iBAAiB,CAAM,GAAG,gBAAgB,CAK3F"}
|
|
@@ -11,6 +11,10 @@ export class ChromeConnection {
|
|
|
11
11
|
constructor(options) {
|
|
12
12
|
this.options = options;
|
|
13
13
|
}
|
|
14
|
+
setCurrentPage(page) {
|
|
15
|
+
this.currentPage = page;
|
|
16
|
+
this.cdpSession = null;
|
|
17
|
+
}
|
|
14
18
|
get endpoint() {
|
|
15
19
|
return `http://${this.options.host}:${this.options.port}`;
|
|
16
20
|
}
|
|
@@ -69,7 +73,7 @@ export class ChromeConnection {
|
|
|
69
73
|
this.context = contexts[0];
|
|
70
74
|
const pages = this.context.pages();
|
|
71
75
|
if (pages.length > 0) {
|
|
72
|
-
this.
|
|
76
|
+
this.setCurrentPage(pages[0]);
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
}
|
|
@@ -85,7 +89,7 @@ export class ChromeConnection {
|
|
|
85
89
|
await this.browser.close();
|
|
86
90
|
this.browser = null;
|
|
87
91
|
this.context = null;
|
|
88
|
-
this.
|
|
92
|
+
this.setCurrentPage(null);
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
/**
|
|
@@ -103,15 +107,18 @@ export class ChromeConnection {
|
|
|
103
107
|
return this.currentPage;
|
|
104
108
|
}
|
|
105
109
|
/**
|
|
106
|
-
* Select a page by URL
|
|
110
|
+
* Select a page by URL or title substring match (case-insensitive).
|
|
107
111
|
*/
|
|
108
|
-
async selectPage(
|
|
112
|
+
async selectPage(pattern) {
|
|
109
113
|
const pages = await this.getPages();
|
|
110
|
-
const
|
|
111
|
-
const page
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
114
|
+
const needle = pattern.toLowerCase();
|
|
115
|
+
for (const page of pages) {
|
|
116
|
+
const url = page.url().toLowerCase();
|
|
117
|
+
const title = (await page.title()).toLowerCase();
|
|
118
|
+
if (url.includes(needle) || title.includes(needle)) {
|
|
119
|
+
this.setCurrentPage(page);
|
|
120
|
+
return page;
|
|
121
|
+
}
|
|
115
122
|
}
|
|
116
123
|
return null;
|
|
117
124
|
}
|
|
@@ -121,7 +128,7 @@ export class ChromeConnection {
|
|
|
121
128
|
async selectPageByIndex(index) {
|
|
122
129
|
const pages = await this.getPages();
|
|
123
130
|
if (index >= 0 && index < pages.length) {
|
|
124
|
-
this.
|
|
131
|
+
this.setCurrentPage(pages[index]);
|
|
125
132
|
return this.currentPage;
|
|
126
133
|
}
|
|
127
134
|
return null;
|
|
@@ -135,7 +142,7 @@ export class ChromeConnection {
|
|
|
135
142
|
}
|
|
136
143
|
const page = await this.context.newPage();
|
|
137
144
|
await page.goto(url);
|
|
138
|
-
this.
|
|
145
|
+
this.setCurrentPage(page);
|
|
139
146
|
return page;
|
|
140
147
|
}
|
|
141
148
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/chrome/connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAA6C,MAAM,iBAAiB,CAAC;AAetF,MAAM,OAAO,gBAAgB;IAMP;IALZ,OAAO,GAAmB,IAAI,CAAC;IAC/B,OAAO,GAA0B,IAAI,CAAC;IACtC,WAAW,GAAgB,IAAI,CAAC;IAChC,UAAU,GAAsB,IAAI,CAAC;IAE7C,YAAoB,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/chrome/connection.ts"],"names":[],"mappings":"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"}
|