@teambit/dependency-resolver 0.0.1035 → 0.0.1036

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.
@@ -5,6 +5,9 @@ import { Logger } from '@teambit/logger';
5
5
  import { PeerDependencyRules, ProjectManifest } from '@pnpm/types';
6
6
  import { PackageManager, PackageManagerInstallOptions, PackageImportMethod } from './package-manager';
7
7
  import { WorkspacePolicy } from './policy';
8
+ export declare type DepInstallerContext = {
9
+ inCapsule?: boolean;
10
+ };
8
11
  export declare type InstallArgs = {
9
12
  rootDir: string | undefined;
10
13
  rootPolicy: WorkspacePolicy;
@@ -47,11 +50,12 @@ export declare class DependencyInstaller {
47
50
  private nodeVersion?;
48
51
  private engineStrict?;
49
52
  private peerDependencyRules?;
53
+ private installingContext;
50
54
  constructor(
51
55
  /**
52
56
  * package manager instance.
53
57
  */
54
- 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);
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);
55
59
  install(rootDir: string | undefined, rootPolicy: WorkspacePolicy, componentDirectoryMap: ComponentMap<string>, options?: InstallOptions, packageManagerOptions?: PackageManagerInstallOptions): Promise<ComponentMap<string>>;
56
60
  installComponents(rootDir: string | undefined, manifests: Record<string, ProjectManifest>, rootPolicy: WorkspacePolicy, componentDirectoryMap: ComponentMap<string>, options?: InstallOptions, packageManagerOptions?: PackageManagerInstallOptions): Promise<ComponentMap<string>>;
57
61
  /**
@@ -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) {
68
+ packageManager, aspectLoader, logger, dependencyResolver, rootDir, cacheRootDir, preInstallSubscriberList, postInstallSubscriberList, nodeLinker, packageImportMethod, sideEffectsCache, nodeVersion, engineStrict, peerDependencyRules, 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.installingContext = installingContext;
83
84
  }
84
85
  async install(rootDir, rootPolicy, componentDirectoryMap, options = DEFAULT_INSTALL_OPTIONS, packageManagerOptions = DEFAULT_PM_INSTALL_OPTIONS) {
85
86
  const finalRootDir = rootDir !== null && rootDir !== void 0 ? rootDir : this.rootDir;
@@ -96,6 +97,7 @@ class DependencyInstaller {
96
97
  return this.installComponents(finalRootDir, manifests, rootPolicy, componentDirectoryMap, options, packageManagerOptions);
97
98
  }
98
99
  async installComponents(rootDir, manifests, rootPolicy, componentDirectoryMap, options = DEFAULT_INSTALL_OPTIONS, packageManagerOptions = DEFAULT_PM_INSTALL_OPTIONS) {
100
+ var _this$installingConte;
99
101
  const args = {
100
102
  componentDirectoryMap,
101
103
  options,
@@ -130,6 +132,8 @@ class DependencyInstaller {
130
132
  manifests[dir].dependencies = Object.assign({}, manifests[dir].dependencies, linkedDeps);
131
133
  });
132
134
  }
135
+ const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');
136
+
133
137
  // Make sure to take other default if passed options with only one option
134
138
  const calculatedPmOpts = _objectSpread(_objectSpread({}, DEFAULT_PM_INSTALL_OPTIONS), {}, {
135
139
  cacheRootDir: this.cacheRootDir,
@@ -139,7 +143,8 @@ class DependencyInstaller {
139
143
  nodeVersion: this.nodeVersion,
140
144
  engineStrict: this.engineStrict,
141
145
  packageManagerConfigRootDir: options.packageManagerConfigRootDir,
142
- peerDependencyRules: this.peerDependencyRules
146
+ peerDependencyRules: this.peerDependencyRules,
147
+ hidePackageManagerOutput
143
148
  }, packageManagerOptions);
144
149
  if (options.installTeambitBit) {
145
150
  if (!mainAspect.version || !mainAspect.packageName) {
@@ -162,6 +167,13 @@ class DependencyInstaller {
162
167
  // Removing node_modules in that case would delete useful state information that is used by Yarn or pnpm.
163
168
  await this.cleanCompsNodeModules(componentDirectoryMap);
164
169
  }
170
+ const messagePrefix = 'running package installation';
171
+ const messageSuffix = `using ${this.packageManager.name}`;
172
+ const message = (_this$installingConte = this.installingContext) !== null && _this$installingConte !== void 0 && _this$installingConte.inCapsule ? `(capsule) ${messagePrefix} in root dir ${this.rootDir} ${messageSuffix}` : `${messagePrefix} ${messageSuffix}`;
173
+ if (!hidePackageManagerOutput) {
174
+ this.logger.setStatusLine(message);
175
+ }
176
+ const startTime = process.hrtime();
165
177
 
166
178
  // TODO: the cache should be probably passed to the package manager constructor not to the install function
167
179
  await this.packageManager.install({
@@ -169,6 +181,9 @@ class DependencyInstaller {
169
181
  manifests,
170
182
  componentDirectoryMap
171
183
  }, calculatedPmOpts);
184
+ if (!hidePackageManagerOutput) {
185
+ this.logger.consoleSuccess(`done ${message}`, startTime);
186
+ }
172
187
  await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);
173
188
  return componentDirectoryMap;
174
189
  }
@@ -197,7 +212,7 @@ class DependencyInstaller {
197
212
  resolveVersionsFromDependenciesOnly,
198
213
  referenceLocalPackages
199
214
  };
200
- const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(undefined, undefined, rootPolicy, rootDir, componentDirectoryMap.components, options);
215
+ const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(undefined, undefined, rootPolicy, rootDir, componentDirectoryMap.components, options, this.installingContext);
201
216
  const manifests = componentDirectoryMap.toArray().reduce((acc, [component, dir]) => {
202
217
  const packageName = this.dependencyResolver.getPackageName(component);
203
218
  const manifest = workspaceManifest.componentsManifestsMap.get(packageName);
@@ -225,15 +240,17 @@ class DependencyInstaller {
225
240
  return Promise.all(promises);
226
241
  }
227
242
  async runPrePostSubscribers(subscribers = [], type, args) {
228
- let message = 'running pre install subscribers';
229
- if (type === 'post') {
230
- message = 'running post install subscribers';
243
+ var _this$installingConte2, _this$installingConte3, _this$installingConte4;
244
+ const message = (_this$installingConte2 = this.installingContext) !== null && _this$installingConte2 !== void 0 && _this$installingConte2.inCapsule ? `(capsule) running ${type} install subscribers in root dir ${this.rootDir}` : `running ${type} install subscribers`;
245
+ if (!((_this$installingConte3 = this.installingContext) !== null && _this$installingConte3 !== void 0 && _this$installingConte3.inCapsule)) {
246
+ this.logger.setStatusLine(message);
231
247
  }
232
- this.logger.setStatusLine(message);
233
248
  await (0, _pMapSeries().default)(subscribers, async subscriber => {
234
249
  return subscriber(this, args);
235
250
  });
236
- this.logger.consoleSuccess(message);
251
+ if (!((_this$installingConte4 = this.installingContext) !== null && _this$installingConte4 !== void 0 && _this$installingConte4.inCapsule)) {
252
+ this.logger.consoleSuccess(message);
253
+ }
237
254
  }
238
255
  }
239
256
  exports.DependencyInstaller = DependencyInstaller;
@@ -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","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","calculatedPmOpts","packageManagerConfigRootDir","version","packageName","MainAspectNotInstallable","dependencyId","lifecycleType","value","rootComponents","keepExistingModulesDir","cleanCompsNodeModules","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","message","setStatusLine","mapSeries","subscriber","consoleSuccess"],"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 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\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 ) {\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 // 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 ...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 // TODO: the cache should be probably passed to the package manager constructor not to the install function\n await this.packageManager.install(\n {\n rootDir: finalRootDir,\n manifests,\n componentDirectoryMap,\n },\n calculatedPmOpts\n );\n await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);\n return componentDirectoryMap;\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 );\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 let message = 'running pre install subscribers';\n if (type === 'post') {\n message = 'running post install subscribers';\n }\n this.logger.setStatusLine(message);\n await mapSeries(subscribers, async (subscriber) => {\n return subscriber(this, args);\n });\n this.logger.consoleSuccess(message);\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","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","consoleSuccess","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 ) {\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 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 componentDirectoryMap;\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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"}
@@ -4,6 +4,12 @@ import { EnvsMain } from '@teambit/envs';
4
4
  import { AspectLoaderMain } from '@teambit/aspect-loader';
5
5
  import { WorkspacePolicy } from './policy';
6
6
  import { DependencyResolverMain } from './dependency-resolver.main.runtime';
7
+ /**
8
+ * context of the linking process.
9
+ */
10
+ export declare type DepLinkerContext = {
11
+ inCapsule?: boolean;
12
+ };
7
13
  export declare type LinkingOptions = {
8
14
  rewire?: boolean;
9
15
  /**
@@ -67,7 +73,8 @@ export declare class DependencyLinker {
67
73
  private logger;
68
74
  private rootDir?;
69
75
  private linkingOptions?;
70
- constructor(dependencyResolver: DependencyResolverMain, aspectLoader: AspectLoaderMain, componentAspect: ComponentMain, envs: EnvsMain, logger: Logger, rootDir?: string | undefined, linkingOptions?: LinkingOptions | undefined);
76
+ private linkingContext;
77
+ constructor(dependencyResolver: DependencyResolverMain, aspectLoader: AspectLoaderMain, componentAspect: ComponentMain, envs: EnvsMain, logger: Logger, rootDir?: string | undefined, linkingOptions?: LinkingOptions | undefined, linkingContext?: DepLinkerContext);
71
78
  link(rootDir: string | undefined, rootPolicy: WorkspacePolicy, componentDirectoryMap: ComponentMap<string>, options?: LinkingOptions): Promise<LinkResults>;
72
79
  linkCoreAspectsAndLegacy(rootDir: string | undefined, componentIds?: ComponentID[], rootPolicy?: WorkspacePolicy, options?: Pick<LinkingOptions, 'linkTeambitBit' | 'linkCoreAspects'>): Promise<LinkResults>;
73
80
  private linkToDir;
@@ -109,7 +109,7 @@ const DEFAULT_LINKING_OPTIONS = {
109
109
  linkNestedDepsInNM: true
110
110
  };
111
111
  class DependencyLinker {
112
- constructor(dependencyResolver, aspectLoader, componentAspect, envs, logger, rootDir, linkingOptions) {
112
+ constructor(dependencyResolver, aspectLoader, componentAspect, envs, logger, rootDir, linkingOptions, linkingContext = {}) {
113
113
  this.dependencyResolver = dependencyResolver;
114
114
  this.aspectLoader = aspectLoader;
115
115
  this.componentAspect = componentAspect;
@@ -117,10 +117,16 @@ class DependencyLinker {
117
117
  this.logger = logger;
118
118
  this.rootDir = rootDir;
119
119
  this.linkingOptions = linkingOptions;
120
+ this.linkingContext = linkingContext;
120
121
  }
121
122
  async link(rootDir, rootPolicy, componentDirectoryMap, options = {}) {
122
- this.logger.setStatusLine('linking components');
123
+ var _this$linkingContext, _this$linkingContext2, _this$linkingContext3;
124
+ 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
+ if (!((_this$linkingContext2 = this.linkingContext) !== null && _this$linkingContext2 !== void 0 && _this$linkingContext2.inCapsule)) {
126
+ this.logger.setStatusLine(outputMessage);
127
+ }
123
128
  this.logger.debug('linking components with options', (0, _lodash().omit)(options, ['consumer']));
129
+ const startTime = process.hrtime();
124
130
  let result = {};
125
131
  const finalRootDir = rootDir || this.rootDir;
126
132
  const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});
@@ -149,7 +155,9 @@ class DependencyLinker {
149
155
  return undefined;
150
156
  });
151
157
  result = _objectSpread(_objectSpread({}, result), await this.linkCoreAspectsAndLegacy(rootDir, componentIds, rootPolicy, linkingOpts));
152
- this.logger.consoleSuccess('linking components');
158
+ if (!((_this$linkingContext3 = this.linkingContext) !== null && _this$linkingContext3 !== void 0 && _this$linkingContext3.inCapsule)) {
159
+ this.logger.consoleSuccess(outputMessage, startTime);
160
+ }
153
161
  return result;
154
162
  }
155
163
  async linkCoreAspectsAndLegacy(rootDir, componentIds = [], rootPolicy = new (_policy().WorkspacePolicy)([]), options = {}) {
@@ -1 +1 @@
1
- {"version":3,"names":["DEFAULT_LINKING_OPTIONS","rewire","linkTeambitBit","linkCoreAspects","linkDepsResolvedFromEnv","linkNestedDepsInNM","DependencyLinker","constructor","dependencyResolver","aspectLoader","componentAspect","envs","logger","rootDir","linkingOptions","link","rootPolicy","componentDirectoryMap","options","setStatusLine","debug","omit","result","finalRootDir","linkingOpts","Object","assign","RootDirNotDefined","linkToDir","components","toArray","map","component","linkToDirResults","resolvedFromEnvLinks","nestedDepsInNmLinks","addSymlinkFromComponentDirNMToWorkspaceDirNM","componentIds","_dir","comp","push","id","undefined","linkCoreAspectsAndLegacy","consoleSuccess","WorkspacePolicy","componentIdsWithoutVersions","toString","ignoreVersion","isBitRepoWorkspace","bitLink","linkBitAspectIfNotExist","path","join","teambitBitLink","hasLocalInstallation","coreAspectsLinks","linkNonExistingCoreAspects","teambitLegacyLink","linkTeambitLegacy","harmonyLink","linkHarmony","targetDir","results","componentPackageName","componentIdToPackageName","state","_consumer","componentId","linksDetail","packageName","from","to","forEach","createSymlinkOrCopy","rootNodeModules","getPackagesFoldersToLink","dir","parent","folders","fs","readdirSync","withFileTypes","filter","dirent","name","startsWith","isDirectory","isSymbolicLink","dirPath","moduleName","moduleNameToResolve","isBuiltinModule","resolvedModuleFrom","resolveModuleFromDir","origPath","resolveModuleDirFromFile","flatten","linksOfAllComponents","compDirNM","existsSync","innerNMofComponentInNM","isPathSymlink","packagesFoldersToLink","ensureDirSync","oneComponentLinks","folderEntry","linkTarget","linkSrc","linkDetail","linkTargetParent","resolve","relativeSrc","relative","symlink","Symlink","_legacy","info","write","filteredLinks","compact","componentsNeedLinks","componentsNeedLinksP","policy","getPolicy","resolvedFromEnv","getResolvedFromEnv","length","env","getEnv","componentNeedLink","Promise","all","envsStringIds","obj","uniqEnvIds","uniq","host","getHost","resolvedEnvIds","resolveMultipleComponentIds","resolvedAspects","resolveAspects","resolvedAspectsIndex","reduce","acc","curr","getId","allLinksP","entry","oneComponentLinksP","entries","depEntry","dependencyId","envDir","aspectPath","resolvedModule","console","removeSync","depsLinkedToEnvResult","mainAspect","mainAspectId","existing","find","linkBit","aspectId","MainAspectNotLinkable","target","shouldSymlink","removeSymlinkTarget","src","ensureDir","dirname","coreAspectsIds","getCoreAspectIds","filtered","getCoreAspectName","linkCoreAspect","getCoreAspectPackageName","mainAspectPath","aspectDir","isAspectDirExist","pathExistsSync","getAspectDir","module","require","err","CoreAspectLinkError","targetPath","targetStat","lstatSync","e","linkNonAspectCorePackages","skipExisting","existsInRootPolicy","distDir","isTargetExisting","isDistDirExist","newDir","getDistDirForDevEnv","resolvedPath","NonAspectCorePackageLinkError","Boolean","moduleDirectory","includes","nmDir","__dirname","substring","indexOf","paths","BitError","fromDir","moduleId","silent","resolveFrom","resolvedModulePath","NM","slice","lastIndexOf","start","end","split","basename","versionStr","head","folderPath","stat"],"sources":["dependency-linker.ts"],"sourcesContent":["import isBuiltinModule from 'is-builtin-module';\nimport path from 'path';\nimport { uniq, compact, flatten, head, omit } from 'lodash';\nimport { Stats } from 'fs';\nimport fs from 'fs-extra';\nimport resolveFrom from 'resolve-from';\nimport { ComponentMap, Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { BitError } from '@teambit/bit-error';\nimport { createSymlinkOrCopy } from '@teambit/legacy/dist/utils';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport Symlink from '@teambit/legacy/dist/links/symlink';\nimport { EnvsMain } from '@teambit/envs';\nimport { AspectLoaderMain, getCoreAspectName, getCoreAspectPackageName, getAspectDir } from '@teambit/aspect-loader';\nimport {\n MainAspectNotLinkable,\n RootDirNotDefined,\n CoreAspectLinkError,\n NonAspectCorePackageLinkError,\n} from './exceptions';\nimport { WorkspacePolicy } from './policy';\nimport { DependencyResolverMain } from './dependency-resolver.main.runtime';\n\nexport type LinkingOptions = {\n rewire?: boolean;\n /**\n * Whether to create link to @teambit/bit in the root node modules\n */\n linkTeambitBit?: boolean;\n /**\n * Whether to create links in the root dir node modules to all core aspects\n */\n linkCoreAspects?: boolean;\n\n linkNestedDepsInNM?: boolean;\n\n /**\n * link to another project, so that project could use components from this workspace.\n * similar to npm/yarn link\n */\n linkToDir?: string;\n\n /**\n * whether link should import objects before linking\n */\n fetchObject?: boolean;\n\n /**\n * Link deps which should be linked to the env\n */\n linkDepsResolvedFromEnv?: boolean;\n};\n\nconst DEFAULT_LINKING_OPTIONS: LinkingOptions = {\n rewire: false,\n linkTeambitBit: true,\n linkCoreAspects: true,\n linkDepsResolvedFromEnv: true,\n linkNestedDepsInNM: true,\n};\n\nexport type LinkDetail = { packageName: string; from: string; to: string };\n\nexport type CoreAspectLinkResult = {\n aspectId: string;\n linkDetail: LinkDetail;\n};\n\nexport type DepsLinkedToEnvResult = {\n componentId: string;\n linksDetail: LinkDetail[];\n};\n\nexport type NestedNMDepsLinksResult = {\n componentId: string;\n linksDetail: LinkDetail[];\n};\n\nexport type LinkToDirResult = {\n componentId: string;\n linksDetail: LinkDetail;\n};\n\nexport type LinkResults = {\n teambitBitLink?: CoreAspectLinkResult;\n coreAspectsLinks?: CoreAspectLinkResult[];\n harmonyLink?: LinkDetail;\n teambitLegacyLink?: LinkDetail;\n resolvedFromEnvLinks?: DepsLinkedToEnvResult[];\n nestedDepsInNmLinks?: NestedNMDepsLinksResult[];\n linkToDirResults?: LinkToDirResult[];\n};\n\ntype NestedModuleFolderEntry = {\n moduleName: string;\n path: string;\n origPath?: string;\n};\n\nexport class DependencyLinker {\n constructor(\n private dependencyResolver: DependencyResolverMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private componentAspect: ComponentMain,\n\n private envs: EnvsMain,\n\n private logger: Logger,\n\n private rootDir?: string | PathAbsolute,\n\n private linkingOptions?: LinkingOptions\n ) {}\n\n async link(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: LinkingOptions = {}\n ): Promise<LinkResults> {\n this.logger.setStatusLine('linking components');\n this.logger.debug('linking components with options', omit(options, ['consumer']));\n let result: LinkResults = {};\n const finalRootDir = rootDir || this.rootDir;\n const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkToDir) {\n const components = componentDirectoryMap.toArray().map(([component]) => component);\n const linkToDirResults = await this.linkToDir(finalRootDir, options.linkToDir, components);\n result.linkToDirResults = linkToDirResults;\n return result;\n }\n\n // Link deps which should be linked to the env\n if (linkingOpts.linkDepsResolvedFromEnv) {\n result.resolvedFromEnvLinks = await this.linkDepsResolvedFromEnv(componentDirectoryMap);\n }\n if (linkingOpts.linkNestedDepsInNM) {\n result.nestedDepsInNmLinks = this.addSymlinkFromComponentDirNMToWorkspaceDirNM(\n finalRootDir,\n componentDirectoryMap\n );\n }\n\n // We remove the version since it used in order to check if it's core aspects, and the core aspects arrived from aspect loader without versions\n const componentIds: ComponentID[] = [];\n componentDirectoryMap.map((_dir, comp) => {\n componentIds.push(comp.id);\n return undefined;\n });\n result = {\n ...result,\n ...(await this.linkCoreAspectsAndLegacy(rootDir, componentIds, rootPolicy, linkingOpts)),\n };\n this.logger.consoleSuccess('linking components');\n return result;\n }\n\n public async linkCoreAspectsAndLegacy(\n rootDir: string | undefined,\n componentIds: ComponentID[] = [],\n rootPolicy: WorkspacePolicy = new WorkspacePolicy([]),\n options: Pick<LinkingOptions, 'linkTeambitBit' | 'linkCoreAspects'> = {}\n ) {\n const result: LinkResults = {};\n const componentIdsWithoutVersions: string[] = [];\n componentIds.map((id) => {\n componentIdsWithoutVersions.push(id.toString({ ignoreVersion: true }));\n return undefined;\n });\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(finalRootDir)) {\n const bitLink = await this.linkBitAspectIfNotExist(\n path.join(finalRootDir, 'node_modules'),\n componentIdsWithoutVersions\n );\n result.teambitBitLink = bitLink;\n }\n\n if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(finalRootDir)) {\n const hasLocalInstallation = !linkingOpts.linkTeambitBit;\n const coreAspectsLinks = await this.linkNonExistingCoreAspects(\n path.join(finalRootDir, 'node_modules'),\n componentIdsWithoutVersions,\n hasLocalInstallation\n );\n result.coreAspectsLinks = coreAspectsLinks;\n }\n\n const teambitLegacyLink = this.linkTeambitLegacy(finalRootDir, rootPolicy);\n result.teambitLegacyLink = teambitLegacyLink;\n const harmonyLink = this.linkHarmony(finalRootDir, rootPolicy);\n result.harmonyLink = harmonyLink;\n return result;\n }\n\n private async linkToDir(rootDir: string, targetDir: string, components: Component[]): Promise<LinkToDirResult[]> {\n const results: LinkToDirResult[] = components.map((component) => {\n const componentPackageName = componentIdToPackageName(component.state._consumer);\n return {\n componentId: component.id.toString(),\n linksDetail: {\n packageName: componentPackageName,\n from: path.join(rootDir, 'node_modules', componentPackageName),\n to: path.join(targetDir, 'node_modules', componentPackageName),\n },\n };\n });\n results.forEach(({ componentId, linksDetail }) => {\n createSymlinkOrCopy(linksDetail.from, linksDetail.to, componentId);\n });\n\n return results;\n }\n\n /**\n * Add symlinks from the node_modules in the component's root-dir to the workspace node_modules\n * of the component. e.g.\n * <ws-root>/node_modules/comp1/node_modules/<dep> -> <ws-root>/components/comp1/node_modules/<dep>\n * This is needed because the component is compiled into the dist folder at <ws-root>/node_modules/comp1/dist,\n * so the files in the dist folder need to find the right dependencies of comp1.\n */\n private addSymlinkFromComponentDirNMToWorkspaceDirNM(\n rootDir: string,\n componentDirectoryMap: ComponentMap<string>\n ): NestedNMDepsLinksResult[] {\n const rootNodeModules = path.join(rootDir, 'node_modules');\n const getPackagesFoldersToLink = (dir: string, parent?: string): NestedModuleFolderEntry[] => {\n const folders = fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((dirent) => {\n if (dirent.name.startsWith('.')) {\n return false;\n }\n return dirent.isDirectory() || dirent.isSymbolicLink();\n })\n .map((dirent) => {\n const dirPath = path.join(dir, dirent.name);\n const moduleName = parent ? `${parent}/${dirent.name}` : dirent.name;\n // If we have a folder with a name of built in module (like events)\n // the resolve from will resolve it from the core, so it will return something like 'events'\n // instead of the path.\n // adding a '/' at the end solve this\n const moduleNameToResolve = isBuiltinModule(moduleName) ? `${moduleName}/` : moduleName;\n // This is a scoped package, need to go inside\n if (dirent.name.startsWith('@')) {\n return getPackagesFoldersToLink(dirPath, dirent.name);\n }\n\n if (dirent.isSymbolicLink()) {\n const resolvedModuleFrom = resolveModuleFromDir(dir, moduleNameToResolve);\n if (!resolvedModuleFrom) {\n return {\n moduleName,\n path: dirPath,\n };\n }\n return {\n origPath: dirPath,\n moduleName,\n path: resolveModuleDirFromFile(resolvedModuleFrom, moduleName),\n };\n }\n return {\n moduleName,\n path: dirPath,\n };\n });\n return flatten(folders);\n };\n const linksOfAllComponents = componentDirectoryMap.toArray().map(([component, dir]) => {\n const compDirNM = path.join(dir, 'node_modules');\n if (!fs.existsSync(compDirNM)) return undefined;\n // TODO: support modules with scoped packages (start with @) - we need to make this logic 2 levels\n\n const componentPackageName = componentIdToPackageName(component.state._consumer);\n const innerNMofComponentInNM = path.join(rootNodeModules, componentPackageName);\n // If the folder itself is a symlink, do not try to symlink inside it\n if (isPathSymlink(innerNMofComponentInNM)) {\n return undefined;\n }\n const packagesFoldersToLink: NestedModuleFolderEntry[] = getPackagesFoldersToLink(compDirNM);\n fs.ensureDirSync(innerNMofComponentInNM);\n\n const oneComponentLinks: LinkDetail[] = packagesFoldersToLink.map((folderEntry: NestedModuleFolderEntry) => {\n const linkTarget = path.join(innerNMofComponentInNM, 'node_modules', folderEntry?.moduleName);\n const linkSrc = folderEntry.path;\n // This works as well, consider using it instead\n // const linkSrc = folderEntry.origPath || folderEntry.path;\n const origPath = folderEntry.origPath ? `(${folderEntry.origPath})` : '';\n const linkDetail: LinkDetail = {\n packageName: folderEntry.moduleName,\n from: `${linkSrc} ${origPath}`,\n to: linkTarget,\n };\n const linkTargetParent = path.resolve(linkTarget, '..');\n const relativeSrc = path.relative(linkTargetParent, linkSrc);\n const symlink = new Symlink(relativeSrc, linkTarget, component.id._legacy, false);\n this.logger.info(\n `linking nested dependency ${folderEntry.moduleName} for component ${component}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n symlink.write();\n return linkDetail;\n });\n\n const filteredLinks = compact(oneComponentLinks);\n return {\n componentId: component.id.toString(),\n linksDetail: filteredLinks,\n };\n });\n const filteredLinks = compact(linksOfAllComponents);\n return filteredLinks;\n }\n\n private async linkDepsResolvedFromEnv(\n componentDirectoryMap: ComponentMap<string>\n ): Promise<Array<DepsLinkedToEnvResult>> {\n const componentsNeedLinks: {\n component: Component;\n dir: string;\n env;\n resolvedFromEnv;\n envId?: string;\n envDir?: string;\n }[] = [];\n\n const componentsNeedLinksP = componentDirectoryMap.toArray().map(async ([component, dir]) => {\n const policy = await this.dependencyResolver.getPolicy(component);\n const resolvedFromEnv = policy.getResolvedFromEnv();\n // Nothing should be resolved from env, do nothing\n if (!resolvedFromEnv.length) {\n return;\n }\n const env = this.envs.getEnv(component);\n const componentNeedLink = {\n component,\n dir,\n env,\n resolvedFromEnv,\n };\n componentsNeedLinks.push(componentNeedLink);\n });\n\n await Promise.all(componentsNeedLinksP);\n // Stop if there are not components needs to be linked\n if (!componentsNeedLinks || !componentsNeedLinks.length) return [];\n const envsStringIds = componentsNeedLinks.map((obj) => obj.env.id);\n const uniqEnvIds = uniq(envsStringIds);\n const host = this.componentAspect.getHost();\n const resolvedEnvIds = await host.resolveMultipleComponentIds(uniqEnvIds);\n const resolvedAspects = await host.resolveAspects(undefined, resolvedEnvIds);\n const resolvedAspectsIndex = resolvedAspects.reduce((acc, curr) => {\n if (curr.getId) {\n acc[curr.getId] = curr;\n }\n return acc;\n }, {});\n const allLinksP = componentsNeedLinks.map(async (entry) => {\n const oneComponentLinksP: Array<LinkDetail | undefined> = entry.resolvedFromEnv.entries.map(async (depEntry) => {\n const linkTarget = path.join(entry.dir, 'node_modules', depEntry.dependencyId);\n const envDir = resolvedAspectsIndex[entry.env.id].aspectPath;\n const resolvedModule = resolveModuleFromDir(envDir, depEntry.dependencyId);\n if (!resolvedModule) {\n this.logger.console(`could not resolve ${depEntry.dependencyId} from env directory ${envDir}`);\n return undefined;\n }\n const linkSrc = resolveModuleDirFromFile(resolvedModule, depEntry.dependencyId);\n const linkDetail: LinkDetail = {\n packageName: depEntry.dependencyId,\n from: linkSrc,\n to: linkTarget,\n };\n fs.removeSync(linkTarget);\n this.logger.info(\n `linking dependency ${depEntry.dependencyId} from env directory ${envDir}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n\n createSymlinkOrCopy(linkSrc, linkTarget);\n return linkDetail;\n });\n const oneComponentLinks = await Promise.all(oneComponentLinksP);\n const filteredLinks = compact(oneComponentLinks);\n const depsLinkedToEnvResult: DepsLinkedToEnvResult = {\n componentId: entry.component.id.toString(),\n linksDetail: filteredLinks,\n };\n return depsLinkedToEnvResult;\n });\n return Promise.all(allLinksP);\n }\n\n private async linkBitAspectIfNotExist(\n dir: string,\n componentIds: string[]\n ): Promise<CoreAspectLinkResult | undefined> {\n if (!this.aspectLoader.mainAspect) return undefined;\n const mainAspectId = this.aspectLoader.mainAspect.id;\n const existing = componentIds.find((id) => {\n return id === mainAspectId;\n });\n\n if (existing) {\n return undefined;\n }\n const linkDetail = await this.linkBit(dir);\n if (!linkDetail) return undefined;\n return {\n aspectId: mainAspectId,\n linkDetail,\n };\n }\n\n async linkBit(dir: string): Promise<LinkDetail | undefined> {\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n const target = path.join(dir, this.aspectLoader.mainAspect.packageName);\n const shouldSymlink = this.removeSymlinkTarget(target);\n if (!shouldSymlink) return undefined;\n const src = this.aspectLoader.mainAspect.path;\n await fs.ensureDir(path.dirname(target));\n createSymlinkOrCopy(src, target);\n return { packageName: this.aspectLoader.mainAspect.packageName, from: src, to: target };\n }\n\n private async linkNonExistingCoreAspects(\n dir: string,\n componentIds: string[],\n hasLocalInstallation = false\n ): Promise<CoreAspectLinkResult[]> {\n const coreAspectsIds = this.aspectLoader.getCoreAspectIds();\n const filtered = coreAspectsIds.filter((aspectId) => {\n // Remove bit aspect\n if (aspectId === this.aspectLoader.mainAspect?.id) {\n return false;\n }\n // TODO: use the aspect id once default scope is resolved and the component dir map has the id with scope\n const name = getCoreAspectName(aspectId);\n const existing = componentIds.find((componentId) => {\n return componentId === name || componentId === aspectId;\n });\n if (existing) {\n return false;\n }\n return true;\n });\n\n this.logger.debug(`linkNonExistingCoreAspects: linking the following core aspects ${filtered.join()}`);\n\n const results = filtered.map((id) => {\n return this.linkCoreAspect(dir, id, getCoreAspectName(id), getCoreAspectPackageName(id), hasLocalInstallation);\n });\n return compact(results);\n }\n\n private isBitRepoWorkspace(dir: string) {\n // A special condition to not link core aspects in bit workspace itself\n if (this.aspectLoader.mainAspect?.path.startsWith(dir)) {\n return true;\n }\n return false;\n }\n\n private linkCoreAspect(\n dir: string,\n id: string,\n name: string,\n packageName: string,\n hasLocalInstallation = false\n ): CoreAspectLinkResult | undefined {\n if (!this.aspectLoader.mainAspect) return undefined;\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n\n const mainAspectPath = path.join(dir, this.aspectLoader.mainAspect.packageName);\n let aspectDir = path.join(mainAspectPath, 'dist', name);\n const target = path.join(dir, packageName);\n const shouldSymlink = this.removeSymlinkTarget(target, hasLocalInstallation);\n if (!shouldSymlink) return undefined;\n const isAspectDirExist = fs.pathExistsSync(aspectDir);\n if (!isAspectDirExist) {\n this.logger.debug(`linkCoreAspect: aspectDir ${aspectDir} does not exist, linking it to ${target}`);\n aspectDir = getAspectDir(id);\n createSymlinkOrCopy(aspectDir, target);\n return { aspectId: id, linkDetail: { packageName, from: aspectDir, to: target } };\n }\n\n try {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(aspectDir);\n const aspectPath = path.resolve(path.join(module.path, '..', '..'));\n // in this case we want the symlinks to be relative links\n // Using the fs module to make sure it is relative to the target\n if (fs.existsSync(target)) {\n this.logger.debug(`linkCoreAspect: aspectPath ${aspectPath} skip linking`);\n return undefined;\n }\n this.logger.debug(`linkCoreAspect: linking aspectPath ${aspectPath} to ${target}`);\n createSymlinkOrCopy(aspectPath, target);\n return { aspectId: id, linkDetail: { packageName, from: aspectPath, to: target } };\n } catch (err: any) {\n throw new CoreAspectLinkError(id, err);\n }\n }\n\n /**\n * returns true if it's safe to symlink it later.\n */\n private removeSymlinkTarget(targetPath: string, hasLocalInstallation = false): boolean {\n // TODO: change to fs.lstatSync(dest, {throwIfNoEntry: false});\n // TODO: this requires to upgrade node to v15.3.0 to have the throwIfNoEntry property (maybe upgrade fs-extra will work as well)\n // TODO: we don't use fs.pathExistsSync since it will return false in case the dest is a symlink which will result error on write\n let targetStat: Stats | undefined;\n try {\n targetStat = fs.lstatSync(targetPath);\n // eslint-disable-next-line no-empty\n } catch (e: any) {}\n if (targetStat && !hasLocalInstallation) {\n // Do not override links created by other means\n if (!targetStat.isSymbolicLink()) {\n this.logger.debug(`removing link target, target ${targetPath} already exist. skipping it`);\n return false;\n }\n // it's a symlink, remove is as it might point to an older version\n fs.removeSync(targetPath);\n return true;\n }\n return true;\n }\n\n private linkNonAspectCorePackages(\n rootDir: string,\n name: string,\n packageName = `@teambit/${name}`,\n skipExisting = false,\n existsInRootPolicy = false\n ): LinkDetail | undefined {\n if (!this.aspectLoader.mainAspect) return undefined;\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n const mainAspectPath = path.join(rootDir, this.aspectLoader.mainAspect.packageName);\n const distDir = path.join(mainAspectPath, 'dist', name);\n\n const target = path.join(rootDir, 'node_modules', packageName);\n const isTargetExisting = fs.pathExistsSync(target);\n if (skipExisting && isTargetExisting) {\n return undefined;\n }\n let shouldSymlink;\n // In case it's not part of the workspace policy we want to remove it anyway, as we want it to be linked to\n // bit version\n if (isTargetExisting && !existsInRootPolicy) {\n fs.removeSync(target);\n shouldSymlink = true;\n } else {\n shouldSymlink = this.removeSymlinkTarget(target);\n }\n if (!shouldSymlink) return undefined;\n const isDistDirExist = fs.pathExistsSync(distDir);\n if (!isDistDirExist) {\n const newDir = getDistDirForDevEnv(packageName);\n createSymlinkOrCopy(newDir, target);\n return { packageName, from: newDir, to: target };\n }\n\n try {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(distDir);\n const resolvedPath = path.resolve(path.join(module.path, '..', '..'));\n // in this case we want the symlinks to be relative links\n // Using the fs module to make sure it is relative to the target\n if (fs.existsSync(target)) {\n return undefined;\n }\n createSymlinkOrCopy(resolvedPath, target);\n return { packageName, from: resolvedPath, to: target };\n } catch (err: any) {\n throw new NonAspectCorePackageLinkError(err, packageName);\n }\n }\n\n private linkHarmony(rootDir: string, rootPolicy: WorkspacePolicy): LinkDetail | undefined {\n const name = 'harmony';\n const packageName = `@teambit/${name}`;\n const existsInRootPolicy = Boolean(rootPolicy?.find(packageName));\n\n return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);\n }\n\n private linkTeambitLegacy(rootDir: string, rootPolicy: WorkspacePolicy): LinkDetail | undefined {\n const name = 'legacy';\n const packageName = `@teambit/${name}`;\n\n const existsInRootPolicy = rootPolicy ? !!rootPolicy.find(packageName) : false;\n return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);\n }\n}\n\n/**\n * When running dev env (bd) we need to get the harmony/legacy folder from the node_modules of the clone\n */\nfunction getDistDirForDevEnv(packageName: string): string {\n let moduleDirectory = require.resolve(packageName);\n let dirPath;\n if (moduleDirectory.includes(packageName)) {\n dirPath = path.join(moduleDirectory, '../..'); // to remove the \"index.js\" at the end\n } else {\n // This is usually required for the @teambit/legacy, as we re inside the nm so we can't find it in the other way\n const nmDir = __dirname.substring(0, __dirname.indexOf('@teambit'));\n dirPath = path.join(nmDir, packageName);\n moduleDirectory = require.resolve(packageName, { paths: [nmDir] });\n }\n if (!fs.existsSync(dirPath)) {\n throw new BitError(`unable to find ${packageName} in ${dirPath}`);\n }\n\n return dirPath;\n}\n\n// TODO: extract to new component\nfunction resolveModuleFromDir(fromDir: string, moduleId: string, silent = true): string | undefined {\n if (silent) {\n return resolveFrom.silent(fromDir, moduleId);\n }\n return resolveFrom(fromDir, moduleId);\n}\n\n// TODO: extract to new component\nfunction resolveModuleDirFromFile(resolvedModulePath: string, moduleId: string): string {\n const NM = 'node_modules';\n if (resolvedModulePath.includes(NM)) {\n return path.join(resolvedModulePath.slice(0, resolvedModulePath.lastIndexOf(NM) + NM.length), moduleId);\n }\n\n const [start, end] = resolvedModulePath.split('@');\n if (!end) return path.basename(resolvedModulePath);\n const versionStr = head(end.split('/'));\n return `${start}@${versionStr}`;\n}\n\nfunction isPathSymlink(folderPath: string): boolean | undefined {\n // TODO: change to fs.lstatSync(dest, {throwIfNoEntry: false}); once upgrade fs-extra\n try {\n const stat = fs.lstatSync(folderPath);\n return stat.isSymbolicLink();\n } catch (e: any) {\n return undefined;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["DEFAULT_LINKING_OPTIONS","rewire","linkTeambitBit","linkCoreAspects","linkDepsResolvedFromEnv","linkNestedDepsInNM","DependencyLinker","constructor","dependencyResolver","aspectLoader","componentAspect","envs","logger","rootDir","linkingOptions","linkingContext","link","rootPolicy","componentDirectoryMap","options","outputMessage","inCapsule","setStatusLine","debug","omit","startTime","process","hrtime","result","finalRootDir","linkingOpts","Object","assign","RootDirNotDefined","linkToDir","components","toArray","map","component","linkToDirResults","resolvedFromEnvLinks","nestedDepsInNmLinks","addSymlinkFromComponentDirNMToWorkspaceDirNM","componentIds","_dir","comp","push","id","undefined","linkCoreAspectsAndLegacy","consoleSuccess","WorkspacePolicy","componentIdsWithoutVersions","toString","ignoreVersion","isBitRepoWorkspace","bitLink","linkBitAspectIfNotExist","path","join","teambitBitLink","hasLocalInstallation","coreAspectsLinks","linkNonExistingCoreAspects","teambitLegacyLink","linkTeambitLegacy","harmonyLink","linkHarmony","targetDir","results","componentPackageName","componentIdToPackageName","state","_consumer","componentId","linksDetail","packageName","from","to","forEach","createSymlinkOrCopy","rootNodeModules","getPackagesFoldersToLink","dir","parent","folders","fs","readdirSync","withFileTypes","filter","dirent","name","startsWith","isDirectory","isSymbolicLink","dirPath","moduleName","moduleNameToResolve","isBuiltinModule","resolvedModuleFrom","resolveModuleFromDir","origPath","resolveModuleDirFromFile","flatten","linksOfAllComponents","compDirNM","existsSync","innerNMofComponentInNM","isPathSymlink","packagesFoldersToLink","ensureDirSync","oneComponentLinks","folderEntry","linkTarget","linkSrc","linkDetail","linkTargetParent","resolve","relativeSrc","relative","symlink","Symlink","_legacy","info","write","filteredLinks","compact","componentsNeedLinks","componentsNeedLinksP","policy","getPolicy","resolvedFromEnv","getResolvedFromEnv","length","env","getEnv","componentNeedLink","Promise","all","envsStringIds","obj","uniqEnvIds","uniq","host","getHost","resolvedEnvIds","resolveMultipleComponentIds","resolvedAspects","resolveAspects","resolvedAspectsIndex","reduce","acc","curr","getId","allLinksP","entry","oneComponentLinksP","entries","depEntry","dependencyId","envDir","aspectPath","resolvedModule","console","removeSync","depsLinkedToEnvResult","mainAspect","mainAspectId","existing","find","linkBit","aspectId","MainAspectNotLinkable","target","shouldSymlink","removeSymlinkTarget","src","ensureDir","dirname","coreAspectsIds","getCoreAspectIds","filtered","getCoreAspectName","linkCoreAspect","getCoreAspectPackageName","mainAspectPath","aspectDir","isAspectDirExist","pathExistsSync","getAspectDir","module","require","err","CoreAspectLinkError","targetPath","targetStat","lstatSync","e","linkNonAspectCorePackages","skipExisting","existsInRootPolicy","distDir","isTargetExisting","isDistDirExist","newDir","getDistDirForDevEnv","resolvedPath","NonAspectCorePackageLinkError","Boolean","moduleDirectory","includes","nmDir","__dirname","substring","indexOf","paths","BitError","fromDir","moduleId","silent","resolveFrom","resolvedModulePath","NM","slice","lastIndexOf","start","end","split","basename","versionStr","head","folderPath","stat"],"sources":["dependency-linker.ts"],"sourcesContent":["import isBuiltinModule from 'is-builtin-module';\nimport path from 'path';\nimport { uniq, compact, flatten, head, omit } from 'lodash';\nimport { Stats } from 'fs';\nimport fs from 'fs-extra';\nimport resolveFrom from 'resolve-from';\nimport { ComponentMap, Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { BitError } from '@teambit/bit-error';\nimport { createSymlinkOrCopy } from '@teambit/legacy/dist/utils';\nimport componentIdToPackageName from '@teambit/legacy/dist/utils/bit/component-id-to-package-name';\nimport Symlink from '@teambit/legacy/dist/links/symlink';\nimport { EnvsMain } from '@teambit/envs';\nimport { AspectLoaderMain, getCoreAspectName, getCoreAspectPackageName, getAspectDir } from '@teambit/aspect-loader';\nimport {\n MainAspectNotLinkable,\n RootDirNotDefined,\n CoreAspectLinkError,\n NonAspectCorePackageLinkError,\n} from './exceptions';\nimport { WorkspacePolicy } from './policy';\nimport { DependencyResolverMain } from './dependency-resolver.main.runtime';\n\n/**\n * context of the linking process.\n */\nexport type DepLinkerContext = {\n inCapsule?: boolean;\n};\n\nexport type LinkingOptions = {\n rewire?: boolean;\n /**\n * Whether to create link to @teambit/bit in the root node modules\n */\n linkTeambitBit?: boolean;\n /**\n * Whether to create links in the root dir node modules to all core aspects\n */\n linkCoreAspects?: boolean;\n\n linkNestedDepsInNM?: boolean;\n\n /**\n * link to another project, so that project could use components from this workspace.\n * similar to npm/yarn link\n */\n linkToDir?: string;\n\n /**\n * whether link should import objects before linking\n */\n fetchObject?: boolean;\n\n /**\n * Link deps which should be linked to the env\n */\n linkDepsResolvedFromEnv?: boolean;\n};\n\nconst DEFAULT_LINKING_OPTIONS: LinkingOptions = {\n rewire: false,\n linkTeambitBit: true,\n linkCoreAspects: true,\n linkDepsResolvedFromEnv: true,\n linkNestedDepsInNM: true,\n};\n\nexport type LinkDetail = { packageName: string; from: string; to: string };\n\nexport type CoreAspectLinkResult = {\n aspectId: string;\n linkDetail: LinkDetail;\n};\n\nexport type DepsLinkedToEnvResult = {\n componentId: string;\n linksDetail: LinkDetail[];\n};\n\nexport type NestedNMDepsLinksResult = {\n componentId: string;\n linksDetail: LinkDetail[];\n};\n\nexport type LinkToDirResult = {\n componentId: string;\n linksDetail: LinkDetail;\n};\n\nexport type LinkResults = {\n teambitBitLink?: CoreAspectLinkResult;\n coreAspectsLinks?: CoreAspectLinkResult[];\n harmonyLink?: LinkDetail;\n teambitLegacyLink?: LinkDetail;\n resolvedFromEnvLinks?: DepsLinkedToEnvResult[];\n nestedDepsInNmLinks?: NestedNMDepsLinksResult[];\n linkToDirResults?: LinkToDirResult[];\n};\n\ntype NestedModuleFolderEntry = {\n moduleName: string;\n path: string;\n origPath?: string;\n};\n\nexport class DependencyLinker {\n constructor(\n private dependencyResolver: DependencyResolverMain,\n\n private aspectLoader: AspectLoaderMain,\n\n private componentAspect: ComponentMain,\n\n private envs: EnvsMain,\n\n private logger: Logger,\n\n private rootDir?: string | PathAbsolute,\n\n private linkingOptions?: LinkingOptions,\n\n private linkingContext: DepLinkerContext = {}\n ) {}\n\n async link(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: LinkingOptions = {}\n ): Promise<LinkResults> {\n const outputMessage = this.linkingContext?.inCapsule\n ? `(capsule) linking components in root dir: ${rootDir || this.rootDir}`\n : 'linking components';\n if (!this.linkingContext?.inCapsule) {\n this.logger.setStatusLine(outputMessage);\n }\n this.logger.debug('linking components with options', omit(options, ['consumer']));\n const startTime = process.hrtime();\n\n let result: LinkResults = {};\n const finalRootDir = rootDir || this.rootDir;\n const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkToDir) {\n const components = componentDirectoryMap.toArray().map(([component]) => component);\n const linkToDirResults = await this.linkToDir(finalRootDir, options.linkToDir, components);\n result.linkToDirResults = linkToDirResults;\n return result;\n }\n\n // Link deps which should be linked to the env\n if (linkingOpts.linkDepsResolvedFromEnv) {\n result.resolvedFromEnvLinks = await this.linkDepsResolvedFromEnv(componentDirectoryMap);\n }\n if (linkingOpts.linkNestedDepsInNM) {\n result.nestedDepsInNmLinks = this.addSymlinkFromComponentDirNMToWorkspaceDirNM(\n finalRootDir,\n componentDirectoryMap\n );\n }\n\n // We remove the version since it used in order to check if it's core aspects, and the core aspects arrived from aspect loader without versions\n const componentIds: ComponentID[] = [];\n componentDirectoryMap.map((_dir, comp) => {\n componentIds.push(comp.id);\n return undefined;\n });\n result = {\n ...result,\n ...(await this.linkCoreAspectsAndLegacy(rootDir, componentIds, rootPolicy, linkingOpts)),\n };\n if (!this.linkingContext?.inCapsule) {\n this.logger.consoleSuccess(outputMessage, startTime);\n }\n return result;\n }\n\n public async linkCoreAspectsAndLegacy(\n rootDir: string | undefined,\n componentIds: ComponentID[] = [],\n rootPolicy: WorkspacePolicy = new WorkspacePolicy([]),\n options: Pick<LinkingOptions, 'linkTeambitBit' | 'linkCoreAspects'> = {}\n ) {\n const result: LinkResults = {};\n const componentIdsWithoutVersions: string[] = [];\n componentIds.map((id) => {\n componentIdsWithoutVersions.push(id.toString({ ignoreVersion: true }));\n return undefined;\n });\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(finalRootDir)) {\n const bitLink = await this.linkBitAspectIfNotExist(\n path.join(finalRootDir, 'node_modules'),\n componentIdsWithoutVersions\n );\n result.teambitBitLink = bitLink;\n }\n\n if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(finalRootDir)) {\n const hasLocalInstallation = !linkingOpts.linkTeambitBit;\n const coreAspectsLinks = await this.linkNonExistingCoreAspects(\n path.join(finalRootDir, 'node_modules'),\n componentIdsWithoutVersions,\n hasLocalInstallation\n );\n result.coreAspectsLinks = coreAspectsLinks;\n }\n\n const teambitLegacyLink = this.linkTeambitLegacy(finalRootDir, rootPolicy);\n result.teambitLegacyLink = teambitLegacyLink;\n const harmonyLink = this.linkHarmony(finalRootDir, rootPolicy);\n result.harmonyLink = harmonyLink;\n return result;\n }\n\n private async linkToDir(rootDir: string, targetDir: string, components: Component[]): Promise<LinkToDirResult[]> {\n const results: LinkToDirResult[] = components.map((component) => {\n const componentPackageName = componentIdToPackageName(component.state._consumer);\n return {\n componentId: component.id.toString(),\n linksDetail: {\n packageName: componentPackageName,\n from: path.join(rootDir, 'node_modules', componentPackageName),\n to: path.join(targetDir, 'node_modules', componentPackageName),\n },\n };\n });\n results.forEach(({ componentId, linksDetail }) => {\n createSymlinkOrCopy(linksDetail.from, linksDetail.to, componentId);\n });\n\n return results;\n }\n\n /**\n * Add symlinks from the node_modules in the component's root-dir to the workspace node_modules\n * of the component. e.g.\n * <ws-root>/node_modules/comp1/node_modules/<dep> -> <ws-root>/components/comp1/node_modules/<dep>\n * This is needed because the component is compiled into the dist folder at <ws-root>/node_modules/comp1/dist,\n * so the files in the dist folder need to find the right dependencies of comp1.\n */\n private addSymlinkFromComponentDirNMToWorkspaceDirNM(\n rootDir: string,\n componentDirectoryMap: ComponentMap<string>\n ): NestedNMDepsLinksResult[] {\n const rootNodeModules = path.join(rootDir, 'node_modules');\n const getPackagesFoldersToLink = (dir: string, parent?: string): NestedModuleFolderEntry[] => {\n const folders = fs\n .readdirSync(dir, { withFileTypes: true })\n .filter((dirent) => {\n if (dirent.name.startsWith('.')) {\n return false;\n }\n return dirent.isDirectory() || dirent.isSymbolicLink();\n })\n .map((dirent) => {\n const dirPath = path.join(dir, dirent.name);\n const moduleName = parent ? `${parent}/${dirent.name}` : dirent.name;\n // If we have a folder with a name of built in module (like events)\n // the resolve from will resolve it from the core, so it will return something like 'events'\n // instead of the path.\n // adding a '/' at the end solve this\n const moduleNameToResolve = isBuiltinModule(moduleName) ? `${moduleName}/` : moduleName;\n // This is a scoped package, need to go inside\n if (dirent.name.startsWith('@')) {\n return getPackagesFoldersToLink(dirPath, dirent.name);\n }\n\n if (dirent.isSymbolicLink()) {\n const resolvedModuleFrom = resolveModuleFromDir(dir, moduleNameToResolve);\n if (!resolvedModuleFrom) {\n return {\n moduleName,\n path: dirPath,\n };\n }\n return {\n origPath: dirPath,\n moduleName,\n path: resolveModuleDirFromFile(resolvedModuleFrom, moduleName),\n };\n }\n return {\n moduleName,\n path: dirPath,\n };\n });\n return flatten(folders);\n };\n const linksOfAllComponents = componentDirectoryMap.toArray().map(([component, dir]) => {\n const compDirNM = path.join(dir, 'node_modules');\n if (!fs.existsSync(compDirNM)) return undefined;\n // TODO: support modules with scoped packages (start with @) - we need to make this logic 2 levels\n\n const componentPackageName = componentIdToPackageName(component.state._consumer);\n const innerNMofComponentInNM = path.join(rootNodeModules, componentPackageName);\n // If the folder itself is a symlink, do not try to symlink inside it\n if (isPathSymlink(innerNMofComponentInNM)) {\n return undefined;\n }\n const packagesFoldersToLink: NestedModuleFolderEntry[] = getPackagesFoldersToLink(compDirNM);\n fs.ensureDirSync(innerNMofComponentInNM);\n\n const oneComponentLinks: LinkDetail[] = packagesFoldersToLink.map((folderEntry: NestedModuleFolderEntry) => {\n const linkTarget = path.join(innerNMofComponentInNM, 'node_modules', folderEntry?.moduleName);\n const linkSrc = folderEntry.path;\n // This works as well, consider using it instead\n // const linkSrc = folderEntry.origPath || folderEntry.path;\n const origPath = folderEntry.origPath ? `(${folderEntry.origPath})` : '';\n const linkDetail: LinkDetail = {\n packageName: folderEntry.moduleName,\n from: `${linkSrc} ${origPath}`,\n to: linkTarget,\n };\n const linkTargetParent = path.resolve(linkTarget, '..');\n const relativeSrc = path.relative(linkTargetParent, linkSrc);\n const symlink = new Symlink(relativeSrc, linkTarget, component.id._legacy, false);\n this.logger.info(\n `linking nested dependency ${folderEntry.moduleName} for component ${component}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n symlink.write();\n return linkDetail;\n });\n\n const filteredLinks = compact(oneComponentLinks);\n return {\n componentId: component.id.toString(),\n linksDetail: filteredLinks,\n };\n });\n const filteredLinks = compact(linksOfAllComponents);\n return filteredLinks;\n }\n\n private async linkDepsResolvedFromEnv(\n componentDirectoryMap: ComponentMap<string>\n ): Promise<Array<DepsLinkedToEnvResult>> {\n const componentsNeedLinks: {\n component: Component;\n dir: string;\n env;\n resolvedFromEnv;\n envId?: string;\n envDir?: string;\n }[] = [];\n\n const componentsNeedLinksP = componentDirectoryMap.toArray().map(async ([component, dir]) => {\n const policy = await this.dependencyResolver.getPolicy(component);\n const resolvedFromEnv = policy.getResolvedFromEnv();\n // Nothing should be resolved from env, do nothing\n if (!resolvedFromEnv.length) {\n return;\n }\n const env = this.envs.getEnv(component);\n const componentNeedLink = {\n component,\n dir,\n env,\n resolvedFromEnv,\n };\n componentsNeedLinks.push(componentNeedLink);\n });\n\n await Promise.all(componentsNeedLinksP);\n // Stop if there are not components needs to be linked\n if (!componentsNeedLinks || !componentsNeedLinks.length) return [];\n const envsStringIds = componentsNeedLinks.map((obj) => obj.env.id);\n const uniqEnvIds = uniq(envsStringIds);\n const host = this.componentAspect.getHost();\n const resolvedEnvIds = await host.resolveMultipleComponentIds(uniqEnvIds);\n const resolvedAspects = await host.resolveAspects(undefined, resolvedEnvIds);\n const resolvedAspectsIndex = resolvedAspects.reduce((acc, curr) => {\n if (curr.getId) {\n acc[curr.getId] = curr;\n }\n return acc;\n }, {});\n const allLinksP = componentsNeedLinks.map(async (entry) => {\n const oneComponentLinksP: Array<LinkDetail | undefined> = entry.resolvedFromEnv.entries.map(async (depEntry) => {\n const linkTarget = path.join(entry.dir, 'node_modules', depEntry.dependencyId);\n const envDir = resolvedAspectsIndex[entry.env.id].aspectPath;\n const resolvedModule = resolveModuleFromDir(envDir, depEntry.dependencyId);\n if (!resolvedModule) {\n this.logger.console(`could not resolve ${depEntry.dependencyId} from env directory ${envDir}`);\n return undefined;\n }\n const linkSrc = resolveModuleDirFromFile(resolvedModule, depEntry.dependencyId);\n const linkDetail: LinkDetail = {\n packageName: depEntry.dependencyId,\n from: linkSrc,\n to: linkTarget,\n };\n fs.removeSync(linkTarget);\n this.logger.info(\n `linking dependency ${depEntry.dependencyId} from env directory ${envDir}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n\n createSymlinkOrCopy(linkSrc, linkTarget);\n return linkDetail;\n });\n const oneComponentLinks = await Promise.all(oneComponentLinksP);\n const filteredLinks = compact(oneComponentLinks);\n const depsLinkedToEnvResult: DepsLinkedToEnvResult = {\n componentId: entry.component.id.toString(),\n linksDetail: filteredLinks,\n };\n return depsLinkedToEnvResult;\n });\n return Promise.all(allLinksP);\n }\n\n private async linkBitAspectIfNotExist(\n dir: string,\n componentIds: string[]\n ): Promise<CoreAspectLinkResult | undefined> {\n if (!this.aspectLoader.mainAspect) return undefined;\n const mainAspectId = this.aspectLoader.mainAspect.id;\n const existing = componentIds.find((id) => {\n return id === mainAspectId;\n });\n\n if (existing) {\n return undefined;\n }\n const linkDetail = await this.linkBit(dir);\n if (!linkDetail) return undefined;\n return {\n aspectId: mainAspectId,\n linkDetail,\n };\n }\n\n async linkBit(dir: string): Promise<LinkDetail | undefined> {\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n const target = path.join(dir, this.aspectLoader.mainAspect.packageName);\n const shouldSymlink = this.removeSymlinkTarget(target);\n if (!shouldSymlink) return undefined;\n const src = this.aspectLoader.mainAspect.path;\n await fs.ensureDir(path.dirname(target));\n createSymlinkOrCopy(src, target);\n return { packageName: this.aspectLoader.mainAspect.packageName, from: src, to: target };\n }\n\n private async linkNonExistingCoreAspects(\n dir: string,\n componentIds: string[],\n hasLocalInstallation = false\n ): Promise<CoreAspectLinkResult[]> {\n const coreAspectsIds = this.aspectLoader.getCoreAspectIds();\n const filtered = coreAspectsIds.filter((aspectId) => {\n // Remove bit aspect\n if (aspectId === this.aspectLoader.mainAspect?.id) {\n return false;\n }\n // TODO: use the aspect id once default scope is resolved and the component dir map has the id with scope\n const name = getCoreAspectName(aspectId);\n const existing = componentIds.find((componentId) => {\n return componentId === name || componentId === aspectId;\n });\n if (existing) {\n return false;\n }\n return true;\n });\n\n this.logger.debug(`linkNonExistingCoreAspects: linking the following core aspects ${filtered.join()}`);\n\n const results = filtered.map((id) => {\n return this.linkCoreAspect(dir, id, getCoreAspectName(id), getCoreAspectPackageName(id), hasLocalInstallation);\n });\n return compact(results);\n }\n\n private isBitRepoWorkspace(dir: string) {\n // A special condition to not link core aspects in bit workspace itself\n if (this.aspectLoader.mainAspect?.path.startsWith(dir)) {\n return true;\n }\n return false;\n }\n\n private linkCoreAspect(\n dir: string,\n id: string,\n name: string,\n packageName: string,\n hasLocalInstallation = false\n ): CoreAspectLinkResult | undefined {\n if (!this.aspectLoader.mainAspect) return undefined;\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n\n const mainAspectPath = path.join(dir, this.aspectLoader.mainAspect.packageName);\n let aspectDir = path.join(mainAspectPath, 'dist', name);\n const target = path.join(dir, packageName);\n const shouldSymlink = this.removeSymlinkTarget(target, hasLocalInstallation);\n if (!shouldSymlink) return undefined;\n const isAspectDirExist = fs.pathExistsSync(aspectDir);\n if (!isAspectDirExist) {\n this.logger.debug(`linkCoreAspect: aspectDir ${aspectDir} does not exist, linking it to ${target}`);\n aspectDir = getAspectDir(id);\n createSymlinkOrCopy(aspectDir, target);\n return { aspectId: id, linkDetail: { packageName, from: aspectDir, to: target } };\n }\n\n try {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(aspectDir);\n const aspectPath = path.resolve(path.join(module.path, '..', '..'));\n // in this case we want the symlinks to be relative links\n // Using the fs module to make sure it is relative to the target\n if (fs.existsSync(target)) {\n this.logger.debug(`linkCoreAspect: aspectPath ${aspectPath} skip linking`);\n return undefined;\n }\n this.logger.debug(`linkCoreAspect: linking aspectPath ${aspectPath} to ${target}`);\n createSymlinkOrCopy(aspectPath, target);\n return { aspectId: id, linkDetail: { packageName, from: aspectPath, to: target } };\n } catch (err: any) {\n throw new CoreAspectLinkError(id, err);\n }\n }\n\n /**\n * returns true if it's safe to symlink it later.\n */\n private removeSymlinkTarget(targetPath: string, hasLocalInstallation = false): boolean {\n // TODO: change to fs.lstatSync(dest, {throwIfNoEntry: false});\n // TODO: this requires to upgrade node to v15.3.0 to have the throwIfNoEntry property (maybe upgrade fs-extra will work as well)\n // TODO: we don't use fs.pathExistsSync since it will return false in case the dest is a symlink which will result error on write\n let targetStat: Stats | undefined;\n try {\n targetStat = fs.lstatSync(targetPath);\n // eslint-disable-next-line no-empty\n } catch (e: any) {}\n if (targetStat && !hasLocalInstallation) {\n // Do not override links created by other means\n if (!targetStat.isSymbolicLink()) {\n this.logger.debug(`removing link target, target ${targetPath} already exist. skipping it`);\n return false;\n }\n // it's a symlink, remove is as it might point to an older version\n fs.removeSync(targetPath);\n return true;\n }\n return true;\n }\n\n private linkNonAspectCorePackages(\n rootDir: string,\n name: string,\n packageName = `@teambit/${name}`,\n skipExisting = false,\n existsInRootPolicy = false\n ): LinkDetail | undefined {\n if (!this.aspectLoader.mainAspect) return undefined;\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n const mainAspectPath = path.join(rootDir, this.aspectLoader.mainAspect.packageName);\n const distDir = path.join(mainAspectPath, 'dist', name);\n\n const target = path.join(rootDir, 'node_modules', packageName);\n const isTargetExisting = fs.pathExistsSync(target);\n if (skipExisting && isTargetExisting) {\n return undefined;\n }\n let shouldSymlink;\n // In case it's not part of the workspace policy we want to remove it anyway, as we want it to be linked to\n // bit version\n if (isTargetExisting && !existsInRootPolicy) {\n fs.removeSync(target);\n shouldSymlink = true;\n } else {\n shouldSymlink = this.removeSymlinkTarget(target);\n }\n if (!shouldSymlink) return undefined;\n const isDistDirExist = fs.pathExistsSync(distDir);\n if (!isDistDirExist) {\n const newDir = getDistDirForDevEnv(packageName);\n createSymlinkOrCopy(newDir, target);\n return { packageName, from: newDir, to: target };\n }\n\n try {\n // eslint-disable-next-line global-require, import/no-dynamic-require\n const module = require(distDir);\n const resolvedPath = path.resolve(path.join(module.path, '..', '..'));\n // in this case we want the symlinks to be relative links\n // Using the fs module to make sure it is relative to the target\n if (fs.existsSync(target)) {\n return undefined;\n }\n createSymlinkOrCopy(resolvedPath, target);\n return { packageName, from: resolvedPath, to: target };\n } catch (err: any) {\n throw new NonAspectCorePackageLinkError(err, packageName);\n }\n }\n\n private linkHarmony(rootDir: string, rootPolicy: WorkspacePolicy): LinkDetail | undefined {\n const name = 'harmony';\n const packageName = `@teambit/${name}`;\n const existsInRootPolicy = Boolean(rootPolicy?.find(packageName));\n\n return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);\n }\n\n private linkTeambitLegacy(rootDir: string, rootPolicy: WorkspacePolicy): LinkDetail | undefined {\n const name = 'legacy';\n const packageName = `@teambit/${name}`;\n\n const existsInRootPolicy = rootPolicy ? !!rootPolicy.find(packageName) : false;\n return this.linkNonAspectCorePackages(rootDir, name, packageName, undefined, existsInRootPolicy);\n }\n}\n\n/**\n * When running dev env (bd) we need to get the harmony/legacy folder from the node_modules of the clone\n */\nfunction getDistDirForDevEnv(packageName: string): string {\n let moduleDirectory = require.resolve(packageName);\n let dirPath;\n if (moduleDirectory.includes(packageName)) {\n dirPath = path.join(moduleDirectory, '../..'); // to remove the \"index.js\" at the end\n } else {\n // This is usually required for the @teambit/legacy, as we re inside the nm so we can't find it in the other way\n const nmDir = __dirname.substring(0, __dirname.indexOf('@teambit'));\n dirPath = path.join(nmDir, packageName);\n moduleDirectory = require.resolve(packageName, { paths: [nmDir] });\n }\n if (!fs.existsSync(dirPath)) {\n throw new BitError(`unable to find ${packageName} in ${dirPath}`);\n }\n\n return dirPath;\n}\n\n// TODO: extract to new component\nfunction resolveModuleFromDir(fromDir: string, moduleId: string, silent = true): string | undefined {\n if (silent) {\n return resolveFrom.silent(fromDir, moduleId);\n }\n return resolveFrom(fromDir, moduleId);\n}\n\n// TODO: extract to new component\nfunction resolveModuleDirFromFile(resolvedModulePath: string, moduleId: string): string {\n const NM = 'node_modules';\n if (resolvedModulePath.includes(NM)) {\n return path.join(resolvedModulePath.slice(0, resolvedModulePath.lastIndexOf(NM) + NM.length), moduleId);\n }\n\n const [start, end] = resolvedModulePath.split('@');\n if (!end) return path.basename(resolvedModulePath);\n const versionStr = head(end.split('/'));\n return `${start}@${versionStr}`;\n}\n\nfunction isPathSymlink(folderPath: string): boolean | undefined {\n // TODO: change to fs.lstatSync(dest, {throwIfNoEntry: false}); once upgrade fs-extra\n try {\n const stat = fs.lstatSync(folderPath);\n return stat.isSymbolicLink();\n } catch (e: any) {\n return undefined;\n }\n}\n"],"mappings":"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"}
@@ -18,9 +18,9 @@ import semver from 'semver';
18
18
  import { AspectLoaderMain } from '@teambit/aspect-loader';
19
19
  import { GlobalConfigMain } from '@teambit/global-config';
20
20
  import { Registries } from './registry';
21
- import { DependencyInstaller, PreInstallSubscriberList, PostInstallSubscriberList } from './dependency-installer';
21
+ import { DependencyInstaller, PreInstallSubscriberList, PostInstallSubscriberList, DepInstallerContext } from './dependency-installer';
22
22
  import { DependencyVersionResolver } from './dependency-version-resolver';
23
- import { DependencyLinker, LinkingOptions } from './dependency-linker';
23
+ import { DepLinkerContext, DependencyLinker, LinkingOptions } from './dependency-linker';
24
24
  import { OutdatedPkg } from './get-all-policy-pkgs';
25
25
  import { CreateFromComponentsOptions, WorkspaceManifest, ManifestDependenciesObject } from './manifest';
26
26
  import { WorkspacePolicyConfigObject, VariantPolicyConfigObject, WorkspacePolicy, VariantPolicy, WorkspacePolicyAddEntryOptions, WorkspacePolicyEntry, SerializedVariantPolicy } from './policy';
@@ -130,10 +130,12 @@ export declare type GetInstallerOptions = {
130
130
  rootDir?: string;
131
131
  packageManager?: string;
132
132
  cacheRootDirectory?: string;
133
+ installingContext?: DepInstallerContext;
133
134
  };
134
135
  export declare type GetLinkerOptions = {
135
136
  rootDir?: string;
136
137
  linkingOptions?: LinkingOptions;
138
+ linkingContext?: DepLinkerContext;
137
139
  };
138
140
  export declare type GetDependenciesOptions = {
139
141
  includeHidden?: boolean;
@@ -274,7 +276,7 @@ export declare class DependencyResolverMain {
274
276
  * @returns {WorkspaceManifest}
275
277
  * @memberof DependencyResolverMain
276
278
  */
277
- getWorkspaceManifest(name: string | undefined, version: semver.SemVer | undefined, rootPolicy: WorkspacePolicy, rootDir: string, components: Component[], options?: CreateFromComponentsOptions): Promise<WorkspaceManifest>;
279
+ getWorkspaceManifest(name: string | undefined, version: semver.SemVer | undefined, rootPolicy: WorkspacePolicy, rootDir: string, components: Component[], options?: CreateFromComponentsOptions, context?: DepInstallerContext): Promise<WorkspaceManifest>;
278
280
  /**
279
281
  * get the package name of a component.
280
282
  */
@@ -297,6 +299,11 @@ export declare class DependencyResolverMain {
297
299
  * get a component dependency linker.
298
300
  */
299
301
  getLinker(options?: GetLinkerOptions): DependencyLinker;
302
+ /**
303
+ * This function returns the package manager if it exists, otherwise it returns undefined.
304
+ * @returns The `getPackageManager()` function returns a `PackageManager` object or `undefined`.
305
+ */
306
+ getPackageManager(): PackageManager | undefined;
300
307
  getPackageManagerName(): string;
301
308
  getVersionResolver(options?: GetVersionResolverOptions): Promise<DependencyVersionResolver>;
302
309
  /**