@teambit/dependency-resolver 1.0.572 → 1.0.574

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.
@@ -40,6 +40,10 @@ export type LinkingOptions = {
40
40
  * Link deps which should be linked to the env
41
41
  */
42
42
  linkDepsResolvedFromEnv?: boolean;
43
+ /**
44
+ * non-core packages to link. provided by addPackagesToLink slot of the deps-resolver aspect
45
+ */
46
+ additionalPackagesToLink?: string[];
43
47
  };
44
48
  export type LinkDetail = {
45
49
  packageName: string;
@@ -70,6 +74,10 @@ export type LinkResults = {
70
74
  resolvedFromEnvLinks?: DepsLinkedToEnvResult[];
71
75
  nestedDepsInNmLinks?: NestedNMDepsLinksResult[];
72
76
  linkToDirResults?: LinkToDirResult[];
77
+ /**
78
+ * non-core packages to link. provided by addPackagesToLink slot of the deps-resolver aspect
79
+ */
80
+ slotOriginatedLinks?: LinkDetail[];
73
81
  };
74
82
  export declare class DependencyLinker {
75
83
  private dependencyResolver;
@@ -113,5 +121,6 @@ export declare class DependencyLinker {
113
121
  */
114
122
  private removeSymlinkTarget;
115
123
  private _getPkgPathFromCurrentBitDir;
124
+ private linkNonCorePackages;
116
125
  private linkNonAspectCorePackages;
117
126
  }
@@ -121,6 +121,9 @@ class DependencyLinker {
121
121
  if (linkResults.teambitLegacyLink) {
122
122
  localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitLegacyLink));
123
123
  }
124
+ if (linkResults.slotOriginatedLinks) {
125
+ localLinks.push(...linkResults.slotOriginatedLinks.map(l => this.linkDetailToLocalDepEntry(l)));
126
+ }
124
127
  if (linkResults.resolvedFromEnvLinks) {
125
128
  linkResults.resolvedFromEnvLinks.forEach(link => {
126
129
  link.linksDetail.forEach(linkDetail => {
@@ -182,6 +185,8 @@ class DependencyLinker {
182
185
  return undefined;
183
186
  });
184
187
  result = _objectSpread(_objectSpread({}, result), await this.linkCoreAspectsAndLegacy(finalRootDir, componentIds, linkingOpts));
188
+ const registeredPackages = this.linkingOptions?.additionalPackagesToLink || [];
189
+ result.slotOriginatedLinks = registeredPackages.map(pkgName => this.linkNonCorePackages(finalRootDir, pkgName));
185
190
  if (!this.linkingContext?.inCapsule) {
186
191
  this.logger.consoleSuccess(outputMessage, startTime);
187
192
  }
@@ -549,6 +554,23 @@ class DependencyLinker {
549
554
  if (!this._currentBitDir) return undefined;
550
555
  return _path().default.join(this._currentBitDir, 'node_modules', packageName);
551
556
  }
557
+ linkNonCorePackages(rootDir, packageName) {
558
+ const target = _path().default.join(rootDir, 'node_modules', packageName);
559
+ const fromDirBvm = this._getPkgPathFromCurrentBitDir(packageName);
560
+ if (fromDirBvm) {
561
+ return {
562
+ packageName,
563
+ from: fromDirBvm,
564
+ to: target
565
+ };
566
+ }
567
+ const fromDirBitRepo = getDistDirForDevEnv(packageName);
568
+ return {
569
+ packageName,
570
+ from: fromDirBitRepo,
571
+ to: target
572
+ };
573
+ }
552
574
  linkNonAspectCorePackages(rootDir, name, mainAspectPath) {
553
575
  const distDir = _path().default.join(mainAspectPath, 'dist', name);
554
576
  const packageName = `@teambit/${name}`;
@@ -1 +1 @@
1
- {"version":3,"names":["_isBuiltinModule","data","_interopRequireDefault","require","_path","_lodash","_fsExtra","_resolveFrom","_bvm","_pkgModules","_bitError","_aspectLoader","_exceptions","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_LINKING_OPTIONS","rewire","linkTeambitBit","linkCoreAspects","linkDepsResolvedFromEnv","linkNestedDepsInNM","DependencyLinker","constructor","dependencyResolver","aspectLoader","componentAspect","envs","logger","rootDir","linkingOptions","linkingContext","_currentBitDir","findCurrentBvmDir","calculateLinkedDeps","componentDirectoryMap","options","linkResults","_calculateLinks","localLinks","teambitBitLink","linkDetailToLocalDepEntry","linkDetail","coreAspectsLinks","link","harmonyLink","teambitLegacyLink","resolvedFromEnvLinks","linksDetail","linkToDirResults","linkedRootDeps","fromEntries","map","key","packageName","from","outputMessage","inCapsule","setStatusLine","debug","omit","startTime","process","hrtime","result","finalRootDir","linkingOpts","assign","RootDirNotDefined","linkToDir","components","toArray","component","includePeers","_getLinksToPeers","nestedDepsInNmLinks","addSymlinkFromComponentDirNMToWorkspaceDirNM","componentIds","_dir","comp","id","undefined","linkCoreAspectsAndLegacy","consoleSuccess","peers","Set","Promise","all","depList","getDependencies","peerList","byLifecycle","dependency","getPackageName","add","fromDir","path","join","toDir","Array","componentId","to","componentIdsWithoutVersions","toString","ignoreVersion","isBitRepoWorkspace","bitLink","linkBitAspectIfNotExist","mainAspectPath","mainAspect","MainAspectNotLinkable","hasLocalInstallation","linkNonExistingCoreAspects","targetModulesDir","linkNonAspectCorePackages","targetDir","results","componentPackageName","componentIdToPackageName","state","_consumer","rootNodeModules","getPackagesFoldersToLink","dir","parent","folders","fs","readdirSync","withFileTypes","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","info","filteredLinks","compact","componentsNeedLinks","componentsNeedLinksP","policy","getPolicy","resolvedFromEnv","getResolvedFromEnv","env","getEnv","componentNeedLink","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","depsLinkedToEnvResult","mainAspectId","existing","find","linkBit","aspectId","target","shouldSymlink","removeSymlinkTarget","src","_getPkgPathFromCurrentBitDir","ensureDir","dirname","opts","coreAspectsIds","getCoreAspectIds","filtered","getCoreAspectName","linkCoreAspect","getCoreAspectPackageName","aspectDir","isAspectDirExist","pathExistsSync","getAspectDir","module","resolve","err","CoreAspectLinkError","targetPath","targetStat","lstatSync","distDir","isDistDirExist","newDir","getDistDirForDevEnv","resolvedPath","NonAspectCorePackageLinkError","exports","moduleDirectory","includes","nmDir","__dirname","substring","indexOf","paths","BitError","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 { findCurrentBvmDir } from '@teambit/bvm.path';\nimport { ComponentMap, Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/toolbox.path.path';\nimport { componentIdToPackageName } from '@teambit/pkg.modules.component-package-name';\nimport { BitError } from '@teambit/bit-error';\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 { 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 * Link peer dependencies of the components to the target project.\n * Peer dependencies should be singletons, so the project should use the same\n * version of the peer dependency as the linked in components.\n */\n includePeers?: boolean;\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 private _currentBitDir: string | null;\n\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 this._currentBitDir = findCurrentBvmDir();\n }\n\n async calculateLinkedDeps(\n rootDir: string | undefined,\n componentDirectoryMap: ComponentMap<string>,\n options: LinkingOptions = {}\n ): Promise<{ linkedRootDeps: Record<string, string>; linkResults: LinkResults }> {\n const linkResults = await this._calculateLinks(rootDir, componentDirectoryMap, options);\n const localLinks: Array<[string, string]> = [];\n if (linkResults.teambitBitLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitBitLink.linkDetail));\n }\n if (linkResults.coreAspectsLinks) {\n linkResults.coreAspectsLinks.forEach((link) => {\n localLinks.push(this.linkDetailToLocalDepEntry(link.linkDetail));\n });\n }\n if (linkResults.harmonyLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.harmonyLink));\n }\n if (linkResults.teambitLegacyLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitLegacyLink));\n }\n if (linkResults.resolvedFromEnvLinks) {\n linkResults.resolvedFromEnvLinks.forEach((link) => {\n link.linksDetail.forEach((linkDetail) => {\n localLinks.push(this.linkDetailToLocalDepEntry(linkDetail));\n });\n });\n }\n if (linkResults.linkToDirResults) {\n linkResults.linkToDirResults.forEach((link) => {\n localLinks.push(this.linkDetailToLocalDepEntry(link.linksDetail));\n });\n }\n return {\n linkedRootDeps: Object.fromEntries(localLinks.map(([key, value]) => [key, `link:${value}`])),\n linkResults,\n };\n }\n\n private linkDetailToLocalDepEntry(linkDetail: LinkDetail): [string, string] {\n return [linkDetail.packageName, linkDetail.from];\n }\n\n private async _calculateLinks(\n rootDir: string | undefined,\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 if (options.includePeers) {\n result.linkToDirResults.push(\n ...(await this._getLinksToPeers(componentDirectoryMap, { finalRootDir, linkToDir: options.linkToDir }))\n );\n }\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(finalRootDir, componentIds, linkingOpts)),\n };\n if (!this.linkingContext?.inCapsule) {\n this.logger.consoleSuccess(outputMessage, startTime);\n }\n return result;\n }\n\n async _getLinksToPeers(\n componentDirectoryMap: ComponentMap<string>,\n options: {\n finalRootDir: string;\n linkToDir: string;\n }\n ): Promise<LinkToDirResult[]> {\n const peers = new Set<string>();\n await Promise.all(\n componentDirectoryMap.toArray().map(async ([component]) => {\n const depList = this.dependencyResolver.getDependencies(component);\n const peerList = depList.byLifecycle('peer');\n peerList.forEach((dependency) => {\n if (dependency.getPackageName) {\n peers.add(dependency.getPackageName());\n }\n });\n })\n );\n const fromDir = path.join(options.finalRootDir, 'node_modules');\n const toDir = path.join(options.linkToDir, 'node_modules');\n return Array.from(peers).map((packageName) => ({\n componentId: packageName,\n linksDetail: {\n packageName,\n from: path.join(fromDir, packageName),\n to: path.join(toDir, packageName),\n },\n }));\n }\n\n async linkCoreAspectsAndLegacy(\n rootDir: string,\n componentIds: ComponentID[] = [],\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 linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(rootDir)) {\n const bitLink = await this.linkBitAspectIfNotExist(\n path.join(rootDir, 'node_modules'),\n componentIdsWithoutVersions\n );\n result.teambitBitLink = bitLink;\n }\n\n let mainAspectPath = result.teambitBitLink?.linkDetail.from;\n if (!mainAspectPath && this.aspectLoader.mainAspect) {\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n mainAspectPath = path.join(rootDir, 'node_modules', this.aspectLoader.mainAspect.packageName);\n }\n if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(rootDir)) {\n const hasLocalInstallation = !linkingOpts.linkTeambitBit;\n if (mainAspectPath) {\n result.coreAspectsLinks = await this.linkNonExistingCoreAspects(componentIdsWithoutVersions, {\n targetModulesDir: path.join(rootDir, 'node_modules'),\n mainAspectPath,\n hasLocalInstallation,\n });\n } else {\n result.coreAspectsLinks = [];\n }\n }\n\n if (mainAspectPath) {\n // the following line links @teambit/legacy to the workspace node_modules. at this point, we removed all\n // @teambit/legacy occurrences from the repo but others/external repos still have it.\n result.teambitLegacyLink = this.linkNonAspectCorePackages(rootDir, 'legacy', mainAspectPath);\n result.harmonyLink = this.linkNonAspectCorePackages(rootDir, 'harmony', mainAspectPath);\n }\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 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 this.logger.info(\n `linking nested dependency ${folderEntry.moduleName} for component ${component}. link src: ${linkSrc} link target: ${linkTarget}`\n );\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 this.logger.info(\n `linking dependency ${depEntry.dependencyId} from env directory ${envDir}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n\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 =\n this._getPkgPathFromCurrentBitDir(this.aspectLoader.mainAspect.packageName) ?? this.aspectLoader.mainAspect.path;\n await fs.ensureDir(path.dirname(target));\n return { packageName: this.aspectLoader.mainAspect.packageName, from: src, to: target };\n }\n\n private async linkNonExistingCoreAspects(\n componentIds: string[],\n opts: {\n targetModulesDir: string;\n mainAspectPath: string;\n hasLocalInstallation?: boolean;\n }\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) => this.linkCoreAspect(id, opts));\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 id: string,\n {\n targetModulesDir,\n mainAspectPath,\n hasLocalInstallation,\n }: {\n targetModulesDir: string;\n mainAspectPath: string;\n hasLocalInstallation?: boolean;\n }\n ): CoreAspectLinkResult | undefined {\n const name = getCoreAspectName(id);\n const packageName = getCoreAspectPackageName(id);\n let aspectDir = path.join(mainAspectPath, 'dist', name);\n const target = path.join(targetModulesDir, packageName);\n const fromDir = this._getPkgPathFromCurrentBitDir(packageName);\n if (fromDir) {\n return { aspectId: id, linkDetail: { packageName, from: fromDir, to: target } };\n }\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 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 this.logger.debug(`linkCoreAspect: linking aspectPath ${aspectPath} to ${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 {}\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 return true;\n }\n return true;\n }\n\n private _getPkgPathFromCurrentBitDir(packageName: string): string | undefined {\n if (!this._currentBitDir) return undefined;\n return path.join(this._currentBitDir, 'node_modules', packageName);\n }\n\n private linkNonAspectCorePackages(rootDir: string, name: string, mainAspectPath: string): LinkDetail | undefined {\n const distDir = path.join(mainAspectPath, 'dist', name);\n\n const packageName = `@teambit/${name}`;\n const target = path.join(rootDir, 'node_modules', packageName);\n const fromDir = this._getPkgPathFromCurrentBitDir(packageName);\n if (fromDir) {\n return { packageName, from: fromDir, to: target };\n }\n const isDistDirExist = fs.pathExistsSync(distDir);\n if (!isDistDirExist) {\n const newDir = getDistDirForDevEnv(packageName);\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 return { packageName, from: resolvedPath, to: target };\n } catch (err: any) {\n throw new NonAspectCorePackageLinkError(err, packageName);\n }\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 {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_isBuiltinModule","data","_interopRequireDefault","require","_path","_lodash","_fsExtra","_resolveFrom","_bvm","_pkgModules","_bitError","_aspectLoader","_exceptions","e","__esModule","default","ownKeys","r","t","Object","keys","getOwnPropertySymbols","o","filter","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","arguments","length","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_toPropertyKey","value","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","DEFAULT_LINKING_OPTIONS","rewire","linkTeambitBit","linkCoreAspects","linkDepsResolvedFromEnv","linkNestedDepsInNM","DependencyLinker","constructor","dependencyResolver","aspectLoader","componentAspect","envs","logger","rootDir","linkingOptions","linkingContext","_currentBitDir","findCurrentBvmDir","calculateLinkedDeps","componentDirectoryMap","options","linkResults","_calculateLinks","localLinks","teambitBitLink","linkDetailToLocalDepEntry","linkDetail","coreAspectsLinks","link","harmonyLink","teambitLegacyLink","slotOriginatedLinks","map","l","resolvedFromEnvLinks","linksDetail","linkToDirResults","linkedRootDeps","fromEntries","key","packageName","from","outputMessage","inCapsule","setStatusLine","debug","omit","startTime","process","hrtime","result","finalRootDir","linkingOpts","assign","RootDirNotDefined","linkToDir","components","toArray","component","includePeers","_getLinksToPeers","nestedDepsInNmLinks","addSymlinkFromComponentDirNMToWorkspaceDirNM","componentIds","_dir","comp","id","undefined","linkCoreAspectsAndLegacy","registeredPackages","additionalPackagesToLink","pkgName","linkNonCorePackages","consoleSuccess","peers","Set","Promise","all","depList","getDependencies","peerList","byLifecycle","dependency","getPackageName","add","fromDir","path","join","toDir","Array","componentId","to","componentIdsWithoutVersions","toString","ignoreVersion","isBitRepoWorkspace","bitLink","linkBitAspectIfNotExist","mainAspectPath","mainAspect","MainAspectNotLinkable","hasLocalInstallation","linkNonExistingCoreAspects","targetModulesDir","linkNonAspectCorePackages","targetDir","results","componentPackageName","componentIdToPackageName","state","_consumer","rootNodeModules","getPackagesFoldersToLink","dir","parent","folders","fs","readdirSync","withFileTypes","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","info","filteredLinks","compact","componentsNeedLinks","componentsNeedLinksP","policy","getPolicy","resolvedFromEnv","getResolvedFromEnv","env","getEnv","componentNeedLink","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","depsLinkedToEnvResult","mainAspectId","existing","find","linkBit","aspectId","target","shouldSymlink","removeSymlinkTarget","src","_getPkgPathFromCurrentBitDir","ensureDir","dirname","opts","coreAspectsIds","getCoreAspectIds","filtered","getCoreAspectName","linkCoreAspect","getCoreAspectPackageName","aspectDir","isAspectDirExist","pathExistsSync","getAspectDir","module","resolve","err","CoreAspectLinkError","targetPath","targetStat","lstatSync","fromDirBvm","fromDirBitRepo","getDistDirForDevEnv","distDir","isDistDirExist","newDir","resolvedPath","NonAspectCorePackageLinkError","exports","moduleDirectory","includes","nmDir","__dirname","substring","indexOf","paths","BitError","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 { findCurrentBvmDir } from '@teambit/bvm.path';\nimport { ComponentMap, Component, ComponentID, ComponentMain } from '@teambit/component';\nimport { Logger } from '@teambit/logger';\nimport { PathAbsolute } from '@teambit/toolbox.path.path';\nimport { componentIdToPackageName } from '@teambit/pkg.modules.component-package-name';\nimport { BitError } from '@teambit/bit-error';\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 { 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 * Link peer dependencies of the components to the target project.\n * Peer dependencies should be singletons, so the project should use the same\n * version of the peer dependency as the linked in components.\n */\n includePeers?: boolean;\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 /**\n * non-core packages to link. provided by addPackagesToLink slot of the deps-resolver aspect\n */\n additionalPackagesToLink?: string[];\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 * non-core packages to link. provided by addPackagesToLink slot of the deps-resolver aspect\n */\n slotOriginatedLinks?: LinkDetail[];\n};\n\ntype NestedModuleFolderEntry = {\n moduleName: string;\n path: string;\n origPath?: string;\n};\n\nexport class DependencyLinker {\n private _currentBitDir: string | null;\n\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 this._currentBitDir = findCurrentBvmDir();\n }\n\n async calculateLinkedDeps(\n rootDir: string | undefined,\n componentDirectoryMap: ComponentMap<string>,\n options: LinkingOptions = {}\n ): Promise<{ linkedRootDeps: Record<string, string>; linkResults: LinkResults }> {\n const linkResults = await this._calculateLinks(rootDir, componentDirectoryMap, options);\n const localLinks: Array<[string, string]> = [];\n if (linkResults.teambitBitLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitBitLink.linkDetail));\n }\n if (linkResults.coreAspectsLinks) {\n linkResults.coreAspectsLinks.forEach((link) => {\n localLinks.push(this.linkDetailToLocalDepEntry(link.linkDetail));\n });\n }\n if (linkResults.harmonyLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.harmonyLink));\n }\n if (linkResults.teambitLegacyLink) {\n localLinks.push(this.linkDetailToLocalDepEntry(linkResults.teambitLegacyLink));\n }\n if (linkResults.slotOriginatedLinks) {\n localLinks.push(...linkResults.slotOriginatedLinks.map(l => this.linkDetailToLocalDepEntry(l)));\n }\n if (linkResults.resolvedFromEnvLinks) {\n linkResults.resolvedFromEnvLinks.forEach((link) => {\n link.linksDetail.forEach((linkDetail) => {\n localLinks.push(this.linkDetailToLocalDepEntry(linkDetail));\n });\n });\n }\n if (linkResults.linkToDirResults) {\n linkResults.linkToDirResults.forEach((link) => {\n localLinks.push(this.linkDetailToLocalDepEntry(link.linksDetail));\n });\n }\n return {\n linkedRootDeps: Object.fromEntries(localLinks.map(([key, value]) => [key, `link:${value}`])),\n linkResults,\n };\n }\n\n private linkDetailToLocalDepEntry(linkDetail: LinkDetail): [string, string] {\n return [linkDetail.packageName, linkDetail.from];\n }\n\n private async _calculateLinks(\n rootDir: string | undefined,\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 if (options.includePeers) {\n result.linkToDirResults.push(\n ...(await this._getLinksToPeers(componentDirectoryMap, { finalRootDir, linkToDir: options.linkToDir }))\n );\n }\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(finalRootDir, componentIds, linkingOpts)),\n };\n const registeredPackages = this.linkingOptions?.additionalPackagesToLink || [];\n result.slotOriginatedLinks = registeredPackages.map(pkgName => this.linkNonCorePackages(finalRootDir, pkgName));\n\n if (!this.linkingContext?.inCapsule) {\n this.logger.consoleSuccess(outputMessage, startTime);\n }\n return result;\n }\n\n async _getLinksToPeers(\n componentDirectoryMap: ComponentMap<string>,\n options: {\n finalRootDir: string;\n linkToDir: string;\n }\n ): Promise<LinkToDirResult[]> {\n const peers = new Set<string>();\n await Promise.all(\n componentDirectoryMap.toArray().map(async ([component]) => {\n const depList = this.dependencyResolver.getDependencies(component);\n const peerList = depList.byLifecycle('peer');\n peerList.forEach((dependency) => {\n if (dependency.getPackageName) {\n peers.add(dependency.getPackageName());\n }\n });\n })\n );\n const fromDir = path.join(options.finalRootDir, 'node_modules');\n const toDir = path.join(options.linkToDir, 'node_modules');\n return Array.from(peers).map((packageName) => ({\n componentId: packageName,\n linksDetail: {\n packageName,\n from: path.join(fromDir, packageName),\n to: path.join(toDir, packageName),\n },\n }));\n }\n\n async linkCoreAspectsAndLegacy(\n rootDir: string,\n componentIds: ComponentID[] = [],\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 linkingOpts = Object.assign({}, DEFAULT_LINKING_OPTIONS, this.linkingOptions || {}, options || {});\n if (linkingOpts.linkTeambitBit && !this.isBitRepoWorkspace(rootDir)) {\n const bitLink = await this.linkBitAspectIfNotExist(\n path.join(rootDir, 'node_modules'),\n componentIdsWithoutVersions\n );\n result.teambitBitLink = bitLink;\n }\n\n let mainAspectPath = result.teambitBitLink?.linkDetail.from;\n if (!mainAspectPath && this.aspectLoader.mainAspect) {\n if (!this.aspectLoader.mainAspect.packageName) {\n throw new MainAspectNotLinkable();\n }\n mainAspectPath = path.join(rootDir, 'node_modules', this.aspectLoader.mainAspect.packageName);\n }\n if (linkingOpts.linkCoreAspects && !this.isBitRepoWorkspace(rootDir)) {\n const hasLocalInstallation = !linkingOpts.linkTeambitBit;\n if (mainAspectPath) {\n result.coreAspectsLinks = await this.linkNonExistingCoreAspects(componentIdsWithoutVersions, {\n targetModulesDir: path.join(rootDir, 'node_modules'),\n mainAspectPath,\n hasLocalInstallation,\n });\n } else {\n result.coreAspectsLinks = [];\n }\n }\n\n if (mainAspectPath) {\n // the following line links @teambit/legacy to the workspace node_modules. at this point, we removed all\n // @teambit/legacy occurrences from the repo but others/external repos still have it.\n result.teambitLegacyLink = this.linkNonAspectCorePackages(rootDir, 'legacy', mainAspectPath);\n result.harmonyLink = this.linkNonAspectCorePackages(rootDir, 'harmony', mainAspectPath);\n }\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 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 this.logger.info(\n `linking nested dependency ${folderEntry.moduleName} for component ${component}. link src: ${linkSrc} link target: ${linkTarget}`\n );\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 this.logger.info(\n `linking dependency ${depEntry.dependencyId} from env directory ${envDir}. link src: ${linkSrc} link target: ${linkTarget}`\n );\n\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 =\n this._getPkgPathFromCurrentBitDir(this.aspectLoader.mainAspect.packageName) ?? this.aspectLoader.mainAspect.path;\n await fs.ensureDir(path.dirname(target));\n return { packageName: this.aspectLoader.mainAspect.packageName, from: src, to: target };\n }\n\n private async linkNonExistingCoreAspects(\n componentIds: string[],\n opts: {\n targetModulesDir: string;\n mainAspectPath: string;\n hasLocalInstallation?: boolean;\n }\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) => this.linkCoreAspect(id, opts));\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 id: string,\n {\n targetModulesDir,\n mainAspectPath,\n hasLocalInstallation,\n }: {\n targetModulesDir: string;\n mainAspectPath: string;\n hasLocalInstallation?: boolean;\n }\n ): CoreAspectLinkResult | undefined {\n const name = getCoreAspectName(id);\n const packageName = getCoreAspectPackageName(id);\n let aspectDir = path.join(mainAspectPath, 'dist', name);\n const target = path.join(targetModulesDir, packageName);\n const fromDir = this._getPkgPathFromCurrentBitDir(packageName);\n if (fromDir) {\n return { aspectId: id, linkDetail: { packageName, from: fromDir, to: target } };\n }\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 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 this.logger.debug(`linkCoreAspect: linking aspectPath ${aspectPath} to ${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 {}\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 return true;\n }\n return true;\n }\n\n private _getPkgPathFromCurrentBitDir(packageName: string): string | undefined {\n if (!this._currentBitDir) return undefined;\n return path.join(this._currentBitDir, 'node_modules', packageName);\n }\n\n private linkNonCorePackages(rootDir: string, packageName: string): LinkDetail {\n const target = path.join(rootDir, 'node_modules', packageName);\n const fromDirBvm = this._getPkgPathFromCurrentBitDir(packageName);\n if (fromDirBvm) {\n return { packageName, from: fromDirBvm, to: target };\n }\n const fromDirBitRepo = getDistDirForDevEnv(packageName);\n return { packageName, from: fromDirBitRepo, to: target };\n }\n\n private linkNonAspectCorePackages(rootDir: string, name: string, mainAspectPath: string): LinkDetail | undefined {\n const distDir = path.join(mainAspectPath, 'dist', name);\n\n const packageName = `@teambit/${name}`;\n const target = path.join(rootDir, 'node_modules', packageName);\n const fromDir = this._getPkgPathFromCurrentBitDir(packageName);\n if (fromDir) {\n return { packageName, from: fromDir, to: target };\n }\n const isDistDirExist = fs.pathExistsSync(distDir);\n if (!isDistDirExist) {\n const newDir = getDistDirForDevEnv(packageName);\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 return { packageName, from: resolvedPath, to: target };\n } catch (err: any) {\n throw new NonAspectCorePackageLinkError(err, packageName);\n }\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 {\n return undefined;\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -46,6 +46,8 @@ export type PackageManagerSlot = SlotRegistry<PackageManager>;
46
46
  export type DependencyFactorySlot = SlotRegistry<DependencyFactory[]>;
47
47
  export type PreInstallSlot = SlotRegistry<PreInstallSubscriberList>;
48
48
  export type PostInstallSlot = SlotRegistry<PostInstallSubscriberList>;
49
+ type AddPackagesToLink = () => string[];
50
+ type AddPackagesToLinkSlot = SlotRegistry<AddPackagesToLink>;
49
51
  export type MergeDependenciesFunc = (configuredExtensions: ExtensionDataList) => Promise<VariantPolicyConfigObject>;
50
52
  export type GetInstallerOptions = {
51
53
  rootDir?: string;
@@ -94,11 +96,13 @@ export declare class DependencyResolverMain {
94
96
  private dependencyFactorySlot;
95
97
  private preInstallSlot;
96
98
  private postInstallSlot;
99
+ private addPackagesToLinkSlot;
97
100
  /**
98
101
  * cache the workspace policy to improve performance. when workspace.jsonc is changed, this gets cleared.
99
102
  * @see workspace.triggerOnWorkspaceConfigChange
100
103
  */
101
104
  private _workspacePolicy;
105
+ private _additionalPackagesToLink?;
102
106
  constructor(
103
107
  /**
104
108
  * Dependency resolver extension configuration.
@@ -119,7 +123,7 @@ export declare class DependencyResolverMain {
119
123
  /**
120
124
  * component aspect.
121
125
  */
122
- componentAspect: ComponentMain, packageManagerSlot: PackageManagerSlot, dependencyFactorySlot: DependencyFactorySlot, preInstallSlot: PreInstallSlot, postInstallSlot: PostInstallSlot);
126
+ componentAspect: ComponentMain, packageManagerSlot: PackageManagerSlot, dependencyFactorySlot: DependencyFactorySlot, preInstallSlot: PreInstallSlot, postInstallSlot: PostInstallSlot, addPackagesToLinkSlot: AddPackagesToLinkSlot);
123
127
  /**
124
128
  * Save list of envs that doesn't contains env.jsonc file
125
129
  * this is used to show warning / instuctions to the user
@@ -149,6 +153,7 @@ export declare class DependencyResolverMain {
149
153
  registerDependencyFactories(factories: DependencyFactory[]): void;
150
154
  registerPreInstallSubscribers(subscribers: PreInstallSubscriberList): void;
151
155
  registerPostInstallSubscribers(subscribers: PreInstallSubscriberList): void;
156
+ registerAddPackagesToLink(fn: AddPackagesToLink): void;
152
157
  getSavePrefix(): string;
153
158
  getVersionWithSavePrefix({ version, overridePrefix, wantedRange, }: {
154
159
  version: string;
@@ -247,6 +252,7 @@ export declare class DependencyResolverMain {
247
252
  getInstaller(options?: GetInstallerOptions): DependencyInstaller;
248
253
  private getPreInstallSubscribers;
249
254
  private getPostInstallSubscribers;
255
+ private getAdditionalPackagesToLink;
250
256
  /**
251
257
  * get a component dependency linker.
252
258
  */
@@ -418,7 +424,7 @@ export declare class DependencyResolverMain {
418
424
  static dependencies: Aspect[];
419
425
  static slots: (((registerFn: () => string) => SlotRegistry<WorkspacePolicy>) | ((registerFn: () => string) => SlotRegistry<Partial<Record<keyof import("./policy").PolicyConfigKeys, {
420
426
  [dependencyId: string]: import("./policy/variant-policy/variant-policy").VariantPolicyConfigEntryValue;
421
- }>>>) | ((registerFn: () => string) => SlotRegistry<PackageManager>) | ((registerFn: () => string) => SlotRegistry<RegExp>) | ((registerFn: () => string) => SlotRegistry<DependencyFactory>) | ((registerFn: () => string) => SlotRegistry<PreInstallSubscriberList>) | ((registerFn: () => string) => SlotRegistry<DependencyDetector>))[];
427
+ }>>>) | ((registerFn: () => string) => SlotRegistry<PackageManager>) | ((registerFn: () => string) => SlotRegistry<RegExp>) | ((registerFn: () => string) => SlotRegistry<DependencyFactory>) | ((registerFn: () => string) => SlotRegistry<PreInstallSubscriberList>) | ((registerFn: () => string) => SlotRegistry<DependencyDetector>) | ((registerFn: () => string) => SlotRegistry<AddPackagesToLinkSlot>))[];
422
428
  static defaultConfig: DependencyResolverWorkspaceConfig & Required<Pick<DependencyResolverWorkspaceConfig, 'linkCoreAspects'>>;
423
429
  static provider([envs, loggerExt, configMain, aspectLoader, componentAspect, graphql, configStore]: [
424
430
  EnvsMain,
@@ -428,13 +434,14 @@ export declare class DependencyResolverMain {
428
434
  ComponentMain,
429
435
  GraphqlMain,
430
436
  ConfigStoreMain
431
- ], config: DependencyResolverWorkspaceConfig, [rootPolicyRegistry, policiesRegistry, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot,]: [
437
+ ], config: DependencyResolverWorkspaceConfig, [rootPolicyRegistry, policiesRegistry, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot, addPackagesToLinkSlot,]: [
432
438
  RootPolicyRegistry,
433
439
  PoliciesRegistry,
434
440
  PackageManagerSlot,
435
441
  DependencyFactorySlot,
436
442
  PreInstallSlot,
437
- PostInstallSlot
443
+ PostInstallSlot,
444
+ AddPackagesToLinkSlot
438
445
  ]): Promise<DependencyResolverMain>;
439
446
  getEmptyDepsObject(): ManifestDependenciesObject;
440
447
  /**
@@ -349,7 +349,7 @@ class DependencyResolverMain {
349
349
  /**
350
350
  * component aspect.
351
351
  */
352
- componentAspect, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot) {
352
+ componentAspect, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot, addPackagesToLinkSlot) {
353
353
  this.config = config;
354
354
  this.rootPolicyRegistry = rootPolicyRegistry;
355
355
  this.policiesRegistry = policiesRegistry;
@@ -363,11 +363,13 @@ class DependencyResolverMain {
363
363
  this.dependencyFactorySlot = dependencyFactorySlot;
364
364
  this.preInstallSlot = preInstallSlot;
365
365
  this.postInstallSlot = postInstallSlot;
366
+ this.addPackagesToLinkSlot = addPackagesToLinkSlot;
366
367
  /**
367
368
  * cache the workspace policy to improve performance. when workspace.jsonc is changed, this gets cleared.
368
369
  * @see workspace.triggerOnWorkspaceConfigChange
369
370
  */
370
371
  _defineProperty(this, "_workspacePolicy", void 0);
372
+ _defineProperty(this, "_additionalPackagesToLink", void 0);
371
373
  /**
372
374
  * Save list of envs that doesn't contains env.jsonc file
373
375
  * this is used to show warning / instuctions to the user
@@ -432,6 +434,9 @@ class DependencyResolverMain {
432
434
  registerPostInstallSubscribers(subscribers) {
433
435
  this.postInstallSlot.register(subscribers);
434
436
  }
437
+ registerAddPackagesToLink(fn) {
438
+ this.addPackagesToLinkSlot.register(fn);
439
+ }
435
440
  getSavePrefix() {
436
441
  return this.config.savePrefix || '^';
437
442
  }
@@ -724,12 +729,22 @@ class DependencyResolverMain {
724
729
  getPostInstallSubscribers() {
725
730
  return this.postInstallSlot.values().flat();
726
731
  }
732
+ getAdditionalPackagesToLink() {
733
+ if (!this._additionalPackagesToLink) {
734
+ const additionalPackagesToLinkFn = this.addPackagesToLinkSlot.values().flat();
735
+ this._additionalPackagesToLink = additionalPackagesToLinkFn.map(fn => fn()).flat();
736
+ }
737
+ return this._additionalPackagesToLink;
738
+ }
727
739
 
728
740
  /**
729
741
  * get a component dependency linker.
730
742
  */
731
743
  getLinker(options = {}) {
732
- const linkingOptions = Object.assign({}, defaultLinkingOptions, options?.linkingOptions || {});
744
+ const additionalPackagesToLink = this.getAdditionalPackagesToLink();
745
+ const linkingOptions = Object.assign({
746
+ additionalPackagesToLink
747
+ }, defaultLinkingOptions, options?.linkingOptions || {});
733
748
  // TODO: we should somehow pass the cache root dir to the package manager constructor
734
749
  return new (_dependencyLinker().DependencyLinker)(this, this.aspectLoader, this.componentAspect, this.envs, this.logger, options.rootDir, linkingOptions, options.linkingContext);
735
750
  }
@@ -1428,10 +1443,10 @@ class DependencyResolverMain {
1428
1443
  updatedComponents
1429
1444
  };
1430
1445
  }
1431
- static async provider([envs, loggerExt, configMain, aspectLoader, componentAspect, graphql, configStore], config, [rootPolicyRegistry, policiesRegistry, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot]) {
1446
+ static async provider([envs, loggerExt, configMain, aspectLoader, componentAspect, graphql, configStore], config, [rootPolicyRegistry, policiesRegistry, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot, addPackagesToLinkSlot]) {
1432
1447
  // const packageManager = new PackageManagerLegacy(config.packageManager, logger);
1433
1448
  const logger = loggerExt.createLogger(_dependencyResolver().DependencyResolverAspect.id);
1434
- const dependencyResolver = new DependencyResolverMain(config, rootPolicyRegistry, policiesRegistry, envs, logger, configMain, aspectLoader, configStore, componentAspect, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot);
1449
+ const dependencyResolver = new DependencyResolverMain(config, rootPolicyRegistry, policiesRegistry, envs, logger, configMain, aspectLoader, configStore, componentAspect, packageManagerSlot, dependencyFactorySlot, preInstallSlot, postInstallSlot, addPackagesToLinkSlot);
1435
1450
  const envJsoncDetector = envs.getEnvJsoncDetector();
1436
1451
  dependencyResolver.registerDetector(envJsoncDetector);
1437
1452
  componentAspect.registerShowFragments([new (_showFragments().DependenciesFragment)(dependencyResolver), new (_showFragments().DevDependenciesFragment)(dependencyResolver), new (_showFragments().PeerDependenciesFragment)(dependencyResolver)]);
@@ -1515,7 +1530,7 @@ class DependencyResolverMain {
1515
1530
  exports.DependencyResolverMain = DependencyResolverMain;
1516
1531
  _defineProperty(DependencyResolverMain, "runtime", _cli().MainRuntime);
1517
1532
  _defineProperty(DependencyResolverMain, "dependencies", [_envs().EnvsAspect, _logger().LoggerAspect, _config().ConfigAspect, _aspectLoader().AspectLoaderAspect, _component().ComponentAspect, _graphql().GraphqlAspect, _configStore().ConfigStoreAspect]);
1518
- _defineProperty(DependencyResolverMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
1533
+ _defineProperty(DependencyResolverMain, "slots", [_harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType(), _harmony().Slot.withType()]);
1519
1534
  _defineProperty(DependencyResolverMain, "defaultConfig", {
1520
1535
  policy: {},
1521
1536
  linkCoreAspects: true