UNPKG

@wdio/electron-utils

Version:

Utilities for WebdriverIO Electron Service

49 lines (39 loc) 1.83 kB
import path from 'node:path'; import { readConfig } from './read.js'; import log from '../log.js'; import { APP_NAME_DETECTION_ERROR } from '../constants.js'; import type { NormalizedReadResult } from 'read-package-up'; import type { ForgeConfig, ForgeBuildInfo } from '@wdio/electron-types'; function forgeBuildInfo(forgeConfig: ForgeConfig, pkg: NormalizedReadResult): ForgeBuildInfo { log.info(`Forge configuration detected: \n${JSON.stringify(forgeConfig)}`); const appName: string = pkg.packageJson.productName || forgeConfig?.packagerConfig?.name || pkg.packageJson.name; if (!appName) { throw new Error(APP_NAME_DETECTION_ERROR); } return { appName, config: forgeConfig, isForge: true, isBuilder: false, }; } export async function getConfig(pkg: NormalizedReadResult): Promise<ForgeBuildInfo | undefined> { const forgePackageJsonConfig = pkg.packageJson.config?.forge; // if config.forge is a string it is a custom config file path const isConfigFilePath = typeof forgePackageJsonConfig === 'string'; const rootDir = path.dirname(pkg.path); let forgeConfig = forgePackageJsonConfig as ForgeConfig; if (!forgePackageJsonConfig || isConfigFilePath) { // if no forge config or a linked file is found in the package.json, attempt to read Forge JS-based config const forgeConfigFileName = isConfigFilePath ? forgePackageJsonConfig : 'forge.config.js'; const forgeConfigPath = path.join(rootDir, forgeConfigFileName); try { log.info(`Reading Forge config file: ${forgeConfigPath}...`); forgeConfig = (await readConfig(forgeConfigFileName, rootDir)).result as ForgeConfig; } catch (_) { log.warn(`Forge config file not found or invalid at ${forgeConfigPath}.`); return undefined; } } return forgeBuildInfo(forgeConfig, pkg); }