Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
lukekarrys committed Oct 2, 2023
1 parent 39d7f04 commit ce9089f
Show file tree
Hide file tree
Showing 11 changed files with 71 additions and 73 deletions.
2 changes: 1 addition & 1 deletion mock-registry/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@
"@npmcli/template-oss": "4.19.0",
"json-stringify-safe": "^5.0.1",
"nock": "^13.3.3",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4",
"tap": "^16.3.8"
}
Expand Down
101 changes: 49 additions & 52 deletions node_modules/npm-package-arg/lib/npa.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ module.exports.resolve = resolve
module.exports.toPurl = toPurl
module.exports.Result = Result

const url = require('url')
const { URL } = require('url')
const HostedGit = require('hosted-git-info')
const semver = require('semver')
const path = global.FAKE_WINDOWS ? require('path').win32 : require('path')
Expand Down Expand Up @@ -183,10 +183,11 @@ Result.prototype.toJSON = function () {
return result
}

function setGitCommittish (res, committish) {
// sets res.gitCommittish, res.gitRange, and res.gitSubdir
function setGitAttrs (res, committish) {
if (!committish) {
res.gitCommittish = null
return res
return
}

// for each :: separated item:
Expand Down Expand Up @@ -224,8 +225,6 @@ function setGitCommittish (res, committish) {
}
log.warn('npm-package-arg', `ignoring unknown key "${name}"`)
}

return res
}

