From 15dab96cdbd8ba518d9a7104f028f6dd834fd7f7 Mon Sep 17 00:00:00 2001 From: Mykola Mokhnach Date: Sat, 25 Apr 2026 20:44:23 +0200 Subject: [PATCH] feat: Ditch lodash --- lib/devicectl.ts | 30 +++++++++++++++--------------- lib/mixins/process.ts | 7 ++++--- package.json | 2 -- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/lib/devicectl.ts b/lib/devicectl.ts index a1013be..dd41593 100644 --- a/lib/devicectl.ts +++ b/lib/devicectl.ts @@ -1,5 +1,4 @@ import {exec, SubProcess} from 'teen_process'; -import _ from 'lodash'; import logger from '@appium/logger'; import type {DevicectlOptions, ExecuteOptions, ExecuteResult} from './types'; import * as processMixins from './mixins/process'; @@ -21,6 +20,19 @@ type SudoUser = {uid: number; gid: number}; export class Devicectl { /** The unique device identifier */ public readonly udid: string; + + sendMemoryWarning = processMixins.sendMemoryWarning; + sendSignalToProcess = processMixins.sendSignalToProcess; + launchApp = processMixins.launchApp; + + listProcesses = infoMixins.listProcesses; + listApps = infoMixins.listApps; + + listFiles = copyMixins.listFiles; + pullFile = copyMixins.pullFile; + + listDevices = listMixins.listDevices; + private readonly preferNonRootWhenSudo: boolean; private readonly sudoUser: SudoUser | null; @@ -58,7 +70,7 @@ export class Devicectl { const finalArgs = ['devicectl', ...subcommand, ...(noDevice ? [] : ['--device', this.udid])]; - if (subcommandOptions && !_.isEmpty(subcommandOptions)) { + if (subcommandOptions && subcommandOptions.length > 0) { finalArgs.push( ...(Array.isArray(subcommandOptions) ? subcommandOptions : [subcommandOptions]), ); @@ -81,7 +93,7 @@ export class Devicectl { const execOpts = { ...userOpts, - ...(_.isNumber(timeout) ? {timeout} : {}), + ...(typeof timeout === 'number' ? {timeout} : {}), }; const result = await exec(XCRUN, finalArgs, execOpts); @@ -95,18 +107,6 @@ export class Devicectl { } } - sendMemoryWarning = processMixins.sendMemoryWarning; - sendSignalToProcess = processMixins.sendSignalToProcess; - launchApp = processMixins.launchApp; - - listProcesses = infoMixins.listProcesses; - listApps = infoMixins.listApps; - - listFiles = copyMixins.listFiles; - pullFile = copyMixins.pullFile; - - listDevices = listMixins.listDevices; - private resolveSudoUser(): SudoUser | null { if (!process.geteuid || process.geteuid() !== 0) { return null; diff --git a/lib/mixins/process.ts b/lib/mixins/process.ts index 0dd3ddb..46a5e4d 100644 --- a/lib/mixins/process.ts +++ b/lib/mixins/process.ts @@ -1,4 +1,3 @@ -import _ from 'lodash'; import type {LaunchAppOptions} from '../types'; import type {Devicectl} from '../devicectl'; @@ -42,10 +41,12 @@ export async function launchApp( subcommandOptions.push('--terminate-existing'); } - if (!_.isEmpty(env)) { + if (env && Object.keys(env).length > 0) { subcommandOptions.push( '--environment-variables', - JSON.stringify(_.mapValues(env, (v) => _.toString(v))), + JSON.stringify( + Object.fromEntries(Object.entries(env).map(([key, value]) => [key, String(value)])), + ), ); } diff --git a/package.json b/package.json index a10e1c2..7e1f0e6 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ ], "dependencies": { "@appium/logger": "^2.0.0-rc.1", - "lodash": "^4.2.1", "teen_process": "^4.1.0" }, "scripts": { @@ -63,7 +62,6 @@ "@semantic-release/changelog": "^6.0.1", "@semantic-release/git": "^10.0.1", "@types/chai": "^5.2.3", - "@types/lodash": "^4.14.196", "@types/mocha": "^10.0.1", "@types/node": "^25.0.3", "chai": "^6.0.0",