scripts/bind_package_dependencies.js (40 lines of code) (raw):
/**
* @license
* Copyright 2025 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
import fs from 'node:fs';
import path from 'node:path';
import _ from 'lodash';
function bindPackageDependencies() {
const scriptDir = process.cwd();
const currentPkgJsonPath = path.join(scriptDir, 'package.json');
const currentPkg = JSON.parse(fs.readFileSync(currentPkgJsonPath));
// assume packages are all under /<repo_root>/packages/
const packagesDir = path.join(path.dirname(scriptDir));
const geminiCodePkgs = fs
.readdirSync(packagesDir)
.filter(
(name) =>
fs.statSync(path.join(packagesDir, name)).isDirectory() &&
fs.existsSync(path.join(packagesDir, name, 'package.json')),
)
.map((packageDirname) => {
const packageJsonPath = path.join(
packagesDir,
packageDirname,
'package.json',
);
return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
})
.reduce((pkgs, pkg) => ({ ...pkgs, [pkg.name]: pkg }), {});
currentPkg.dependencies = _.mapValues(
currentPkg.dependencies,
(value, key) => {
if (geminiCodePkgs[key]) {
console.log(
`Package ${currentPkg.name} has a dependency on ${key}. Updating dependent version.`,
);
return geminiCodePkgs[key].version;
}
return value;
},
);
const updatedPkgJson = JSON.stringify(currentPkg, null, 2) + '\n';
fs.writeFileSync(currentPkgJsonPath, updatedPkgJson);
}
bindPackageDependencies();