diff --git a/workspaces/arborist/lib/arborist/isolated-reifier.js b/workspaces/arborist/lib/arborist/isolated-reifier.js index 121ad0effc8f6..5a2a5e1da53a9 100644 --- a/workspaces/arborist/lib/arborist/isolated-reifier.js +++ b/workspaces/arborist/lib/arborist/isolated-reifier.js @@ -4,6 +4,7 @@ const { join } = require('node:path') const { depth } = require('treeverse') const crypto = require('node:crypto') const { IsolatedNode, IsolatedLink } = require('../isolated-classes.js') +const nameFromFolder = require('@npmcli/name-from-folder') // generate short hash key based on the dependency tree starting at this node const getKey = (startNode) => { @@ -149,7 +150,7 @@ module.exports = cls => class IsolatedReifier extends cls { node.root.path, 'node_modules', '.store', - `${node.packageName}@${node.version}` + `${result.packageName}@${node.version}` ) mkdirSync(dir, { recursive: true }) // TODO this approach feels wrong and shouldn't be necessary for shrinkwraps @@ -191,7 +192,7 @@ module.exports = cls => class IsolatedReifier extends cls { result.id = this.counter++ /* istanbul ignore next - packageName is always set for real packages */ result.name = result.isWorkspace ? (node.packageName || node.name) : node.name - result.packageName = node.packageName || node.name + result.packageName = nameFromFolder(node.packageName || node.path) result.package = { ...node.package } result.package.bundleDependencies = undefined diff --git a/workspaces/arborist/lib/isolated-classes.js b/workspaces/arborist/lib/isolated-classes.js index d9770a386791f..8e6e5b79a91f4 100644 --- a/workspaces/arborist/lib/isolated-classes.js +++ b/workspaces/arborist/lib/isolated-classes.js @@ -104,6 +104,11 @@ class IsolatedNode { return !!(hasInstallScript || install || preinstall || postinstall) } + /* istanbul ignore next -- emulate lib/node.js */ + get packageName () { + return this.package.name || null + } + get version () { return this.package.version }