function fromFile (res, where) {
Expand All @@ -245,10 +244,10 @@ function fromFile (res, where) {
const rawWithPrefix = prefix + res.rawSpec
let rawNoPrefix = rawWithPrefix.replace(/^file:/, '')
try {
resolvedUrl = new url.URL(rawWithPrefix, `file://${path.resolve(where)}/`)
specUrl = new url.URL(rawWithPrefix)
resolvedUrl = new URL(rawWithPrefix, `file://${path.resolve(where)}/`)
specUrl = new URL(rawWithPrefix)
} catch (originalError) {
const er = new Error('Invalid file: URL, must comply with RFC 8909')
const er = new Error('Invalid file: URL, must comply with RFC 8089')
throw Object.assign(er, {
raw: res.rawSpec,
spec: res,
Expand All @@ -257,23 +256,23 @@ function fromFile (res, where) {
})
}

// XXX backwards compatibility lack of compliance with RFC 8909
// XXX backwards compatibility lack of compliance with RFC 8089
if (resolvedUrl.host && resolvedUrl.host !== 'localhost') {
const rawSpec = res.rawSpec.replace(/^file:\/\//, 'file:///')
resolvedUrl = new url.URL(rawSpec, `file://${path.resolve(where)}/`)
specUrl = new url.URL(rawSpec)
resolvedUrl = new URL(rawSpec, `file://${path.resolve(where)}/`)
specUrl = new URL(rawSpec)
rawNoPrefix = rawSpec.replace(/^file:/, '')
}
// turn file:/../foo into file:../foo
// for 1, 2 or 3 leading slashes since we attempted
// in the previous step to make it a file protocol url with a leading slash
if (/^\/{1,3}\.\.?(\/|$)/.test(rawNoPrefix)) {
const rawSpec = res.rawSpec.replace(/^file:\/{1,3}/, 'file:')
resolvedUrl = new url.URL(rawSpec, `file://${path.resolve(where)}/`)
specUrl = new url.URL(rawSpec)
resolvedUrl = new URL(rawSpec, `file://${path.resolve(where)}/`)
specUrl = new URL(rawSpec)
rawNoPrefix = rawSpec.replace(/^file:/, '')
}
// XXX end RFC 8909 violation backwards compatibility section
// XXX end RFC 8089 violation backwards compatibility section

// turn /C:/blah into just C:/blah on windows
let specPath = decodeURIComponent(specUrl.pathname)
Expand Down Expand Up @@ -303,7 +302,8 @@ function fromHostedGit (res, hosted) {
res.hosted = hosted
res.saveSpec = hosted.toString({ noGitPlus: false, noCommittish: false })
res.fetchSpec = hosted.getDefaultRepresentation() === 'shortcut' ? null : hosted.toString()
return setGitCommittish(res, hosted.committish)
setGitAttrs(res, hosted.committish)
return res
}

function unsupportedURLType (protocol, spec) {
Expand All @@ -312,62 +312,59 @@ function unsupportedURLType (protocol, spec) {
return err
}

function matchGitScp (spec) {
// git ssh specifiers are overloaded to also use scp-style git
// specifiers, so we have to parse those out and treat them special.
// They are NOT true URIs, so we can't hand them to `url.parse`.
//
// This regex looks for things that look like:
// git+ssh://[email protected]:username/project.git#deadbeef
//
// ...and various combinations. The username in the beginning is *required*.
const matched = spec.match(/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#(.*))?$/i)
return matched && !matched[1].match(/:[0-9]+\/?.*$/i) && {
fetchSpec: matched[1],
gitCommittish: matched[2] == null ? null : matched[2],
}
}

function fromURL (res) {
// eslint-disable-next-line node/no-deprecated-api
const urlparse = url.parse(res.rawSpec)
res.saveSpec = res.rawSpec
let rawSpec = res.rawSpec
res.saveSpec = rawSpec
if (rawSpec.startsWith('git+ssh:')) {
// git ssh specifiers are overloaded to also use scp-style git
// specifiers, so we have to parse those out and treat them special.
// They are NOT true URIs, so we can't hand them to URL.

// This regex looks for things that look like:
// git+ssh://[email protected]:username/project.git#deadbeef
// ...and various combinations. The username in the beginning is *required*.
const matched = rawSpec.match(/^git\+ssh:\/\/([^:#]+:[^#]+(?:\.git)?)(?:#(.*))?$/i)
if (matched && !matched[1].match(/:[0-9]+\/?.*$/i)) {
res.type = 'git'
setGitAttrs(res, matched[2])
res.fetchSpec = matched[1]
return res
}
} else if (rawSpec.startsWith('git+file://')) {
// URL can't handle windows paths
rawSpec = rawSpec.replace(/\\/g, '/')
}
const parsedUrl = new URL(rawSpec)
// check the protocol, and then see if it's git or not
switch (urlparse.protocol) {
switch (parsedUrl.protocol) {
case 'git:':
case 'git+http:':
case 'git+https:':
case 'git+rsync:':
case 'git+ftp:':
case 'git+file:':
case 'git+ssh:': {
case 'git+ssh:':
res.type = 'git'
const match = urlparse.protocol === 'git+ssh:' ? matchGitScp(res.rawSpec)
: null
if (match) {
setGitCommittish(res, match.gitCommittish)
res.fetchSpec = match.fetchSpec
setGitAttrs(res, parsedUrl.hash.slice(1))
if (parsedUrl.protocol === 'git+file:' && /^git\+file:\/\/[a-z]:/i.test(rawSpec)) {
// URL can't handle drive letters on windows file paths, the host can't contain a :
res.fetchSpec = `git+file://${parsedUrl.host.toLowerCase()}:${parsedUrl.pathname}`
} else {
setGitCommittish(res, urlparse.hash != null ? urlparse.hash.slice(1) : '')
urlparse.protocol = urlparse.protocol.replace(/^git[+]/, '')
if (urlparse.protocol === 'file:' && /^git\+file:\/\/[a-z]:/i.test(res.rawSpec)) {
// keep the drive letter : on windows file paths
urlparse.host += ':'
urlparse.hostname += ':'
}
delete urlparse.hash
res.fetchSpec = url.format(urlparse)
parsedUrl.hash = ''
res.fetchSpec = parsedUrl.toString()
}
if (res.fetchSpec.startsWith('git+')) {
res.fetchSpec = res.fetchSpec.slice(4)
}
break
}
case 'http:':
case 'https:':
res.type = 'remote'
res.fetchSpec = res.saveSpec
break

default:
throw unsupportedURLType(urlparse.protocol, res.rawSpec)
throw unsupportedURLType(parsedUrl.protocol, rawSpec)
}

return res
Expand Down
5 changes: 3 additions & 2 deletions node_modules/npm-package-arg/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "npm-package-arg",
"version": "11.0.0",
"version": "11.0.1",
"description": "Parse the things that can be arguments to `npm install`",
"main": "./lib/npa.js",
"directories": {
Expand Down Expand Up @@ -61,6 +61,7 @@
"16.x",
"18.0.0",
"18.x"
]
],
"npmSpec": "next-9"
}
}
22 changes: 11 additions & 11 deletions package-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
"normalize-package-data": "^6.0.0",
"npm-audit-report": "^5.0.0",
"npm-install-checks": "^6.2.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-pick-manifest": "^9.0.0",
"npm-profile": "^9.0.0",
"npm-registry-fetch": "^16.0.0",
Expand Down Expand Up @@ -238,7 +238,7 @@
"@npmcli/template-oss": "4.19.0",
"json-stringify-safe": "^5.0.1",
"nock": "^13.3.3",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4",
"tap": "^16.3.8"
},
Expand Down Expand Up @@ -10872,9 +10872,9 @@
}
},
"node_modules/npm-package-arg": {
"version": "11.0.0",
"resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.0.tgz",
"integrity": "sha512-D8sItaQ8n6VlBUFed3DLz2sCpkabRAjaiLkTamDppvh8lmmAPirzNfBuhJd/2rlmoxZ2S9mOHmIEvzV2z2jOeA==",
"version": "11.0.1",
"resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.1.tgz",
"integrity": "sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==",
"inBundle": true,
"dependencies": {
"hosted-git-info": "^7.0.0",
Expand Down Expand Up @@ -17020,7 +17020,7 @@
"minimatch": "^9.0.0",
"nopt": "^7.0.0",
"npm-install-checks": "^6.2.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-pick-manifest": "^9.0.0",
"npm-registry-fetch": "^16.0.0",
"npmlog": "^7.0.1",
Expand Down Expand Up @@ -17080,7 +17080,7 @@
"version": "8.0.0",
"license": "ISC",
"dependencies": {
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-registry-fetch": "^16.0.0"
},
"devDependencies": {
Expand All @@ -17104,7 +17104,7 @@
"binary-extensions": "^2.2.0",
"diff": "^5.1.0",
"minimatch": "^9.0.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4",
"tar": "^6.1.13"
},
Expand All @@ -17124,7 +17124,7 @@
"@npmcli/arborist": "^7.1.0",
"@npmcli/run-script": "^7.0.1",
"ci-info": "^3.7.1",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npmlog": "^7.0.1",
"pacote": "^17.0.4",
"proc-log": "^3.0.0",
Expand Down Expand Up @@ -17203,7 +17203,7 @@
"dependencies": {
"@npmcli/arborist": "^7.1.0",
"@npmcli/run-script": "^7.0.1",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4"
},
"devDependencies": {
Expand All @@ -17223,7 +17223,7 @@
"dependencies": {
"ci-info": "^3.6.1",
"normalize-package-data": "^6.0.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-registry-fetch": "^16.0.0",
"proc-log": "^3.0.0",
"semver": "^7.3.7",
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
"normalize-package-data": "^6.0.0",
"npm-audit-report": "^5.0.0",
"npm-install-checks": "^6.2.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-pick-manifest": "^9.0.0",
"npm-profile": "^9.0.0",
"npm-registry-fetch": "^16.0.0",
Expand Down
2 changes: 1 addition & 1 deletion workspaces/arborist/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"minimatch": "^9.0.0",
"nopt": "^7.0.0",
"npm-install-checks": "^6.2.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-pick-manifest": "^9.0.0",
"npm-registry-fetch": "^16.0.0",
"npmlog": "^7.0.1",
Expand Down
2 changes: 1 addition & 1 deletion workspaces/libnpmaccess/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"bugs": "https://github.com/npm/libnpmaccess/issues",
"homepage": "https://npmjs.com/package/libnpmaccess",
"dependencies": {
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-registry-fetch": "^16.0.0"
},
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion workspaces/libnpmdiff/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
"binary-extensions": "^2.2.0",
"diff": "^5.1.0",
"minimatch": "^9.0.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4",
"tar": "^6.1.13"
},
Expand Down
2 changes: 1 addition & 1 deletion workspaces/libnpmexec/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
"@npmcli/arborist": "^7.1.0",
"@npmcli/run-script": "^7.0.1",
"ci-info": "^3.7.1",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npmlog": "^7.0.1",
"pacote": "^17.0.4",
"proc-log": "^3.0.0",
Expand Down
2 changes: 1 addition & 1 deletion workspaces/libnpmpack/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"dependencies": {
"@npmcli/arborist": "^7.1.0",
"@npmcli/run-script": "^7.0.1",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"pacote": "^17.0.4"
},
"engines": {
Expand Down
2 changes: 1 addition & 1 deletion workspaces/libnpmpublish/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@
"dependencies": {
"ci-info": "^3.6.1",
"normalize-package-data": "^6.0.0",
"npm-package-arg": "^11.0.0",
"npm-package-arg": "^11.0.1",
"npm-registry-fetch": "^16.0.0",
"proc-log": "^3.0.0",
"semver": "^7.3.7",
Expand Down

0 comments on commit ce9089f

Please sign in to comment.