12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- 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`)
- }
- }
|