diff --git a/packages/core/src/lib/core/build-for-federation.ts b/packages/core/src/lib/core/build-for-federation.ts index b1d0b165..4225089f 100644 --- a/packages/core/src/lib/core/build-for-federation.ts +++ b/packages/core/src/lib/core/build-for-federation.ts @@ -20,6 +20,7 @@ import { AbortedError } from '../utils/errors.js'; import type { NormalizedFederationConfig } from '../domain/config/federation-config.contract.js'; import type { NormalizedExternalConfig } from '../domain/config/external-config.contract.js'; import type { BuildParams } from '../domain/core/build-params.contract.js'; +import { resolveProjectName } from '../utils/config-utils.js'; export const defaultBuildParams: BuildParams = { skipMappingsAndExposed: false, @@ -49,14 +50,7 @@ export async function buildForFederation( const exposedInfo = !artifactInfo ? describeExposed(config, fedOptions) : artifactInfo.exposes; - const normalizedCacheFolder = normalizePackageName(config.name); - if (normalizedCacheFolder.length < 1) { - logger.warn( - "Project name in 'federation.config.js' is empty, defaulting to 'shell' cache folder (could collide with other projects in the workspace)." - ); - } - const cacheProjectFolder = normalizedCacheFolder.length < 1 ? 'shell' : normalizedCacheFolder; - + const cacheProjectFolder = resolveProjectName(config); const pathToCache = getCachePath(fedOptions.workspaceRoot, cacheProjectFolder); if (!buildParams.skipShared && sharedCache.externals.length > 0) { diff --git a/packages/core/src/lib/core/remove-unused-deps.ts b/packages/core/src/lib/core/remove-unused-deps.ts index 866b9658..482c9ed4 100644 --- a/packages/core/src/lib/core/remove-unused-deps.ts +++ b/packages/core/src/lib/core/remove-unused-deps.ts @@ -7,6 +7,7 @@ import { getPackageInfo, type PackageInfo } from '../utils/package-info.js'; import { getExternalImports as extractExternalImports } from '../utils/get-external-imports.js'; import { type MappedPath } from '../domain/utils/mapped-path.contract.js'; import { normalizePackageName } from '../utils/normalize.js'; +import { resolveProjectName } from '../utils/config-utils.js'; export function removeUnusedDeps( config: NormalizedFederationConfig, @@ -21,7 +22,8 @@ export function removeUnusedDeps( const usedPackageNames = usedDeps.usedPackageNames; const usedMappings = usedDeps.usedMappings; - const usedPackageNamesWithTransient = addTransientDeps(usedPackageNames, workspaceRoot); + const projectName = resolveProjectName(config); + const usedPackageNamesWithTransient = addTransientDeps(usedPackageNames, workspaceRoot, projectName); const filteredShared = filterShared(config, usedPackageNamesWithTransient); return { @@ -73,7 +75,7 @@ function findUsedDeps( return { usedPackageNames, usedMappings }; } -function addTransientDeps(packages: Set, workspaceRoot: string) { +function addTransientDeps(packages: Set, workspaceRoot: string, projectName: string) { const packagesAndPeers = new Set([...packages]); const discovered = new Set(packagesAndPeers); const stack = [...packagesAndPeers]; @@ -91,7 +93,7 @@ function addTransientDeps(packages: Set, workspaceRoot: string) { continue; } - const peerDeps = getExternalImports(pInfo, workspaceRoot); + const peerDeps = getExternalImports(pInfo, workspaceRoot, projectName); for (const peerDep of peerDeps) { if (!discovered.has(peerDep)) { @@ -104,12 +106,13 @@ function addTransientDeps(packages: Set, workspaceRoot: string) { return packagesAndPeers; } -function getExternalImports(pInfo: PackageInfo, workspaceRoot: string) { +function getExternalImports(pInfo: PackageInfo, workspaceRoot: string, projectName: string) { const encodedPackageName = normalizePackageName(pInfo.packageName); const cacheFileName = `${encodedPackageName}-${pInfo.version}.deps.json`; const cachePath = path.join( workspaceRoot, - 'node_modules/.cache/native-federation/_externals-metadata' + 'node_modules/.cache/native-federation/_externals-metadata', + projectName ); const cacheFilePath = path.join(cachePath, cacheFileName); diff --git a/packages/core/src/lib/utils/config-utils.ts b/packages/core/src/lib/utils/config-utils.ts new file mode 100644 index 00000000..91633aaf --- /dev/null +++ b/packages/core/src/lib/utils/config-utils.ts @@ -0,0 +1,14 @@ +import { NormalizedFederationConfig } from '../domain/config/federation-config.contract.js'; +import { logger } from './logger.js'; +import { normalizePackageName } from './normalize.js'; + +export function resolveProjectName(config: NormalizedFederationConfig): string { + const normalizedProjectName = normalizePackageName(config.name); + if (normalizedProjectName.length < 1) { + logger.warn( + "Project name in 'federation.config.js' is empty, defaulting to 'shell' cache folder (could collide with other projects in the workspace).", + ); + } + + return normalizedProjectName.length < 1 ? 'shell' : normalizedProjectName; +} \ No newline at end of file