Read-only mirror — the public repositories of the Forgejo instance, refreshed every 10 minutes. The live instance (fg.dieschoenewolke.de) is reachable only over the VPN; clone here with https://git.dieschoenewolke.de/git/<owner>/<repo>.git.
summaryrefslogtreecommitdiff
path: root/src/url-helper.ts
diff options
context:
space:
mode:
authorJohn Wesley Walker III <81404201+jww3@users.noreply.github.com>2024-10-18 10:07:17 +0200
committerGitHub <noreply@github.com>2024-10-18 10:07:17 +0200
commit06229e648730e5ff920410853f1f4ec7dacf988f (patch)
tree7b837757825893756369dd882fde4f781ac541d1 /src/url-helper.ts
parent95a822ba46f3b23eaa3dc6f36ee1f54d313fb694 (diff)
`url-helper.ts` now leverages well-known environment variables. (#1941)
* `utl-helper.ts` now leverages well-known environment variables. --------- Co-authored-by: Erez Testiler <easyt@github.com>
Diffstat (limited to 'src/url-helper.ts')
-rw-r--r--src/url-helper.ts59
1 files changed, 47 insertions, 12 deletions
diff --git a/src/url-helper.ts b/src/url-helper.ts
index 64ecbf3..17a0842 100644
--- a/src/url-helper.ts
+++ b/src/url-helper.ts
@@ -21,26 +21,61 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
}
export function getServerUrl(url?: string): URL {
- let urlValue =
- url && url.trim().length > 0
- ? url
- : process.env['GITHUB_SERVER_URL'] || 'https://github.com'
- return new URL(urlValue)
+ let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'
+ if (hasContent(url, WhitespaceMode.Trim)) {
+ resolvedUrl = url!
+ }
+
+ return new URL(resolvedUrl)
}
export function getServerApiUrl(url?: string): string {
- let apiUrl = 'https://api.github.com'
+ if (hasContent(url, WhitespaceMode.Trim)) {
+ let serverUrl = getServerUrl(url)
+ if (isGhes(url)) {
+ serverUrl.pathname = 'api/v3'
+ } else {
+ serverUrl.hostname = 'api.' + serverUrl.hostname
+ }
- if (isGhes(url)) {
- const serverUrl = getServerUrl(url)
- apiUrl = new URL(`${serverUrl.origin}/api/v3`).toString()
+ return pruneSuffix(serverUrl.toString(), '/')
}
- return apiUrl
+ return process.env['GITHUB_API_URL'] || 'https://api.github.com'
}
export function isGhes(url?: string): boolean {
- const ghUrl = getServerUrl(url)
+ const ghUrl = new URL(
+ url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'
+ )
+
+ const hostname = ghUrl.hostname.trimEnd().toUpperCase()
+ const isGitHubHost = hostname === 'GITHUB.COM'
+ const isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM')
+ const isLocalHost = hostname.endsWith('.LOCALHOST')
+
+ return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost
+}
- return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'
+function pruneSuffix(text: string, suffix: string) {
+ if (hasContent(suffix, WhitespaceMode.Preserve) && text?.endsWith(suffix)) {
+ return text.substring(0, text.length - suffix.length)
+ }
+ return text
+}
+
+enum WhitespaceMode {
+ Trim,
+ Preserve
+}
+
+function hasContent(
+ text: string | undefined,
+ whitespaceMode: WhitespaceMode
+): boolean {
+ let refinedText = text ?? ''
+ if (whitespaceMode == WhitespaceMode.Trim) {
+ refinedText = refinedText.trim()
+ }
+ return refinedText.length > 0
}