@teambit/workspace.modules.node-modules-linker 0.0.0-e3f7eeec263adf3fbb1fce6556b6e662d56fa213 → 0.0.0-e7ed6df08ccdae583c98bddeefe6bfdc35fd01ac

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.
package/.npmignore ADDED
@@ -0,0 +1,10 @@
1
+ dist/tsconfig.tsbuildinfo
2
+ dist/tsconfig.json
3
+ /tsconfig.json
4
+
5
+ package-tar/
6
+ .bit-capsule-ready
7
+ artifacts/*
8
+ package-tar/
9
+ .bit-capsule-ready
10
+ artifacts/*
@@ -1,7 +1,7 @@
1
1
  import type { ComponentID } from '@teambit/component-id';
2
2
  import type { BitMap } from '@teambit/legacy.bit-map';
3
3
  import type { ConsumerComponent } from '@teambit/legacy.consumer-component';
4
- import { PackageJsonFile, DataToPersist } from '@teambit/component.sources';
4
+ import { PackageJsonFile, DataToPersist, Symlink } from '@teambit/component.sources';
5
5
  import type { Consumer } from '@teambit/legacy.consumer';
6
6
  import type { PathOsBasedAbsolute } from '@teambit/toolbox.path.path';
7
7
  import type { Workspace } from '@teambit/workspace';
@@ -25,11 +25,13 @@ export default class NodeModuleLinker {
25
25
  consumer: Consumer;
26
26
  bitMap: BitMap;
27
27
  dataToPersist: DataToPersist;
28
+ absoluteSymlinks: Symlink[];
28
29
  existingLinks: NodeModulesLinksResult[];
29
30
  packageJsonCreated: boolean;
30
31
  constructor(components: Component[], workspace: Workspace);
31
32
  link(): Promise<NodeModulesLinksResult[]>;
32
33
  getLinks(): Promise<DataToPersist>;
34
+ private persistAbsoluteSymlinks;
33
35
  private addLinkResult;
34
36
  getLinksResults(): NodeModulesLinksResult[];
35
37
  _getDefaultScope(component?: ConsumerComponent): string | undefined | null;
@@ -100,6 +100,7 @@ class NodeModuleLinker {
100
100
  this.consumer = this.workspace.consumer;
101
101
  this.bitMap = this.consumer.bitMap;
102
102
  this.dataToPersist = new (_component().DataToPersist)();
103
+ this.absoluteSymlinks = [];
103
104
  this.existingLinks = [];
104
105
  this.packageJsonCreated = false;
105
106
  }
@@ -116,6 +117,7 @@ class NodeModuleLinker {
116
117
  const workspacePath = this.workspace.path;
117
118
  links.addBasePath(workspacePath);
118
119
  await links.persistAllToFS();
120
+ await this.persistAbsoluteSymlinks();
119
121
  // Only clear cache if new package.json of components were created
120
122
  if (this.packageJsonCreated) {
121
123
  await Promise.all(this.components.map(component => this.consumer?.componentFsCache.deleteDependenciesDataCache(component.id.toString())));
@@ -123,14 +125,23 @@ class NodeModuleLinker {
123
125
  // component-issues like "MissingLinksFromNodeModulesToSrc" incorrectly.
124
126
  this.workspace.clearAllComponentsCache();
125
127
  }
126
- await (0, _workspace().linkPkgsToRootComponents)({
127
- rootComponentsPath: this.workspace.rootComponentsPath,
128
- workspacePath
129
- }, this.components.map(comp => (0, _pkgModules().componentIdToPackageName)(comp.state._consumer)));
128
+
129
+ // Only update `.bit_roots` when root components are actually in use. Otherwise
130
+ // we'd be hard-linking into a stale tree left over from a previous install where
131
+ // rootComponents was enabled — pnpm no longer manages that subtree, so its layout
132
+ // can be inconsistent and `mkdir` may throw ENOTDIR/ENOENT through a broken
133
+ // ancestor inside `.bit_roots/<env>/node_modules/...`.
134
+ if (this.workspace.hasRootComponents()) {
135
+ await (0, _workspace().linkPkgsToRootComponents)({
136
+ rootComponentsPath: this.workspace.rootComponentsPath,
137
+ workspacePath
138
+ }, this.components.map(comp => (0, _pkgModules().componentIdToPackageName)(comp.state._consumer)));
139
+ }
130
140
  return linksResults;
131
141
  }
132
142
  async getLinks() {
133
143
  this.dataToPersist = new (_component().DataToPersist)();
144
+ this.absoluteSymlinks = [];
134
145
  await (0, _pMapSeries().default)(this.components, async component => {
135
146
  const componentId = component.id.toString();
136
147
  _legacy2().logger.debug(`linking component to node_modules: ${componentId}`);
@@ -138,6 +149,9 @@ class NodeModuleLinker {
138
149
  });
139
150
  return this.dataToPersist;
140
151
  }
152
+ async persistAbsoluteSymlinks() {
153
+ await Promise.all(this.absoluteSymlinks.map(symlink => symlink.write()));
154
+ }
141
155
  addLinkResult(linksResults, id, from, to, existsBefore) {
142
156
  if (!id) return;
143
157
  const existingLinkResult = linksResults.find(linkResult => linkResult.id.isEqual(id));
@@ -163,6 +177,9 @@ class NodeModuleLinker {
163
177
  this.dataToPersist.symlinks.forEach(symlink => {
164
178
  this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);
165
179
  });
180
+ this.absoluteSymlinks.forEach(symlink => {
181
+ this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);
182
+ });
166
183
  this.existingLinks.forEach(link => {
167
184
  const componentId = link.id;
168
185
  link.bound.forEach(bound => {
@@ -214,6 +231,8 @@ class NodeModuleLinker {
214
231
  }
215
232
  if (stat && stat.isSymbolicLink()) {
216
233
  this.addLinkResult(this.existingLinks, component.id, fileWithRootDir, dest, true);
234
+ } else if (path().isAbsolute(dest)) {
235
+ this.absoluteSymlinks.push(_component().Symlink.makeInstance(path().join(this.workspace.path, fileWithRootDir), dest, component.id, true));
217
236
  } else {
218
237
  this.dataToPersist.addSymlink(_component().Symlink.makeInstance(fileWithRootDir, dest, component.id, true));
219
238
  }
@@ -321,7 +340,12 @@ class NodeModuleLinker {
321
340
  const injectedDirs = await this.workspace.getInjectedDirs(component);
322
341
  const src = path().join(dest, 'package.json');
323
342
  for (const injectedDir of injectedDirs) {
324
- this.dataToPersist.addSymlink(_component().Symlink.makeInstance(src, path().join(injectedDir, 'package.json')));
343
+ const injectedPackageJson = path().join(injectedDir, _legacy().PACKAGE_JSON);
344
+ if (path().isAbsolute(injectedPackageJson)) {
345
+ this.absoluteSymlinks.push(_component().Symlink.makeInstance(path().join(this.workspace.path, src), injectedPackageJson, component.id));
346
+ continue;
347
+ }
348
+ this.dataToPersist.addSymlink(_component().Symlink.makeInstance(src, injectedPackageJson));
325
349
  }
326
350
  }
327
351
 
@@ -1 +1 @@
1
- {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_pMapSeries","path","_interopRequireWildcard","_workspace","_legacy","_component","_legacy2","_pkgModules","_componentPackageVersion","_packageJsonTransformer","_codemodComponents","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NodeModuleLinker","constructor","components","workspace","consumer","bitMap","dataToPersist","DataToPersist","existingLinks","packageJsonCreated","link","filter","component","getComponentIfExist","id","links","getLinks","linksResults","getLinksResults","length","workspacePath","addBasePath","persistAllToFS","Promise","all","map","componentFsCache","deleteDependenciesDataCache","toString","clearAllComponentsCache","linkPkgsToRootComponents","rootComponentsPath","comp","componentIdToPackageName","state","_consumer","pMapSeries","componentId","logger","debug","_populateComponentsLinks","addLinkResult","from","to","existsBefore","existingLinkResult","find","linkResult","isEqual","bound","push","symlinks","forEach","symlink","src","dest","_getDefaultScope","defaultScope","config","legacyComponent","linkPath","getNodeModulesPathOfComponent","symlinkComponentDir","_deleteExistingLinksRootIfSymlink","createPackageJson","componentMap","getComponent","filesToBind","getAllFilesPaths","file","fileWithRootDir","join","rootDir","stat","fs","lstat","isSymbolicLink","addSymlink","Symlink","makeInstance","IS_WINDOWS","SOURCE_DIR_SYMLINK_TO_NM","lstatSync","removePath","RemovePath","undefined","legacyComp","hasPackageJsonAsComponentFile","files","some","relative","PACKAGE_JSON","packageJsonPath","packageJsonExist","pathExists","packageJson","PackageJsonFile","createFromComponent","_applyTransformers","addOrUpdateProperty","mainFile","packageJsonObject","version","snapToSemver","_bit_local","source","envsData","aspects","isAspect","type","types","exports","defaultModule","existingPkgJson","readJson","newPkgJsonStr","JSON","stringify","existingPkgJsonStr","addFile","toVinylFile","injectedDirs","getInjectedDirs","injectedDir","PackageJsonTransformer","applyTransformers","linkToNodeModulesWithCodemod","bitIds","changeRelativeToModulePaths","codemodResults","changeCodeFromRelativeToModulePaths","linkToNodeModulesByIds","componentsIds","loadFromScope","getComponents","scope","getMany","idsToNotLoadAsAspects","loadSeedersAsAspects","loadExtensions","nodeModuleLinker","linkToNodeModulesByComponents","removeLinksFromNodeModules","absoluteCompDir","componentDir","relativeFilesInsideCompDir","pkgDir","getComponentPackagePath","pathsToRemove","remove"],"sources":["node-modules-linker.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport pMapSeries from 'p-map-series';\nimport * as path from 'path';\nimport { linkPkgsToRootComponents } from '@teambit/workspace.root-components';\nimport type { ComponentID } from '@teambit/component-id';\nimport { IS_WINDOWS, PACKAGE_JSON, SOURCE_DIR_SYMLINK_TO_NM } from '@teambit/legacy.constants';\nimport type { BitMap } from '@teambit/legacy.bit-map';\nimport type { ConsumerComponent } from '@teambit/legacy.consumer-component';\nimport { PackageJsonFile, DataToPersist, RemovePath, Symlink } from '@teambit/component.sources';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { logger } from '@teambit/legacy.logger';\nimport type { PathOsBasedAbsolute, PathOsBasedRelative } from '@teambit/toolbox.path.path';\nimport { componentIdToPackageName, getNodeModulesPathOfComponent } from '@teambit/pkg.modules.component-package-name';\nimport type { Workspace } from '@teambit/workspace';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport type { Component } from '@teambit/component';\nimport { PackageJsonTransformer } from './package-json-transformer';\nimport { changeCodeFromRelativeToModulePaths } from './codemod-components';\n\ntype LinkDetail = { from: string; to: string; existsBefore: boolean };\nexport type NodeModulesLinksResult = {\n id: ComponentID;\n bound: LinkDetail[];\n};\n\n/**\n * link given components to node_modules, so it's possible to use absolute link instead of relative\n * for example, require('@bit/remote-scope.bar.foo)\n */\nexport default class NodeModuleLinker {\n consumer: Consumer;\n bitMap: BitMap; // preparation for the capsule, which is going to have only BitMap with no Consumer\n dataToPersist: DataToPersist;\n existingLinks: NodeModulesLinksResult[];\n packageJsonCreated: boolean;\n\n constructor(\n private components: Component[],\n private workspace: Workspace\n ) {\n this.consumer = this.workspace.consumer;\n this.bitMap = this.consumer.bitMap;\n this.dataToPersist = new DataToPersist();\n this.existingLinks = [];\n this.packageJsonCreated = false;\n }\n async link(): Promise<NodeModulesLinksResult[]> {\n this.components = this.components.filter((component) => this.bitMap.getComponentIfExist(component.id));\n const links = await this.getLinks();\n\n const linksResults = this.getLinksResults();\n if (!linksResults.length) {\n // avoid clearing the cache if it ends up with no links. (e.g. happens when mistakenly generating links for a\n // component not in the workspace)\n // or when all links are already exist.\n return [];\n }\n const workspacePath = this.workspace.path;\n links.addBasePath(workspacePath);\n await links.persistAllToFS();\n // Only clear cache if new package.json of components were created\n if (this.packageJsonCreated) {\n await Promise.all(\n this.components.map((component) =>\n this.consumer?.componentFsCache.deleteDependenciesDataCache(component.id.toString())\n )\n );\n // if this cache is not cleared, then when asking workspace.get again to the same component, it returns it with\n // component-issues like \"MissingLinksFromNodeModulesToSrc\" incorrectly.\n this.workspace.clearAllComponentsCache();\n }\n\n await linkPkgsToRootComponents(\n {\n rootComponentsPath: this.workspace.rootComponentsPath,\n workspacePath,\n },\n this.components.map((comp) => componentIdToPackageName(comp.state._consumer))\n );\n return linksResults;\n }\n async getLinks(): Promise<DataToPersist> {\n this.dataToPersist = new DataToPersist();\n await pMapSeries(this.components, async (component) => {\n const componentId = component.id.toString();\n logger.debug(`linking component to node_modules: ${componentId}`);\n await this._populateComponentsLinks(component);\n });\n\n return this.dataToPersist;\n }\n private addLinkResult(\n linksResults: NodeModulesLinksResult[],\n id: ComponentID | null | undefined,\n from: string,\n to: string,\n existsBefore: boolean\n ) {\n if (!id) return;\n const existingLinkResult = linksResults.find((linkResult) => linkResult.id.isEqual(id));\n if (existingLinkResult) {\n existingLinkResult.bound.push({ from, to, existsBefore });\n } else {\n linksResults.push({ id, bound: [{ from, to, existsBefore }] });\n }\n }\n\n getLinksResults(): NodeModulesLinksResult[] {\n const linksResults: NodeModulesLinksResult[] = [];\n this.dataToPersist.symlinks.forEach((symlink: Symlink) => {\n this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);\n });\n this.existingLinks.forEach((link: NodeModulesLinksResult) => {\n const componentId = link.id;\n link.bound.forEach((bound) => {\n this.addLinkResult(linksResults, componentId, bound.from, bound.to, true);\n });\n });\n this.components.forEach((component) => {\n const existingLinkResult = linksResults.find((linkResult) => linkResult.id.isEqual(component.id));\n if (!existingLinkResult) {\n linksResults.push({ id: component.id, bound: [] });\n }\n });\n return linksResults;\n }\n\n _getDefaultScope(component?: ConsumerComponent): string | undefined | null {\n if (component) {\n return component.defaultScope;\n }\n return this.consumer ? this.consumer.config.defaultScope : null;\n }\n\n /**\n * even when an authored component has rootDir, we can't just symlink that rootDir to\n * node_modules/rootDir. it could work only when the main-file is index.js, not for other cases.\n * node expects the module inside node_modules to have either package.json with valid \"main\"\n * property or an index.js file. this main property can't be relative.\n */\n async _populateComponentsLinks(component: Component): Promise<void> {\n const legacyComponent = component.state._consumer as ConsumerComponent;\n const linkPath: PathOsBasedRelative = getNodeModulesPathOfComponent(legacyComponent);\n\n await this.symlinkComponentDir(component, linkPath);\n this._deleteExistingLinksRootIfSymlink(linkPath);\n await this.createPackageJson(component);\n }\n\n private async symlinkComponentDir(component: Component, linkPath: PathOsBasedRelative) {\n const componentMap = this.bitMap.getComponent(component.id);\n\n const filesToBind = componentMap.getAllFilesPaths();\n await Promise.all(\n filesToBind.map(async (file) => {\n const fileWithRootDir = path.join(componentMap.rootDir as string, file);\n const dest = path.join(linkPath, file);\n let stat;\n try {\n stat = await fs.lstat(dest);\n } catch {\n // Ignore this error, it's probably because the file doesn't exist\n }\n if (stat && stat.isSymbolicLink()) {\n this.addLinkResult(this.existingLinks, component.id, fileWithRootDir, dest, true);\n } else {\n this.dataToPersist.addSymlink(Symlink.makeInstance(fileWithRootDir, dest, component.id, true));\n }\n })\n );\n\n if (IS_WINDOWS) {\n // symlink the entire source directory into \"_src\" in node-modules.\n this.dataToPersist.addSymlink(\n Symlink.makeInstance(\n componentMap.rootDir as string,\n path.join(linkPath, SOURCE_DIR_SYMLINK_TO_NM),\n component.id\n )\n );\n }\n }\n\n /**\n * Removing existing links root (the package path) - to handle cases it was linked by package manager for example\n * this makes sure we are not affecting other places (like package manager cache) we shouldn't touch\n * If you have a case when this deletes something created by the package manager and it's not the desired behavior,\n * do not delete this code, but make sure the package manger nest the installed version into it's dependent\n * @param component\n */\n _deleteExistingLinksRootIfSymlink(linkPath: string) {\n try {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n this.dataToPersist.removePath(new RemovePath(linkPath));\n }\n return undefined;\n } catch {\n return undefined; // probably file does not exist\n }\n }\n\n /**\n * create package.json on node_modules/@bit/component-name/package.json with a property 'main'\n * pointing to the component's main file.\n * It is needed for Authored components only.\n * Since an authored component doesn't have rootDir, it's impossible to symlink to the component directory.\n * It makes it easier for Author to use absolute syntax between their own components.\n */\n private async createPackageJson(component: Component) {\n const legacyComp = component.state._consumer as ConsumerComponent;\n const hasPackageJsonAsComponentFile = legacyComp.files.some((file) => file.relative === PACKAGE_JSON);\n if (hasPackageJsonAsComponentFile) return; // don't generate package.json on top of the user package.json\n const dest = path.join(\n getNodeModulesPathOfComponent({\n ...legacyComp,\n id: legacyComp.id,\n })\n );\n const packageJsonPath = path.join(dest, 'package.json');\n const packageJsonExist = await fs.pathExists(packageJsonPath);\n if (!packageJsonExist) {\n this.packageJsonCreated = true;\n }\n\n const packageJson = PackageJsonFile.createFromComponent(dest, legacyComp, true);\n await this._applyTransformers(component, packageJson);\n if (IS_WINDOWS) {\n // in the workspace, override the \"types\" and add the \"src\" prefix.\n // otherwise, the navigation and auto-complete won't work on the IDE.\n // this is for Windows only. For Linux, we use symlinks for the files.\n packageJson.addOrUpdateProperty('types', `${SOURCE_DIR_SYMLINK_TO_NM}/${legacyComp.mainFile}`);\n }\n if (packageJson.packageJsonObject.version === 'latest') {\n packageJson.packageJsonObject.version = '0.0.1-new';\n } else {\n packageJson.packageJsonObject.version = snapToSemver(packageJson.packageJsonObject.version);\n }\n\n // indicate that this component exists locally and it is symlinked into the workspace. not a normal package.\n packageJson.packageJsonObject._bit_local = true;\n packageJson.packageJsonObject.source = component.mainFile.relative;\n\n // This is a hack because we have in the workspace package.json types:index.ts\n // but also exports for core aspects\n // TS can't find the types\n // in order to solve it we copy the types to exports.types\n // this will be applied only to aspects to minimize how it affects users\n const envsData = component.state.aspects.get('teambit.envs/envs');\n const isAspect = envsData?.data.type === 'aspect';\n if (isAspect && packageJson.packageJsonObject.types && packageJson.packageJsonObject.exports) {\n const exports = packageJson.packageJsonObject.exports['.']\n ? packageJson.packageJsonObject.exports['.']\n : packageJson.packageJsonObject.exports;\n if (!exports.types) {\n const defaultModule = exports.default;\n if (defaultModule) delete exports.default;\n exports.types = `./${packageJson.packageJsonObject.types}`;\n exports.default = defaultModule;\n }\n }\n\n // packageJson.mergePropsFromExtensions(component);\n // TODO: we need to have an hook here to get the transformer from the pkg extension\n\n // don't delete the \"version\" prop, because in some scenarios, it's needed for the component to work properly.\n // an example is when developing a vscode extension, vscode expects to have a valid package.json during the development.\n\n if (!this.packageJsonCreated && packageJsonExist) {\n try {\n const existingPkgJson = await fs.readJson(packageJsonPath);\n const newPkgJsonStr = JSON.stringify(packageJson.packageJsonObject);\n const existingPkgJsonStr = JSON.stringify(existingPkgJson);\n if (newPkgJsonStr !== existingPkgJsonStr) {\n this.packageJsonCreated = true;\n }\n } catch {\n // if we can't read the existing package.json, treat it as changed\n this.packageJsonCreated = true;\n }\n }\n\n this.dataToPersist.addFile(packageJson.toVinylFile());\n const injectedDirs = await this.workspace.getInjectedDirs(component);\n const src = path.join(dest, 'package.json');\n for (const injectedDir of injectedDirs) {\n this.dataToPersist.addSymlink(Symlink.makeInstance(src, path.join(injectedDir, 'package.json')));\n }\n }\n\n /**\n * these are changes made by aspects\n */\n async _applyTransformers(component: Component, packageJson: PackageJsonFile) {\n return PackageJsonTransformer.applyTransformers(component, packageJson);\n }\n}\n\nexport async function linkToNodeModulesWithCodemod(\n workspace: Workspace,\n bitIds: ComponentID[],\n changeRelativeToModulePaths: boolean\n) {\n let codemodResults;\n if (changeRelativeToModulePaths) {\n codemodResults = await changeCodeFromRelativeToModulePaths(workspace, bitIds);\n }\n const linksResults = await linkToNodeModulesByIds(workspace, bitIds);\n return { linksResults, codemodResults };\n}\n\nexport async function linkToNodeModulesByIds(\n workspace: Workspace,\n componentsIds: ComponentID[],\n loadFromScope = false\n): Promise<NodeModulesLinksResult[]> {\n if (!componentsIds.length) return [];\n const getComponents = async () => {\n if (loadFromScope) {\n return workspace.scope.getMany(componentsIds);\n }\n return workspace.getMany(componentsIds, {\n idsToNotLoadAsAspects: componentsIds.map((id) => id.toString()),\n loadSeedersAsAspects: false,\n loadExtensions: false,\n });\n };\n const components = await getComponents();\n const nodeModuleLinker = new NodeModuleLinker(components, workspace);\n return nodeModuleLinker.link();\n}\n\nexport async function linkToNodeModulesByComponents(components: Component[], workspace: Workspace) {\n const nodeModuleLinker = new NodeModuleLinker(components, workspace);\n return nodeModuleLinker.link();\n}\n\nexport async function removeLinksFromNodeModules(\n component: Component,\n workspace: Workspace,\n files: PathOsBasedAbsolute[]\n) {\n const absoluteCompDir = workspace.componentDir(component.id); // os format\n const relativeFilesInsideCompDir = files.map((file) => path.relative(absoluteCompDir, file));\n const pkgDir = await workspace.getComponentPackagePath(component);\n const pathsToRemove = relativeFilesInsideCompDir.map((file) => path.join(pkgDir, file));\n logger.debug(`removeLinksFromNodeModules, deleting the following files:\n${pathsToRemove.join('\\n')}`);\n await Promise.all(pathsToRemove.map((file) => fs.remove(file)));\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_fsExtra","data","_interopRequireDefault","require","_pMapSeries","path","_interopRequireWildcard","_workspace","_legacy","_component","_legacy2","_pkgModules","_componentPackageVersion","_packageJsonTransformer","_codemodComponents","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NodeModuleLinker","constructor","components","workspace","consumer","bitMap","dataToPersist","DataToPersist","absoluteSymlinks","existingLinks","packageJsonCreated","link","filter","component","getComponentIfExist","id","links","getLinks","linksResults","getLinksResults","length","workspacePath","addBasePath","persistAllToFS","persistAbsoluteSymlinks","Promise","all","map","componentFsCache","deleteDependenciesDataCache","toString","clearAllComponentsCache","hasRootComponents","linkPkgsToRootComponents","rootComponentsPath","comp","componentIdToPackageName","state","_consumer","pMapSeries","componentId","logger","debug","_populateComponentsLinks","symlink","write","addLinkResult","from","to","existsBefore","existingLinkResult","find","linkResult","isEqual","bound","push","symlinks","forEach","src","dest","_getDefaultScope","defaultScope","config","legacyComponent","linkPath","getNodeModulesPathOfComponent","symlinkComponentDir","_deleteExistingLinksRootIfSymlink","createPackageJson","componentMap","getComponent","filesToBind","getAllFilesPaths","file","fileWithRootDir","join","rootDir","stat","fs","lstat","isSymbolicLink","isAbsolute","Symlink","makeInstance","addSymlink","IS_WINDOWS","SOURCE_DIR_SYMLINK_TO_NM","lstatSync","removePath","RemovePath","undefined","legacyComp","hasPackageJsonAsComponentFile","files","some","relative","PACKAGE_JSON","packageJsonPath","packageJsonExist","pathExists","packageJson","PackageJsonFile","createFromComponent","_applyTransformers","addOrUpdateProperty","mainFile","packageJsonObject","version","snapToSemver","_bit_local","source","envsData","aspects","isAspect","type","types","exports","defaultModule","existingPkgJson","readJson","newPkgJsonStr","JSON","stringify","existingPkgJsonStr","addFile","toVinylFile","injectedDirs","getInjectedDirs","injectedDir","injectedPackageJson","PackageJsonTransformer","applyTransformers","linkToNodeModulesWithCodemod","bitIds","changeRelativeToModulePaths","codemodResults","changeCodeFromRelativeToModulePaths","linkToNodeModulesByIds","componentsIds","loadFromScope","getComponents","scope","getMany","idsToNotLoadAsAspects","loadSeedersAsAspects","loadExtensions","nodeModuleLinker","linkToNodeModulesByComponents","removeLinksFromNodeModules","absoluteCompDir","componentDir","relativeFilesInsideCompDir","pkgDir","getComponentPackagePath","pathsToRemove","remove"],"sources":["node-modules-linker.ts"],"sourcesContent":["import fs from 'fs-extra';\nimport pMapSeries from 'p-map-series';\nimport * as path from 'path';\nimport { linkPkgsToRootComponents } from '@teambit/workspace.root-components';\nimport type { ComponentID } from '@teambit/component-id';\nimport { IS_WINDOWS, PACKAGE_JSON, SOURCE_DIR_SYMLINK_TO_NM } from '@teambit/legacy.constants';\nimport type { BitMap } from '@teambit/legacy.bit-map';\nimport type { ConsumerComponent } from '@teambit/legacy.consumer-component';\nimport { PackageJsonFile, DataToPersist, RemovePath, Symlink } from '@teambit/component.sources';\nimport type { Consumer } from '@teambit/legacy.consumer';\nimport { logger } from '@teambit/legacy.logger';\nimport type { PathOsBasedAbsolute, PathOsBasedRelative } from '@teambit/toolbox.path.path';\nimport { componentIdToPackageName, getNodeModulesPathOfComponent } from '@teambit/pkg.modules.component-package-name';\nimport type { Workspace } from '@teambit/workspace';\nimport { snapToSemver } from '@teambit/component-package-version';\nimport type { Component } from '@teambit/component';\nimport { PackageJsonTransformer } from './package-json-transformer';\nimport { changeCodeFromRelativeToModulePaths } from './codemod-components';\n\ntype LinkDetail = { from: string; to: string; existsBefore: boolean };\nexport type NodeModulesLinksResult = {\n id: ComponentID;\n bound: LinkDetail[];\n};\n\n/**\n * link given components to node_modules, so it's possible to use absolute link instead of relative\n * for example, require('@bit/remote-scope.bar.foo)\n */\nexport default class NodeModuleLinker {\n consumer: Consumer;\n bitMap: BitMap; // preparation for the capsule, which is going to have only BitMap with no Consumer\n dataToPersist: DataToPersist;\n absoluteSymlinks: Symlink[];\n existingLinks: NodeModulesLinksResult[];\n packageJsonCreated: boolean;\n\n constructor(\n private components: Component[],\n private workspace: Workspace\n ) {\n this.consumer = this.workspace.consumer;\n this.bitMap = this.consumer.bitMap;\n this.dataToPersist = new DataToPersist();\n this.absoluteSymlinks = [];\n this.existingLinks = [];\n this.packageJsonCreated = false;\n }\n async link(): Promise<NodeModulesLinksResult[]> {\n this.components = this.components.filter((component) => this.bitMap.getComponentIfExist(component.id));\n const links = await this.getLinks();\n\n const linksResults = this.getLinksResults();\n if (!linksResults.length) {\n // avoid clearing the cache if it ends up with no links. (e.g. happens when mistakenly generating links for a\n // component not in the workspace)\n // or when all links are already exist.\n return [];\n }\n const workspacePath = this.workspace.path;\n links.addBasePath(workspacePath);\n await links.persistAllToFS();\n await this.persistAbsoluteSymlinks();\n // Only clear cache if new package.json of components were created\n if (this.packageJsonCreated) {\n await Promise.all(\n this.components.map((component) =>\n this.consumer?.componentFsCache.deleteDependenciesDataCache(component.id.toString())\n )\n );\n // if this cache is not cleared, then when asking workspace.get again to the same component, it returns it with\n // component-issues like \"MissingLinksFromNodeModulesToSrc\" incorrectly.\n this.workspace.clearAllComponentsCache();\n }\n\n // Only update `.bit_roots` when root components are actually in use. Otherwise\n // we'd be hard-linking into a stale tree left over from a previous install where\n // rootComponents was enabled — pnpm no longer manages that subtree, so its layout\n // can be inconsistent and `mkdir` may throw ENOTDIR/ENOENT through a broken\n // ancestor inside `.bit_roots/<env>/node_modules/...`.\n if (this.workspace.hasRootComponents()) {\n await linkPkgsToRootComponents(\n {\n rootComponentsPath: this.workspace.rootComponentsPath,\n workspacePath,\n },\n this.components.map((comp) => componentIdToPackageName(comp.state._consumer))\n );\n }\n return linksResults;\n }\n async getLinks(): Promise<DataToPersist> {\n this.dataToPersist = new DataToPersist();\n this.absoluteSymlinks = [];\n await pMapSeries(this.components, async (component) => {\n const componentId = component.id.toString();\n logger.debug(`linking component to node_modules: ${componentId}`);\n await this._populateComponentsLinks(component);\n });\n\n return this.dataToPersist;\n }\n\n private async persistAbsoluteSymlinks() {\n await Promise.all(this.absoluteSymlinks.map((symlink) => symlink.write()));\n }\n\n private addLinkResult(\n linksResults: NodeModulesLinksResult[],\n id: ComponentID | null | undefined,\n from: string,\n to: string,\n existsBefore: boolean\n ) {\n if (!id) return;\n const existingLinkResult = linksResults.find((linkResult) => linkResult.id.isEqual(id));\n if (existingLinkResult) {\n existingLinkResult.bound.push({ from, to, existsBefore });\n } else {\n linksResults.push({ id, bound: [{ from, to, existsBefore }] });\n }\n }\n\n getLinksResults(): NodeModulesLinksResult[] {\n const linksResults: NodeModulesLinksResult[] = [];\n this.dataToPersist.symlinks.forEach((symlink: Symlink) => {\n this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);\n });\n this.absoluteSymlinks.forEach((symlink: Symlink) => {\n this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);\n });\n this.existingLinks.forEach((link: NodeModulesLinksResult) => {\n const componentId = link.id;\n link.bound.forEach((bound) => {\n this.addLinkResult(linksResults, componentId, bound.from, bound.to, true);\n });\n });\n this.components.forEach((component) => {\n const existingLinkResult = linksResults.find((linkResult) => linkResult.id.isEqual(component.id));\n if (!existingLinkResult) {\n linksResults.push({ id: component.id, bound: [] });\n }\n });\n return linksResults;\n }\n\n _getDefaultScope(component?: ConsumerComponent): string | undefined | null {\n if (component) {\n return component.defaultScope;\n }\n return this.consumer ? this.consumer.config.defaultScope : null;\n }\n\n /**\n * even when an authored component has rootDir, we can't just symlink that rootDir to\n * node_modules/rootDir. it could work only when the main-file is index.js, not for other cases.\n * node expects the module inside node_modules to have either package.json with valid \"main\"\n * property or an index.js file. this main property can't be relative.\n */\n async _populateComponentsLinks(component: Component): Promise<void> {\n const legacyComponent = component.state._consumer as ConsumerComponent;\n const linkPath: PathOsBasedRelative = getNodeModulesPathOfComponent(legacyComponent);\n\n await this.symlinkComponentDir(component, linkPath);\n this._deleteExistingLinksRootIfSymlink(linkPath);\n await this.createPackageJson(component);\n }\n\n private async symlinkComponentDir(component: Component, linkPath: PathOsBasedRelative) {\n const componentMap = this.bitMap.getComponent(component.id);\n\n const filesToBind = componentMap.getAllFilesPaths();\n await Promise.all(\n filesToBind.map(async (file) => {\n const fileWithRootDir = path.join(componentMap.rootDir as string, file);\n const dest = path.join(linkPath, file);\n let stat;\n try {\n stat = await fs.lstat(dest);\n } catch {\n // Ignore this error, it's probably because the file doesn't exist\n }\n if (stat && stat.isSymbolicLink()) {\n this.addLinkResult(this.existingLinks, component.id, fileWithRootDir, dest, true);\n } else if (path.isAbsolute(dest)) {\n this.absoluteSymlinks.push(\n Symlink.makeInstance(path.join(this.workspace.path, fileWithRootDir), dest, component.id, true)\n );\n } else {\n this.dataToPersist.addSymlink(Symlink.makeInstance(fileWithRootDir, dest, component.id, true));\n }\n })\n );\n\n if (IS_WINDOWS) {\n // symlink the entire source directory into \"_src\" in node-modules.\n this.dataToPersist.addSymlink(\n Symlink.makeInstance(\n componentMap.rootDir as string,\n path.join(linkPath, SOURCE_DIR_SYMLINK_TO_NM),\n component.id\n )\n );\n }\n }\n\n /**\n * Removing existing links root (the package path) - to handle cases it was linked by package manager for example\n * this makes sure we are not affecting other places (like package manager cache) we shouldn't touch\n * If you have a case when this deletes something created by the package manager and it's not the desired behavior,\n * do not delete this code, but make sure the package manger nest the installed version into it's dependent\n * @param component\n */\n _deleteExistingLinksRootIfSymlink(linkPath: string) {\n try {\n const stat = fs.lstatSync(linkPath);\n if (stat.isSymbolicLink()) {\n this.dataToPersist.removePath(new RemovePath(linkPath));\n }\n return undefined;\n } catch {\n return undefined; // probably file does not exist\n }\n }\n\n /**\n * create package.json on node_modules/@bit/component-name/package.json with a property 'main'\n * pointing to the component's main file.\n * It is needed for Authored components only.\n * Since an authored component doesn't have rootDir, it's impossible to symlink to the component directory.\n * It makes it easier for Author to use absolute syntax between their own components.\n */\n private async createPackageJson(component: Component) {\n const legacyComp = component.state._consumer as ConsumerComponent;\n const hasPackageJsonAsComponentFile = legacyComp.files.some((file) => file.relative === PACKAGE_JSON);\n if (hasPackageJsonAsComponentFile) return; // don't generate package.json on top of the user package.json\n const dest = path.join(\n getNodeModulesPathOfComponent({\n ...legacyComp,\n id: legacyComp.id,\n })\n );\n const packageJsonPath = path.join(dest, 'package.json');\n const packageJsonExist = await fs.pathExists(packageJsonPath);\n if (!packageJsonExist) {\n this.packageJsonCreated = true;\n }\n\n const packageJson = PackageJsonFile.createFromComponent(dest, legacyComp, true);\n await this._applyTransformers(component, packageJson);\n if (IS_WINDOWS) {\n // in the workspace, override the \"types\" and add the \"src\" prefix.\n // otherwise, the navigation and auto-complete won't work on the IDE.\n // this is for Windows only. For Linux, we use symlinks for the files.\n packageJson.addOrUpdateProperty('types', `${SOURCE_DIR_SYMLINK_TO_NM}/${legacyComp.mainFile}`);\n }\n if (packageJson.packageJsonObject.version === 'latest') {\n packageJson.packageJsonObject.version = '0.0.1-new';\n } else {\n packageJson.packageJsonObject.version = snapToSemver(packageJson.packageJsonObject.version);\n }\n\n // indicate that this component exists locally and it is symlinked into the workspace. not a normal package.\n packageJson.packageJsonObject._bit_local = true;\n packageJson.packageJsonObject.source = component.mainFile.relative;\n\n // This is a hack because we have in the workspace package.json types:index.ts\n // but also exports for core aspects\n // TS can't find the types\n // in order to solve it we copy the types to exports.types\n // this will be applied only to aspects to minimize how it affects users\n const envsData = component.state.aspects.get('teambit.envs/envs');\n const isAspect = envsData?.data.type === 'aspect';\n if (isAspect && packageJson.packageJsonObject.types && packageJson.packageJsonObject.exports) {\n const exports = packageJson.packageJsonObject.exports['.']\n ? packageJson.packageJsonObject.exports['.']\n : packageJson.packageJsonObject.exports;\n if (!exports.types) {\n const defaultModule = exports.default;\n if (defaultModule) delete exports.default;\n exports.types = `./${packageJson.packageJsonObject.types}`;\n exports.default = defaultModule;\n }\n }\n\n // packageJson.mergePropsFromExtensions(component);\n // TODO: we need to have an hook here to get the transformer from the pkg extension\n\n // don't delete the \"version\" prop, because in some scenarios, it's needed for the component to work properly.\n // an example is when developing a vscode extension, vscode expects to have a valid package.json during the development.\n\n if (!this.packageJsonCreated && packageJsonExist) {\n try {\n const existingPkgJson = await fs.readJson(packageJsonPath);\n const newPkgJsonStr = JSON.stringify(packageJson.packageJsonObject);\n const existingPkgJsonStr = JSON.stringify(existingPkgJson);\n if (newPkgJsonStr !== existingPkgJsonStr) {\n this.packageJsonCreated = true;\n }\n } catch {\n // if we can't read the existing package.json, treat it as changed\n this.packageJsonCreated = true;\n }\n }\n\n this.dataToPersist.addFile(packageJson.toVinylFile());\n const injectedDirs = await this.workspace.getInjectedDirs(component);\n const src = path.join(dest, 'package.json');\n for (const injectedDir of injectedDirs) {\n const injectedPackageJson = path.join(injectedDir, PACKAGE_JSON);\n if (path.isAbsolute(injectedPackageJson)) {\n this.absoluteSymlinks.push(\n Symlink.makeInstance(path.join(this.workspace.path, src), injectedPackageJson, component.id)\n );\n continue;\n }\n this.dataToPersist.addSymlink(Symlink.makeInstance(src, injectedPackageJson));\n }\n }\n\n /**\n * these are changes made by aspects\n */\n async _applyTransformers(component: Component, packageJson: PackageJsonFile) {\n return PackageJsonTransformer.applyTransformers(component, packageJson);\n }\n}\n\nexport async function linkToNodeModulesWithCodemod(\n workspace: Workspace,\n bitIds: ComponentID[],\n changeRelativeToModulePaths: boolean\n) {\n let codemodResults;\n if (changeRelativeToModulePaths) {\n codemodResults = await changeCodeFromRelativeToModulePaths(workspace, bitIds);\n }\n const linksResults = await linkToNodeModulesByIds(workspace, bitIds);\n return { linksResults, codemodResults };\n}\n\nexport async function linkToNodeModulesByIds(\n workspace: Workspace,\n componentsIds: ComponentID[],\n loadFromScope = false\n): Promise<NodeModulesLinksResult[]> {\n if (!componentsIds.length) return [];\n const getComponents = async () => {\n if (loadFromScope) {\n return workspace.scope.getMany(componentsIds);\n }\n return workspace.getMany(componentsIds, {\n idsToNotLoadAsAspects: componentsIds.map((id) => id.toString()),\n loadSeedersAsAspects: false,\n loadExtensions: false,\n });\n };\n const components = await getComponents();\n const nodeModuleLinker = new NodeModuleLinker(components, workspace);\n return nodeModuleLinker.link();\n}\n\nexport async function linkToNodeModulesByComponents(components: Component[], workspace: Workspace) {\n const nodeModuleLinker = new NodeModuleLinker(components, workspace);\n return nodeModuleLinker.link();\n}\n\nexport async function removeLinksFromNodeModules(\n component: Component,\n workspace: Workspace,\n files: PathOsBasedAbsolute[]\n) {\n const absoluteCompDir = workspace.componentDir(component.id); // os format\n const relativeFilesInsideCompDir = files.map((file) => path.relative(absoluteCompDir, file));\n const pkgDir = await workspace.getComponentPackagePath(component);\n const pathsToRemove = relativeFilesInsideCompDir.map((file) => path.join(pkgDir, file));\n logger.debug(`removeLinksFromNodeModules, deleting the following files:\n${pathsToRemove.join('\\n')}`);\n await Promise.all(pathsToRemove.map((file) => fs.remove(file)));\n}\n"],"mappings":";;;;;;;;;;AAAA,SAAAA,SAAA;EAAA,MAAAC,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAH,QAAA,YAAAA,CAAA;IAAA,OAAAC,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAG,YAAA;EAAA,MAAAH,IAAA,GAAAC,sBAAA,CAAAC,OAAA;EAAAC,WAAA,YAAAA,CAAA;IAAA,OAAAH,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAI,KAAA;EAAA,MAAAJ,IAAA,GAAAK,uBAAA,CAAAH,OAAA;EAAAE,IAAA,YAAAA,CAAA;IAAA,OAAAJ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAM,WAAA;EAAA,MAAAN,IAAA,GAAAE,OAAA;EAAAI,UAAA,YAAAA,CAAA;IAAA,OAAAN,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAO,QAAA;EAAA,MAAAP,IAAA,GAAAE,OAAA;EAAAK,OAAA,YAAAA,CAAA;IAAA,OAAAP,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAGA,SAAAQ,WAAA;EAAA,MAAAR,IAAA,GAAAE,OAAA;EAAAM,UAAA,YAAAA,CAAA;IAAA,OAAAR,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAS,SAAA;EAAA,MAAAT,IAAA,GAAAE,OAAA;EAAAO,QAAA,YAAAA,CAAA;IAAA,OAAAT,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAU,YAAA;EAAA,MAAAV,IAAA,GAAAE,OAAA;EAAAQ,WAAA,YAAAA,CAAA;IAAA,OAAAV,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAW,yBAAA;EAAA,MAAAX,IAAA,GAAAE,OAAA;EAAAS,wBAAA,YAAAA,CAAA;IAAA,OAAAX,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAEA,SAAAY,wBAAA;EAAA,MAAAZ,IAAA,GAAAE,OAAA;EAAAU,uBAAA,YAAAA,CAAA;IAAA,OAAAZ,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AACA,SAAAa,mBAAA;EAAA,MAAAb,IAAA,GAAAE,OAAA;EAAAW,kBAAA,YAAAA,CAAA;IAAA,OAAAb,IAAA;EAAA;EAAA,OAAAA,IAAA;AAAA;AAA2E,SAAAK,wBAAAS,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAX,uBAAA,YAAAA,CAAAS,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAd,uBAAAa,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAK,UAAA,GAAAL,CAAA,KAAAU,OAAA,EAAAV,CAAA;AAQ3E;AACA;AACA;AACA;AACe,MAAMmB,gBAAgB,CAAC;EAEpB;;EAMhBC,WAAWA,CACDC,UAAuB,EACvBC,SAAoB,EAC5B;IAAA,KAFQD,UAAuB,GAAvBA,UAAuB;IAAA,KACvBC,SAAoB,GAApBA,SAAoB;IAE5B,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACD,SAAS,CAACC,QAAQ;IACvC,IAAI,CAACC,MAAM,GAAG,IAAI,CAACD,QAAQ,CAACC,MAAM;IAClC,IAAI,CAACC,aAAa,GAAG,KAAIC,0BAAa,EAAC,CAAC;IACxC,IAAI,CAACC,gBAAgB,GAAG,EAAE;IAC1B,IAAI,CAACC,aAAa,GAAG,EAAE;IACvB,IAAI,CAACC,kBAAkB,GAAG,KAAK;EACjC;EACA,MAAMC,IAAIA,CAAA,EAAsC;IAC9C,IAAI,CAACT,UAAU,GAAG,IAAI,CAACA,UAAU,CAACU,MAAM,CAAEC,SAAS,IAAK,IAAI,CAACR,MAAM,CAACS,mBAAmB,CAACD,SAAS,CAACE,EAAE,CAAC,CAAC;IACtG,MAAMC,KAAK,GAAG,MAAM,IAAI,CAACC,QAAQ,CAAC,CAAC;IAEnC,MAAMC,YAAY,GAAG,IAAI,CAACC,eAAe,CAAC,CAAC;IAC3C,IAAI,CAACD,YAAY,CAACE,MAAM,EAAE;MACxB;MACA;MACA;MACA,OAAO,EAAE;IACX;IACA,MAAMC,aAAa,GAAG,IAAI,CAAClB,SAAS,CAAChC,IAAI;IACzC6C,KAAK,CAACM,WAAW,CAACD,aAAa,CAAC;IAChC,MAAML,KAAK,CAACO,cAAc,CAAC,CAAC;IAC5B,MAAM,IAAI,CAACC,uBAAuB,CAAC,CAAC;IACpC;IACA,IAAI,IAAI,CAACd,kBAAkB,EAAE;MAC3B,MAAMe,OAAO,CAACC,GAAG,CACf,IAAI,CAACxB,UAAU,CAACyB,GAAG,CAAEd,SAAS,IAC5B,IAAI,CAACT,QAAQ,EAAEwB,gBAAgB,CAACC,2BAA2B,CAAChB,SAAS,CAACE,EAAE,CAACe,QAAQ,CAAC,CAAC,CACrF,CACF,CAAC;MACD;MACA;MACA,IAAI,CAAC3B,SAAS,CAAC4B,uBAAuB,CAAC,CAAC;IAC1C;;IAEA;IACA;IACA;IACA;IACA;IACA,IAAI,IAAI,CAAC5B,SAAS,CAAC6B,iBAAiB,CAAC,CAAC,EAAE;MACtC,MAAM,IAAAC,qCAAwB,EAC5B;QACEC,kBAAkB,EAAE,IAAI,CAAC/B,SAAS,CAAC+B,kBAAkB;QACrDb;MACF,CAAC,EACD,IAAI,CAACnB,UAAU,CAACyB,GAAG,CAAEQ,IAAI,IAAK,IAAAC,sCAAwB,EAACD,IAAI,CAACE,KAAK,CAACC,SAAS,CAAC,CAC9E,CAAC;IACH;IACA,OAAOpB,YAAY;EACrB;EACA,MAAMD,QAAQA,CAAA,EAA2B;IACvC,IAAI,CAACX,aAAa,GAAG,KAAIC,0BAAa,EAAC,CAAC;IACxC,IAAI,CAACC,gBAAgB,GAAG,EAAE;IAC1B,MAAM,IAAA+B,qBAAU,EAAC,IAAI,CAACrC,UAAU,EAAE,MAAOW,SAAS,IAAK;MACrD,MAAM2B,WAAW,GAAG3B,SAAS,CAACE,EAAE,CAACe,QAAQ,CAAC,CAAC;MAC3CW,iBAAM,CAACC,KAAK,CAAC,sCAAsCF,WAAW,EAAE,CAAC;MACjE,MAAM,IAAI,CAACG,wBAAwB,CAAC9B,SAAS,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO,IAAI,CAACP,aAAa;EAC3B;EAEA,MAAckB,uBAAuBA,CAAA,EAAG;IACtC,MAAMC,OAAO,CAACC,GAAG,CAAC,IAAI,CAAClB,gBAAgB,CAACmB,GAAG,CAAEiB,OAAO,IAAKA,OAAO,CAACC,KAAK,CAAC,CAAC,CAAC,CAAC;EAC5E;EAEQC,aAAaA,CACnB5B,YAAsC,EACtCH,EAAkC,EAClCgC,IAAY,EACZC,EAAU,EACVC,YAAqB,EACrB;IACA,IAAI,CAAClC,EAAE,EAAE;IACT,MAAMmC,kBAAkB,GAAGhC,YAAY,CAACiC,IAAI,CAAEC,UAAU,IAAKA,UAAU,CAACrC,EAAE,CAACsC,OAAO,CAACtC,EAAE,CAAC,CAAC;IACvF,IAAImC,kBAAkB,EAAE;MACtBA,kBAAkB,CAACI,KAAK,CAACC,IAAI,CAAC;QAAER,IAAI;QAAEC,EAAE;QAAEC;MAAa,CAAC,CAAC;IAC3D,CAAC,MAAM;MACL/B,YAAY,CAACqC,IAAI,CAAC;QAAExC,EAAE;QAAEuC,KAAK,EAAE,CAAC;UAAEP,IAAI;UAAEC,EAAE;UAAEC;QAAa,CAAC;MAAE,CAAC,CAAC;IAChE;EACF;EAEA9B,eAAeA,CAAA,EAA6B;IAC1C,MAAMD,YAAsC,GAAG,EAAE;IACjD,IAAI,CAACZ,aAAa,CAACkD,QAAQ,CAACC,OAAO,CAAEb,OAAgB,IAAK;MACxD,IAAI,CAACE,aAAa,CAAC5B,YAAY,EAAE0B,OAAO,CAACJ,WAAW,EAAEI,OAAO,CAACc,GAAG,EAAEd,OAAO,CAACe,IAAI,EAAE,KAAK,CAAC;IACzF,CAAC,CAAC;IACF,IAAI,CAACnD,gBAAgB,CAACiD,OAAO,CAAEb,OAAgB,IAAK;MAClD,IAAI,CAACE,aAAa,CAAC5B,YAAY,EAAE0B,OAAO,CAACJ,WAAW,EAAEI,OAAO,CAACc,GAAG,EAAEd,OAAO,CAACe,IAAI,EAAE,KAAK,CAAC;IACzF,CAAC,CAAC;IACF,IAAI,CAAClD,aAAa,CAACgD,OAAO,CAAE9C,IAA4B,IAAK;MAC3D,MAAM6B,WAAW,GAAG7B,IAAI,CAACI,EAAE;MAC3BJ,IAAI,CAAC2C,KAAK,CAACG,OAAO,CAAEH,KAAK,IAAK;QAC5B,IAAI,CAACR,aAAa,CAAC5B,YAAY,EAAEsB,WAAW,EAAEc,KAAK,CAACP,IAAI,EAAEO,KAAK,CAACN,EAAE,EAAE,IAAI,CAAC;MAC3E,CAAC,CAAC;IACJ,CAAC,CAAC;IACF,IAAI,CAAC9C,UAAU,CAACuD,OAAO,CAAE5C,SAAS,IAAK;MACrC,MAAMqC,kBAAkB,GAAGhC,YAAY,CAACiC,IAAI,CAAEC,UAAU,IAAKA,UAAU,CAACrC,EAAE,CAACsC,OAAO,CAACxC,SAAS,CAACE,EAAE,CAAC,CAAC;MACjG,IAAI,CAACmC,kBAAkB,EAAE;QACvBhC,YAAY,CAACqC,IAAI,CAAC;UAAExC,EAAE,EAAEF,SAAS,CAACE,EAAE;UAAEuC,KAAK,EAAE;QAAG,CAAC,CAAC;MACpD;IACF,CAAC,CAAC;IACF,OAAOpC,YAAY;EACrB;EAEA0C,gBAAgBA,CAAC/C,SAA6B,EAA6B;IACzE,IAAIA,SAAS,EAAE;MACb,OAAOA,SAAS,CAACgD,YAAY;IAC/B;IACA,OAAO,IAAI,CAACzD,QAAQ,GAAG,IAAI,CAACA,QAAQ,CAAC0D,MAAM,CAACD,YAAY,GAAG,IAAI;EACjE;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,MAAMlB,wBAAwBA,CAAC9B,SAAoB,EAAiB;IAClE,MAAMkD,eAAe,GAAGlD,SAAS,CAACwB,KAAK,CAACC,SAA8B;IACtE,MAAM0B,QAA6B,GAAG,IAAAC,2CAA6B,EAACF,eAAe,CAAC;IAEpF,MAAM,IAAI,CAACG,mBAAmB,CAACrD,SAAS,EAAEmD,QAAQ,CAAC;IACnD,IAAI,CAACG,iCAAiC,CAACH,QAAQ,CAAC;IAChD,MAAM,IAAI,CAACI,iBAAiB,CAACvD,SAAS,CAAC;EACzC;EAEA,MAAcqD,mBAAmBA,CAACrD,SAAoB,EAAEmD,QAA6B,EAAE;IACrF,MAAMK,YAAY,GAAG,IAAI,CAAChE,MAAM,CAACiE,YAAY,CAACzD,SAAS,CAACE,EAAE,CAAC;IAE3D,MAAMwD,WAAW,GAAGF,YAAY,CAACG,gBAAgB,CAAC,CAAC;IACnD,MAAM/C,OAAO,CAACC,GAAG,CACf6C,WAAW,CAAC5C,GAAG,CAAC,MAAO8C,IAAI,IAAK;MAC9B,MAAMC,eAAe,GAAGvG,IAAI,CAAD,CAAC,CAACwG,IAAI,CAACN,YAAY,CAACO,OAAO,EAAYH,IAAI,CAAC;MACvE,MAAMd,IAAI,GAAGxF,IAAI,CAAD,CAAC,CAACwG,IAAI,CAACX,QAAQ,EAAES,IAAI,CAAC;MACtC,IAAII,IAAI;MACR,IAAI;QACFA,IAAI,GAAG,MAAMC,kBAAE,CAACC,KAAK,CAACpB,IAAI,CAAC;MAC7B,CAAC,CAAC,MAAM;QACN;MAAA;MAEF,IAAIkB,IAAI,IAAIA,IAAI,CAACG,cAAc,CAAC,CAAC,EAAE;QACjC,IAAI,CAAClC,aAAa,CAAC,IAAI,CAACrC,aAAa,EAAEI,SAAS,CAACE,EAAE,EAAE2D,eAAe,EAAEf,IAAI,EAAE,IAAI,CAAC;MACnF,CAAC,MAAM,IAAIxF,IAAI,CAAD,CAAC,CAAC8G,UAAU,CAACtB,IAAI,CAAC,EAAE;QAChC,IAAI,CAACnD,gBAAgB,CAAC+C,IAAI,CACxB2B,oBAAO,CAACC,YAAY,CAAChH,IAAI,CAAD,CAAC,CAACwG,IAAI,CAAC,IAAI,CAACxE,SAAS,CAAChC,IAAI,EAAEuG,eAAe,CAAC,EAAEf,IAAI,EAAE9C,SAAS,CAACE,EAAE,EAAE,IAAI,CAChG,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAACT,aAAa,CAAC8E,UAAU,CAACF,oBAAO,CAACC,YAAY,CAACT,eAAe,EAAEf,IAAI,EAAE9C,SAAS,CAACE,EAAE,EAAE,IAAI,CAAC,CAAC;MAChG;IACF,CAAC,CACH,CAAC;IAED,IAAIsE,oBAAU,EAAE;MACd;MACA,IAAI,CAAC/E,aAAa,CAAC8E,UAAU,CAC3BF,oBAAO,CAACC,YAAY,CAClBd,YAAY,CAACO,OAAO,EACpBzG,IAAI,CAAD,CAAC,CAACwG,IAAI,CAACX,QAAQ,EAAEsB,kCAAwB,CAAC,EAC7CzE,SAAS,CAACE,EACZ,CACF,CAAC;IACH;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEoD,iCAAiCA,CAACH,QAAgB,EAAE;IAClD,IAAI;MACF,MAAMa,IAAI,GAAGC,kBAAE,CAACS,SAAS,CAACvB,QAAQ,CAAC;MACnC,IAAIa,IAAI,CAACG,cAAc,CAAC,CAAC,EAAE;QACzB,IAAI,CAAC1E,aAAa,CAACkF,UAAU,CAAC,KAAIC,uBAAU,EAACzB,QAAQ,CAAC,CAAC;MACzD;MACA,OAAO0B,SAAS;IAClB,CAAC,CAAC,MAAM;MACN,OAAOA,SAAS,CAAC,CAAC;IACpB;EACF;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,MAActB,iBAAiBA,CAACvD,SAAoB,EAAE;IACpD,MAAM8E,UAAU,GAAG9E,SAAS,CAACwB,KAAK,CAACC,SAA8B;IACjE,MAAMsD,6BAA6B,GAAGD,UAAU,CAACE,KAAK,CAACC,IAAI,CAAErB,IAAI,IAAKA,IAAI,CAACsB,QAAQ,KAAKC,sBAAY,CAAC;IACrG,IAAIJ,6BAA6B,EAAE,OAAO,CAAC;IAC3C,MAAMjC,IAAI,GAAGxF,IAAI,CAAD,CAAC,CAACwG,IAAI,CACpB,IAAAV,2CAA6B,EAAC;MAC5B,GAAG0B,UAAU;MACb5E,EAAE,EAAE4E,UAAU,CAAC5E;IACjB,CAAC,CACH,CAAC;IACD,MAAMkF,eAAe,GAAG9H,IAAI,CAAD,CAAC,CAACwG,IAAI,CAAChB,IAAI,EAAE,cAAc,CAAC;IACvD,MAAMuC,gBAAgB,GAAG,MAAMpB,kBAAE,CAACqB,UAAU,CAACF,eAAe,CAAC;IAC7D,IAAI,CAACC,gBAAgB,EAAE;MACrB,IAAI,CAACxF,kBAAkB,GAAG,IAAI;IAChC;IAEA,MAAM0F,WAAW,GAAGC,4BAAe,CAACC,mBAAmB,CAAC3C,IAAI,EAAEgC,UAAU,EAAE,IAAI,CAAC;IAC/E,MAAM,IAAI,CAACY,kBAAkB,CAAC1F,SAAS,EAAEuF,WAAW,CAAC;IACrD,IAAIf,oBAAU,EAAE;MACd;MACA;MACA;MACAe,WAAW,CAACI,mBAAmB,CAAC,OAAO,EAAE,GAAGlB,kCAAwB,IAAIK,UAAU,CAACc,QAAQ,EAAE,CAAC;IAChG;IACA,IAAIL,WAAW,CAACM,iBAAiB,CAACC,OAAO,KAAK,QAAQ,EAAE;MACtDP,WAAW,CAACM,iBAAiB,CAACC,OAAO,GAAG,WAAW;IACrD,CAAC,MAAM;MACLP,WAAW,CAACM,iBAAiB,CAACC,OAAO,GAAG,IAAAC,uCAAY,EAACR,WAAW,CAACM,iBAAiB,CAACC,OAAO,CAAC;IAC7F;;IAEA;IACAP,WAAW,CAACM,iBAAiB,CAACG,UAAU,GAAG,IAAI;IAC/CT,WAAW,CAACM,iBAAiB,CAACI,MAAM,GAAGjG,SAAS,CAAC4F,QAAQ,CAACV,QAAQ;;IAElE;IACA;IACA;IACA;IACA;IACA,MAAMgB,QAAQ,GAAGlG,SAAS,CAACwB,KAAK,CAAC2E,OAAO,CAACvH,GAAG,CAAC,mBAAmB,CAAC;IACjE,MAAMwH,QAAQ,GAAGF,QAAQ,EAAEhJ,IAAI,CAACmJ,IAAI,KAAK,QAAQ;IACjD,IAAID,QAAQ,IAAIb,WAAW,CAACM,iBAAiB,CAACS,KAAK,IAAIf,WAAW,CAACM,iBAAiB,CAACU,OAAO,EAAE;MAC5F,MAAMA,OAAO,GAAGhB,WAAW,CAACM,iBAAiB,CAACU,OAAO,CAAC,GAAG,CAAC,GACtDhB,WAAW,CAACM,iBAAiB,CAACU,OAAO,CAAC,GAAG,CAAC,GAC1ChB,WAAW,CAACM,iBAAiB,CAACU,OAAO;MACzC,IAAI,CAACA,OAAO,CAACD,KAAK,EAAE;QAClB,MAAME,aAAa,GAAGD,OAAO,CAAC7H,OAAO;QACrC,IAAI8H,aAAa,EAAE,OAAOD,OAAO,CAAC7H,OAAO;QACzC6H,OAAO,CAACD,KAAK,GAAG,KAAKf,WAAW,CAACM,iBAAiB,CAACS,KAAK,EAAE;QAC1DC,OAAO,CAAC7H,OAAO,GAAG8H,aAAa;MACjC;IACF;;IAEA;IACA;;IAEA;IACA;;IAEA,IAAI,CAAC,IAAI,CAAC3G,kBAAkB,IAAIwF,gBAAgB,EAAE;MAChD,IAAI;QACF,MAAMoB,eAAe,GAAG,MAAMxC,kBAAE,CAACyC,QAAQ,CAACtB,eAAe,CAAC;QAC1D,MAAMuB,aAAa,GAAGC,IAAI,CAACC,SAAS,CAACtB,WAAW,CAACM,iBAAiB,CAAC;QACnE,MAAMiB,kBAAkB,GAAGF,IAAI,CAACC,SAAS,CAACJ,eAAe,CAAC;QAC1D,IAAIE,aAAa,KAAKG,kBAAkB,EAAE;UACxC,IAAI,CAACjH,kBAAkB,GAAG,IAAI;QAChC;MACF,CAAC,CAAC,MAAM;QACN;QACA,IAAI,CAACA,kBAAkB,GAAG,IAAI;MAChC;IACF;IAEA,IAAI,CAACJ,aAAa,CAACsH,OAAO,CAACxB,WAAW,CAACyB,WAAW,CAAC,CAAC,CAAC;IACrD,MAAMC,YAAY,GAAG,MAAM,IAAI,CAAC3H,SAAS,CAAC4H,eAAe,CAAClH,SAAS,CAAC;IACpE,MAAM6C,GAAG,GAAGvF,IAAI,CAAD,CAAC,CAACwG,IAAI,CAAChB,IAAI,EAAE,cAAc,CAAC;IAC3C,KAAK,MAAMqE,WAAW,IAAIF,YAAY,EAAE;MACtC,MAAMG,mBAAmB,GAAG9J,IAAI,CAAD,CAAC,CAACwG,IAAI,CAACqD,WAAW,EAAEhC,sBAAY,CAAC;MAChE,IAAI7H,IAAI,CAAD,CAAC,CAAC8G,UAAU,CAACgD,mBAAmB,CAAC,EAAE;QACxC,IAAI,CAACzH,gBAAgB,CAAC+C,IAAI,CACxB2B,oBAAO,CAACC,YAAY,CAAChH,IAAI,CAAD,CAAC,CAACwG,IAAI,CAAC,IAAI,CAACxE,SAAS,CAAChC,IAAI,EAAEuF,GAAG,CAAC,EAAEuE,mBAAmB,EAAEpH,SAAS,CAACE,EAAE,CAC7F,CAAC;QACD;MACF;MACA,IAAI,CAACT,aAAa,CAAC8E,UAAU,CAACF,oBAAO,CAACC,YAAY,CAACzB,GAAG,EAAEuE,mBAAmB,CAAC,CAAC;IAC/E;EACF;;EAEA;AACF;AACA;EACE,MAAM1B,kBAAkBA,CAAC1F,SAAoB,EAAEuF,WAA4B,EAAE;IAC3E,OAAO8B,gDAAsB,CAACC,iBAAiB,CAACtH,SAAS,EAAEuF,WAAW,CAAC;EACzE;AACF;AAACgB,OAAA,CAAA7H,OAAA,GAAAS,gBAAA;AAEM,eAAeoI,4BAA4BA,CAChDjI,SAAoB,EACpBkI,MAAqB,EACrBC,2BAAoC,EACpC;EACA,IAAIC,cAAc;EAClB,IAAID,2BAA2B,EAAE;IAC/BC,cAAc,GAAG,MAAM,IAAAC,wDAAmC,EAACrI,SAAS,EAAEkI,MAAM,CAAC;EAC/E;EACA,MAAMnH,YAAY,GAAG,MAAMuH,sBAAsB,CAACtI,SAAS,EAAEkI,MAAM,CAAC;EACpE,OAAO;IAAEnH,YAAY;IAAEqH;EAAe,CAAC;AACzC;AAEO,eAAeE,sBAAsBA,CAC1CtI,SAAoB,EACpBuI,aAA4B,EAC5BC,aAAa,GAAG,KAAK,EACc;EACnC,IAAI,CAACD,aAAa,CAACtH,MAAM,EAAE,OAAO,EAAE;EACpC,MAAMwH,aAAa,GAAG,MAAAA,CAAA,KAAY;IAChC,IAAID,aAAa,EAAE;MACjB,OAAOxI,SAAS,CAAC0I,KAAK,CAACC,OAAO,CAACJ,aAAa,CAAC;IAC/C;IACA,OAAOvI,SAAS,CAAC2I,OAAO,CAACJ,aAAa,EAAE;MACtCK,qBAAqB,EAAEL,aAAa,CAAC/G,GAAG,CAAEZ,EAAE,IAAKA,EAAE,CAACe,QAAQ,CAAC,CAAC,CAAC;MAC/DkH,oBAAoB,EAAE,KAAK;MAC3BC,cAAc,EAAE;IAClB,CAAC,CAAC;EACJ,CAAC;EACD,MAAM/I,UAAU,GAAG,MAAM0I,aAAa,CAAC,CAAC;EACxC,MAAMM,gBAAgB,GAAG,IAAIlJ,gBAAgB,CAACE,UAAU,EAAEC,SAAS,CAAC;EACpE,OAAO+I,gBAAgB,CAACvI,IAAI,CAAC,CAAC;AAChC;AAEO,eAAewI,6BAA6BA,CAACjJ,UAAuB,EAAEC,SAAoB,EAAE;EACjG,MAAM+I,gBAAgB,GAAG,IAAIlJ,gBAAgB,CAACE,UAAU,EAAEC,SAAS,CAAC;EACpE,OAAO+I,gBAAgB,CAACvI,IAAI,CAAC,CAAC;AAChC;AAEO,eAAeyI,0BAA0BA,CAC9CvI,SAAoB,EACpBV,SAAoB,EACpB0F,KAA4B,EAC5B;EACA,MAAMwD,eAAe,GAAGlJ,SAAS,CAACmJ,YAAY,CAACzI,SAAS,CAACE,EAAE,CAAC,CAAC,CAAC;EAC9D,MAAMwI,0BAA0B,GAAG1D,KAAK,CAAClE,GAAG,CAAE8C,IAAI,IAAKtG,IAAI,CAAD,CAAC,CAAC4H,QAAQ,CAACsD,eAAe,EAAE5E,IAAI,CAAC,CAAC;EAC5F,MAAM+E,MAAM,GAAG,MAAMrJ,SAAS,CAACsJ,uBAAuB,CAAC5I,SAAS,CAAC;EACjE,MAAM6I,aAAa,GAAGH,0BAA0B,CAAC5H,GAAG,CAAE8C,IAAI,IAAKtG,IAAI,CAAD,CAAC,CAACwG,IAAI,CAAC6E,MAAM,EAAE/E,IAAI,CAAC,CAAC;EACvFhC,iBAAM,CAACC,KAAK,CAAC;AACf,EAAEgH,aAAa,CAAC/E,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;EAC3B,MAAMlD,OAAO,CAACC,GAAG,CAACgI,aAAa,CAAC/H,GAAG,CAAE8C,IAAI,IAAKK,kBAAE,CAAC6E,MAAM,CAAClF,IAAI,CAAC,CAAC,CAAC;AACjE","ignoreList":[]}
@@ -31,6 +31,7 @@ export default class NodeModuleLinker {
31
31
  consumer: Consumer;
32
32
  bitMap: BitMap; // preparation for the capsule, which is going to have only BitMap with no Consumer
33
33
  dataToPersist: DataToPersist;
34
+ absoluteSymlinks: Symlink[];
34
35
  existingLinks: NodeModulesLinksResult[];
35
36
  packageJsonCreated: boolean;
36
37
 
@@ -41,6 +42,7 @@ export default class NodeModuleLinker {
41
42
  this.consumer = this.workspace.consumer;
42
43
  this.bitMap = this.consumer.bitMap;
43
44
  this.dataToPersist = new DataToPersist();
45
+ this.absoluteSymlinks = [];
44
46
  this.existingLinks = [];
45
47
  this.packageJsonCreated = false;
46
48
  }
@@ -58,6 +60,7 @@ export default class NodeModuleLinker {
58
60
  const workspacePath = this.workspace.path;
59
61
  links.addBasePath(workspacePath);
60
62
  await links.persistAllToFS();
63
+ await this.persistAbsoluteSymlinks();
61
64
  // Only clear cache if new package.json of components were created
62
65
  if (this.packageJsonCreated) {
63
66
  await Promise.all(
@@ -70,17 +73,25 @@ export default class NodeModuleLinker {
70
73
  this.workspace.clearAllComponentsCache();
71
74
  }
72
75
 
73
- await linkPkgsToRootComponents(
74
- {
75
- rootComponentsPath: this.workspace.rootComponentsPath,
76
- workspacePath,
77
- },
78
- this.components.map((comp) => componentIdToPackageName(comp.state._consumer))
79
- );
76
+ // Only update `.bit_roots` when root components are actually in use. Otherwise
77
+ // we'd be hard-linking into a stale tree left over from a previous install where
78
+ // rootComponents was enabled — pnpm no longer manages that subtree, so its layout
79
+ // can be inconsistent and `mkdir` may throw ENOTDIR/ENOENT through a broken
80
+ // ancestor inside `.bit_roots/<env>/node_modules/...`.
81
+ if (this.workspace.hasRootComponents()) {
82
+ await linkPkgsToRootComponents(
83
+ {
84
+ rootComponentsPath: this.workspace.rootComponentsPath,
85
+ workspacePath,
86
+ },
87
+ this.components.map((comp) => componentIdToPackageName(comp.state._consumer))
88
+ );
89
+ }
80
90
  return linksResults;
81
91
  }
82
92
  async getLinks(): Promise<DataToPersist> {
83
93
  this.dataToPersist = new DataToPersist();
94
+ this.absoluteSymlinks = [];
84
95
  await pMapSeries(this.components, async (component) => {
85
96
  const componentId = component.id.toString();
86
97
  logger.debug(`linking component to node_modules: ${componentId}`);
@@ -89,6 +100,11 @@ export default class NodeModuleLinker {
89
100
 
90
101
  return this.dataToPersist;
91
102
  }
103
+
104
+ private async persistAbsoluteSymlinks() {
105
+ await Promise.all(this.absoluteSymlinks.map((symlink) => symlink.write()));
106
+ }
107
+
92
108
  private addLinkResult(
93
109
  linksResults: NodeModulesLinksResult[],
94
110
  id: ComponentID | null | undefined,
@@ -110,6 +126,9 @@ export default class NodeModuleLinker {
110
126
  this.dataToPersist.symlinks.forEach((symlink: Symlink) => {
111
127
  this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);
112
128
  });
129
+ this.absoluteSymlinks.forEach((symlink: Symlink) => {
130
+ this.addLinkResult(linksResults, symlink.componentId, symlink.src, symlink.dest, false);
131
+ });
113
132
  this.existingLinks.forEach((link: NodeModulesLinksResult) => {
114
133
  const componentId = link.id;
115
134
  link.bound.forEach((bound) => {
@@ -163,6 +182,10 @@ export default class NodeModuleLinker {
163
182
  }
164
183
  if (stat && stat.isSymbolicLink()) {
165
184
  this.addLinkResult(this.existingLinks, component.id, fileWithRootDir, dest, true);
185
+ } else if (path.isAbsolute(dest)) {
186
+ this.absoluteSymlinks.push(
187
+ Symlink.makeInstance(path.join(this.workspace.path, fileWithRootDir), dest, component.id, true)
188
+ );
166
189
  } else {
167
190
  this.dataToPersist.addSymlink(Symlink.makeInstance(fileWithRootDir, dest, component.id, true));
168
191
  }
@@ -284,7 +307,14 @@ export default class NodeModuleLinker {
284
307
  const injectedDirs = await this.workspace.getInjectedDirs(component);
285
308
  const src = path.join(dest, 'package.json');
286
309
  for (const injectedDir of injectedDirs) {
287
- this.dataToPersist.addSymlink(Symlink.makeInstance(src, path.join(injectedDir, 'package.json')));
310
+ const injectedPackageJson = path.join(injectedDir, PACKAGE_JSON);
311
+ if (path.isAbsolute(injectedPackageJson)) {
312
+ this.absoluteSymlinks.push(
313
+ Symlink.makeInstance(path.join(this.workspace.path, src), injectedPackageJson, component.id)
314
+ );
315
+ continue;
316
+ }
317
+ this.dataToPersist.addSymlink(Symlink.makeInstance(src, injectedPackageJson));
288
318
  }
289
319
  }
290
320
 
package/package.json CHANGED
@@ -1,37 +1,36 @@
1
1
  {
2
2
  "name": "@teambit/workspace.modules.node-modules-linker",
3
- "version": "0.0.0-e3f7eeec263adf3fbb1fce6556b6e662d56fa213",
3
+ "version": "0.0.0-e7ed6df08ccdae583c98bddeefe6bfdc35fd01ac",
4
4
  "homepage": "https://bit.cloud/teambit/workspace/modules/node-modules-linker",
5
5
  "main": "dist/index.js",
6
6
  "componentId": {
7
7
  "scope": "teambit.workspace",
8
8
  "name": "modules/node-modules-linker",
9
- "version": "e3f7eeec263adf3fbb1fce6556b6e662d56fa213"
9
+ "version": "e7ed6df08ccdae583c98bddeefe6bfdc35fd01ac"
10
10
  },
11
11
  "dependencies": {
12
12
  "fs-extra": "10.0.0",
13
13
  "p-map-series": "2.1.0",
14
14
  "lodash": "4.17.21",
15
15
  "@teambit/component-id": "1.2.4",
16
- "@teambit/component-issues": "0.0.169",
17
- "@teambit/legacy.utils": "0.0.33",
18
- "@teambit/component-package-version": "0.0.448",
19
- "@teambit/legacy.constants": "0.0.23",
20
- "@teambit/legacy.logger": "0.0.34",
21
- "@teambit/toolbox.path.path": "0.0.15",
16
+ "@teambit/component-issues": "0.0.183",
17
+ "@teambit/legacy.utils": "0.0.48",
18
+ "@teambit/component-package-version": "0.0.460",
19
+ "@teambit/toolbox.path.path": "0.0.21",
22
20
  "@teambit/workspace.root-components": "1.0.1",
23
- "@teambit/component.sources": "0.0.0-afba81c0b0912aff903f867bd800eae7ef9b01b9",
24
- "@teambit/legacy.consumer-component": "0.0.0-0f3b99b367c8cad6496490eb4d44de800a916a07",
25
- "@teambit/pkg.modules.component-package-name": "0.0.0-2213f11c35c90bd25b397c097ccc3d24ac5a1348",
26
- "@teambit/legacy.bit-map": "0.0.0-5e563153e44b2dea3cfa02af9cd7c989c940927b",
27
- "@teambit/legacy.consumer": "0.0.0-7430d0ce707af5fd3960827f09ac8e687760887c"
21
+ "@teambit/component.sources": "0.0.0-c6cc4fb308bbee8a6ced430b6903f8798241b34c",
22
+ "@teambit/legacy.consumer-component": "0.0.0-264a59e20042f115ddec397e9d62506f848b9f5c",
23
+ "@teambit/pkg.modules.component-package-name": "0.0.0-4901f8fc9b21f01caa14887cc0753ae753a62bcf",
24
+ "@teambit/legacy.bit-map": "0.0.0-e01c46f92c21687dca1461643bcb49fcdc80672a",
25
+ "@teambit/legacy.constants": "0.0.0-d8e45fde6be0486fb3352c9689fcd020dd9ee263",
26
+ "@teambit/legacy.consumer": "0.0.0-201879900a2f62307329fb04129561dc2315f396",
27
+ "@teambit/legacy.logger": "0.0.0-6d8e86a30f9d832ec0be5880743ec1d58a7a0c6e"
28
28
  },
29
29
  "devDependencies": {
30
30
  "@types/fs-extra": "9.0.7",
31
31
  "@types/lodash": "4.14.165",
32
32
  "@types/mocha": "9.1.0",
33
- "chai": "4.3.0",
34
- "@teambit/node.envs.node-babel-mocha": "0.2.4"
33
+ "@teambit/node.envs.node-babel-mocha": "2.0.4"
35
34
  },
36
35
  "peerDependencies": {},
37
36
  "license": "Apache-2.0",
@@ -39,9 +38,14 @@
39
38
  "peerDependenciesMeta": {},
40
39
  "exports": {
41
40
  ".": {
42
- "require": "./dist/index.js",
43
- "import": "./dist/esm.mjs"
44
- }
41
+ "types": "./dist/index.d.ts",
42
+ "node": {
43
+ "require": "./dist/index.js",
44
+ "import": "./dist/esm.mjs"
45
+ },
46
+ "default": "./dist/index.js"
47
+ },
48
+ "./dist/*": "./dist/*"
45
49
  },
46
50
  "private": false,
47
51
  "engines": {
package/types/style.d.ts CHANGED
@@ -40,3 +40,7 @@ declare module '*.mdx' {
40
40
  const component: any;
41
41
  export default component;
42
42
  }
43
+
44
+ // `reset-css` ships only `reset.css` (no `.d.ts`). TS6 refuses bare
45
+ // side-effect imports without declarations, so we declare the module here.
46
+ declare module 'reset-css';