|
| 1 | +import { readFileSync, writeFileSync } from 'node:fs' |
| 2 | +import { join } from 'node:path' |
| 3 | + |
| 4 | +const packagePath = join(process.cwd(), 'packages/create/package.json') |
| 5 | +const pkg = JSON.parse(readFileSync(packagePath, 'utf8')) |
| 6 | + |
| 7 | +// Get version from argument, e.g., "v3.0.0" or "3.0.0" |
| 8 | +let targetVersion = process.argv[2] |
| 9 | + |
| 10 | +if (!targetVersion) { |
| 11 | + console.error('Usage: node patch-create-version.mjs <version>') |
| 12 | + // eslint-disable-next-line unicorn/no-process-exit |
| 13 | + process.exit(1) |
| 14 | +} |
| 15 | + |
| 16 | +// Strip 'v' prefix if present |
| 17 | +if (targetVersion.startsWith('v')) { |
| 18 | + targetVersion = targetVersion.slice(1) |
| 19 | +} |
| 20 | + |
| 21 | +const targetMajor = targetVersion.split('.')[0] |
| 22 | + |
| 23 | +// Parse current version |
| 24 | +// Assumes semver-like: major.minor.patch(-prerelease)? |
| 25 | +const versionMatch = pkg.version.match(/^(\d+)\.(\d+)\.(\d+)(?:-(.+))?$/) |
| 26 | + |
| 27 | +if (!versionMatch) { |
| 28 | + console.error(`Could not parse package version: ${pkg.version}`) |
| 29 | + // eslint-disable-next-line unicorn/no-process-exit |
| 30 | + process.exit(1) |
| 31 | +} |
| 32 | + |
| 33 | +// eslint-disable-next-line unicorn/no-unreadable-array-destructuring |
| 34 | +const [, , minor, patch, prerelease] = versionMatch |
| 35 | + |
| 36 | +let newPrerelease = '' |
| 37 | + |
| 38 | +if (prerelease) { |
| 39 | + // 0.x.y-beta.z -> 0.x.y-beta-next.z |
| 40 | + // Non-beta: for now, keeping as is to be safe, but user only specified beta. |
| 41 | + newPrerelease = prerelease.startsWith('beta.') |
| 42 | + ? `-${prerelease.replace('beta.', 'beta-next.')}` |
| 43 | + : `-${prerelease}` |
| 44 | +} else { |
| 45 | + // 0.x.y -> 0.x.y-next.1 |
| 46 | + newPrerelease = '-next.1' |
| 47 | +} |
| 48 | + |
| 49 | +const newVersion = `${targetMajor}.${minor}.${patch}${newPrerelease}` |
| 50 | + |
| 51 | +console.log(`Patching packages/create/package.json version from ${pkg.version} to ${newVersion}`) |
| 52 | +pkg.version = newVersion |
| 53 | + |
| 54 | +writeFileSync(packagePath, JSON.stringify(pkg, null, 2) + '\n') |
0 commit comments