UNPKG

appium

Version:

Automation for Apps.

65 lines (57 loc) 1.82 kB
import {fs} from '@appium/support'; import {isPackageChanged} from 'package-changed'; import path from 'path'; import {PKG_HASHFILE_RELATIVE_PATH} from '../constants'; import log from '../logger'; /** * Determines if extensions have changed, and updates a hash the `package.json` in `appiumHome` if so. * * If they have, we need to sync them with the `extensions.yaml` manifest. * * _Warning: this makes a blocking call to `writeFileSync`._ * @param {string} appiumHome * @returns {Promise<boolean>} `true` if `package.json` `appiumHome` changed */ export async function packageDidChange(appiumHome) { const hashFilename = path.join(appiumHome, PKG_HASHFILE_RELATIVE_PATH); // XXX: the types in `package-changed` seem to be wrong. /** @type {boolean} */ let isChanged; /** @type {() => void} */ let writeHash; /** @type {string} */ let hash; /** @type {string|undefined} */ let oldHash; // first mkdirp the target dir. const hashFilenameDir = path.dirname(hashFilename); log.debug(`Creating hash file directory: ${hashFilenameDir}`); try { await fs.mkdirp(hashFilenameDir); } catch (err) { throw new Error( `Appium could not create the directory for hash file: ${hashFilenameDir}. Original error: ${err.message}` ); } try { ({isChanged, writeHash, oldHash, hash} = await isPackageChanged({ cwd: appiumHome, hashFilename: PKG_HASHFILE_RELATIVE_PATH, })); } catch { return true; } if (isChanged) { try { writeHash(); log.debug( `Updated hash of ${appiumHome}/package.json from: ${oldHash ?? '(none)'} to: ${hash}` ); } catch (err) { throw new Error( `Appium could not write hash file: ${hashFilenameDir}. Original error: ${err.message}` ); } } return isChanged; }