* Compute which catalog entries changed between the base ref and HEAD. * Returns Map >. Empty if no catalog files changed.
( rootDir: string, baseBranch: string, changedFiles: string[], )
| 411 | after.devDependencies as Record<string, string> | undefined, |
| 412 | releaseTriggeringDevDeps, |
| 413 | ) |
| 414 | ) { |
| 415 | return true; |
| 416 | } |
| 417 | } |
| 418 | return false; |
| 419 | } |
| 420 | |
| 421 | /** Whether any devDependency matching `releaseTriggeringDevDeps` was added/removed/changed. */ |
| 422 | function releaseTriggeringDevDepsChanged( |
| 423 | before: Record<string, string> = {}, |
| 424 | after: Record<string, string> = {}, |
| 425 | releaseTriggeringDevDeps?: string[], |
| 426 | ): boolean { |
| 427 | if (!releaseTriggeringDevDeps?.length) return false; |
| 428 | const names = new Set([...Object.keys(before ?? {}), ...Object.keys(after ?? {})]); |
| 429 | for (const name of names) { |
| 430 | if (before?.[name] === after?.[name]) continue; |
| 431 | if (releaseTriggeringDevDeps.some((pattern) => matchGlob(name, pattern))) return true; |
| 432 | } |
| 433 | return false; |
| 434 | } |
| 435 | |
| 436 | /** Structural equality for parsed JSON values (objects compared key-insensitive to order). */ |
| 437 | function deepEqual(a: unknown, b: unknown): boolean { |
| 438 | if (a === b) return true; |
| 439 | if (typeof a !== typeof b || a === null || b === null) return false; |
| 440 | if (typeof a !== 'object') return false; |
| 441 | if (Array.isArray(a) || Array.isArray(b)) { |
| 442 | if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) return false; |
| 443 | return a.every((v, i) => deepEqual(v, b[i])); |
| 444 | } |
| 445 | const ao = a as Record<string, unknown>; |
| 446 | const bo = b as Record<string, unknown>; |
no test coverage detected
searching dependent graphs…