UNPKG

@wdio/electron-utils

Version:

Utilities for WebdriverIO Electron Service

65 lines (55 loc) 2.06 kB
import path from 'node:path'; import fs from 'node:fs/promises'; import log from './log.js'; import { PNPM_CATALOG_PREFIX, PNPM_WORKSPACE_YAML } from './constants.js'; type PnpmWorkspace = { catalog?: { [key: string]: string }; catalogs?: { [key: string]: { [key: string]: string } }; }; let _projectDir: string | undefined; let pnpmWorkspace: PnpmWorkspace | undefined; export async function findPnpmCatalogVersion(pkgName: string, pkgVersion: string, projectDir?: string) { if (!projectDir) { return undefined; } // Determine catalog names const electronCatalogName = pkgVersion?.split(PNPM_CATALOG_PREFIX)[1]?.trim(); log.debug(`Locating ${PNPM_WORKSPACE_YAML}...`); try { // Traverse up the directory tree to find pnpm-workspace.yaml let currentDir = projectDir; let workspaceYamlPath; let yamlContent; if (!pnpmWorkspace || _projectDir !== projectDir) { _projectDir = projectDir; while (currentDir !== path.parse(currentDir).root) { workspaceYamlPath = path.join(currentDir, PNPM_WORKSPACE_YAML); try { yamlContent = await fs.readFile(workspaceYamlPath, 'utf8'); log.debug(`Found ${PNPM_WORKSPACE_YAML} at ${workspaceYamlPath}`); break; } catch (_e) { // Move up one directory currentDir = path.dirname(currentDir); } } if (!yamlContent) { return undefined; } pnpmWorkspace = (await import('yaml')).parse(yamlContent) as PnpmWorkspace; } // Handle named catalog if (electronCatalogName && pnpmWorkspace.catalogs?.[electronCatalogName]?.[pkgName]) { return pnpmWorkspace.catalogs[electronCatalogName][pkgName]; } // Handle default catalog if (pkgVersion === PNPM_CATALOG_PREFIX && pnpmWorkspace.catalog?.[pkgName]) { return pnpmWorkspace.catalog[pkgName]; } return undefined; } catch (error) { // Gracefully handle other errors log.debug(`Error finding pnpm workspace: ${(error as Error).message}`); return undefined; } }