import { spawn } from 'child_process'
import { getProjectDir } from '../lib/get-project-dir'
import { getNpxCommand } from '../lib/helpers/get-npx-command'
interface NextUpgradeOptions {
revision: string
verbose: boolean
}
export function spawnNextUpgrade(
directory: string | undefined,
options: NextUpgradeOptions
) {
const baseDir = getProjectDir(directory)
const [upgradeProcessCommand, ...upgradeProcessDefaultArgs] =
getNpxCommand(baseDir).split(' ')
const upgradeProcessCommandArgs = [
...upgradeProcessDefaultArgs,
// Needs to be bleeding edge (canary) to pick up latest codemods.
'@next/codemod@canary',
'upgrade',
options.revision,
]
if (options.verbose) {
upgradeProcessCommandArgs.push('--verbose')
}
const upgradeProcess = spawn(
upgradeProcessCommand,
upgradeProcessCommandArgs,
{
stdio: 'inherit',
cwd: baseDir,
}
)
upgradeProcess.on('close', (code) => {
process.exitCode = code ?? 0
})
}