@teambit/dependency-resolver 0.0.1055 → 0.0.1056

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -50,12 +50,13 @@ export declare class DependencyInstaller {
50
50
  private nodeVersion?;
51
51
  private engineStrict?;
52
52
  private peerDependencyRules?;
53
+ private neverBuiltDependencies?;
53
54
  private installingContext;
54
55
  constructor(
55
56
  /**
56
57
  * package manager instance.
57
58
  */
58
- packageManager: PackageManager, aspectLoader: AspectLoaderMain, logger: Logger, dependencyResolver: DependencyResolverMain, rootDir?: string | undefined, cacheRootDir?: string | undefined, preInstallSubscriberList?: PreInstallSubscriberList | undefined, postInstallSubscriberList?: PostInstallSubscriberList | undefined, nodeLinker?: "hoisted" | "isolated" | undefined, packageImportMethod?: PackageImportMethod | undefined, sideEffectsCache?: boolean | undefined, nodeVersion?: string | undefined, engineStrict?: boolean | undefined, peerDependencyRules?: PeerDependencyRules | undefined, installingContext?: DepInstallerContext);
59
+ packageManager: PackageManager, aspectLoader: AspectLoaderMain, logger: Logger, dependencyResolver: DependencyResolverMain, rootDir?: string | undefined, cacheRootDir?: string | undefined, preInstallSubscriberList?: PreInstallSubscriberList | undefined, postInstallSubscriberList?: PostInstallSubscriberList | undefined, nodeLinker?: "hoisted" | "isolated" | undefined, packageImportMethod?: PackageImportMethod | undefined, sideEffectsCache?: boolean | undefined, nodeVersion?: string | undefined, engineStrict?: boolean | undefined, peerDependencyRules?: PeerDependencyRules | undefined, neverBuiltDependencies?: string[] | undefined, installingContext?: DepInstallerContext);
59
60
  install(rootDir: string | undefined, rootPolicy: WorkspacePolicy, componentDirectoryMap: ComponentMap<string>, options?: InstallOptions, packageManagerOptions?: PackageManagerInstallOptions): Promise<{
60
61
  dependenciesChanged: boolean;
61
62
  }>;
