// eslint-disable-next-line @typescript-eslint/no-var-requires const fs = require('fs'); // eslint-disable-next-line @typescript-eslint/no-var-requires const path = require('path'); // Define the paths const rootPackageJsonPath = path.join(__dirname, 'package.json'); const pluginsDir = path.join(__dirname, 'src', 'extensions', 'plugins'); const channelsDir = path.join(__dirname, 'src', 'extensions', 'channels'); const helpersDir = path.join(__dirname, 'src', 'extensions', 'helpers'); // Helper function to merge dependencies function mergeDependencies(rootDeps, pluginDeps) { return { ...rootDeps, ...Object.entries(pluginDeps).reduce((acc, [key, version]) => { if (!rootDeps[key]) { acc[key] = version; } return acc; }, {}), }; } // Read the root package.json const rootPackageJson = JSON.parse( fs.readFileSync(rootPackageJsonPath, 'utf-8'), ); // Initialize dependencies if not already present if (!rootPackageJson.dependencies) { rootPackageJson.dependencies = {}; } // Iterate over extension directories [ ...fs.readdirSync(pluginsDir), ...fs.readdirSync(helpersDir), ...fs.readdirSync(channelsDir), ].forEach((pluginFolder) => { const pluginPackageJsonPath = path.join( pluginsDir, pluginFolder, 'package.json', ); if (fs.existsSync(pluginPackageJsonPath)) { const pluginPackageJson = JSON.parse( fs.readFileSync(pluginPackageJsonPath, 'utf-8'), ); // Merge extension dependencies into root dependencies if (pluginPackageJson.dependencies) { rootPackageJson.dependencies = mergeDependencies( rootPackageJson.dependencies, pluginPackageJson.dependencies, ); } // Merge extension devDependencies into root devDependencies if (pluginPackageJson.devDependencies) { rootPackageJson.devDependencies = mergeDependencies( rootPackageJson.devDependencies, pluginPackageJson.devDependencies, ); } } }); // Write the updated root package.json fs.writeFileSync( rootPackageJsonPath, JSON.stringify(rootPackageJson, null, 2), 'utf-8', ); // eslint-disable-next-line no-console console.log( 'Dependencies from extensions have been merged into the root package.json', );