()
| 216 | * Returns releases if valid, or errors if invalid. |
| 217 | */ |
| 218 | export function parseAllChangeFiles(): ParsedChanges { |
| 219 | let packageDirNames = getAllPackageDirNames(); |
| 220 | let errors: ValidationError[] = []; |
| 221 | |
| 222 | // Build maps for lookup |
| 223 | let dirNameToPackageName = new Map<string, string>(); |
| 224 | let packageNameToDirName = new Map<string, string>(); |
| 225 | |
| 226 | // First pass: collect package info and validate change files |
| 227 | interface ParsedPackageInfo { |
| 228 | packageDirName: string; |
| 229 | packageName: string; |
| 230 | currentVersion: string; |
| 231 | changes: ChangeFile[]; |
| 232 | } |
| 233 | let parsedPackages: ParsedPackageInfo[] = []; |
| 234 | |
| 235 | for (let packageDirName of packageDirNames) { |
| 236 | let parsed = parsePackageChanges(packageDirName); |
| 237 | |
| 238 | if (!parsed.valid) { |
| 239 | errors.push(...parsed.errors); |
| 240 | continue; |
| 241 | } |
| 242 | |
| 243 | let packageJsonPath = getPackageFile(packageDirName, "package.json"); |
| 244 | let packageJson = readJson(packageJsonPath); |
| 245 | let packageName = packageJson.name as string; |
| 246 | let currentVersion = packageJson.version as string; |
| 247 | |
| 248 | dirNameToPackageName.set(packageDirName, packageName); |
| 249 | packageNameToDirName.set(packageName, packageDirName); |
| 250 | |
| 251 | parsedPackages.push({ |
| 252 | packageDirName, |
| 253 | packageName, |
| 254 | currentVersion, |
| 255 | changes: parsed.changes, |
| 256 | }); |
| 257 | } |
| 258 | |
| 259 | if (errors.length > 0) { |
| 260 | return { valid: false, errors }; |
| 261 | } |
| 262 | |
| 263 | let allChanges = new Set( |
| 264 | parsedPackages.flatMap((p) => p.changes.flatMap((c) => c.bump)), |
| 265 | ); |
| 266 | |
| 267 | if (allChanges.size === 0) { |
| 268 | return { valid: true, releases: [] }; |
| 269 | } |
| 270 | |
| 271 | let bump: BumpType = allChanges.has("major") |
| 272 | ? "major" |
| 273 | : allChanges.has("minor") |
| 274 | ? "minor" |
| 275 | : "patch"; |
no test coverage detected
searching dependent graphs…