Skip to content

Commit fd54dec

Browse files
authored
chore: drop lodash usage
fix: `HtmlDriver` prefix in logs
1 parent fc38ac5 commit fd54dec

File tree

9 files changed

+830
-660
lines changed

9 files changed

+830
-660
lines changed

.github/workflows/nodejs.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ jobs:
2020
run: npm ci
2121
- name: Build
2222
run: npm run build
23-
- name: Install HTML driver
24-
run: npx appium driver install --source local "$(pwd)"
2523
- name: Run Appium server
2624
run: |
2725
npx appium server &

npm-shrinkwrap.json

Lines changed: 778 additions & 618 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@
3636
"mainClass": "Driver"
3737
},
3838
"dependencies": {
39-
"@appium/base-driver": "^9.4.4",
39+
"@appium/base-driver": "^9.5.0",
4040
"chrome-remote-interface": "^0.33.0",
4141
"express": "^4.18.2",
42-
"socket.io": "^4.7.2"
42+
"socket.io": "^4.7.3"
4343
},
4444
"devDependencies": {
45-
"@appium/types": "^0.15.0",
45+
"@appium/types": "^0.16.0",
4646
"@rollup/plugin-commonjs": "^25.0.7",
4747
"@rollup/plugin-node-resolve": "^15.2.3",
4848
"@rollup/plugin-terser": "^0.4.4",
@@ -53,20 +53,18 @@
5353
"@types/chrome-remote-interface": "^0.31.14",
5454
"@types/cssesc": "^3.0.2",
5555
"@types/express": "^4.17.21",
56-
"@types/lodash-es": "^4.17.12",
5756
"@types/mocha": "^10.0.6",
5857
"chai": "^4.3.10",
5958
"chai-as-promised": "^7.1.1",
6059
"chai-like": "^1.1.1",
6160
"chai-things": "^0.2.0",
6261
"cssesc": "^3.0.0",
63-
"lodash-es": "^4.17.21",
6462
"mocha": "^10.2.0",
6563
"playwright-chromium": "^1.40.1",
66-
"rollup": "^4.9.1",
64+
"rollup": "^4.9.4",
6765
"rollup-plugin-typescript2": "^0.36.0",
6866
"scroll-into-view-if-needed": "^3.1.0",
69-
"socket.io-client": "^4.7.2",
67+
"socket.io-client": "^4.7.3",
7068
"tsx": "^4.7.0",
7169
"typescript": "^5.3.3",
7270
"uuid": "^9.0.1",

rollup.config.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export default [
2020
plugins: [
2121
nodeResolve(),
2222
typescript(),
23-
terser(),
23+
terser({ mangle: false }),
2424
],
2525
},
2626
{

src/client/commands/execute.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
import { cloneDeepWith, has, isElement } from 'lodash-es';
21
import { JavaScriptError } from '../errors/JavaScriptError.js';
3-
import { fromWebDriverElement, toWebDriverElement, WEB_ELEMENT_IDENTIFIER } from '../helpers/Element.js';
2+
import { fromWebDriver, toWebDriver } from '../helpers/WebDriver.js';
43

54
export function execute(script: string, args: unknown[]): unknown {
6-
const normalizedArgs = cloneDeepWith(args, (value) => {
7-
if (has(value, WEB_ELEMENT_IDENTIFIER)) {
8-
return fromWebDriverElement(value[WEB_ELEMENT_IDENTIFIER]);
9-
}
10-
});
5+
args = fromWebDriver(args);
116

127
try {
13-
let result = new Function(script)(...normalizedArgs);
14-
15-
return cloneDeepWith(result, (value) => {
16-
if (isElement(value)) {
17-
return toWebDriverElement(value);
18-
}
19-
});
8+
return toWebDriver(new Function(script)(...args));
209
} catch (e) {
2110
throw JavaScriptError(e instanceof Error ? e.message : JSON.stringify(e));
2211
}

src/client/commands/executeAsync.ts

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,15 @@
1-
import { cloneDeepWith, has, isElement } from 'lodash-es';
21
import { JavaScriptError } from '../errors/JavaScriptError.js';
3-
import { fromWebDriverElement, toWebDriverElement, WEB_ELEMENT_IDENTIFIER } from '../helpers/Element.js';
2+
import { fromWebDriver, toWebDriver } from '../helpers/WebDriver.js';
43

54
export async function executeAsync(script: string, args: unknown[]): Promise<unknown> {
6-
const normalizedArgs = cloneDeepWith(args, (value) => {
7-
if (has(value, WEB_ELEMENT_IDENTIFIER)) {
8-
return fromWebDriverElement(value[WEB_ELEMENT_IDENTIFIER]);
9-
}
10-
});
5+
args = fromWebDriver(args);
116

127
try {
13-
let result = await new Promise<any>((resolve) => {
14-
return new Function(script)(...normalizedArgs, resolve);
15-
});
16-
17-
return cloneDeepWith(result, (value) => {
18-
if (isElement(value)) {
19-
return toWebDriverElement(value);
20-
}
21-
});
8+
return toWebDriver(
9+
await new Promise<any>((resolve) => {
10+
return new Function(script)(...args, resolve);
11+
})
12+
);
2213
} catch (e) {
2314
throw JavaScriptError(e instanceof Error ? e.message : JSON.stringify(e));
2415
}

src/client/helpers/Element.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function fromWebDriverElement(id: string | WebDriverElement): HTMLElement
1616
return element;
1717
}
1818

19-
export function toWebDriverElement(element: Element): WebDriverElement {
19+
export function toWebDriverElement(element: Node): WebDriverElement {
2020
for (const [id, candidate] of Object.entries(ELEMENTS)) {
2121
if (candidate === element) {
2222
return { [WEB_ELEMENT_IDENTIFIER]: id };

src/client/helpers/WebDriver.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import type { Element as WebDriverElement } from '@appium/types';
2+
import {
3+
WEB_ELEMENT_IDENTIFIER,
4+
fromWebDriverElement,
5+
toWebDriverElement,
6+
} from './Element';
7+
8+
export function toWebDriver(value: unknown): any {
9+
return typeof value === 'object'
10+
? JSON.parse(JSON.stringify(value, toWebDriverReplacer))
11+
: value;
12+
}
13+
14+
export function fromWebDriver(value: unknown): any {
15+
return typeof value === 'object'
16+
? JSON.parse(JSON.stringify(value), fromWebDriverReplacer)
17+
: value;
18+
}
19+
20+
function toWebDriverReplacer(_: string, value: unknown): unknown {
21+
if (value instanceof Node) {
22+
return toWebDriverElement(value);
23+
} else {
24+
return value;
25+
}
26+
}
27+
28+
function fromWebDriverReplacer(_: string, value: unknown): unknown {
29+
if (value && typeof value === 'object' && WEB_ELEMENT_IDENTIFIER in value) {
30+
return fromWebDriverElement(value as WebDriverElement);
31+
} else {
32+
return value;
33+
}
34+
}

test/setWindowRect.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { HOME_PAGE, inline, Mode, MODE, startBrowser } from './_base.js';
33
describe('setWindowRect', () => {
44
const { driver } = startBrowser({ headless: false });
55
const rect = { x: 100, y: 200, width: 800, height: 600 };
6-
const newRect = { x: 200, y: 400, width: 1280, height: 720 };
6+
const newRect = { x: 150, y: 250, width: 1280, height: 720 };
77

88
it('should set window rect', async () => {
99
await driver.setWindowRect(rect.x, rect.y, rect.width, rect.height)

0 commit comments

Comments
 (0)