Skip to content

Commit 88e0be0

Browse files
authored
updateRelatedChangeType perf improvements (#1046)
1 parent 37314b8 commit 88e0be0

12 files changed

Lines changed: 362 additions & 433 deletions
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "minor",
3+
"comment": "Remove redundant processing in updateRelatedChangeType, and other minor optimizations",
4+
"packageName": "beachball",
5+
"email": "elcraig@microsoft.com",
6+
"dependentChangeType": "patch"
7+
}

src/__fixtures__/packageInfos.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import { getDefaultOptions } from '../options/getDefaultOptions';
55

66
const defaultOptions = getDefaultOptions();
77

8+
export type PartialPackageInfos = {
9+
[name: string]: Partial<Omit<PackageInfo, 'combinedOptions'>> & { combinedOptions?: Partial<BeachballOptions> };
10+
};
11+
812
/**
913
* Makes a properly typed PackageInfos object from a partial object, filling in defaults:
1014
* ```
@@ -18,9 +22,7 @@ const defaultOptions = getDefaultOptions();
1822
* }
1923
* ```
2024
*/
21-
export function makePackageInfos(packageInfos: {
22-
[name: string]: Partial<Omit<PackageInfo, 'combinedOptions'>> & { combinedOptions?: Partial<BeachballOptions> };
23-
}): PackageInfos {
25+
export function makePackageInfos(packageInfos: PartialPackageInfos): PackageInfos {
2426
return _.mapValues(packageInfos, (info, name): PackageInfo => {
2527
const { combinedOptions, ...rest } = info;
2628
return {
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { describe, it, expect } from '@jest/globals';
2+
import { makePackageInfos } from '../../__fixtures__/packageInfos';
3+
import { consideredDependencies } from '../../types/PackageInfo';
4+
import { getDependentsForPackages } from '../../bump/getDependentsForPackages';
5+
6+
describe('getDependentsForPackages', () => {
7+
it.each(consideredDependencies)('includes %s', depType => {
8+
const packages = makePackageInfos({
9+
foo: { [depType]: { baz: '1.0.0' } },
10+
bar: { [depType]: { baz: '1.0.0' } },
11+
baz: {},
12+
});
13+
const dependents = getDependentsForPackages({
14+
packageInfos: packages,
15+
scopedPackages: new Set(Object.keys(packages)),
16+
});
17+
expect(dependents).toEqual({
18+
baz: ['foo', 'bar'],
19+
});
20+
});
21+
22+
it('does not include transitive dependencies', () => {
23+
const packages = makePackageInfos({
24+
foo: { dependencies: { bar: '1.0.0' } },
25+
bar: { dependencies: { baz: '1.0.0' } },
26+
baz: {},
27+
});
28+
const dependents = getDependentsForPackages({
29+
packageInfos: packages,
30+
scopedPackages: new Set(Object.keys(packages)),
31+
});
32+
expect(dependents).toEqual({
33+
bar: ['foo'],
34+
baz: ['bar'],
35+
});
36+
});
37+
38+
it('only includes dependencies of in-scope packages', () => {
39+
const packages = makePackageInfos({
40+
foo: { dependencies: { bar: '1.0.0' } },
41+
bar: { dependencies: { baz: '1.0.0' } },
42+
baz: {},
43+
});
44+
const dependents = getDependentsForPackages({
45+
packageInfos: packages,
46+
// means only look at dependencies of foo
47+
scopedPackages: new Set(['foo']),
48+
});
49+
expect(dependents).toEqual({
50+
bar: ['foo'],
51+
});
52+
});
53+
});

0 commit comments

Comments
 (0)