refactor: share install flows across hooks and plugins

This commit is contained in:
Peter Steinberger
2026-02-22 18:36:28 +00:00
parent 176973b882
commit 07888bee34
5 changed files with 243 additions and 189 deletions

View File

@@ -0,0 +1,42 @@
export type InstallMode = "install" | "update";
export type InstallModeOptions<TLogger> = {
logger?: TLogger;
mode?: InstallMode;
dryRun?: boolean;
};
export type TimedInstallModeOptions<TLogger> = InstallModeOptions<TLogger> & {
timeoutMs?: number;
};
export function resolveInstallModeOptions<TLogger>(
params: InstallModeOptions<TLogger>,
defaultLogger: TLogger,
): {
logger: TLogger;
mode: InstallMode;
dryRun: boolean;
} {
return {
logger: params.logger ?? defaultLogger,
mode: params.mode ?? "install",
dryRun: params.dryRun ?? false,
};
}
export function resolveTimedInstallModeOptions<TLogger>(
params: TimedInstallModeOptions<TLogger>,
defaultLogger: TLogger,
defaultTimeoutMs = 120_000,
): {
logger: TLogger;
timeoutMs: number;
mode: InstallMode;
dryRun: boolean;
} {
return {
...resolveInstallModeOptions(params, defaultLogger),
timeoutMs: params.timeoutMs ?? defaultTimeoutMs,
};
}