Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
lukekarrys committed Aug 30, 2023
1 parent 7af81c7 commit 729e893
Show file tree
Hide file tree
Showing 26 changed files with 763 additions and 53 deletions.
11 changes: 9 additions & 2 deletions node_modules/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,6 @@
!/@npmcli/package-json
!/@npmcli/package-json/node_modules/
/@npmcli/package-json/node_modules/*
!/@npmcli/package-json/node_modules/hosted-git-info
!/@npmcli/package-json/node_modules/lru-cache
!/@npmcli/package-json/node_modules/normalize-package-data
!/@npmcli/promise-spawn
!/@npmcli/query
Expand Down Expand Up @@ -124,6 +122,9 @@
!/has-unicode
!/has
!/hosted-git-info
!/hosted-git-info/node_modules/
/hosted-git-info/node_modules/*
!/hosted-git-info/node_modules/lru-cache
!/http-cache-semantics
!/http-proxy-agent
!/https-proxy-agent
Expand Down Expand Up @@ -211,11 +212,17 @@
!/node-gyp/node_modules/which
!/nopt
!/normalize-package-data
!/normalize-package-data/node_modules/
/normalize-package-data/node_modules/*
!/normalize-package-data/node_modules/hosted-git-info
!/npm-audit-report
!/npm-bundled
!/npm-install-checks
!/npm-normalize-package-bin
!/npm-package-arg
!/npm-package-arg/node_modules/
/npm-package-arg/node_modules/*
!/npm-package-arg/node_modules/hosted-git-info
!/npm-packlist
!/npm-pick-manifest
!/npm-profile
Expand Down
4 changes: 2 additions & 2 deletions node_modules/hosted-git-info/lib/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict'

const LRU = require('lru-cache')
const { LRUCache } = require('lru-cache')
const hosts = require('./hosts.js')
const fromUrl = require('./from-url.js')
const parseUrl = require('./parse-url.js')

const cache = new LRU({ max: 1000 })
const cache = new LRUCache({ max: 1000 })

class GitHost {
constructor (type, user, auth, project, committish, defaultRepresentation, opts = {}) {
Expand Down
17 changes: 12 additions & 5 deletions node_modules/hosted-git-info/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hosted-git-info",
"version": "6.1.1",
"version": "7.0.0",
"description": "Provides metadata and conversions from repository urls for GitHub, Bitbucket and GitLab",
"main": "./lib/index.js",
"repository": {
Expand Down Expand Up @@ -30,19 +30,19 @@
"template-oss-apply": "template-oss-apply --force"
},
"dependencies": {
"lru-cache": "^7.5.1"
"lru-cache": "^10.0.1"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/template-oss": "4.7.1",
"@npmcli/template-oss": "4.18.0",
"tap": "^16.0.1"
},
"files": [
"bin/",
"lib/"
],
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
"node": "^16.14.0 || >=18.0.0"
},
"tap": {
"color": 1,
Expand All @@ -54,6 +54,13 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"version": "4.7.1"
"version": "4.18.0",
"publish": "true",
"ciVersions": [
"16.14.0",
"16.x",
"18.0.0",
"18.x"
]
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
'use strict'

const { LRUCache } = require('lru-cache')
const LRU = require('lru-cache')
const hosts = require('./hosts.js')
const fromUrl = require('./from-url.js')
const parseUrl = require('./parse-url.js')

const cache = new LRUCache({ max: 1000 })
const cache = new LRU({ max: 1000 })

class GitHost {
constructor (type, user, auth, project, committish, defaultRepresentation, opts = {}) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "hosted-git-info",
"version": "7.0.0",
"version": "6.1.1",
"description": "Provides metadata and conversions from repository urls for GitHub, Bitbucket and GitLab",
"main": "./lib/index.js",
"repository": {
Expand Down Expand Up @@ -30,19 +30,19 @@
"template-oss-apply": "template-oss-apply --force"
},
"dependencies": {
"lru-cache": "^10.0.1"
"lru-cache": "^7.5.1"
},
"devDependencies": {
"@npmcli/eslint-config": "^4.0.0",
"@npmcli/template-oss": "4.18.0",
"@npmcli/template-oss": "4.7.1",
"tap": "^16.0.1"
},
"files": [
"bin/",
"lib/"
],
"engines": {
"node": "^16.14.0 || >=18.0.0"
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
},
"tap": {
"color": 1,
Expand All @@ -54,13 +54,6 @@
},
"templateOSS": {
"//@npmcli/template-oss": "This file is partially managed by @npmcli/template-oss. Edits may be overwritten.",
"version": "4.18.0",
"publish": "true",
"ciVersions": [
"16.14.0",
"16.x",
"18.0.0",
"18.x"
]
"version": "4.7.1"
}
}
13 changes: 13 additions & 0 deletions node_modules/npm-package-arg/node_modules/hosted-git-info/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
Copyright (c) 2015, Rebecca Turner

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
'use strict'

const parseUrl = require('./parse-url')

// look for github shorthand inputs, such as npm/cli
const isGitHubShorthand = (arg) => {
// it cannot contain whitespace before the first #
// it cannot start with a / because that's probably an absolute file path
// but it must include a slash since repos are username/repository
// it cannot start with a . because that's probably a relative file path
// it cannot start with an @ because that's a scoped package if it passes the other tests
// it cannot contain a : before a # because that tells us that there's a protocol
// a second / may not exist before a #
const firstHash = arg.indexOf('#')
const firstSlash = arg.indexOf('/')
const secondSlash = arg.indexOf('/', firstSlash + 1)
const firstColon = arg.indexOf(':')
const firstSpace = /\s/.exec(arg)
const firstAt = arg.indexOf('@')

const spaceOnlyAfterHash = !firstSpace || (firstHash > -1 && firstSpace.index > firstHash)
const atOnlyAfterHash = firstAt === -1 || (firstHash > -1 && firstAt > firstHash)
const colonOnlyAfterHash = firstColon === -1 || (firstHash > -1 && firstColon > firstHash)
const secondSlashOnlyAfterHash = secondSlash === -1 || (firstHash > -1 && secondSlash > firstHash)
const hasSlash = firstSlash > 0
// if a # is found, what we really want to know is that the character
// immediately before # is not a /
const doesNotEndWithSlash = firstHash > -1 ? arg[firstHash - 1] !== '/' : !arg.endsWith('/')
const doesNotStartWithDot = !arg.startsWith('.')

return spaceOnlyAfterHash && hasSlash && doesNotEndWithSlash &&
doesNotStartWithDot && atOnlyAfterHash && colonOnlyAfterHash &&
secondSlashOnlyAfterHash
}

module.exports = (giturl, opts, { gitHosts, protocols }) => {
if (!giturl) {
return
}

const correctedUrl = isGitHubShorthand(giturl) ? `github:${giturl}` : giturl
const parsed = parseUrl(correctedUrl, protocols)
if (!parsed) {
return
}

const gitHostShortcut = gitHosts.byShortcut[parsed.protocol]
const gitHostDomain = gitHosts.byDomain[parsed.hostname.startsWith('www.')
? parsed.hostname.slice(4)
: parsed.hostname]
const gitHostName = gitHostShortcut || gitHostDomain
if (!gitHostName) {
return
}

const gitHostInfo = gitHosts[gitHostShortcut || gitHostDomain]
let auth = null
if (protocols[parsed.protocol]?.auth && (parsed.username || parsed.password)) {
auth = `${parsed.username}${parsed.password ? ':' + parsed.password : ''}`
}

let committish = null
let user = null
let project = null
let defaultRepresentation = null

try {
if (gitHostShortcut) {
let pathname = parsed.pathname.startsWith('/') ? parsed.pathname.slice(1) : parsed.pathname
const firstAt = pathname.indexOf('@')
// we ignore auth for shortcuts, so just trim it out
if (firstAt > -1) {
pathname = pathname.slice(firstAt + 1)
}

const lastSlash = pathname.lastIndexOf('/')
if (lastSlash > -1) {
user = decodeURIComponent(pathname.slice(0, lastSlash))
// we want nulls only, never empty strings
if (!user) {
user = null
}
project = decodeURIComponent(pathname.slice(lastSlash + 1))
} else {
project = decodeURIComponent(pathname)
}

if (project.endsWith('.git')) {
project = project.slice(0, -4)
}

if (parsed.hash) {
committish = decodeURIComponent(parsed.hash.slice(1))
}

defaultRepresentation = 'shortcut'
} else {
if (!gitHostInfo.protocols.includes(parsed.protocol)) {
return
}

const segments = gitHostInfo.extract(parsed)
if (!segments) {
return
}

user = segments.user && decodeURIComponent(segments.user)
project = decodeURIComponent(segments.project)
committish = decodeURIComponent(segments.committish)
defaultRepresentation = protocols[parsed.protocol]?.name || parsed.protocol.slice(0, -1)
}
} catch (err) {
/* istanbul ignore else */
if (err instanceof URIError) {
return
} else {
throw err
}
}

return [gitHostName, user, auth, project, committish, defaultRepresentation, opts]
}
Loading

0 comments on commit 729e893

Please sign in to comment.