25 lines
725 B
TypeScript
25 lines
725 B
TypeScript
const extractStringRecord = (value: unknown): Record<string, unknown> | null => (
|
|
value && typeof value === 'object' && !Array.isArray(value)
|
|
? value as Record<string, unknown>
|
|
: null
|
|
)
|
|
|
|
export const readNestedString = (value: unknown, keys: string[]): string | null => {
|
|
let current: unknown = value
|
|
for (const key of keys) {
|
|
const record = extractStringRecord(current)
|
|
if (!record) return null
|
|
current = record[key]
|
|
}
|
|
return typeof current === 'string' && current.trim() ? current.trim() : null
|
|
}
|
|
|
|
export const parseHostFromUrl = (value?: string | null): string | null => {
|
|
if (!value?.trim()) return null
|
|
try {
|
|
return new URL(value).hostname
|
|
} catch {
|
|
return value.trim()
|
|
}
|
|
}
|