"use strict"; // NOTE: This script must be run _after_ build-data.js const path = require("path"); const { addElectronSupportFromChromium } = require("./chromium-to-electron"); const { getLowestImplementedVersion, environments, writeFile, } = require("./utils-build-data"); const data = require("./data/plugin-bugfixes"); const pluginFeatures = require("./data/plugin-features"); const generatedTargets = {}; const overlappingPlugins = {}; const allReplacedFeatures = {}; const has = Function.call.bind(Object.hasOwnProperty); for (const [plugin, { replaces, features }] of Object.entries(data)) { if (!has(overlappingPlugins, replaces)) { overlappingPlugins[replaces] = []; generatedTargets[replaces] = {}; allReplacedFeatures[replaces] = []; } generatedTargets[plugin] = {}; allReplacedFeatures[replaces].push(...features); overlappingPlugins[replaces].push(plugin); for (const env of environments) { const supportedWithBugfix = getLowestImplementedVersion({ features }, env); if (supportedWithBugfix) { generatedTargets[plugin][env] = supportedWithBugfix; } } addElectronSupportFromChromium(generatedTargets[plugin]); } for (const [replaced, features] of Object.entries(allReplacedFeatures)) { let replacedFeatures = pluginFeatures[replaced]; if ( typeof replacedFeatures === "object" && !Array.isArray(replacedFeatures) ) { replacedFeatures = replacedFeatures.features; } for (const env of environments) { const stillNotSupported = getLowestImplementedVersion( { features: replacedFeatures }, env, name => features.some(feat => name.includes(feat)) ); if (stillNotSupported) { generatedTargets[replaced][env] = stillNotSupported; } } addElectronSupportFromChromium(generatedTargets[replaced]); } for (const [filename, data] of [ ["plugin-bugfixes", generatedTargets], ["overlapping-plugins", overlappingPlugins], ]) { const dataPath = path.join(__dirname, `../data/${filename}.json`); if (!writeFile(data, dataPath, filename)) { process.exitCode = 1; break; } }