@@ -9,6 +9,8 @@ import { normalizePackageName } from '../builtin/utils';
99 */
1010export type PackageChangesCallback = ( changes : { kind : PackageChangeKind ; pkg : Package } [ ] ) => void ;
1111
12+ type PackageFetcher = ( ) => Promise < Package [ ] | undefined > ;
13+
1214/**
1315 * Computes the list of package changes between a before and after snapshot.
1416 * @param before - The previous list of packages.
@@ -41,15 +43,22 @@ export function getPackageChanges(before: Package[], after: Package[]): { kind:
4143 * This function calls {@link PackageManager.getPackages} with `skipCache` to fetch
4244 * the latest snapshot. The caller should pass the previously cached packages
4345 * so changes can be computed against the pre-refresh state.
46+ *
47+ * @param packageManager The package manager whose packages changed.
48+ * @param environment The environment whose packages should be refreshed.
49+ * @param before The package snapshot from before the operation.
50+ * @param onChanges Callback invoked when package changes are detected.
51+ * @param fetchPackages Optional internal fetcher for operation-specific refresh behavior.
4452 */
4553export async function updatePackagesAndNotify (
4654 packageManager : PackageManager ,
4755 environment : PythonEnvironment ,
4856 before : Package [ ] | undefined ,
4957 onChanges : PackageChangesCallback ,
58+ fetchPackages ?: PackageFetcher ,
5059) : Promise < Package [ ] | undefined > {
5160 const [ after , afterDirectDependenciesNames ] = await Promise . all ( [
52- packageManager . getPackages ( environment , { skipCache : true } ) . then ( ( pkgs ) => pkgs ?? [ ] ) ,
61+ ( fetchPackages ?. ( ) ?? packageManager . getPackages ( environment , { skipCache : true } ) ) . then ( ( pkgs ) => pkgs ?? [ ] ) ,
5362 // Handle transitive dependencies (best-effort, don't break package refresh on failure)
5463 packageManager . getDirectPackageNames ?.( environment ) . catch ( ( ) => undefined ) ,
5564 ] ) ;
0 commit comments