@@ -65,7 +65,7 @@ class DependencyInstaller {
65
65
  /**
66
66
  * package manager instance.
67
67
  */
68
- packageManager, aspectLoader, logger, dependencyResolver, rootDir, cacheRootDir, preInstallSubscriberList, postInstallSubscriberList, nodeLinker, packageImportMethod, sideEffectsCache, nodeVersion, engineStrict, peerDependencyRules, installingContext = {}) {
68
+ packageManager, aspectLoader, logger, dependencyResolver, rootDir, cacheRootDir, preInstallSubscriberList, postInstallSubscriberList, nodeLinker, packageImportMethod, sideEffectsCache, nodeVersion, engineStrict, peerDependencyRules, neverBuiltDependencies, installingContext = {}) {
69
69
  this.packageManager = packageManager;
70
70
  this.aspectLoader = aspectLoader;
71
71
  this.logger = logger;
@@ -80,6 +80,7 @@ class DependencyInstaller {
80
80
  this.nodeVersion = nodeVersion;
81
81
  this.engineStrict = engineStrict;
82
82
  this.peerDependencyRules = peerDependencyRules;
83
+ this.neverBuiltDependencies = neverBuiltDependencies;
83
84
  this.installingContext = installingContext;
84
85
  }
85
86
  async install(rootDir, rootPolicy, componentDirectoryMap, options = DEFAULT_INSTALL_OPTIONS, packageManagerOptions = DEFAULT_PM_INSTALL_OPTIONS) {
@@ -97,7 +98,7 @@ class DependencyInstaller {
97
98
  return this.installComponents(finalRootDir, manifests, rootPolicy, componentDirectoryMap, options, packageManagerOptions);
98
99
  }
99
100
  async installComponents(rootDir, manifests, rootPolicy, componentDirectoryMap, options = DEFAULT_INSTALL_OPTIONS, packageManagerOptions = DEFAULT_PM_INSTALL_OPTIONS) {
100
- var _this$installingConte;
101
+ var _this$neverBuiltDepen, _this$installingConte;
101
102
  const args = {
102
103
  componentDirectoryMap,
103
104
  options,
@@ -112,24 +113,26 @@ class DependencyInstaller {
112
113
  throw new (_exceptions().RootDirNotDefined)();
113
114
  }
114
115
  if (options.linkedDependencies) {
115
- const directDeps = new Set();
116
- Object.values(manifests).forEach(manifest => {
117
- for (const depName of Object.keys(_objectSpread(_objectSpread({}, manifest.dependencies), manifest.devDependencies))) {
118
- directDeps.add(depName);
119
- }
120
- });
121
- if (options.linkedDependencies[finalRootDir]) {
116
+ manifests = JSON.parse(JSON.stringify(manifests));
117
+ const linkedDependencies = JSON.parse(JSON.stringify(options.linkedDependencies));
118
+ if (linkedDependencies[finalRootDir]) {
119
+ const directDeps = new Set();
120
+ Object.values(manifests).forEach(manifest => {
121
+ for (const depName of Object.keys(_objectSpread(_objectSpread({}, manifest.dependencies), manifest.devDependencies))) {
122
+ directDeps.add(depName);
123
+ }
124
+ });
122
125
  for (const manifest of Object.values(manifests)) {
123
126
  if (manifest.name && directDeps.has(manifest.name)) {
124
- delete options.linkedDependencies[finalRootDir][manifest.name];
127
+ delete linkedDependencies[finalRootDir][manifest.name];
125
128
  }
126
129
  }
127
130
  }
128
- Object.entries(options.linkedDependencies).forEach(([dir, linkedDeps]) => {
131
+ Object.entries(linkedDependencies).forEach(([dir, linkedDeps]) => {
129
132
  if (!manifests[dir]) {
130
133
  manifests[dir] = {};
131
134
  }
132
- manifests[dir].dependencies = Object.assign({}, manifests[dir].dependencies, linkedDeps);
135
+ manifests[dir].dependencies = _objectSpread(_objectSpread({}, linkedDeps), manifests[dir].dependencies);
133
136
  });
134
137
  }
135
138
  const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');
@@ -144,7 +147,8 @@ class DependencyInstaller {
144
147
  engineStrict: this.engineStrict,
145
148
  packageManagerConfigRootDir: options.packageManagerConfigRootDir,
146
149
  peerDependencyRules: this.peerDependencyRules,
147
- hidePackageManagerOutput
150
+ hidePackageManagerOutput,
151
+ neverBuiltDependencies: ['core-js', ...((_this$neverBuiltDepen = this.neverBuiltDependencies) !== null && _this$neverBuiltDepen !== void 0 ? _this$neverBuiltDepen : [])]
148
152
  }, packageManagerOptions);
149
153
  if (options.installTeambitBit) {
150
154
  if (!mainAspect.version || !mainAspect.packageName) {
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_PM_INSTALL_OPTIONS","dedupe","copyPeerToRuntimeOnRoot","copyPeerToRuntimeOnComponents","installPeersFromEnvs","DEFAULT_INSTALL_OPTIONS","installTeambitBit","DependencyInstaller","constructor","packageManager","aspectLoader","logger","dependencyResolver","rootDir","cacheRootDir","preInstallSubscriberList","postInstallSubscriberList","nodeLinker","packageImportMethod","sideEffectsCache","nodeVersion","engineStrict","peerDependencyRules","installingContext","install","rootPolicy","componentDirectoryMap","options","packageManagerOptions","finalRootDir","RootDirNotDefined","manifests","getComponentManifests","resolveVersionsFromDependenciesOnly","referenceLocalPackages","rootComponentsForCapsules","installComponents","args","runPrePostSubscribers","mainAspect","linkedDependencies","directDeps","Set","Object","values","forEach","manifest","depName","keys","dependencies","devDependencies","add","name","has","entries","dir","linkedDeps","assign","hidePackageManagerOutput","inCapsule","process","env","VERBOSE_PM_OUTPUT","calculatedPmOpts","packageManagerConfigRootDir","version","packageName","MainAspectNotInstallable","dependencyId","lifecycleType","value","rootComponents","keepExistingModulesDir","cleanCompsNodeModules","messagePrefix","messageSuffix","message","setStatusLine","startTime","hrtime","installResult","consoleSuccess","pruneModules","dependencyFilterFn","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","workspaceManifest","getWorkspaceManifest","undefined","components","toArray","reduce","acc","component","getPackageName","componentsManifestsMap","get","toJson","copyPeerToRuntime","defaultPeerDependencies","fromPairs","envPolicy","selfPolicy","toNameVersionTuple","promises","map","nmDir","path","join","fs","remove","Promise","all","subscribers","type","mapSeries","subscriber"],"sources":["dependency-installer.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { MainAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { ComponentMap } from '@teambit/component';\nimport { CreateFromComponentsOptions, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { PeerDependencyRules, ProjectManifest } from '@pnpm/types';\nimport { fromPairs } from 'lodash';\nimport { MainAspectNotInstallable, RootDirNotDefined } from './exceptions';\nimport { PackageManager, PackageManagerInstallOptions, PackageImportMethod } from './package-manager';\nimport { WorkspacePolicy } from './policy';\n\nconst DEFAULT_PM_INSTALL_OPTIONS: PackageManagerInstallOptions = {\n dedupe: true,\n copyPeerToRuntimeOnRoot: true,\n copyPeerToRuntimeOnComponents: false,\n installPeersFromEnvs: false,\n};\n\nconst DEFAULT_INSTALL_OPTIONS: InstallOptions = {\n installTeambitBit: false,\n};\n\nexport type DepInstallerContext = {\n inCapsule?: boolean;\n};\n\nexport type InstallArgs = {\n rootDir: string | undefined;\n rootPolicy: WorkspacePolicy;\n componentDirectoryMap: ComponentMap<string>;\n options: InstallOptions;\n packageManagerOptions: PackageManagerInstallOptions;\n};\n\nexport type InstallOptions = {\n installTeambitBit: boolean;\n packageManagerConfigRootDir?: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n linkedDependencies?: Record<string, Record<string, string>>;\n};\n\nexport type GetComponentManifestsOptions = {\n componentDirectoryMap: ComponentMap<string>;\n rootPolicy: WorkspacePolicy;\n rootDir: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n} & Pick<\n PackageManagerInstallOptions,\n 'dedupe' | 'dependencyFilterFn' | 'copyPeerToRuntimeOnComponents' | 'copyPeerToRuntimeOnRoot' | 'installPeersFromEnvs'\n>;\n\nexport type PreInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PreInstallSubscriberList = Array<PreInstallSubscriber>;\n\nexport type PostInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PostInstallSubscriberList = Array<PostInstallSubscriber>;\n\nexport class DependencyInstaller {\n constructor(\n /**\n * package manager instance.\n */\n private packageManager: PackageManager,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain,\n\n private rootDir?: string | PathAbsolute,\n\n private cacheRootDir?: string | PathAbsolute,\n\n private preInstallSubscriberList?: PreInstallSubscriberList,\n\n private postInstallSubscriberList?: PostInstallSubscriberList,\n\n private nodeLinker?: 'hoisted' | 'isolated',\n\n private packageImportMethod?: PackageImportMethod,\n\n private sideEffectsCache?: boolean,\n\n private nodeVersion?: string,\n\n private engineStrict?: boolean,\n\n private peerDependencyRules?: PeerDependencyRules,\n\n private installingContext: DepInstallerContext = {}\n ) {}\n\n async install(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ) {\n const finalRootDir = rootDir ?? this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const manifests = await this.getComponentManifests({\n ...packageManagerOptions,\n componentDirectoryMap,\n rootPolicy,\n rootDir: finalRootDir,\n resolveVersionsFromDependenciesOnly: options.resolveVersionsFromDependenciesOnly,\n referenceLocalPackages: packageManagerOptions.rootComponentsForCapsules,\n });\n return this.installComponents(\n finalRootDir,\n manifests,\n rootPolicy,\n componentDirectoryMap,\n options,\n packageManagerOptions\n );\n }\n\n async installComponents(\n rootDir: string | undefined,\n manifests: Record<string, ProjectManifest>,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ): Promise<{ dependenciesChanged: boolean }> {\n const args = {\n componentDirectoryMap,\n options,\n packageManagerOptions,\n rootDir,\n rootPolicy,\n };\n await this.runPrePostSubscribers(this.preInstallSubscriberList, 'pre', args);\n const mainAspect: MainAspect = this.aspectLoader.mainAspect;\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkedDependencies) {\n const directDeps = new Set<string>();\n Object.values(manifests).forEach((manifest) => {\n for (const depName of Object.keys({ ...manifest.dependencies, ...manifest.devDependencies })) {\n directDeps.add(depName);\n }\n });\n if (options.linkedDependencies[finalRootDir]) {\n for (const manifest of Object.values(manifests)) {\n if (manifest.name && directDeps.has(manifest.name)) {\n delete options.linkedDependencies[finalRootDir][manifest.name];\n }\n }\n }\n Object.entries(options.linkedDependencies).forEach(([dir, linkedDeps]) => {\n if (!manifests[dir]) {\n manifests[dir] = {};\n }\n manifests[dir].dependencies = Object.assign({}, manifests[dir].dependencies, linkedDeps);\n });\n }\n const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');\n\n // Make sure to take other default if passed options with only one option\n const calculatedPmOpts = {\n ...DEFAULT_PM_INSTALL_OPTIONS,\n cacheRootDir: this.cacheRootDir,\n nodeLinker: this.nodeLinker,\n packageImportMethod: this.packageImportMethod,\n sideEffectsCache: this.sideEffectsCache,\n nodeVersion: this.nodeVersion,\n engineStrict: this.engineStrict,\n packageManagerConfigRootDir: options.packageManagerConfigRootDir,\n peerDependencyRules: this.peerDependencyRules,\n hidePackageManagerOutput,\n ...packageManagerOptions,\n };\n if (options.installTeambitBit) {\n if (!mainAspect.version || !mainAspect.packageName) {\n throw new MainAspectNotInstallable();\n }\n const version = mainAspect.version;\n rootPolicy.add({\n dependencyId: mainAspect.packageName,\n lifecycleType: 'runtime',\n value: {\n version,\n },\n });\n }\n\n if (!packageManagerOptions.rootComponents && !packageManagerOptions.keepExistingModulesDir) {\n // Remove node modules dir for all components dirs, since it might contain left overs from previous install.\n //\n // This is not needed when \"rootComponents\" are used, as in that case the package manager handles the node_modules\n // and it never leaves node_modules in a broken state.\n // Removing node_modules in that case would delete useful state information that is used by Yarn or pnpm.\n await this.cleanCompsNodeModules(componentDirectoryMap);\n }\n\n const messagePrefix = 'running package installation';\n const messageSuffix = `using ${this.packageManager.name}`;\n const message = this.installingContext?.inCapsule\n ? `(capsule) ${messagePrefix} in root dir ${this.rootDir} ${messageSuffix}`\n : `${messagePrefix} ${messageSuffix}`;\n if (!hidePackageManagerOutput) {\n this.logger.setStatusLine(message);\n }\n const startTime = process.hrtime();\n\n // TODO: the cache should be probably passed to the package manager constructor not to the install function\n const installResult = await this.packageManager.install(\n {\n rootDir: finalRootDir,\n manifests,\n componentDirectoryMap,\n },\n calculatedPmOpts\n );\n if (!hidePackageManagerOutput) {\n this.logger.consoleSuccess(`done ${message}`, startTime);\n }\n await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);\n return installResult;\n }\n\n public async pruneModules(rootDir: string): Promise<void> {\n if (!this.packageManager.pruneModules) {\n return;\n }\n await this.packageManager.pruneModules(rootDir);\n }\n\n /**\n * Compute all the component manifests (a.k.a. package.json files) that should be passed to the package manager\n * in order to install the dependencies.\n */\n public async getComponentManifests({\n componentDirectoryMap,\n rootPolicy,\n rootDir,\n dedupe,\n dependencyFilterFn,\n copyPeerToRuntimeOnComponents,\n copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n }: GetComponentManifestsOptions) {\n const options: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe,\n dependencyFilterFn,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n };\n const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(\n undefined,\n undefined,\n rootPolicy,\n rootDir,\n componentDirectoryMap.components,\n options,\n this.installingContext\n );\n const manifests: Record<string, ProjectManifest> = componentDirectoryMap\n .toArray()\n .reduce((acc, [component, dir]) => {\n const packageName = this.dependencyResolver.getPackageName(component);\n const manifest = workspaceManifest.componentsManifestsMap.get(packageName);\n if (manifest) {\n acc[dir] = manifest.toJson({ copyPeerToRuntime: copyPeerToRuntimeOnComponents });\n acc[dir].defaultPeerDependencies = fromPairs(manifest.envPolicy.selfPolicy.toNameVersionTuple());\n }\n return acc;\n }, {});\n if (!manifests[rootDir]) {\n manifests[rootDir] = workspaceManifest.toJson({\n copyPeerToRuntime: copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n });\n }\n return manifests;\n }\n\n private async cleanCompsNodeModules(componentDirectoryMap: ComponentMap<string>) {\n const promises = componentDirectoryMap.toArray().map(([, dir]) => {\n const nmDir = path.join(dir, 'node_modules');\n return fs.remove(nmDir);\n });\n return Promise.all(promises);\n }\n\n private async runPrePostSubscribers(\n subscribers: PreInstallSubscriberList | PostInstallSubscriberList = [],\n type: 'pre' | 'post',\n args: InstallArgs\n ): Promise<void> {\n const message = this.installingContext?.inCapsule\n ? `(capsule) running ${type} install subscribers in root dir ${this.rootDir}`\n : `running ${type} install subscribers`;\n if (!this.installingContext?.inCapsule) {\n this.logger.setStatusLine(message);\n }\n await mapSeries(subscribers, async (subscriber) => {\n return subscriber(this, args);\n });\n if (!this.installingContext?.inCapsule) {\n this.logger.consoleSuccess(message);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["DEFAULT_PM_INSTALL_OPTIONS","dedupe","copyPeerToRuntimeOnRoot","copyPeerToRuntimeOnComponents","installPeersFromEnvs","DEFAULT_INSTALL_OPTIONS","installTeambitBit","DependencyInstaller","constructor","packageManager","aspectLoader","logger","dependencyResolver","rootDir","cacheRootDir","preInstallSubscriberList","postInstallSubscriberList","nodeLinker","packageImportMethod","sideEffectsCache","nodeVersion","engineStrict","peerDependencyRules","neverBuiltDependencies","installingContext","install","rootPolicy","componentDirectoryMap","options","packageManagerOptions","finalRootDir","RootDirNotDefined","manifests","getComponentManifests","resolveVersionsFromDependenciesOnly","referenceLocalPackages","rootComponentsForCapsules","installComponents","args","runPrePostSubscribers","mainAspect","linkedDependencies","JSON","parse","stringify","directDeps","Set","Object","values","forEach","manifest","depName","keys","dependencies","devDependencies","add","name","has","entries","dir","linkedDeps","hidePackageManagerOutput","inCapsule","process","env","VERBOSE_PM_OUTPUT","calculatedPmOpts","packageManagerConfigRootDir","version","packageName","MainAspectNotInstallable","dependencyId","lifecycleType","value","rootComponents","keepExistingModulesDir","cleanCompsNodeModules","messagePrefix","messageSuffix","message","setStatusLine","startTime","hrtime","installResult","consoleSuccess","pruneModules","dependencyFilterFn","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","workspaceManifest","getWorkspaceManifest","undefined","components","toArray","reduce","acc","component","getPackageName","componentsManifestsMap","get","toJson","copyPeerToRuntime","defaultPeerDependencies","fromPairs","envPolicy","selfPolicy","toNameVersionTuple","promises","map","nmDir","path","join","fs","remove","Promise","all","subscribers","type","mapSeries","subscriber"],"sources":["dependency-installer.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { MainAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { ComponentMap } from '@teambit/component';\nimport { CreateFromComponentsOptions, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { PeerDependencyRules, ProjectManifest } from '@pnpm/types';\nimport { fromPairs } from 'lodash';\nimport { MainAspectNotInstallable, RootDirNotDefined } from './exceptions';\nimport { PackageManager, PackageManagerInstallOptions, PackageImportMethod } from './package-manager';\nimport { WorkspacePolicy } from './policy';\n\nconst DEFAULT_PM_INSTALL_OPTIONS: PackageManagerInstallOptions = {\n dedupe: true,\n copyPeerToRuntimeOnRoot: true,\n copyPeerToRuntimeOnComponents: false,\n installPeersFromEnvs: false,\n};\n\nconst DEFAULT_INSTALL_OPTIONS: InstallOptions = {\n installTeambitBit: false,\n};\n\nexport type DepInstallerContext = {\n inCapsule?: boolean;\n};\n\nexport type InstallArgs = {\n rootDir: string | undefined;\n rootPolicy: WorkspacePolicy;\n componentDirectoryMap: ComponentMap<string>;\n options: InstallOptions;\n packageManagerOptions: PackageManagerInstallOptions;\n};\n\nexport type InstallOptions = {\n installTeambitBit: boolean;\n packageManagerConfigRootDir?: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n linkedDependencies?: Record<string, Record<string, string>>;\n};\n\nexport type GetComponentManifestsOptions = {\n componentDirectoryMap: ComponentMap<string>;\n rootPolicy: WorkspacePolicy;\n rootDir: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n} & Pick<\n PackageManagerInstallOptions,\n 'dedupe' | 'dependencyFilterFn' | 'copyPeerToRuntimeOnComponents' | 'copyPeerToRuntimeOnRoot' | 'installPeersFromEnvs'\n>;\n\nexport type PreInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PreInstallSubscriberList = Array<PreInstallSubscriber>;\n\nexport type PostInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PostInstallSubscriberList = Array<PostInstallSubscriber>;\n\nexport class DependencyInstaller {\n constructor(\n /**\n * package manager instance.\n */\n private packageManager: PackageManager,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain,\n\n private rootDir?: string | PathAbsolute,\n\n private cacheRootDir?: string | PathAbsolute,\n\n private preInstallSubscriberList?: PreInstallSubscriberList,\n\n private postInstallSubscriberList?: PostInstallSubscriberList,\n\n private nodeLinker?: 'hoisted' | 'isolated',\n\n private packageImportMethod?: PackageImportMethod,\n\n private sideEffectsCache?: boolean,\n\n private nodeVersion?: string,\n\n private engineStrict?: boolean,\n\n private peerDependencyRules?: PeerDependencyRules,\n\n private neverBuiltDependencies?: string[],\n\n private installingContext: DepInstallerContext = {}\n ) {}\n\n async install(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ) {\n const finalRootDir = rootDir ?? this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const manifests = await this.getComponentManifests({\n ...packageManagerOptions,\n componentDirectoryMap,\n rootPolicy,\n rootDir: finalRootDir,\n resolveVersionsFromDependenciesOnly: options.resolveVersionsFromDependenciesOnly,\n referenceLocalPackages: packageManagerOptions.rootComponentsForCapsules,\n });\n return this.installComponents(\n finalRootDir,\n manifests,\n rootPolicy,\n componentDirectoryMap,\n options,\n packageManagerOptions\n );\n }\n\n async installComponents(\n rootDir: string | undefined,\n manifests: Record<string, ProjectManifest>,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ): Promise<{ dependenciesChanged: boolean }> {\n const args = {\n componentDirectoryMap,\n options,\n packageManagerOptions,\n rootDir,\n rootPolicy,\n };\n await this.runPrePostSubscribers(this.preInstallSubscriberList, 'pre', args);\n const mainAspect: MainAspect = this.aspectLoader.mainAspect;\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkedDependencies) {\n manifests = JSON.parse(JSON.stringify(manifests));\n const linkedDependencies = JSON.parse(\n JSON.stringify(options.linkedDependencies)\n ) as typeof options.linkedDependencies;\n if (linkedDependencies[finalRootDir]) {\n const directDeps = new Set<string>();\n Object.values(manifests).forEach((manifest) => {\n for (const depName of Object.keys({ ...manifest.dependencies, ...manifest.devDependencies })) {\n directDeps.add(depName);\n }\n });\n for (const manifest of Object.values(manifests)) {\n if (manifest.name && directDeps.has(manifest.name)) {\n delete linkedDependencies[finalRootDir][manifest.name];\n }\n }\n }\n Object.entries(linkedDependencies).forEach(([dir, linkedDeps]) => {\n if (!manifests[dir]) {\n manifests[dir] = {};\n }\n manifests[dir].dependencies = {\n ...linkedDeps,\n ...manifests[dir].dependencies,\n };\n });\n }\n const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');\n\n // Make sure to take other default if passed options with only one option\n const calculatedPmOpts = {\n ...DEFAULT_PM_INSTALL_OPTIONS,\n cacheRootDir: this.cacheRootDir,\n nodeLinker: this.nodeLinker,\n packageImportMethod: this.packageImportMethod,\n sideEffectsCache: this.sideEffectsCache,\n nodeVersion: this.nodeVersion,\n engineStrict: this.engineStrict,\n packageManagerConfigRootDir: options.packageManagerConfigRootDir,\n peerDependencyRules: this.peerDependencyRules,\n hidePackageManagerOutput,\n neverBuiltDependencies: ['core-js', ...(this.neverBuiltDependencies ?? [])],\n ...packageManagerOptions,\n };\n if (options.installTeambitBit) {\n if (!mainAspect.version || !mainAspect.packageName) {\n throw new MainAspectNotInstallable();\n }\n const version = mainAspect.version;\n rootPolicy.add({\n dependencyId: mainAspect.packageName,\n lifecycleType: 'runtime',\n value: {\n version,\n },\n });\n }\n\n if (!packageManagerOptions.rootComponents && !packageManagerOptions.keepExistingModulesDir) {\n // Remove node modules dir for all components dirs, since it might contain left overs from previous install.\n //\n // This is not needed when \"rootComponents\" are used, as in that case the package manager handles the node_modules\n // and it never leaves node_modules in a broken state.\n // Removing node_modules in that case would delete useful state information that is used by Yarn or pnpm.\n await this.cleanCompsNodeModules(componentDirectoryMap);\n }\n\n const messagePrefix = 'running package installation';\n const messageSuffix = `using ${this.packageManager.name}`;\n const message = this.installingContext?.inCapsule\n ? `(capsule) ${messagePrefix} in root dir ${this.rootDir} ${messageSuffix}`\n : `${messagePrefix} ${messageSuffix}`;\n if (!hidePackageManagerOutput) {\n this.logger.setStatusLine(message);\n }\n const startTime = process.hrtime();\n\n // TODO: the cache should be probably passed to the package manager constructor not to the install function\n const installResult = await this.packageManager.install(\n {\n rootDir: finalRootDir,\n manifests,\n componentDirectoryMap,\n },\n calculatedPmOpts\n );\n if (!hidePackageManagerOutput) {\n this.logger.consoleSuccess(`done ${message}`, startTime);\n }\n await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);\n return installResult;\n }\n\n public async pruneModules(rootDir: string): Promise<void> {\n if (!this.packageManager.pruneModules) {\n return;\n }\n await this.packageManager.pruneModules(rootDir);\n }\n\n /**\n * Compute all the component manifests (a.k.a. package.json files) that should be passed to the package manager\n * in order to install the dependencies.\n */\n public async getComponentManifests({\n componentDirectoryMap,\n rootPolicy,\n rootDir,\n dedupe,\n dependencyFilterFn,\n copyPeerToRuntimeOnComponents,\n copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n }: GetComponentManifestsOptions) {\n const options: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe,\n dependencyFilterFn,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n };\n const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(\n undefined,\n undefined,\n rootPolicy,\n rootDir,\n componentDirectoryMap.components,\n options,\n this.installingContext\n );\n const manifests: Record<string, ProjectManifest> = componentDirectoryMap\n .toArray()\n .reduce((acc, [component, dir]) => {\n const packageName = this.dependencyResolver.getPackageName(component);\n const manifest = workspaceManifest.componentsManifestsMap.get(packageName);\n if (manifest) {\n acc[dir] = manifest.toJson({ copyPeerToRuntime: copyPeerToRuntimeOnComponents });\n acc[dir].defaultPeerDependencies = fromPairs(manifest.envPolicy.selfPolicy.toNameVersionTuple());\n }\n return acc;\n }, {});\n if (!manifests[rootDir]) {\n manifests[rootDir] = workspaceManifest.toJson({\n copyPeerToRuntime: copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n });\n }\n return manifests;\n }\n\n private async cleanCompsNodeModules(componentDirectoryMap: ComponentMap<string>) {\n const promises = componentDirectoryMap.toArray().map(([, dir]) => {\n const nmDir = path.join(dir, 'node_modules');\n return fs.remove(nmDir);\n });\n return Promise.all(promises);\n }\n\n private async runPrePostSubscribers(\n subscribers: PreInstallSubscriberList | PostInstallSubscriberList = [],\n type: 'pre' | 'post',\n args: InstallArgs\n ): Promise<void> {\n const message = this.installingContext?.inCapsule\n ? `(capsule) running ${type} install subscribers in root dir ${this.rootDir}`\n : `running ${type} install subscribers`;\n if (!this.installingContext?.inCapsule) {\n this.logger.setStatusLine(message);\n }\n await mapSeries(subscribers, async (subscriber) => {\n return subscriber(this, args);\n });\n if (!this.installingContext?.inCapsule) {\n this.logger.consoleSuccess(message);\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAOA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AACA;EAAA;EAAA;IAAA;EAAA;EAAA;AAAA;AAA2E;AAAA;AAI3E,MAAMA,0BAAwD,GAAG;EAC/DC,MAAM,EAAE,IAAI;EACZC,uBAAuB,EAAE,IAAI;EAC7BC,6BAA6B,EAAE,KAAK;EACpCC,oBAAoB,EAAE;AACxB,CAAC;AAED,MAAMC,uBAAuC,GAAG;EAC9CC,iBAAiB,EAAE;AACrB,CAAC;AAsCM,MAAMC,mBAAmB,CAAC;EAC/BC,WAAW;EACT;AACJ;AACA;EACYC,cAA8B,EAE9BC,YAA8B,EAE9BC,MAAc,EAEdC,kBAA0C,EAE1CC,OAA+B,EAE/BC,YAAoC,EAEpCC,wBAAmD,EAEnDC,yBAAqD,EAErDC,UAAmC,EAEnCC,mBAAyC,EAEzCC,gBAA0B,EAE1BC,WAAoB,EAEpBC,YAAsB,EAEtBC,mBAAyC,EAEzCC,sBAAiC,EAEjCC,iBAAsC,GAAG,CAAC,CAAC,EACnD;IAAA,KA/BQf,cAA8B,GAA9BA,cAA8B;IAAA,KAE9BC,YAA8B,GAA9BA,YAA8B;IAAA,KAE9BC,MAAc,GAAdA,MAAc;IAAA,KAEdC,kBAA0C,GAA1CA,kBAA0C;IAAA,KAE1CC,OAA+B,GAA/BA,OAA+B;IAAA,KAE/BC,YAAoC,GAApCA,YAAoC;IAAA,KAEpCC,wBAAmD,GAAnDA,wBAAmD;IAAA,KAEnDC,yBAAqD,GAArDA,yBAAqD;IAAA,KAErDC,UAAmC,GAAnCA,UAAmC;IAAA,KAEnCC,mBAAyC,GAAzCA,mBAAyC;IAAA,KAEzCC,gBAA0B,GAA1BA,gBAA0B;IAAA,KAE1BC,WAAoB,GAApBA,WAAoB;IAAA,KAEpBC,YAAsB,GAAtBA,YAAsB;IAAA,KAEtBC,mBAAyC,GAAzCA,mBAAyC;IAAA,KAEzCC,sBAAiC,GAAjCA,sBAAiC;IAAA,KAEjCC,iBAAsC,GAAtCA,iBAAsC;EAC7C;EAEH,MAAMC,OAAO,CACXZ,OAA2B,EAC3Ba,UAA2B,EAC3BC,qBAA2C,EAC3CC,OAAuB,GAAGvB,uBAAuB,EACjDwB,qBAAmD,GAAG7B,0BAA0B,EAChF;IACA,MAAM8B,YAAY,GAAGjB,OAAO,aAAPA,OAAO,cAAPA,OAAO,GAAI,IAAI,CAACA,OAAO;IAC5C,IAAI,CAACiB,YAAY,EAAE;MACjB,MAAM,KAAIC,+BAAiB,GAAE;IAC/B;IACA,MAAMC,SAAS,GAAG,MAAM,IAAI,CAACC,qBAAqB,iCAC7CJ,qBAAqB;MACxBF,qBAAqB;MACrBD,UAAU;MACVb,OAAO,EAAEiB,YAAY;MACrBI,mCAAmC,EAAEN,OAAO,CAACM,mCAAmC;MAChFC,sBAAsB,EAAEN,qBAAqB,CAACO;IAAyB,GACvE;IACF,OAAO,IAAI,CAACC,iBAAiB,CAC3BP,YAAY,EACZE,SAAS,EACTN,UAAU,EACVC,qBAAqB,EACrBC,OAAO,EACPC,qBAAqB,CACtB;EACH;EAEA,MAAMQ,iBAAiB,CACrBxB,OAA2B,EAC3BmB,SAA0C,EAC1CN,UAA2B,EAC3BC,qBAA2C,EAC3CC,OAAuB,GAAGvB,uBAAuB,EACjDwB,qBAAmD,GAAG7B,0BAA0B,EACrC;IAAA;IAC3C,MAAMsC,IAAI,GAAG;MACXX,qBAAqB;MACrBC,OAAO;MACPC,qBAAqB;MACrBhB,OAAO;MACPa;IACF,CAAC;IACD,MAAM,IAAI,CAACa,qBAAqB,CAAC,IAAI,CAACxB,wBAAwB,EAAE,KAAK,EAAEuB,IAAI,CAAC;IAC5E,MAAME,UAAsB,GAAG,IAAI,CAAC9B,YAAY,CAAC8B,UAAU;IAC3D,MAAMV,YAAY,GAAGjB,OAAO,IAAI,IAAI,CAACA,OAAO;IAC5C,IAAI,CAACiB,YAAY,EAAE;MACjB,MAAM,KAAIC,+BAAiB,GAAE;IAC/B;IACA,IAAIH,OAAO,CAACa,kBAAkB,EAAE;MAC9BT,SAAS,GAAGU,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAACZ,SAAS,CAAC,CAAC;MACjD,MAAMS,kBAAkB,GAAGC,IAAI,CAACC,KAAK,CACnCD,IAAI,CAACE,SAAS,CAAChB,OAAO,CAACa,kBAAkB,CAAC,CACN;MACtC,IAAIA,kBAAkB,CAACX,YAAY,CAAC,EAAE;QACpC,MAAMe,UAAU,GAAG,IAAIC,GAAG,EAAU;QACpCC,MAAM,CAACC,MAAM,CAAChB,SAAS,CAAC,CAACiB,OAAO,CAAEC,QAAQ,IAAK;UAC7C,KAAK,MAAMC,OAAO,IAAIJ,MAAM,CAACK,IAAI,iCAAMF,QAAQ,CAACG,YAAY,GAAKH,QAAQ,CAACI,eAAe,EAAG,EAAE;YAC5FT,UAAU,CAACU,GAAG,CAACJ,OAAO,CAAC;UACzB;QACF,CAAC,CAAC;QACF,KAAK,MAAMD,QAAQ,IAAIH,MAAM,CAACC,MAAM,CAAChB,SAAS,CAAC,EAAE;UAC/C,IAAIkB,QAAQ,CAACM,IAAI,IAAIX,UAAU,CAACY,GAAG,CAACP,QAAQ,CAACM,IAAI,CAAC,EAAE;YAClD,OAAOf,kBAAkB,CAACX,YAAY,CAAC,CAACoB,QAAQ,CAACM,IAAI,CAAC;UACxD;QACF;MACF;MACAT,MAAM,CAACW,OAAO,CAACjB,kBAAkB,CAAC,CAACQ,OAAO,CAAC,CAAC,CAACU,GAAG,EAAEC,UAAU,CAAC,KAAK;QAChE,IAAI,CAAC5B,SAAS,CAAC2B,GAAG,CAAC,EAAE;UACnB3B,SAAS,CAAC2B,GAAG,CAAC,GAAG,CAAC,CAAC;QACrB;QACA3B,SAAS,CAAC2B,GAAG,CAAC,CAACN,YAAY,mCACtBO,UAAU,GACV5B,SAAS,CAAC2B,GAAG,CAAC,CAACN,YAAY,CAC/B;MACH,CAAC,CAAC;IACJ;IACA,MAAMQ,wBAAwB,GAAG,CAAC,EAAE,IAAI,CAACrC,iBAAiB,CAACsC,SAAS,IAAIC,OAAO,CAACC,GAAG,CAACC,iBAAiB,KAAK,MAAM,CAAC;;IAEjH;IACA,MAAMC,gBAAgB,mCACjBlE,0BAA0B;MAC7Bc,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/BG,UAAU,EAAE,IAAI,CAACA,UAAU;MAC3BC,mBAAmB,EAAE,IAAI,CAACA,mBAAmB;MAC7CC,gBAAgB,EAAE,IAAI,CAACA,gBAAgB;MACvCC,WAAW,EAAE,IAAI,CAACA,WAAW;MAC7BC,YAAY,EAAE,IAAI,CAACA,YAAY;MAC/B8C,2BAA2B,EAAEvC,OAAO,CAACuC,2BAA2B;MAChE7C,mBAAmB,EAAE,IAAI,CAACA,mBAAmB;MAC7CuC,wBAAwB;MACxBtC,sBAAsB,EAAE,CAAC,SAAS,EAAE,6BAAI,IAAI,CAACA,sBAAsB,yEAAI,EAAE,CAAC;IAAC,GACxEM,qBAAqB,CACzB;IACD,IAAID,OAAO,CAACtB,iBAAiB,EAAE;MAC7B,IAAI,CAACkC,UAAU,CAAC4B,OAAO,IAAI,CAAC5B,UAAU,CAAC6B,WAAW,EAAE;QAClD,MAAM,KAAIC,sCAAwB,GAAE;MACtC;MACA,MAAMF,OAAO,GAAG5B,UAAU,CAAC4B,OAAO;MAClC1C,UAAU,CAAC6B,GAAG,CAAC;QACbgB,YAAY,EAAE/B,UAAU,CAAC6B,WAAW;QACpCG,aAAa,EAAE,SAAS;QACxBC,KAAK,EAAE;UACLL;QACF;MACF,CAAC,CAAC;IACJ;IAEA,IAAI,CAACvC,qBAAqB,CAAC6C,cAAc,IAAI,CAAC7C,qBAAqB,CAAC8C,sBAAsB,EAAE;MAC1F;MACA;MACA;MACA;MACA;MACA,MAAM,IAAI,CAACC,qBAAqB,CAACjD,qBAAqB,CAAC;IACzD;IAEA,MAAMkD,aAAa,GAAG,8BAA8B;IACpD,MAAMC,aAAa,GAAI,SAAQ,IAAI,CAACrE,cAAc,CAAC+C,IAAK,EAAC;IACzD,MAAMuB,OAAO,GAAG,6BAAI,CAACvD,iBAAiB,kDAAtB,sBAAwBsC,SAAS,GAC5C,aAAYe,aAAc,gBAAe,IAAI,CAAChE,OAAQ,IAAGiE,aAAc,EAAC,GACxE,GAAED,aAAc,IAAGC,aAAc,EAAC;IACvC,IAAI,CAACjB,wBAAwB,EAAE;MAC7B,IAAI,CAAClD,MAAM,CAACqE,aAAa,CAACD,OAAO,CAAC;IACpC;IACA,MAAME,SAAS,GAAGlB,OAAO,CAACmB,MAAM,EAAE;;IAElC;IACA,MAAMC,aAAa,GAAG,MAAM,IAAI,CAAC1E,cAAc,CAACgB,OAAO,CACrD;MACEZ,OAAO,EAAEiB,YAAY;MACrBE,SAAS;MACTL;IACF,CAAC,EACDuC,gBAAgB,CACjB;IACD,IAAI,CAACL,wBAAwB,EAAE;MAC7B,IAAI,CAAClD,MAAM,CAACyE,cAAc,CAAE,QAAOL,OAAQ,EAAC,EAAEE,SAAS,CAAC;IAC1D;IACA,MAAM,IAAI,CAAC1C,qBAAqB,CAAC,IAAI,CAACvB,yBAAyB,EAAE,MAAM,EAAEsB,IAAI,CAAC;IAC9E,OAAO6C,aAAa;EACtB;EAEA,MAAaE,YAAY,CAACxE,OAAe,EAAiB;IACxD,IAAI,CAAC,IAAI,CAACJ,cAAc,CAAC4E,YAAY,EAAE;MACrC;IACF;IACA,MAAM,IAAI,CAAC5E,cAAc,CAAC4E,YAAY,CAACxE,OAAO,CAAC;EACjD;;EAEA;AACF;AACA;AACA;EACE,MAAaoB,qBAAqB,CAAC;IACjCN,qBAAqB;IACrBD,UAAU;IACVb,OAAO;IACPZ,MAAM;IACNqF,kBAAkB;IAClBnF,6BAA6B;IAC7BD,uBAAuB;IACvBE,oBAAoB;IACpB8B,mCAAmC;IACnCC;EAC4B,CAAC,EAAE;IAC/B,MAAMP,OAAoC,GAAG;MAC3C2D,6BAA6B,EAAE,IAAI;MACnCC,8CAA8C,EAAE,IAAI;MACpDvF,MAAM;MACNqF,kBAAkB;MAClBpD,mCAAmC;MACnCC;IACF,CAAC;IACD,MAAMsD,iBAAiB,GAAG,MAAM,IAAI,CAAC7E,kBAAkB,CAAC8E,oBAAoB,CAC1EC,SAAS,EACTA,SAAS,EACTjE,UAAU,EACVb,OAAO,EACPc,qBAAqB,CAACiE,UAAU,EAChChE,OAAO,EACP,IAAI,CAACJ,iBAAiB,CACvB;IACD,MAAMQ,SAA0C,GAAGL,qBAAqB,CACrEkE,OAAO,EAAE,CACTC,MAAM,CAAC,CAACC,GAAG,EAAE,CAACC,SAAS,EAAErC,GAAG,CAAC,KAAK;MACjC,MAAMU,WAAW,GAAG,IAAI,CAACzD,kBAAkB,CAACqF,cAAc,CAACD,SAAS,CAAC;MACrE,MAAM9C,QAAQ,GAAGuC,iBAAiB,CAACS,sBAAsB,CAACC,GAAG,CAAC9B,WAAW,CAAC;MAC1E,IAAInB,QAAQ,EAAE;QACZ6C,GAAG,CAACpC,GAAG,CAAC,GAAGT,QAAQ,CAACkD,MAAM,CAAC;UAAEC,iBAAiB,EAAElG;QAA8B,CAAC,CAAC;QAChF4F,GAAG,CAACpC,GAAG,CAAC,CAAC2C,uBAAuB,GAAG,IAAAC,mBAAS,EAACrD,QAAQ,CAACsD,SAAS,CAACC,UAAU,CAACC,kBAAkB,EAAE,CAAC;MAClG;MACA,OAAOX,GAAG;IACZ,CAAC,EAAE,CAAC,CAAC,CAAC;IACR,IAAI,CAAC/D,SAAS,CAACnB,OAAO,CAAC,EAAE;MACvBmB,SAAS,CAACnB,OAAO,CAAC,GAAG4E,iBAAiB,CAACW,MAAM,CAAC;QAC5CC,iBAAiB,EAAEnG,uBAAuB;QAC1CE;MACF,CAAC,CAAC;IACJ;IACA,OAAO4B,SAAS;EAClB;EAEA,MAAc4C,qBAAqB,CAACjD,qBAA2C,EAAE;IAC/E,MAAMgF,QAAQ,GAAGhF,qBAAqB,CAACkE,OAAO,EAAE,CAACe,GAAG,CAAC,CAAC,GAAGjD,GAAG,CAAC,KAAK;MAChE,MAAMkD,KAAK,GAAGC,eAAI,CAACC,IAAI,CAACpD,GAAG,EAAE,cAAc,CAAC;MAC5C,OAAOqD,kBAAE,CAACC,MAAM,CAACJ,KAAK,CAAC;IACzB,CAAC,CAAC;IACF,OAAOK,OAAO,CAACC,GAAG,CAACR,QAAQ,CAAC;EAC9B;EAEA,MAAcpE,qBAAqB,CACjC6E,WAAiE,GAAG,EAAE,EACtEC,IAAoB,EACpB/E,IAAiB,EACF;IAAA;IACf,MAAMyC,OAAO,GAAG,8BAAI,CAACvD,iBAAiB,mDAAtB,uBAAwBsC,SAAS,GAC5C,qBAAoBuD,IAAK,oCAAmC,IAAI,CAACxG,OAAQ,EAAC,GAC1E,WAAUwG,IAAK,sBAAqB;IACzC,IAAI,4BAAC,IAAI,CAAC7F,iBAAiB,mDAAtB,uBAAwBsC,SAAS,GAAE;MACtC,IAAI,CAACnD,MAAM,CAACqE,aAAa,CAACD,OAAO,CAAC;IACpC;IACA,MAAM,IAAAuC,qBAAS,EAACF,WAAW,EAAE,MAAOG,UAAU,IAAK;MACjD,OAAOA,UAAU,CAAC,IAAI,EAAEjF,IAAI,CAAC;IAC/B,CAAC,CAAC;IACF,IAAI,4BAAC,IAAI,CAACd,iBAAiB,mDAAtB,uBAAwBsC,SAAS,GAAE;MACtC,IAAI,CAACnD,MAAM,CAACyE,cAAc,CAACL,OAAO,CAAC;IACrC;EACF;AACF;AAAC"}
@@ -2,7 +2,6 @@ import { ComponentMap, ComponentID, ComponentMain } from '@teambit/component';
2
2
  import { Logger } from '@teambit/logger';
3
3
  import { EnvsMain } from '@teambit/envs';
4
4
  import { AspectLoaderMain } from '@teambit/aspect-loader';
5
- import { WorkspacePolicy } from './policy';
6
5
  import { DependencyResolverMain } from './dependency-resolver.main.runtime';
7
6
  /**
8
7
  * context of the linking process.
@@ -75,8 +74,14 @@ export declare class DependencyLinker {
75
74
  private linkingOptions?;
76
75
  private linkingContext;
77
76
  constructor(dependencyResolver: DependencyResolverMain, aspectLoader: AspectLoaderMain, componentAspect: ComponentMain, envs: EnvsMain, logger: Logger, rootDir?: string | undefined, linkingOptions?: LinkingOptions | undefined, linkingContext?: DepLinkerContext);
78
- link(rootDir: string | undefined, rootPolicy: WorkspacePolicy, componentDirectoryMap: ComponentMap<string>, options?: LinkingOptions): Promise<LinkResults>;
79
- linkCoreAspectsAndLegacy(rootDir: string | undefined, componentIds?: ComponentID[], rootPolicy?: WorkspacePolicy, options?: Pick<LinkingOptions, 'linkTeambitBit' | 'linkCoreAspects'>): Promise<LinkResults>;
77
+ createLinks(rootDir: string, linkedDeps: Record<string, string>): Promise<void>;
78
+ calculateLinkedDeps(rootDir: string | undefined, componentDirectoryMap: ComponentMap<string>, options?: LinkingOptions): Promise<{
79
+ linkedRootDeps: Record<string, string>;
80
+ linkResults: LinkResults;
81
+ }>;
82
+ private linkDetailToLocalDepEntry;
83
+ private _calculateLinks;
84
+ linkCoreAspectsAndLegacy(rootDir: string, componentIds?: ComponentID[], options?: Pick<LinkingOptions, 'linkTeambitBit' | 'linkCoreAspects'>): Promise<LinkResults>;
80
85
  private linkToDir;
81
86
  /**
82
87
  * Add symlinks from the node_modules in the component's root-dir to the workspace node_modules
@@ -2,6 +2,7 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
4
  require("core-js/modules/es.array.iterator.js");
5
+ require("core-js/modules/es.object.from-entries.js");
5
6
  require("core-js/modules/es.promise.js");
6
7
  require("core-js/modules/es.regexp.exec.js");
7
8
  Object.defineProperty(exports, "__esModule", {
@@ -71,13 +72,6 @@ function _componentIdToPackageName() {
71
72
  };
72
73
  return data;
73
74
  }
74
- function _symlink() {
75
- const data = _interopRequireDefault(require("@teambit/legacy/dist/links/symlink"));
76
- _symlink = function () {
77
- return data;
78
- };
79
- return data;
80
- }
81
75
  function _aspectLoader() {
82
76
  const data = require("@teambit/aspect-loader");
83
77
  _aspectLoader = function () {
@@ -92,13 +86,6 @@ function _exceptions() {
92
86
  };
93
87
  return data;
94
88
  }
95
- function _policy() {
96
- const data = require("./policy");
97
- _policy = function () {
98
- return data;
99
- };
100
- return data;
101
- }
102
89
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
103
90
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2().default)(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
104
91
  const DEFAULT_LINKING_OPTIONS = {
@@ -119,7 +106,48 @@ class DependencyLinker {
119
106
  this.linkingOptions = linkingOptions;
120
107
  this.linkingContext = linkingContext;
121
108
  }
122
- async link(rootDir, rootPolicy, componentDirectoryMap, options = {}) {
109
+ async createLinks(rootDir, linkedDeps) {
110
+ const modulesDir = _path().default.join(rootDir, 'node_modules');
111
+ await Promise.all(Object.entries(linkedDeps).map(([packageName, linkPath]) => (0, _utils().createSymlinkOrCopy)(linkPath.substring(5), _path().default.join(modulesDir, packageName))));
112
+ }
113
+ async calculateLinkedDeps(rootDir, componentDirectoryMap, options = {}) {
114
+ const linkResults = await this._calculateLinks(rootDir, componentDirectoryMap, options);
115
+ const localLinks = [];
116
+ if (linkResults.teambitBitLink) {
117
+ localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitBitLink.linkDetail));
118
+ }
119
+ if (linkResults.coreAspectsLinks) {
120
+ linkResults.coreAspectsLinks.forEach(link => {
121
+ localLinks.push(this.linkDetailToLocalDepEntry(link.linkDetail));
122
+ });
123
+ }
124
+ if (linkResults.harmonyLink) {
125
+ localLinks.push(this.linkDetailToLocalDepEntry(linkResults.harmonyLink));
126
+ }
127
+ if (linkResults.teambitLegacyLink) {
128
+ localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitLegacyLink));
129
+ }
130
+ if (linkResults.resolvedFromEnvLinks) {
131
+ linkResults.resolvedFromEnvLinks.forEach(link => {
132
+ link.linksDetail.forEach(linkDetail => {
133
+ localLinks.push(this.linkDetailToLocalDepEntry(linkDetail));
134
+ });
135
+ });
136
+ }
137
+ if (linkResults.linkToDirResults) {
138
+ linkResults.linkToDirResults.forEach(link => {
139
+ localLinks.push(this.linkDetailToLocalDepEntry(link.linksDetail));
140
+ });
141
+ }
142
+ return {
143
+ linkedRootDeps: Object.fromEntries(localLinks.map(([key, value]) => [key, `link:${value}`])),
144
+ linkResults
145
+ };
146
+ }
147
+ linkDetailToLocalDepEntry(linkDetail) {
148
+ return [linkDetail.packageName, linkDetail.from];
149
+ }
150
+ async _calculateLinks(rootDir, componentDirectoryMap, options = {}) {
123
151
  var _this$linkingContext, _this$linkingContext2, _this$linkingContext3;
124
152
  const outputMessage = (_this$linkingContext = this.linkingContext) !== null && _this$linkingContext !== void 0 && _this$linkingContext.inCapsule ? `(capsule) linking components in root dir: ${rootDir || this.rootDir}` : 'linking components';
125
153
  if (!((_this$linkingContext2 = this.linkingContext) !== null && _this$linkingContext2 !== void 0 && _this$linkingContext2.inCapsule)) {
@@ -154,13 +182,13 @@ class DependencyLinker {
154
182
  componentIds.push(comp.id);
155
183
  return undefined;
156
184
  });
157
- result = _objectSpread(_objectSpread({}, result), await this.linkCoreAspectsAndLegacy(rootDir, componentIds, rootPolicy, linkingOpts));
185
+ result = _objectSpread(_objectSpread({}, result), await this.linkCoreAspectsAndLegacy(finalRootDir, componentIds, linkingOpts));
158
186
  if (!((_this$linkingContext3 = this.linkingContext) !== null && _this$linkingContext3 !== void 0 && _this$linkingContext3.inCapsule)) {
159
187
  this.logger.consoleSuccess(outputMessage, startTime);
160
188
  }
161
189
  return result;
162
190
  }
163
- async linkCoreAspectsAndLegacy(rootDir, componentIds = [], rootPolicy = new (_policy().WorkspacePolicy)([]), options = {}) {
191
+ async linkCoreAspectsAndLegacy(rootDir, componentIds = [], options = {}) {
164
192
  const result = {};
165
193
  const componentIdsWithoutVersions = [];
166
194
  componentIds.map(id => {
@@ -169,23 +197,19 @@ class DependencyLinker {
169
197
  }));
170
198
  return undefined;
171
199
  });
172
- const finalRootDir = rootDir || this.rootDir;
173
- if (!finalRootDir) {
174
- throw new (_exceptions().RootDirNotDefined)();
175
- }
176
200
  const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});
177
- if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(finalRootDir)) {
178
- const bitLink = await this.linkBitAspectIfNotExist(_path().default.join(finalRootDir, 'node_modules'), componentIdsWithoutVersions);
201
+ if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(rootDir)) {
202
+ const bitLink = await this.linkBitAspectIfNotExist(_path().default.join(rootDir, 'node_modules'), componentIdsWithoutVersions);
179
203
  result.teambitBitLink = bitLink;
180
204
  }
181
- if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(finalRootDir)) {
205
+ if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(rootDir)) {
182
206
  const hasLocalInstallation = !linkingOpts.linkTeambitBit;
183
- const coreAspectsLinks = await this.linkNonExistingCoreAspects(_path().default.join(finalRootDir, 'node_modules'), componentIdsWithoutVersions, hasLocalInstallation);
207
+ const coreAspectsLinks = await this.linkNonExistingCoreAspects(_path().default.join(rootDir, 'node_modules'), componentIdsWithoutVersions, hasLocalInstallation);
184
208
  result.coreAspectsLinks = coreAspectsLinks;
185
209
  }
186
- const teambitLegacyLink = this.linkTeambitLegacy(finalRootDir, rootPolicy);
210
+ const teambitLegacyLink = this.linkTeambitLegacy(rootDir);
187
211
  result.teambitLegacyLink = teambitLegacyLink;
188
- const harmonyLink = this.linkHarmony(finalRootDir, rootPolicy);
212
+ const harmonyLink = this.linkHarmony(rootDir);
189
213
  result.harmonyLink = harmonyLink;
190
214
  return result;
191
215
  }
@@ -284,11 +308,7 @@ class DependencyLinker {
284
308
  from: `${linkSrc} ${origPath}`,
285
309
  to: linkTarget
286
310
  };
287
- const linkTargetParent = _path().default.resolve(linkTarget, '..');
288
- const relativeSrc = _path().default.relative(linkTargetParent, linkSrc);
289
- const symlink = new (_symlink().default)(relativeSrc, linkTarget, component.id._legacy, false);
290
311
  this.logger.info(`linking nested dependency ${folderEntry.moduleName} for component ${component}. link src: ${linkSrc} link target: ${linkTarget}`);
291
- symlink.write();
292
312
  return linkDetail;
293
313
  });
294
314
  const filteredLinks = (0, _lodash().compact)(oneComponentLinks);
@@ -347,9 +367,7 @@ class DependencyLinker {
347
367
  from: linkSrc,
348
368
  to: linkTarget
349
369
  };
350
- _fsExtra().default.removeSync(linkTarget);
351
370
  this.logger.info(`linking dependency ${depEntry.dependencyId} from env directory ${envDir}. link src: ${linkSrc} link target: ${linkTarget}`);
352
- (0, _utils().createSymlinkOrCopy)(linkSrc, linkTarget);
353
371
  return linkDetail;
354
372
  });
355
373
  const oneComponentLinks = await Promise.all(oneComponentLinksP);
@@ -387,7 +405,6 @@ class DependencyLinker {
387
405
  if (!shouldSymlink) return undefined;
388
406
  const src = this.aspectLoader.mainAspect.path;
389
407
  await _fsExtra().default.ensureDir(_path().default.dirname(target));
390
- (0, _utils().createSymlinkOrCopy)(src, target);
391
408
  return {
392
409
  packageName: this.aspectLoader.mainAspect.packageName,
393
410
  from: src,
@@ -440,7 +457,6 @@ class DependencyLinker {
440
457
  if (!isAspectDirExist) {
441
458
  this.logger.debug(`linkCoreAspect: aspectDir ${aspectDir} does not exist, linking it to ${target}`);
442
459
  aspectDir = (0, _aspectLoader().getAspectDir)(id);
443
- (0, _utils().createSymlinkOrCopy)(aspectDir, target);
444
460
  return {
445
461
  aspectId: id,
446
462
  linkDetail: {
@@ -461,7 +477,6 @@ class DependencyLinker {
461
477
  return undefined;
462
478
  }
463
479
  this.logger.debug(`linkCoreAspect: linking aspectPath ${aspectPath} to ${target}`);
464
- (0, _utils().createSymlinkOrCopy)(aspectPath, target);
465
480
  return {
466
481
  aspectId: id,
467
482
  linkDetail: {
@@ -493,38 +508,22 @@ class DependencyLinker {
493
508
  this.logger.debug(`removing link target, target ${targetPath} already exist. skipping it`);
494
509
  return false;
495
510
  }
496
- // it's a symlink, remove is as it might point to an older version
497
- _fsExtra().default.removeSync(targetPath);
498
511
  return true;
499
512
  }
500
513
  return true;
501
514
  }
502
- linkNonAspectCorePackages(rootDir, name, packageName = `@teambit/${name}`, skipExisting = false, existsInRootPolicy = false) {
515
+ linkNonAspectCorePackages(rootDir, name) {
503
516
  if (!this.aspectLoader.mainAspect) return undefined;
504
517
  if (!this.aspectLoader.mainAspect.packageName) {
505
518
  throw new (_exceptions().MainAspectNotLinkable)();
506
519
  }
507
520
  const mainAspectPath = _path().default.join(rootDir, this.aspectLoader.mainAspect.packageName);
508
521
  const distDir = _path().default.join(mainAspectPath, 'dist', name);
522
+ const packageName = `@teambit/${name}`;
509
523
  const target = _path().default.join(rootDir, 'node_modules', packageName);
510
- const isTargetExisting = _fsExtra().default.pathExistsSync(target);
511
- if (skipExisting && isTargetExisting) {
512
- return undefined;
513
- }
514
- let shouldSymlink;
515
- // In case it's not part of the workspace policy we want to remove it anyway, as we want it to be linked to
516
- // bit version
517
- if (isTargetExisting && !existsInRootPolicy) {
518
- _fsExtra().default.removeSync(target);
519
- shouldSymlink = true;
520
- } else {
521
- shouldSymlink = this.removeSymlinkTarget(target);
522
- }
523
- if (!shouldSymlink) return undefined;
524
524
  const isDistDirExist = _fsExtra().default.pathExistsSync(distDir);
525
525
  if (!isDistDirExist) {
526
526
  const newDir = getDistDirForDevEnv(packageName);
527
- (0, _utils().createSymlinkOrCopy)(newDir, target);
528
527
  return {
529
528
  packageName,
530
529
  from: newDir,
@@ -535,12 +534,6 @@ class DependencyLinker {
535
534
  // eslint-disable-next-line global-require, import/no-dynamic-require
536
535
  const module = require(distDir);
537
536
  const resolvedPath = _path().default.resolve(_path().default.join(module.path, '..', '..'));
538
- // in this case we want the symlinks to be relative links
539
- // Using the fs module to make sure it is relative to the target
540
- if (_fsExtra().default.existsSync(target)) {
541
- return undefined;
542
- }
543
- (0, _utils().createSymlinkOrCopy)(resolvedPath, target);
544
537
  return {
545
538
  packageName,
546
539
  from: resolvedPath,
@@ -550,17 +543,11 @@ class DependencyLinker {
550
543
  throw new (_exceptions().NonAspectCorePackageLinkError)(err, packageName);
551
544
  }
552
545
  }
553
- linkHarmony(rootDir, rootPolicy) {
554
- const name = 'harmony';
555
- const packageName = `@teambit/${name}`;
556
- const existsInRootPolicy = Boolean(rootPolicy === null || rootPolicy === void 0 ? void 0 : rootPolicy.find(packageName));
557
- return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);
546
+ linkHarmony(rootDir) {
547
+ return this.linkNonAspectCorePackages(rootDir, 'harmony');
558
548
  }
559
- linkTeambitLegacy(rootDir, rootPolicy) {
560
- const name = 'legacy';
561
- const packageName = `@teambit/${name}`;
562
- const existsInRootPolicy = rootPolicy ? !!rootPolicy.find(packageName) : false;
563
- return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);
549
+ linkTeambitLegacy(rootDir) {
550
+ return this.linkNonAspectCorePackages(rootDir, 'legacy');
564
551
  }
565
552
  }
566
553