diff --git a/scopes/dependencies/dependency-resolver/dependency-installer.ts b/scopes/dependencies/dependency-resolver/dependency-installer.ts index d5db9ed405f4..bb2995e9ef64 100644 --- a/scopes/dependencies/dependency-resolver/dependency-installer.ts +++ b/scopes/dependencies/dependency-resolver/dependency-installer.ts @@ -95,6 +95,8 @@ export class DependencyInstaller { private neverBuiltDependencies?: string[], + private preferOffline?: boolean, + private installingContext: DepInstallerContext = {} ) {} @@ -194,6 +196,7 @@ export class DependencyInstaller { peerDependencyRules: this.peerDependencyRules, hidePackageManagerOutput, neverBuiltDependencies: ['core-js', ...(this.neverBuiltDependencies ?? [])], + preferOffline: this.preferOffline, ...packageManagerOptions, }; if (options.installTeambitBit) { diff --git a/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts b/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts index 4dcaf54b64a4..5c374dc6acf0 100644 --- a/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts +++ b/scopes/dependencies/dependency-resolver/dependency-resolver.main.runtime.ts @@ -274,6 +274,11 @@ export interface DependencyResolverWorkspaceConfig { * of the listed packages will not be executed during installation. */ neverBuiltDependencies?: string[]; + + /** + * If true, staleness checks for cached data will be bypassed, but missing data will be requested from the server. + */ + preferOffline?: boolean; } export interface DependencyResolverVariantConfig { @@ -700,6 +705,7 @@ export class DependencyResolverMain { this.config.engineStrict, this.config.peerDependencyRules, this.config.neverBuiltDependencies, + this.config.preferOffline, options.installingContext ); } diff --git a/scopes/dependencies/dependency-resolver/package-manager.ts b/scopes/dependencies/dependency-resolver/package-manager.ts index c90ad5b8bfc1..23ab27e17723 100644 --- a/scopes/dependencies/dependency-resolver/package-manager.ts +++ b/scopes/dependencies/dependency-resolver/package-manager.ts @@ -55,6 +55,8 @@ export type PackageManagerInstallOptions = { hidePackageManagerOutput?: boolean; neverBuiltDependencies?: string[]; + + preferOffline?: boolean; }; export type PackageManagerGetPeerDependencyIssuesOptions = PackageManagerInstallOptions; diff --git a/scopes/dependencies/pnpm/lynx.ts b/scopes/dependencies/pnpm/lynx.ts index 1f3529b81e92..daeb20c3663a 100644 --- a/scopes/dependencies/pnpm/lynx.ts +++ b/scopes/dependencies/pnpm/lynx.ts @@ -51,7 +51,7 @@ async function createStoreController( registries: Registries; proxyConfig: PackageManagerProxyConfig; networkConfig: PackageManagerNetworkConfig; - } & Pick + } & Pick ): Promise<{ ctrl: StoreController; dir: string }> { const authConfig = getAuthConfig(options.registries); const opts: CreateStoreControllerOptions = { @@ -71,6 +71,7 @@ async function createStoreController( maxSockets: options.networkConfig.maxSockets, networkConcurrency: options.networkConfig.networkConcurrency, packageImportMethod: options.packageImportMethod, + preferOffline: options.preferOffline, resolveSymlinksInInjectedDirs: true, pnpmHomeDir: options.pnpmHomeDir, }; @@ -181,7 +182,7 @@ export async function install( | 'peerDependencyRules' | 'neverBuiltDependencies' > & - Pick, + Pick, // eslint-disable-next-line @typescript-eslint/no-unused-vars logger?: Logger ): Promise<{ dependenciesChanged: boolean }> { @@ -217,6 +218,7 @@ export async function install( storeDir, cacheDir, registries, + preferOffline: options?.preferOffline, proxyConfig, networkConfig, packageImportMethod: options?.packageImportMethod, diff --git a/scopes/dependencies/pnpm/pnpm.package-manager.ts b/scopes/dependencies/pnpm/pnpm.package-manager.ts index 61b18666f7b6..c66438c9c95b 100644 --- a/scopes/dependencies/pnpm/pnpm.package-manager.ts +++ b/scopes/dependencies/pnpm/pnpm.package-manager.ts @@ -70,6 +70,7 @@ export class PnpmPackageManager implements PackageManager { ? ['*'] : ['@eslint/plugin-*', '*eslint-plugin*', '@prettier/plugin-*', '*prettier-plugin-*'], packageImportMethod: installOptions.packageImportMethod ?? config.packageImportMethod, + preferOffline: installOptions.preferOffline, rootComponents: installOptions.rootComponents, rootComponentsForCapsules: installOptions.rootComponentsForCapsules, peerDependencyRules: installOptions.peerDependencyRules,