Skip to content

Commit 20edb81

Browse files
committed
refactor: update dependencies lib to support exclude package
1 parent eb196cc commit 20edb81

File tree

7 files changed

+826
-789
lines changed

7 files changed

+826
-789
lines changed

scripts/updatePackagesLib/LatestVersionPackages.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,26 @@ import type { IBasicPackage, IVersionedPackage } from "./types";
44

55
export interface IGetUpdatableParams {
66
packages: IBasicPackage[];
7+
isPackageExcluded: (name: string) => boolean;
78
}
89

910
export class LatestVersionPackages {
1011
private readonly cache: WeakMap<IBasicPackage[], IVersionedPackage[]> = new WeakMap();
1112

1213
public async getUpdatable(params: IGetUpdatableParams): Promise<IVersionedPackage[]> {
13-
const cache = this.cache.get(params.packages);
14+
const { isPackageExcluded } = params;
15+
16+
const targetPackages = params.packages.filter(pkg => {
17+
return !isPackageExcluded(pkg.name);
18+
});
19+
const cache = this.cache.get(targetPackages);
1420
if (cache) {
1521
return cache;
1622
}
1723

1824
const results: IVersionedPackage[] = [];
1925
await Promise.allSettled(
20-
params.packages.map(async pkg => {
26+
targetPackages.map(async pkg => {
2127
try {
2228
const result = await execa("npm", ["show", pkg.name, "version"]);
2329
if (!result.stdout) {
@@ -45,7 +51,7 @@ export class LatestVersionPackages {
4551
})
4652
);
4753

48-
this.cache.set(params.packages, results);
54+
this.cache.set(targetPackages, results);
4955
return results;
5056
}
5157

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import type { IPresetExclude } from "./createPreset.js";
2+
3+
export const crateIsPackageExcluded = (input?: IPresetExclude) => {
4+
return (name: string): boolean => {
5+
if (!input) {
6+
return false;
7+
} else if (typeof input === "string") {
8+
return input === name;
9+
} else if (Array.isArray(input)) {
10+
return input.includes(name);
11+
} else if (input instanceof RegExp) {
12+
return input.test(name);
13+
} else if (typeof input === "function") {
14+
return input(name);
15+
}
16+
return false;
17+
};
18+
};

scripts/updatePackagesLib/createPreset.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
export interface IPresetExcludeCb {
2+
(name: string): boolean;
3+
}
4+
5+
export type IPresetExclude = string | string[] | RegExp | IPresetExcludeCb;
6+
17
export interface IPreset {
28
name: string;
39
matching: RegExp;
410
skipResolutions: boolean;
511
caret?: boolean;
12+
exclude?: IPresetExclude;
613
}
714
export interface ICreatePresetCb {
815
(): IPreset;

scripts/updatePackagesLib/getUserInput.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { IPreset } from "./createPreset";
1+
import type { IPreset, IPresetExclude } from "./createPreset";
22
import inquirer from "inquirer";
33

44
export interface IGetUserInputParams {
@@ -10,6 +10,7 @@ export interface IUserInputResponse {
1010
skipResolutions: boolean;
1111
matching: RegExp;
1212
useCaret: boolean;
13+
exclude: IPresetExclude | undefined;
1314
}
1415

1516
export const getUserInput = async ({
@@ -51,7 +52,8 @@ export const getUserInput = async ({
5152
return {
5253
...matching,
5354
useCaret: matching.caret || true,
54-
shouldUpdate
55+
shouldUpdate,
56+
exclude: matching.exclude
5557
};
5658
}
5759

@@ -98,6 +100,7 @@ export const getUserInput = async ({
98100
useCaret,
99101
matching,
100102
shouldUpdate,
101-
skipResolutions
103+
skipResolutions,
104+
exclude: undefined
102105
};
103106
};

scripts/updatePackagesLib/presets/awsSdk.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export const awsSdk = createPreset(() => {
44
return {
55
name: "aws-sdk",
66
matching: /^@aws-sdk\/|^aws\-/,
7+
exclude: ["aws-elasticsearch-connector"],
78
skipResolutions: true
89
};
910
});

scripts/updatePackagesLib/updatePackages.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { LatestVersionPackages } from "./LatestVersionPackages";
55
import { ResolutionPackages } from "./ResolutionPackages";
66
import { UpPackages } from "./UpPackages";
77
import type { IUserInputResponse } from "./getUserInput";
8+
import { crateIsPackageExcluded } from "./crateIsPackageExcluded";
89

910
const getAllPackages = (): string[] => {
1011
const workspaces = allWorkspaces() as string[];
@@ -37,7 +38,8 @@ export const updatePackages = async (params: IUpdatePackagesParams) => {
3738
const latestVersionPackages = await LatestVersionPackages.create();
3839

3940
const updatable = await latestVersionPackages.getUpdatable({
40-
packages: packages.packages
41+
packages: packages.packages,
42+
isPackageExcluded: crateIsPackageExcluded(params.input.exclude)
4143
});
4244
if (updatable.length === 0) {
4345
console.log("All packages are up-to-date. Exiting...");

0 commit comments

Comments
 (0)