Skip to content

Commit f860e3d

Browse files
committed
refactor: use custom implementation of read-package-up
- Added `find-up` dependency version 6.3.0 to `pnpm-lock.yaml` and `package.json`. - Updated `@electron/asar` dependency to version 3.4.1 in `pnpm-lock.yaml`. - Refactored imports in `launcher.ts`, `pathResolver.ts`, and other files to use the new `NormalizedReadResult` type from `package.ts` instead of `read-package-up`.
1 parent d5b1784 commit f860e3d

17 files changed

Lines changed: 187 additions & 24 deletions

File tree

packages/electron-service/src/launcher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ import {
1515

1616
const log = createLogger('wdio-electron-service', 'launcher');
1717

18+
import type { NormalizedReadResult } from '@wdio/native-utils';
1819
import { readPackageUp } from '@wdio/native-utils';
1920
import type { Capabilities, Options, Services } from '@wdio/types';
2021
import getPort from 'get-port';
21-
import type { NormalizedReadResult } from 'read-package-up';
2222
import { SevereServiceError } from 'webdriverio';
2323
import { applyApparmorWorkaround } from './apparmor.js';
2424
import {

packages/electron-service/src/pathResolver.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { access } from 'node:fs/promises';
22
import path from 'node:path';
3-
import { getAppBuildInfo, getBinaryPath, getElectronVersion, readPackageUp } from '@wdio/native-utils';
4-
import type { NormalizedReadResult } from 'read-package-up';
3+
import {
4+
getAppBuildInfo,
5+
getBinaryPath,
6+
getElectronVersion,
7+
type NormalizedReadResult,
8+
readPackageUp,
9+
} from '@wdio/native-utils';
510

611
/**
712
* Validate that a file path exists and is accessible

packages/electron-service/test/pathResolver.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { access } from 'node:fs/promises';
2-
import type { NormalizedReadResult } from 'read-package-up';
2+
import type { NormalizedReadResult } from '@wdio/native-utils';
33
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
44
import { resolveAppPaths, validateFilePath } from '../src/pathResolver.js';
55

packages/native-types/src/electron.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,18 @@ import type { Mock, MockResultType, fn as vitestFn } from '@wdio/native-spy';
44
import type { Capabilities, Options } from '@wdio/types';
55
import type { ArchType } from 'builder-util';
66
import type * as Electron from 'electron';
7-
import type { PackageJson } from 'read-package-up';
7+
8+
export type PackageJson = {
9+
name?: string;
10+
version?: string;
11+
description?: string;
12+
main?: string;
13+
type?: string;
14+
dependencies?: Record<string, string>;
15+
devDependencies?: Record<string, string>;
16+
[key: string]: unknown;
17+
};
18+
819
import type {
920
AbstractFn,
1021
BaseServiceGlobalOptions,
@@ -433,4 +444,4 @@ export interface ElectronBrowserExtension extends BrowserBase {
433444
}
434445

435446
// Re-export types needed for global declarations
436-
export type { Electron, PackageJson, vitestFn };
447+
export type { Electron, vitestFn };

packages/native-types/src/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ export type {
4141
WdioElectronWindowObj,
4242
WebdriverClientFunc,
4343
} from './electron.js';
44+
// Package.json types
45+
export type {
46+
NormalizedPackageJson,
47+
NormalizedReadResult,
48+
ReadPackageUpOptions,
49+
} from './package.js';
4450
// Shared types
4551
export type {
4652
AbstractFn,
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
export type NormalizedPackageJson = {
2+
name?: string;
3+
version?: string;
4+
description?: string;
5+
main?: string;
6+
type?: string;
7+
dependencies?: Record<string, string>;
8+
devDependencies?: Record<string, string>;
9+
build?: {
10+
extends?: string | string[] | null;
11+
productName?: string;
12+
directories?: { output?: string };
13+
executableName?: string;
14+
[key: string]: unknown;
15+
};
16+
forge?: unknown;
17+
exports?: Record<string, unknown>;
18+
module?: string;
19+
[key: string]: unknown;
20+
};
21+
22+
export type NormalizedReadResult = {
23+
packageJson: NormalizedPackageJson;
24+
path: string;
25+
};
26+
27+
export type ReadPackageUpOptions = {
28+
cwd?: string | URL;
29+
};

packages/native-utils/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"debug": "^4.4.3",
4444
"deepmerge-ts": "^7.1.5",
4545
"esbuild": "^0.27.3",
46+
"find-up": "^6.3.0",
4647
"find-versions": "^6.0.0",
4748
"json5": "^2.2.3",
4849
"read-package-up": "^12.0.0",

packages/native-utils/src/appBuildInfo.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import type { AppBuildInfo } from '@wdio/native-types';
2-
import type { NormalizedReadResult } from 'read-package-up';
32
import { getConfig as getBuilderConfig } from './config/builder.js';
43
import { getConfig as getForgeConfig } from './config/forge.js';
54
import {
@@ -9,6 +8,7 @@ import {
98
MULTIPLE_BUILD_TOOL_WARNING,
109
} from './constants.js';
1110
import { createLogger } from './log.js';
11+
import type { NormalizedReadResult } from './package.js';
1212

1313
const log = createLogger('electron-service', 'config');
1414

packages/native-utils/src/config/builder.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import path from 'node:path';
22
import type { BuilderBuildInfo, BuilderConfig } from '@wdio/native-types';
33
import { deepmerge as deepMerge } from 'deepmerge-ts';
4-
import type { NormalizedReadResult } from 'read-package-up';
54
import { APP_NAME_DETECTION_ERROR } from '../constants.js';
65
import { createLogger } from '../log.js';
6+
import type { NormalizedReadResult } from '../package.js';
77
import { readConfig } from './read.js';
88

99
const log = createLogger('electron-service', 'config');
@@ -13,7 +13,7 @@ export async function getConfig(
1313
customConfigPath?: string,
1414
): Promise<BuilderBuildInfo | undefined> {
1515
const rootDir = path.dirname(pkg.path);
16-
let builderConfig: BuilderConfig = pkg.packageJson.build;
16+
let builderConfig: BuilderConfig | undefined = pkg.packageJson.build;
1717
let configDir = rootDir;
1818

1919
// If custom config path provided, use it directly
@@ -82,7 +82,7 @@ function getBuilderConfigCandidates(configFileName = 'electron-builder') {
8282

8383
function builderBuildInfo(builderConfig: BuilderConfig, pkg: NormalizedReadResult): BuilderBuildInfo {
8484
log.debug(`Builder configuration detected: \n${JSON.stringify(builderConfig)}`);
85-
const appName: string = pkg.packageJson.productName || builderConfig?.productName || pkg.packageJson.name;
85+
const appName = ((pkg.packageJson.productName || builderConfig?.productName || pkg.packageJson.name) as string) ?? '';
8686

8787
if (!appName) {
8888
throw new Error(APP_NAME_DETECTION_ERROR);

packages/native-utils/src/config/forge.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import path from 'node:path';
22
import type { ForgeBuildInfo, ForgeConfig } from '@wdio/native-types';
3-
import type { NormalizedReadResult } from 'read-package-up';
43
import { APP_NAME_DETECTION_ERROR } from '../constants.js';
54
import { createLogger } from '../log.js';
5+
import type { NormalizedReadResult } from '../package.js';
66
import { readConfig } from './read.js';
77

88
const log = createLogger('electron-service', 'config');
99

1010
function forgeBuildInfo(forgeConfig: ForgeConfig, pkg: NormalizedReadResult): ForgeBuildInfo {
1111
log.debug(`Forge configuration detected: \n${JSON.stringify(forgeConfig)}`);
12-
const appName: string = pkg.packageJson.productName || forgeConfig?.packagerConfig?.name || pkg.packageJson.name;
12+
const appName =
13+
((pkg.packageJson.productName || forgeConfig?.packagerConfig?.name || pkg.packageJson.name) as string) ?? '';
1314

1415
if (!appName) {
1516
throw new Error(APP_NAME_DETECTION_ERROR);
@@ -24,7 +25,8 @@ function forgeBuildInfo(forgeConfig: ForgeConfig, pkg: NormalizedReadResult): Fo
2425
}
2526

2627
export async function getConfig(pkg: NormalizedReadResult): Promise<ForgeBuildInfo | undefined> {
27-
const forgePackageJsonConfig = pkg.packageJson.config?.forge;
28+
const pkgJson = pkg.packageJson as { config?: { forge?: unknown }; productName?: string };
29+
const forgePackageJsonConfig = pkgJson.config?.forge;
2830
// if config.forge is a string it is a custom config file path
2931
const isConfigFilePath = typeof forgePackageJsonConfig === 'string';
3032

0 commit comments

Comments
 (0)