import type { AspectLoaderMain } from '@teambit/aspect-loader'; import type { Component } from '@teambit/component'; import { SemVer } from 'semver'; import type { Logger } from '@teambit/logger'; import type { DependencyList, PackageName } from '../dependencies'; import type { WorkspacePolicy } from '../policy'; import type { DependencyResolverMain } from '../dependency-resolver.main.runtime'; import type { ComponentsManifestsMap } from '../types'; import type { DedupedDependencies } from './deduping'; import type { ManifestToJsonOptions, ManifestDependenciesObject } from './manifest'; import { WorkspaceManifest } from './workspace-manifest'; export type DepsFilterFn = (dependencies: DependencyList) => DependencyList; export type ComponentDependenciesMap = Map; export interface WorkspaceManifestToJsonOptions extends ManifestToJsonOptions { includeDir?: boolean; } export type CreateFromComponentsOptions = { filterComponentsFromManifests: boolean; createManifestForComponentsWithoutDependencies: boolean; dedupe?: boolean; dependencyFilterFn?: DepsFilterFn; resolveVersionsFromDependenciesOnly?: boolean; referenceLocalPackages?: boolean; includeAllEnvPeers?: boolean; hasRootComponents?: boolean; excludeExtensionsDependencies?: boolean; }; export declare class WorkspaceManifestFactory { private dependencyResolver; private aspectLoader; private logger?; private resolveEnvPeersFromRoot; private forceEnvPeersToRoot; constructor(dependencyResolver: DependencyResolverMain, aspectLoader: AspectLoaderMain, logger?: Logger | undefined, resolveEnvPeersFromRoot?: boolean, forceEnvPeersToRoot?: boolean); createFromComponents(name: string, version: SemVer, rootPolicy: WorkspacePolicy, rootDir: string, components: Component[], options?: CreateFromComponentsOptions): Promise; private filterOutCoreAspects; /** * Merge env peer dependencies to the workspace root. * - Non-conflicting peers: always merge to root * - Conflicting peers with workspaceSingleton: merge majority to root, warn about unsatisfied envs * - Conflicting peers without workspaceSingleton: skip root, return as componentPeerOverrides for per-component injection */ private mergeEnvPeersToRoot; private createResolvedEntry; /** * Inject conflicting non-singleton peer deps into component manifests. * Each component gets the version specified by its env. */ private injectConflictingPeersToComponents; private resolveConflictingPeerVersions; private findEntryWithVersion; private getEnvsSelfPeersPolicy; /** * Get the components and build a map with the package name (from the component) as key and the dependencies as values * * @param {Component[]} components * @param {boolean} [filterComponentsFromManifests=true] - filter existing components from the dep graphs * @returns */ private buildComponentDependenciesMap; /** * Collect package names explicitly listed in the component's dep-resolver policy, * excluding entries that represent removals ("-" or `{ version: "-" }`). */ private getComponentExplicitPackages; private _getEnvPeerDependencies; private updateDependenciesVersions; /** * Get the components manifests based on the calculated dedupedDependencies * * @param {DedupedDependencies} dedupedDependencies * @param {Component[]} components * @returns {ComponentsManifestsMap} */ getComponentsManifests(dedupedDependencies: DedupedDependencies, components: Component[], createManifestForComponentsWithoutDependencies?: boolean): Promise; }