const {writeFile, readFile} = require('fs/promises'); const {execSync} = require('child_process'); const electron = require('electron'); const path = require('path'); /** * 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(`${electron} -p "JSON.stringify(process.versions)"`, { env: {ELECTRON_RUN_AS_NODE: '1'}, encoding: 'utf-8', }); return JSON.parse(output); } function formattedJSON(obj) { return JSON.stringify(obj, null, 2) + '\n'; } function updateVendors() { const electronRelease = getVendors(); const nodeMajorVersion = electronRelease.node.split('.')[0]; const chromeMajorVersion = electronRelease.v8.split('.')[0] + electronRelease.v8.split('.')[1]; const packageJSONPath = path.resolve(process.cwd(), 'package.json'); return Promise.all([ writeFile( './electron-vendors.config.json', formattedJSON({ chrome: chromeMajorVersion, node: nodeMajorVersion, }), ), readFile(packageJSONPath) .then(JSON.parse) .then(packageJSON => { if (!packageJSON || !Array.isArray(packageJSON.browserslist)) { throw new Error(`Can't find browserslist in ${packageJSONPath}`); } packageJSON.browserslist = [`Chrome ${chromeMajorVersion}`]; return writeFile(packageJSONPath, formattedJSON(packageJSON)); }), ]); } updateVendors().catch(err => { console.error(err); process.exit(1); });