Skip to content

Commit a626a73

Browse files
authored
refactor: convert to class (#174)
* change to class * style: simplify path function * move options to object * fix merge * add comment * revert move out * style: comment * comment * chire: comment * move funcs * remove unneeded class variables * fix removeMouseHelper * style: comment
1 parent 9824a49 commit a626a73

5 files changed

Lines changed: 554 additions & 531 deletions

File tree

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,14 +65,14 @@ const route = path(from, to, { useTimestamps: true })
6565
Usage with puppeteer:
6666

6767
```js
68-
import { createCursor } from "ghost-cursor"
68+
import { GhostCursor } from "ghost-cursor"
6969
import puppeteer from "puppeteer"
7070

7171
const run = async (url) => {
7272
const selector = "#sign-up button"
7373
const browser = await puppeteer.launch({ headless: false });
7474
const page = await browser.newPage()
75-
const cursor = createCursor(page)
75+
const cursor = new GhostCursor(page)
7676
await page.goto(url)
7777
await page.waitForSelector(selector)
7878
await cursor.click(selector)
@@ -97,9 +97,9 @@ hovering over the exact center of the element.
9797
9898
## Methods
9999

100-
#### `createCursor(page: puppeteer.Page, start?: Vector, performRandomMoves?: boolean, defaultOptions?: DefaultOptions, visible?: boolean = false): GhostCursor`
100+
#### `new GhostCursor(page: puppeteer.Page, { start?: Vector, performRandomMoves?: boolean, defaultOptions?: DefaultOptions, visible?: boolean = false }): GhostCursor`
101101

102-
Creates the ghost cursor. Returns cursor action functions described below.
102+
Creates the ghost cursor that contains the action functions described below.
103103

104104
- **page:** Puppeteer `page`.
105105
- **start (optional):** Cursor start position. Default is `{ x: 0, y: 0 }`.

src/__debug__/browser-debug.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type ClickOptions, createCursor } from '../spoof'
1+
import { type ClickOptions, GhostCursor } from '../spoof'
22
import { join } from 'path'
33
import { promises as fs } from 'fs'
44
import puppeteer from 'puppeteer'
@@ -22,13 +22,16 @@ const cursorDefaultOptions = {
2222
puppeteer.launch({ headless: false }).then(async (browser) => {
2323
const page = await browser.newPage()
2424

25-
const cursor = createCursor(page, undefined, undefined, {
26-
move: cursorDefaultOptions,
27-
moveTo: cursorDefaultOptions,
28-
click: cursorDefaultOptions,
29-
scroll: cursorDefaultOptions,
30-
getElement: cursorDefaultOptions
31-
}, true)
25+
const cursor = new GhostCursor(page, {
26+
visible: true,
27+
defaultOptions: {
28+
move: cursorDefaultOptions,
29+
moveTo: cursorDefaultOptions,
30+
click: cursorDefaultOptions,
31+
scroll: cursorDefaultOptions,
32+
getElement: cursorDefaultOptions
33+
}
34+
})
3235

3336
const html = await fs.readFile(join(__dirname, 'custom-page.html'), 'utf8')
3437

@@ -41,6 +44,8 @@ puppeteer.launch({ headless: false }).then(async (browser) => {
4144

4245
await cursor.click('#box2')
4346

47+
await cursor.removeMouseHelper()
48+
4449
await cursor.click('#box3')
4550

4651
await cursor.click('#box1')

src/__test__/spoof.spec.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import type { ElementHandle, Page } from 'puppeteer'
2-
import { type ClickOptions, createCursor, GhostCursor } from '../spoof'
2+
import { type ClickOptions, GhostCursor } from '../spoof'
33
import { join } from 'path'
44
import { readFileSync } from 'fs'
55
import { installMouseHelper } from '../mouse-helper'
@@ -35,10 +35,12 @@ describe('Mouse movements', () => {
3535
waitUntil: 'networkidle2'
3636
})
3737

38-
cursor = createCursor(page, undefined, undefined, {
39-
move: cursorDefaultOptions,
40-
click: cursorDefaultOptions,
41-
moveTo: cursorDefaultOptions
38+
cursor = new GhostCursor(page, {
39+
defaultOptions: {
40+
move: cursorDefaultOptions,
41+
click: cursorDefaultOptions,
42+
moveTo: cursorDefaultOptions
43+
}
4244
})
4345
})
4446

src/mouse-helper.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import type { Page } from 'puppeteer'
22

3+
interface WindowWithMouseHelper extends Window {
4+
removeMouseHelper?: () => void
5+
}
6+
37
/**
48
* This injects a box into the page that moves with the mouse.
59
* Useful for debugging.
@@ -8,8 +12,6 @@ import type { Page } from 'puppeteer'
812
*/
913
export async function installMouseHelper (page: Page):
1014
Promise<{ removeMouseHelper: () => Promise<void> }> {
11-
let _removeMouseHelper: undefined | (() => void)
12-
1315
const { identifier: evaluateOnNewDocumentId } = await page.evaluateOnNewDocument(() => {
1416
const attachListener = (): void => {
1517
const box = document.createElement('p-mouse-pointer')
@@ -99,7 +101,7 @@ Promise<{ removeMouseHelper: () => Promise<void> }> {
99101
document.addEventListener('mouseleave', onMouseLeave, true)
100102
document.addEventListener('mouseenter', onMouseEnter, true)
101103

102-
_removeMouseHelper = () => {
104+
;(window as WindowWithMouseHelper).removeMouseHelper = () => {
103105
document.removeEventListener('mousemove', onMouseMove, true)
104106
document.removeEventListener('mousedown', onMouseDown, true)
105107
document.removeEventListener('mouseup', onMouseUp, true)
@@ -118,11 +120,9 @@ Promise<{ removeMouseHelper: () => Promise<void> }> {
118120
})
119121

120122
async function removeMouseHelper (): Promise<void> {
121-
if (_removeMouseHelper !== undefined) {
122-
await page.evaluate(() => {
123-
_removeMouseHelper?.()
124-
})
125-
}
123+
await page.evaluate(() => {
124+
;(window as WindowWithMouseHelper).removeMouseHelper?.()
125+
})
126126

127127
await page.removeScriptToEvaluateOnNewDocument(evaluateOnNewDocumentId)
128128
}

0 commit comments

Comments
 (0)