import { execSync } from 'child_process'; import { writeFile } from 'fs/promises'; import { join } from 'path'; import electronPath from 'electron'; import fileURLToDirname from '../config/fileURLToDirname.js'; const thisDir = fileURLToDirname(import.meta.url); /** * Returns versions of electron vendors * The performance of this feature is very poor and can be improved * @see https://github.com/electron/electron/issues/28006 * * @returns {NodeJS.ProcessVersions} */ function getVendors() { const output = execSync( `${electronPath.toString()} -p "JSON.stringify(process.versions)"`, { env: { ELECTRON_RUN_AS_NODE: '1' }, encoding: 'utf-8', }, ); // eslint-disable-next-line @typescript-eslint/no-unsafe-return -- Read untyped output. return JSON.parse(output); } /** * Generates the `.browserlistrc` and `.electron-vendors.cache.json` files. * * @returns Promise */ function updateVendors() { const electronRelease = getVendors(); const nodeMajorVersion = electronRelease.node.split('.')[0]; const chromeMajorVersion = electronRelease.v8.split('.')[0] + electronRelease.v8.split('.')[1]; const browserslistrcPath = join(thisDir, '../.browserslistrc'); return Promise.all([ writeFile( join(thisDir, '../.electron-vendors.cache.json'), `${JSON.stringify( { chrome: chromeMajorVersion, node: nodeMajorVersion, }, null, 2, )}\n`, ), writeFile(browserslistrcPath, `Chrome ${chromeMajorVersion}\n`, 'utf8'), ]); } updateVendors().catch((err) => { console.error(err); process.exit(1); });