81 lines
2.2 KiB
TypeScript
81 lines
2.2 KiB
TypeScript
export const GETTING_STARTED_VAULT_NAME = 'Getting Started'
|
|
|
|
const CLONE_PATH_ERRORS = [
|
|
'already exists and is not empty',
|
|
'already exists and is not a directory',
|
|
'Failed to create parent directory',
|
|
'Target path is required',
|
|
]
|
|
|
|
const GIT_NOT_FOUND_ERRORS = [
|
|
'no such file or directory',
|
|
'os error 2',
|
|
'program not found',
|
|
'system cannot find the file',
|
|
]
|
|
|
|
const NETWORK_ERRORS = [
|
|
'could not resolve host',
|
|
'connection refused',
|
|
'network is unreachable',
|
|
'timed out',
|
|
'failed to connect',
|
|
'ssl connect error',
|
|
]
|
|
|
|
const AUTH_ERRORS = [
|
|
'authentication failed',
|
|
'could not read username',
|
|
'permission denied',
|
|
'repository not found',
|
|
'403',
|
|
]
|
|
|
|
export function buildGettingStartedVaultPath(parentPath: string): string {
|
|
const trimmed = parentPath.trim().replace(/[\\/]+$/g, '')
|
|
if (!trimmed) {
|
|
return GETTING_STARTED_VAULT_NAME
|
|
}
|
|
|
|
const separator = trimmed.includes('\\') && !trimmed.includes('/') ? '\\' : '/'
|
|
return `${trimmed}${separator}${GETTING_STARTED_VAULT_NAME}`
|
|
}
|
|
|
|
export function labelFromPath(path: string): string {
|
|
const trimmed = path.trim().replace(/[\\/]+$/g, '')
|
|
return trimmed.split(/[\\/]/).pop() || 'Vault'
|
|
}
|
|
|
|
export function formatGettingStartedCloneError(err: unknown): string {
|
|
const message =
|
|
typeof err === 'string'
|
|
? err
|
|
: err instanceof Error
|
|
? err.message
|
|
: `${err}`
|
|
|
|
if (CLONE_PATH_ERRORS.some(fragment => message.includes(fragment))) {
|
|
return message
|
|
}
|
|
|
|
const lower = message.toLowerCase()
|
|
if (GIT_NOT_FOUND_ERRORS.some(fragment => lower.includes(fragment))) {
|
|
return 'Git is required to download the Getting Started vault. Install Git and try again.'
|
|
}
|
|
if (AUTH_ERRORS.some(fragment => lower.includes(fragment))) {
|
|
return 'Could not download Getting Started vault. Check your GitHub access and try again.'
|
|
}
|
|
if (NETWORK_ERRORS.some(fragment => lower.includes(fragment))) {
|
|
return 'Could not download Getting Started vault. Check your connection and try again.'
|
|
}
|
|
|
|
return `Could not download Getting Started vault: ${firstCloneErrorLine(message)}`
|
|
}
|
|
|
|
function firstCloneErrorLine(message: string): string {
|
|
return message
|
|
.split(/\r?\n/)
|
|
.map(line => line.trim())
|
|
.find(Boolean) ?? 'git reported an unknown error'
|
|
}
|