@teambit/dependency-resolver 0.0.1065 → 0.0.1067

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.
@@ -20,6 +20,7 @@ export declare type InstallOptions = {
20
20
  packageManagerConfigRootDir?: string;
21
21
  resolveVersionsFromDependenciesOnly?: boolean;
22
22
  linkedDependencies?: Record<string, Record<string, string>>;
23
+ forceTeambitHarmonyLink?: boolean;
23
24
  };
24
25
  export declare type GetComponentManifestsOptions = {
25
26
  componentDirectoryMap: ComponentMap<string>;
@@ -127,6 +127,9 @@ class DependencyInstaller {
127
127
  delete linkedDependencies[finalRootDir][manifest.name];
128
128
  }
129
129
  }
130
+ if (options.forceTeambitHarmonyLink) {
131
+ delete manifests[finalRootDir].dependencies['@teambit/harmony'];
132
+ }
130
133
  }
131
134
  Object.entries(linkedDependencies).forEach(([dir, linkedDeps]) => {
132
135
  if (!manifests[dir]) {
@@ -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","neverBuiltDependencies","installingContext","install","rootPolicy","componentDirectoryMap","options","packageManagerOptions","finalRootDir","RootDirNotDefined","manifests","getComponentManifests","resolveVersionsFromDependenciesOnly","referenceLocalPackages","rootComponentsForCapsules","installComponents","args","runPrePostSubscribers","mainAspect","linkedDependencies","JSON","parse","stringify","directDeps","Set","Object","values","forEach","manifest","depName","keys","dependencies","devDependencies","add","name","has","entries","dir","linkedDeps","hidePackageManagerOutput","inCapsule","process","env","VERBOSE_PM_OUTPUT","calculatedPmOpts","packageManagerConfigRootDir","version","packageName","MainAspectNotInstallable","dependencyId","lifecycleType","value","rootComponents","keepExistingModulesDir","cleanCompsNodeModules","messagePrefix","messageSuffix","message","setStatusLine","startTime","hrtime","installResult","consoleSuccess","pruneModules","dependencyFilterFn","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","workspaceManifest","getWorkspaceManifest","undefined","components","toArray","reduce","acc","component","getPackageName","componentsManifestsMap","get","toJson","copyPeerToRuntime","defaultPeerDependencies","fromPairs","envPolicy","selfPolicy","toNameVersionTuple","promises","map","nmDir","path","join","fs","remove","Promise","all","subscribers","type","mapSeries","subscriber"],"sources":["dependency-installer.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { MainAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { ComponentMap } from '@teambit/component';\nimport { CreateFromComponentsOptions, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { PeerDependencyRules, ProjectManifest } from '@pnpm/types';\nimport { fromPairs } from 'lodash';\nimport { MainAspectNotInstallable, RootDirNotDefined } from './exceptions';\nimport { PackageManager, PackageManagerInstallOptions, PackageImportMethod } from './package-manager';\nimport { WorkspacePolicy } from './policy';\n\nconst DEFAULT_PM_INSTALL_OPTIONS: PackageManagerInstallOptions = {\n dedupe: true,\n copyPeerToRuntimeOnRoot: true,\n copyPeerToRuntimeOnComponents: false,\n installPeersFromEnvs: false,\n};\n\nconst DEFAULT_INSTALL_OPTIONS: InstallOptions = {\n installTeambitBit: false,\n};\n\nexport type DepInstallerContext = {\n inCapsule?: boolean;\n};\n\nexport type InstallArgs = {\n rootDir: string | undefined;\n rootPolicy: WorkspacePolicy;\n componentDirectoryMap: ComponentMap<string>;\n options: InstallOptions;\n packageManagerOptions: PackageManagerInstallOptions;\n};\n\nexport type InstallOptions = {\n installTeambitBit: boolean;\n packageManagerConfigRootDir?: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n linkedDependencies?: Record<string, Record<string, string>>;\n};\n\nexport type GetComponentManifestsOptions = {\n componentDirectoryMap: ComponentMap<string>;\n rootPolicy: WorkspacePolicy;\n rootDir: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n} & Pick<\n PackageManagerInstallOptions,\n 'dedupe' | 'dependencyFilterFn' | 'copyPeerToRuntimeOnComponents' | 'copyPeerToRuntimeOnRoot' | 'installPeersFromEnvs'\n>;\n\nexport type PreInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PreInstallSubscriberList = Array<PreInstallSubscriber>;\n\nexport type PostInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PostInstallSubscriberList = Array<PostInstallSubscriber>;\n\nexport class DependencyInstaller {\n constructor(\n /**\n * package manager instance.\n */\n private packageManager: PackageManager,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain,\n\n private rootDir?: string | PathAbsolute,\n\n private cacheRootDir?: string | PathAbsolute,\n\n private preInstallSubscriberList?: PreInstallSubscriberList,\n\n private postInstallSubscriberList?: PostInstallSubscriberList,\n\n private nodeLinker?: 'hoisted' | 'isolated',\n\n private packageImportMethod?: PackageImportMethod,\n\n private sideEffectsCache?: boolean,\n\n private nodeVersion?: string,\n\n private engineStrict?: boolean,\n\n private peerDependencyRules?: PeerDependencyRules,\n\n private neverBuiltDependencies?: string[],\n\n private installingContext: DepInstallerContext = {}\n ) {}\n\n async install(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ) {\n const finalRootDir = rootDir ?? this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const manifests = await this.getComponentManifests({\n ...packageManagerOptions,\n componentDirectoryMap,\n rootPolicy,\n rootDir: finalRootDir,\n resolveVersionsFromDependenciesOnly: options.resolveVersionsFromDependenciesOnly,\n referenceLocalPackages: packageManagerOptions.rootComponentsForCapsules,\n });\n return this.installComponents(\n finalRootDir,\n manifests,\n rootPolicy,\n componentDirectoryMap,\n options,\n packageManagerOptions\n );\n }\n\n async installComponents(\n rootDir: string | undefined,\n manifests: Record<string, ProjectManifest>,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ): Promise<{ dependenciesChanged: boolean }> {\n const args = {\n componentDirectoryMap,\n options,\n packageManagerOptions,\n rootDir,\n rootPolicy,\n };\n await this.runPrePostSubscribers(this.preInstallSubscriberList, 'pre', args);\n const mainAspect: MainAspect = this.aspectLoader.mainAspect;\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkedDependencies) {\n manifests = JSON.parse(JSON.stringify(manifests));\n const linkedDependencies = JSON.parse(\n JSON.stringify(options.linkedDependencies)\n ) as typeof options.linkedDependencies;\n if (linkedDependencies[finalRootDir]) {\n const directDeps = new Set<string>();\n Object.values(manifests).forEach((manifest) => {\n for (const depName of Object.keys({ ...manifest.dependencies, ...manifest.devDependencies })) {\n directDeps.add(depName);\n }\n });\n for (const manifest of Object.values(manifests)) {\n if (manifest.name && directDeps.has(manifest.name)) {\n delete linkedDependencies[finalRootDir][manifest.name];\n }\n }\n }\n Object.entries(linkedDependencies).forEach(([dir, linkedDeps]) => {\n if (!manifests[dir]) {\n manifests[dir] = {};\n }\n manifests[dir].dependencies = {\n ...linkedDeps,\n ...manifests[dir].dependencies,\n };\n });\n }\n const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');\n\n // Make sure to take other default if passed options with only one option\n const calculatedPmOpts = {\n ...DEFAULT_PM_INSTALL_OPTIONS,\n cacheRootDir: this.cacheRootDir,\n nodeLinker: this.nodeLinker,\n packageImportMethod: this.packageImportMethod,\n sideEffectsCache: this.sideEffectsCache,\n nodeVersion: this.nodeVersion,\n engineStrict: this.engineStrict,\n packageManagerConfigRootDir: options.packageManagerConfigRootDir,\n peerDependencyRules: this.peerDependencyRules,\n hidePackageManagerOutput,\n neverBuiltDependencies: ['core-js', ...(this.neverBuiltDependencies ?? [])],\n ...packageManagerOptions,\n };\n if (options.installTeambitBit) {\n if (!mainAspect.version || !mainAspect.packageName) {\n throw new MainAspectNotInstallable();\n }\n const version = mainAspect.version;\n rootPolicy.add({\n dependencyId: mainAspect.packageName,\n lifecycleType: 'runtime',\n value: {\n version,\n },\n });\n }\n\n if (!packageManagerOptions.rootComponents && !packageManagerOptions.keepExistingModulesDir) {\n // Remove node modules dir for all components dirs, since it might contain left overs from previous install.\n //\n // This is not needed when \"rootComponents\" are used, as in that case the package manager handles the node_modules\n // and it never leaves node_modules in a broken state.\n // Removing node_modules in that case would delete useful state information that is used by Yarn or pnpm.\n await this.cleanCompsNodeModules(componentDirectoryMap);\n }\n\n const messagePrefix = 'running package installation';\n const messageSuffix = `using ${this.packageManager.name}`;\n const message = this.installingContext?.inCapsule\n ? `(capsule) ${messagePrefix} in root dir ${this.rootDir} ${messageSuffix}`\n : `${messagePrefix} ${messageSuffix}`;\n if (!hidePackageManagerOutput) {\n this.logger.setStatusLine(message);\n }\n const startTime = process.hrtime();\n\n // TODO: the cache should be probably passed to the package manager constructor not to the install function\n const installResult = await this.packageManager.install(\n {\n rootDir: finalRootDir,\n manifests,\n componentDirectoryMap,\n },\n calculatedPmOpts\n );\n if (!hidePackageManagerOutput) {\n this.logger.consoleSuccess(`done ${message}`, startTime);\n }\n await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);\n return installResult;\n }\n\n public async pruneModules(rootDir: string): Promise<void> {\n if (!this.packageManager.pruneModules) {\n return;\n }\n await this.packageManager.pruneModules(rootDir);\n }\n\n /**\n * Compute all the component manifests (a.k.a. package.json files) that should be passed to the package manager\n * in order to install the dependencies.\n */\n public async getComponentManifests({\n componentDirectoryMap,\n rootPolicy,\n rootDir,\n dedupe,\n dependencyFilterFn,\n copyPeerToRuntimeOnComponents,\n copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n }: GetComponentManifestsOptions) {\n const options: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe,\n dependencyFilterFn,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n };\n const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(\n undefined,\n undefined,\n rootPolicy,\n rootDir,\n componentDirectoryMap.components,\n options,\n this.installingContext\n );\n const manifests: Record<string, ProjectManifest> = componentDirectoryMap\n .toArray()\n .reduce((acc, [component, dir]) => {\n const packageName = this.dependencyResolver.getPackageName(component);\n const manifest = workspaceManifest.componentsManifestsMap.get(packageName);\n if (manifest) {\n acc[dir] = manifest.toJson({ copyPeerToRuntime: copyPeerToRuntimeOnComponents });\n acc[dir].defaultPeerDependencies = fromPairs(manifest.envPolicy.selfPolicy.toNameVersionTuple());\n }\n return acc;\n }, {});\n if (!manifests[rootDir]) {\n manifests[rootDir] = workspaceManifest.toJson({\n copyPeerToRuntime: copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n });\n }\n return manifests;\n }\n\n private async cleanCompsNodeModules(componentDirectoryMap: ComponentMap<string>) {\n const promises = componentDirectoryMap.toArray().map(([, dir]) => {\n const nmDir = path.join(dir, 'node_modules');\n return fs.remove(nmDir);\n });\n return Promise.all(promises);\n }\n\n private async runPrePostSubscribers(\n subscribers: PreInstallSubscriberList | PostInstallSubscriberList = [],\n type: 'pre' | 'post',\n args: InstallArgs\n ): Promise<void> {\n const message = this.installingContext?.inCapsule\n ? `(capsule) running ${type} install subscribers in root dir ${this.rootDir}`\n : `running ${type} install subscribers`;\n if (!this.installingContext?.inCapsule) {\n this.logger.setStatusLine(message);\n }\n await mapSeries(subscribers, async (subscriber) => {\n return subscriber(this, args);\n });\n if (!this.installingContext?.inCapsule) {\n this.logger.consoleSuccess(message);\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["DEFAULT_PM_INSTALL_OPTIONS","dedupe","copyPeerToRuntimeOnRoot","copyPeerToRuntimeOnComponents","installPeersFromEnvs","DEFAULT_INSTALL_OPTIONS","installTeambitBit","DependencyInstaller","constructor","packageManager","aspectLoader","logger","dependencyResolver","rootDir","cacheRootDir","preInstallSubscriberList","postInstallSubscriberList","nodeLinker","packageImportMethod","sideEffectsCache","nodeVersion","engineStrict","peerDependencyRules","neverBuiltDependencies","installingContext","install","rootPolicy","componentDirectoryMap","options","packageManagerOptions","finalRootDir","RootDirNotDefined","manifests","getComponentManifests","resolveVersionsFromDependenciesOnly","referenceLocalPackages","rootComponentsForCapsules","installComponents","args","runPrePostSubscribers","mainAspect","linkedDependencies","JSON","parse","stringify","directDeps","Set","Object","values","forEach","manifest","depName","keys","dependencies","devDependencies","add","name","has","forceTeambitHarmonyLink","entries","dir","linkedDeps","hidePackageManagerOutput","inCapsule","process","env","VERBOSE_PM_OUTPUT","calculatedPmOpts","packageManagerConfigRootDir","version","packageName","MainAspectNotInstallable","dependencyId","lifecycleType","value","rootComponents","keepExistingModulesDir","cleanCompsNodeModules","messagePrefix","messageSuffix","message","setStatusLine","startTime","hrtime","installResult","consoleSuccess","pruneModules","dependencyFilterFn","filterComponentsFromManifests","createManifestForComponentsWithoutDependencies","workspaceManifest","getWorkspaceManifest","undefined","components","toArray","reduce","acc","component","getPackageName","componentsManifestsMap","get","toJson","copyPeerToRuntime","defaultPeerDependencies","fromPairs","envPolicy","selfPolicy","toNameVersionTuple","promises","map","nmDir","path","join","fs","remove","Promise","all","subscribers","type","mapSeries","subscriber"],"sources":["dependency-installer.ts"],"sourcesContent":["import mapSeries from 'p-map-series';\nimport path from 'path';\nimport fs from 'fs-extra';\nimport { MainAspect, AspectLoaderMain } from '@teambit/aspect-loader';\nimport { ComponentMap } from '@teambit/component';\nimport { CreateFromComponentsOptions, DependencyResolverMain } from '@teambit/dependency-resolver';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/legacy/dist/utils/path';\nimport { PeerDependencyRules, ProjectManifest } from '@pnpm/types';\nimport { fromPairs } from 'lodash';\nimport { MainAspectNotInstallable, RootDirNotDefined } from './exceptions';\nimport { PackageManager, PackageManagerInstallOptions, PackageImportMethod } from './package-manager';\nimport { WorkspacePolicy } from './policy';\n\nconst DEFAULT_PM_INSTALL_OPTIONS: PackageManagerInstallOptions = {\n dedupe: true,\n copyPeerToRuntimeOnRoot: true,\n copyPeerToRuntimeOnComponents: false,\n installPeersFromEnvs: false,\n};\n\nconst DEFAULT_INSTALL_OPTIONS: InstallOptions = {\n installTeambitBit: false,\n};\n\nexport type DepInstallerContext = {\n inCapsule?: boolean;\n};\n\nexport type InstallArgs = {\n rootDir: string | undefined;\n rootPolicy: WorkspacePolicy;\n componentDirectoryMap: ComponentMap<string>;\n options: InstallOptions;\n packageManagerOptions: PackageManagerInstallOptions;\n};\n\nexport type InstallOptions = {\n installTeambitBit: boolean;\n packageManagerConfigRootDir?: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n linkedDependencies?: Record<string, Record<string, string>>;\n forceTeambitHarmonyLink?: boolean;\n};\n\nexport type GetComponentManifestsOptions = {\n componentDirectoryMap: ComponentMap<string>;\n rootPolicy: WorkspacePolicy;\n rootDir: string;\n resolveVersionsFromDependenciesOnly?: boolean;\n referenceLocalPackages?: boolean;\n} & Pick<\n PackageManagerInstallOptions,\n 'dedupe' | 'dependencyFilterFn' | 'copyPeerToRuntimeOnComponents' | 'copyPeerToRuntimeOnRoot' | 'installPeersFromEnvs'\n>;\n\nexport type PreInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PreInstallSubscriberList = Array<PreInstallSubscriber>;\n\nexport type PostInstallSubscriber = (installer: DependencyInstaller, installArgs: InstallArgs) => Promise<void>;\nexport type PostInstallSubscriberList = Array<PostInstallSubscriber>;\n\nexport class DependencyInstaller {\n constructor(\n /**\n * package manager instance.\n */\n private packageManager: PackageManager,\n\n private aspectLoader: AspectLoaderMain,\n\n private logger: Logger,\n\n private dependencyResolver: DependencyResolverMain,\n\n private rootDir?: string | PathAbsolute,\n\n private cacheRootDir?: string | PathAbsolute,\n\n private preInstallSubscriberList?: PreInstallSubscriberList,\n\n private postInstallSubscriberList?: PostInstallSubscriberList,\n\n private nodeLinker?: 'hoisted' | 'isolated',\n\n private packageImportMethod?: PackageImportMethod,\n\n private sideEffectsCache?: boolean,\n\n private nodeVersion?: string,\n\n private engineStrict?: boolean,\n\n private peerDependencyRules?: PeerDependencyRules,\n\n private neverBuiltDependencies?: string[],\n\n private installingContext: DepInstallerContext = {}\n ) {}\n\n async install(\n rootDir: string | undefined,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ) {\n const finalRootDir = rootDir ?? this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n const manifests = await this.getComponentManifests({\n ...packageManagerOptions,\n componentDirectoryMap,\n rootPolicy,\n rootDir: finalRootDir,\n resolveVersionsFromDependenciesOnly: options.resolveVersionsFromDependenciesOnly,\n referenceLocalPackages: packageManagerOptions.rootComponentsForCapsules,\n });\n return this.installComponents(\n finalRootDir,\n manifests,\n rootPolicy,\n componentDirectoryMap,\n options,\n packageManagerOptions\n );\n }\n\n async installComponents(\n rootDir: string | undefined,\n manifests: Record<string, ProjectManifest>,\n rootPolicy: WorkspacePolicy,\n componentDirectoryMap: ComponentMap<string>,\n options: InstallOptions = DEFAULT_INSTALL_OPTIONS,\n packageManagerOptions: PackageManagerInstallOptions = DEFAULT_PM_INSTALL_OPTIONS\n ): Promise<{ dependenciesChanged: boolean }> {\n const args = {\n componentDirectoryMap,\n options,\n packageManagerOptions,\n rootDir,\n rootPolicy,\n };\n await this.runPrePostSubscribers(this.preInstallSubscriberList, 'pre', args);\n const mainAspect: MainAspect = this.aspectLoader.mainAspect;\n const finalRootDir = rootDir || this.rootDir;\n if (!finalRootDir) {\n throw new RootDirNotDefined();\n }\n if (options.linkedDependencies) {\n manifests = JSON.parse(JSON.stringify(manifests));\n const linkedDependencies = JSON.parse(\n JSON.stringify(options.linkedDependencies)\n ) as typeof options.linkedDependencies;\n if (linkedDependencies[finalRootDir]) {\n const directDeps = new Set<string>();\n Object.values(manifests).forEach((manifest) => {\n for (const depName of Object.keys({ ...manifest.dependencies, ...manifest.devDependencies })) {\n directDeps.add(depName);\n }\n });\n for (const manifest of Object.values(manifests)) {\n if (manifest.name && directDeps.has(manifest.name)) {\n delete linkedDependencies[finalRootDir][manifest.name];\n }\n }\n if (options.forceTeambitHarmonyLink) {\n delete manifests[finalRootDir].dependencies!['@teambit/harmony'];\n }\n }\n Object.entries(linkedDependencies).forEach(([dir, linkedDeps]) => {\n if (!manifests[dir]) {\n manifests[dir] = {};\n }\n manifests[dir].dependencies = {\n ...linkedDeps,\n ...manifests[dir].dependencies,\n };\n });\n }\n const hidePackageManagerOutput = !!(this.installingContext.inCapsule && process.env.VERBOSE_PM_OUTPUT !== 'true');\n\n // Make sure to take other default if passed options with only one option\n const calculatedPmOpts = {\n ...DEFAULT_PM_INSTALL_OPTIONS,\n cacheRootDir: this.cacheRootDir,\n nodeLinker: this.nodeLinker,\n packageImportMethod: this.packageImportMethod,\n sideEffectsCache: this.sideEffectsCache,\n nodeVersion: this.nodeVersion,\n engineStrict: this.engineStrict,\n packageManagerConfigRootDir: options.packageManagerConfigRootDir,\n peerDependencyRules: this.peerDependencyRules,\n hidePackageManagerOutput,\n neverBuiltDependencies: ['core-js', ...(this.neverBuiltDependencies ?? [])],\n ...packageManagerOptions,\n };\n if (options.installTeambitBit) {\n if (!mainAspect.version || !mainAspect.packageName) {\n throw new MainAspectNotInstallable();\n }\n const version = mainAspect.version;\n rootPolicy.add({\n dependencyId: mainAspect.packageName,\n lifecycleType: 'runtime',\n value: {\n version,\n },\n });\n }\n\n if (!packageManagerOptions.rootComponents && !packageManagerOptions.keepExistingModulesDir) {\n // Remove node modules dir for all components dirs, since it might contain left overs from previous install.\n //\n // This is not needed when \"rootComponents\" are used, as in that case the package manager handles the node_modules\n // and it never leaves node_modules in a broken state.\n // Removing node_modules in that case would delete useful state information that is used by Yarn or pnpm.\n await this.cleanCompsNodeModules(componentDirectoryMap);\n }\n\n const messagePrefix = 'running package installation';\n const messageSuffix = `using ${this.packageManager.name}`;\n const message = this.installingContext?.inCapsule\n ? `(capsule) ${messagePrefix} in root dir ${this.rootDir} ${messageSuffix}`\n : `${messagePrefix} ${messageSuffix}`;\n if (!hidePackageManagerOutput) {\n this.logger.setStatusLine(message);\n }\n const startTime = process.hrtime();\n\n // TODO: the cache should be probably passed to the package manager constructor not to the install function\n const installResult = await this.packageManager.install(\n {\n rootDir: finalRootDir,\n manifests,\n componentDirectoryMap,\n },\n calculatedPmOpts\n );\n if (!hidePackageManagerOutput) {\n this.logger.consoleSuccess(`done ${message}`, startTime);\n }\n await this.runPrePostSubscribers(this.postInstallSubscriberList, 'post', args);\n return installResult;\n }\n\n public async pruneModules(rootDir: string): Promise<void> {\n if (!this.packageManager.pruneModules) {\n return;\n }\n await this.packageManager.pruneModules(rootDir);\n }\n\n /**\n * Compute all the component manifests (a.k.a. package.json files) that should be passed to the package manager\n * in order to install the dependencies.\n */\n public async getComponentManifests({\n componentDirectoryMap,\n rootPolicy,\n rootDir,\n dedupe,\n dependencyFilterFn,\n copyPeerToRuntimeOnComponents,\n copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n }: GetComponentManifestsOptions) {\n const options: CreateFromComponentsOptions = {\n filterComponentsFromManifests: true,\n createManifestForComponentsWithoutDependencies: true,\n dedupe,\n dependencyFilterFn,\n resolveVersionsFromDependenciesOnly,\n referenceLocalPackages,\n };\n const workspaceManifest = await this.dependencyResolver.getWorkspaceManifest(\n undefined,\n undefined,\n rootPolicy,\n rootDir,\n componentDirectoryMap.components,\n options,\n this.installingContext\n );\n const manifests: Record<string, ProjectManifest> = componentDirectoryMap\n .toArray()\n .reduce((acc, [component, dir]) => {\n const packageName = this.dependencyResolver.getPackageName(component);\n const manifest = workspaceManifest.componentsManifestsMap.get(packageName);\n if (manifest) {\n acc[dir] = manifest.toJson({ copyPeerToRuntime: copyPeerToRuntimeOnComponents });\n acc[dir].defaultPeerDependencies = fromPairs(manifest.envPolicy.selfPolicy.toNameVersionTuple());\n }\n return acc;\n }, {});\n if (!manifests[rootDir]) {\n manifests[rootDir] = workspaceManifest.toJson({\n copyPeerToRuntime: copyPeerToRuntimeOnRoot,\n installPeersFromEnvs,\n });\n }\n return manifests;\n }\n\n private async cleanCompsNodeModules(componentDirectoryMap: ComponentMap<string>) {\n const promises = componentDirectoryMap.toArray().map(([, dir]) => {\n const nmDir = path.join(dir, 'node_modules');\n return fs.remove(nmDir);\n });\n return Promise.all(promises);\n }\n\n private async runPrePostSubscribers(\n subscribers: PreInstallSubscriberList | PostInstallSubscriberList = [],\n type: 'pre' | 'post',\n args: InstallArgs\n ): Promise<void> {\n const message = this.installingContext?.inCapsule\n ? `(capsule) running ${type} install subscribers in root dir ${this.rootDir}`\n : `running ${type} install subscribers`;\n if (!this.installingContext?.inCapsule) {\n this.logger.setStatusLine(message);\n }\n await mapSeries(subscribers, async (subscriber) => {\n return subscriber(this, args);\n });\n if (!this.installingContext?.inCapsule) {\n this.logger.consoleSuccess(message);\n }\n }\n}\n"],"mappings":"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"}
@@ -195,6 +195,11 @@ export declare class DependencyResolverMain {
195
195
  * component aspect.
196
196
  */
197
197
  componentAspect: ComponentMain, packageManagerSlot: PackageManagerSlot, dependencyFactorySlot: DependencyFactorySlot, preInstallSlot: PreInstallSlot, postInstallSlot: PostInstallSlot);
198
+ /**
199
+ * Save list of envs that doesn't contains env.jsonc file
200
+ * this is used to show warning / instuctions to the user
201
+ */
202
+ envsWithoutManifest: Set<string>;
198
203
  /**
199
204
  * This function is a temporary workaround for installation in capsules with pnpm.
200
205
  * Currently pnpm breaks the root node_modules inside the capsule because it removes deps from it.
@@ -207,6 +212,7 @@ export declare class DependencyResolverMain {
207
212
  */
208
213
  supportsDedupingOnExistingRoot(): boolean;
209
214
  hasRootComponents(): boolean;
215
+ hasHarmonyInRootPolicy(): boolean;
210
216
  nodeLinker(): 'hoisted' | 'isolated';
211
217
  linkCoreAspects(): boolean;
212
218
  /**
@@ -354,6 +360,7 @@ export declare class DependencyResolverMain {
354
360
  getEnvPolicyFromEnvId(id: ComponentID, legacyFiles?: SourceFile[]): Promise<EnvPolicy | undefined>;
355
361
  getEnvPolicyFromEnvLegacyId(id: BitId, legacyFiles?: SourceFile[]): Promise<EnvPolicy | undefined>;
356
362
  getComponentEnvPolicy(component: Component): Promise<EnvPolicy>;
363
+ getEnvManifest(envComponent?: Component, legacyFiles?: SourceFile[]): EnvPolicy | undefined;
357
364
  private getEnvPolicyFromFile;
358
365
  getComponentEnvPolicyFromEnv(env: DependenciesEnv): Promise<EnvPolicy>;
359
366
  getComponentEnvPolicyFromEnvDefinition(envDef: EnvDefinition): Promise<EnvPolicy>;
@@ -37,13 +37,6 @@ function _pMapSeries() {
37
37
  };
38
38
  return data;
39
39
  }
40
- function _commentJson() {
41
- const data = require("comment-json");
42
- _commentJson = function () {
43
- return data;
44
- };
45
- return data;
46
- }
47
40
  function _cli() {
48
41
  const data = require("@teambit/cli");
49
42
  _cli = function () {
@@ -373,8 +366,14 @@ class DependencyResolverMain {
373
366
  this.dependencyFactorySlot = dependencyFactorySlot;
374
367
  this.preInstallSlot = preInstallSlot;
375
368
  this.postInstallSlot = postInstallSlot;
369
+ (0, _defineProperty2().default)(this, "envsWithoutManifest", new Set());
376
370
  }
377
371
 
372
+ /**
373
+ * Save list of envs that doesn't contains env.jsonc file
374
+ * this is used to show warning / instuctions to the user
375
+ */
376
+
378
377
  /**
379
378
  * This function is a temporary workaround for installation in capsules with pnpm.
380
379
  * Currently pnpm breaks the root node_modules inside the capsule because it removes deps from it.
@@ -393,6 +392,12 @@ class DependencyResolverMain {
393
392
  hasRootComponents() {
394
393
  return Boolean(this.config.rootComponents);
395
394
  }
395
+ hasHarmonyInRootPolicy() {
396
+ const rootPolicy = this.getWorkspacePolicyFromConfig();
397
+ return rootPolicy.entries.some(({
398
+ dependencyId
399
+ }) => dependencyId === '@teambit/harmony');
400
+ }
396
401
  nodeLinker() {
397
402
  if (this.config.nodeLinker) return this.config.nodeLinker;
398
403
  if (this.config.packageManager === 'teambit.dependencies/pnpm') return 'isolated';
@@ -600,8 +605,19 @@ class DependencyResolverMain {
600
605
  return modulePath;
601
606
  }
602
607
  const pkgName = this.getPackageName(component);
608
+ const selfRootDir = (0, _bitRoots().getRelativeRootComponentDir)(component.id.toString());
609
+ // In case the component is it's own root we want to load it from it's own root folder
610
+ if (_fsExtra().default.pathExistsSync(selfRootDir)) {
611
+ const innerDir = (0, _path().join)(selfRootDir, 'node_modules', pkgName);
612
+ if (_fsExtra().default.pathExistsSync(innerDir)) return innerDir;
613
+ // sometime for the env itself we don't have the env package in the env root dir, because it was hoisted
614
+ // in that case we return the dir from the root node_modules
615
+ return this.getModulePath(component);
616
+ }
603
617
  const envId = this.envs.getEnvId(component);
604
- return (0, _path().join)((0, _bitRoots().getRelativeRootComponentDir)(envId), 'node_modules', pkgName);
618
+ const dirInEnvRoot = (0, _path().join)((0, _bitRoots().getRelativeRootComponentDir)(envId), 'node_modules', pkgName);
619
+ if (_fsExtra().default.pathExistsSync(dirInEnvRoot)) return dirInEnvRoot;
620
+ return this.getModulePath(component);
605
621
  }
606
622
 
607
623
  /**
@@ -929,10 +945,23 @@ class DependencyResolverMain {
929
945
  registerRootPolicy(policy) {
930
946
  return this.rootPolicyRegistry.register(policy);
931
947
  }
948
+
949
+ // async getComponentEnvPolicyFromExtension(configuredExtensions: ExtensionDataList): Promise<EnvPolicy> {
950
+ // const env = this.envs.calculateEnvFromExtensions(configuredExtensions);
951
+ // const fromFile = await this.getEnvPolicyFromFile(env.id);
952
+ // if (fromFile) return fromFile;
953
+ // return this.getComponentEnvPolicyFromEnv(env.env);
954
+ // }
955
+
932
956
  async getComponentEnvPolicyFromExtension(configuredExtensions) {
933
- const env = this.envs.calculateEnvFromExtensions(configuredExtensions);
934
- const fromFile = await this.getEnvPolicyFromFile(env.id);
957
+ const envId = await this.envs.calculateEnvIdFromExtensions(configuredExtensions);
958
+ if (this.envs.isCoreEnv(envId)) {
959
+ const env = await this.envs.calculateEnvFromExtensions(configuredExtensions);
960
+ return this.getComponentEnvPolicyFromEnv(env.env);
961
+ }
962
+ const fromFile = await this.getEnvPolicyFromFile(envId);
935
963
  if (fromFile) return fromFile;
964
+ const env = await this.envs.calculateEnvFromExtensions(configuredExtensions);
936
965
  return this.getComponentEnvPolicyFromEnv(env.env);
937
966
  }
938
967
  async getEnvPolicyFromEnvId(id, legacyFiles) {
@@ -948,31 +977,32 @@ class DependencyResolverMain {
948
977
  }
949
978
  async getComponentEnvPolicy(component) {
950
979
  // const envComponent = await this.envs.getEnvComponent(component);
951
- const fromFile = await this.getEnvPolicyFromFile(this.envs.getEnvId(component));
980
+ const envId = await this.envs.calculateEnvId(component);
981
+ if (this.envs.isCoreEnv(envId.toStringWithoutVersion())) {
982
+ const env = this.envs.getEnv(component).env;
983
+ return this.getComponentEnvPolicyFromEnv(env);
984
+ }
985
+ const fromFile = await this.getEnvPolicyFromFile(envId.toString());
952
986
  if (fromFile) return fromFile;
987
+ this.envsWithoutManifest.add(envId.toString());
953
988
  const env = this.envs.getEnv(component).env;
954
989
  return this.getComponentEnvPolicyFromEnv(env);
955
990
  }
991
+ getEnvManifest(envComponent, legacyFiles) {
992
+ const object = this.envs.getEnvManifest(envComponent, legacyFiles);
993
+ const policy = object === null || object === void 0 ? void 0 : object.policy;
994
+ if (!policy) return undefined;
995
+ const allPoliciesFromEnv = _envPolicy().EnvPolicy.fromConfigObject(policy);
996
+ return allPoliciesFromEnv;
997
+ }
956
998
  async getEnvPolicyFromFile(envId, legacyFiles) {
957
999
  const isCoreEnv = this.envs.isCoreEnv(envId);
958
1000
  if (isCoreEnv) return undefined;
959
- let envJson;
960
1001
  if (legacyFiles) {
961
- envJson = legacyFiles.find(file => {
962
- return file.relative === 'env.jsonc' || file.relative === 'env.json';
963
- });
964
- } else {
965
- const envComponent = await this.envs.getEnvComponentByEnvId(envId, envId);
966
- envJson = envComponent.filesystem.files.find(file => {
967
- return file.relative === 'env.jsonc' || file.relative === 'env.json';
968
- });
1002
+ return this.getEnvManifest(undefined, legacyFiles);
969
1003
  }
970
- if (!envJson) return undefined;
971
- const object = (0, _commentJson().parse)(envJson.contents.toString('utf8'));
972
- const policy = object === null || object === void 0 ? void 0 : object.policy;
973
- if (!policy) return undefined;
974
- const allPoliciesFromEnv = _envPolicy().EnvPolicy.fromConfigObject(policy);
975
- return allPoliciesFromEnv;
1004
+ const envComponent = await this.envs.getEnvComponentByEnvId(envId, envId);
1005
+ return this.getEnvManifest(envComponent);
976
1006
  }
977
1007
  async getComponentEnvPolicyFromEnv(env) {
978
1008
  if (env.getDependencies && typeof env.getDependencies === 'function') {
@@ -1102,7 +1132,7 @@ class DependencyResolverMain {
1102
1132
  * Do not use this function for other purposes.
1103
1133
  */
1104
1134
  async calcComponentEnvDepDetectors(extensions) {
1105
- const envDef = this.envs.calculateEnvFromExtensions(extensions);
1135
+ const envDef = await this.envs.calculateEnvFromExtensions(extensions);
1106
1136
  const depEnv = envDef.env;
1107
1137
  if (typeof (depEnv === null || depEnv === void 0 ? void 0 : depEnv.getDepDetectors) === 'function') {
1108
1138
  return depEnv.getDepDetectors();