| 65 | } |
| 66 | |
| 67 | export default async function applyReleasePlan( |
| 68 | releasePlan: ReleasePlan, |
| 69 | packages: Packages, |
| 70 | config: Config = defaultConfig, |
| 71 | snapshot?: string | boolean, |
| 72 | contextDir = __dirname |
| 73 | ) { |
| 74 | let cwd = packages.root.dir; |
| 75 | |
| 76 | let touchedFiles = []; |
| 77 | |
| 78 | const packagesByName = new Map( |
| 79 | packages.packages.map((x) => [x.packageJson.name, x]) |
| 80 | ); |
| 81 | |
| 82 | let { releases, changesets } = releasePlan; |
| 83 | |
| 84 | let releasesWithPackage = releases.map((release) => { |
| 85 | let pkg = packagesByName.get(release.name); |
| 86 | if (!pkg) |
| 87 | throw new Error( |
| 88 | `Could not find matching package for release of: ${release.name}` |
| 89 | ); |
| 90 | return { |
| 91 | ...release, |
| 92 | ...pkg, |
| 93 | }; |
| 94 | }); |
| 95 | |
| 96 | // I think this might be the wrong place to do this, but gotta do it somewhere - add changelog entries to releases |
| 97 | let releaseWithChangelogs = await getNewChangelogEntry( |
| 98 | releasesWithPackage, |
| 99 | changesets, |
| 100 | config, |
| 101 | cwd, |
| 102 | contextDir |
| 103 | ); |
| 104 | |
| 105 | if (releasePlan.preState !== undefined && snapshot === undefined) { |
| 106 | if (releasePlan.preState.mode === "exit") { |
| 107 | await fs.remove(path.join(cwd, ".changeset", "pre.json")); |
| 108 | } else { |
| 109 | await fs.writeFile( |
| 110 | path.join(cwd, ".changeset", "pre.json"), |
| 111 | JSON.stringify(releasePlan.preState, null, 2) + "\n" |
| 112 | ); |
| 113 | } |
| 114 | touchedFiles.push(path.join(cwd, ".changeset", "pre.json")); |
| 115 | } |
| 116 | |
| 117 | let versionsToUpdate = releases.map( |
| 118 | ({ name, newVersion, oldVersion, type }) => ({ |
| 119 | name, |
| 120 | version: newVersion, |
| 121 | oldVersion, |
| 122 | type, |
| 123 | dir: packagesByName.get(name)!.dir, |
| 124 | }) |