import { writeFileSync } from 'fs' import { basename } from 'node:path' import { changePackageVersion } from './change-package-version' import { getRecursiveFileList } from './get-recursive-file-list' export function commandSet(version: string, path: string = '.') { if (!version) { console.error(`Version is required`) process.exit(1) } if ( !version // Strip first character if it's a `@` .replace(/^@/, '') .includes('@') ) { console.error(`Invalid package version: ${version}. Provide package with version, e.g. @solana/web3.js@1.0.0`) process.exit(1) } // Take anything after the second `@` as the version, the rest is the package name const [pkg, ...rest] = version.split('@').reverse() const pkgName = rest.reverse().join('@') // Make sure pkgVersions has a ^ prefix, if not add it const pkgVersion = pkg.startsWith('^') ? pkg : `^${pkg}` console.log(`Setting package ${pkgName} to ${pkgVersion} in ${path}`) const files = getRecursiveFileList(path).filter((file) => basename(file) === 'package.json') let count = 0 for (const file of files) { const [changed, content] = changePackageVersion(file, pkgName, pkgVersion) if (changed) { writeFileSync(file, JSON.stringify(content, null, 2) + '\n') count++ } } if (count === 0) { console.log(`No files updated`) } else { console.log(`Updated ${count} files`) } }