mirror of
https://github.com/nodejs/node.git
synced 2025-08-18 15:18:46 +02:00

PR-URL: https://github.com/nodejs/node/pull/45693 Reviewed-By: Rich Trott <rtrott@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Ruy Adorno <ruyadorno@google.com>
45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
// take a path and a resolved value, and turn it into a resolution from
|
|
// the given new path. This is used with converting a package.json's
|
|
// relative file: path into one suitable for a lockfile, or between
|
|
// lockfiles, and for converting hosted git repos to a consistent url type.
|
|
const npa = require('npm-package-arg')
|
|
const relpath = require('./relpath.js')
|
|
const consistentResolve = (resolved, fromPath, toPath, relPaths = false) => {
|
|
if (!resolved) {
|
|
return null
|
|
}
|
|
|
|
try {
|
|
const hostedOpt = { noCommittish: false }
|
|
const {
|
|
fetchSpec,
|
|
saveSpec,
|
|
type,
|
|
hosted,
|
|
rawSpec,
|
|
raw,
|
|
} = npa(resolved, fromPath)
|
|
if (type === 'file' || type === 'directory') {
|
|
const cleanFetchSpec = fetchSpec.replace(/#/g, '%23')
|
|
if (relPaths && toPath) {
|
|
return `file:${relpath(toPath, cleanFetchSpec)}`
|
|
}
|
|
return `file:${cleanFetchSpec}`
|
|
}
|
|
if (hosted) {
|
|
return `git+${hosted.auth ? hosted.https(hostedOpt) : hosted.sshurl(hostedOpt)}`
|
|
}
|
|
if (type === 'git') {
|
|
return saveSpec
|
|
}
|
|
if (rawSpec === '*') {
|
|
return raw
|
|
}
|
|
return rawSpec
|
|
} catch (_) {
|
|
// whatever we passed in was not acceptable to npa.
|
|
// leave it 100% untouched.
|
|
return resolved
|
|
}
|
|
}
|
|
module.exports = consistentResolve
|