webapp/src/lib/getThumbUrl.ts

65 lines
2.0 KiB
TypeScript
Raw Normal View History

2024-07-05 14:08:12 +00:00
import { cdnUrl, thumborUrl } from '../config'
2024-04-24 06:40:37 +00:00
const URL_CONFIG = {
cdnUrl: cdnUrl,
2024-04-24 07:22:05 +00:00
thumborUrl: `${thumborUrl}/unsafe/`,
2024-04-24 07:23:42 +00:00
audioSubfolder: 'audio',
imageSubfolder: 'image',
2024-06-26 08:22:05 +00:00
productionFolder: 'production/'
2024-04-24 07:23:42 +00:00
}
2024-04-24 06:40:37 +00:00
const getLastSegment = (url: string): string => url.toLowerCase().split('/').pop() || ''
2024-04-24 06:40:37 +00:00
const buildSizePart = (width?: number, height?: number, includeSize = true): string => {
if (!includeSize) return ''
const widthPart = width ? width.toString() : ''
const heightPart = height ? height.toString() : ''
return widthPart || heightPart ? `${widthPart}x${heightPart}/` : ''
}
export const getImageUrl = (
src: string,
2024-06-26 08:22:05 +00:00
options: { width?: number; height?: number; noSizeUrlPart?: boolean } = {}
2024-04-24 06:40:37 +00:00
): string => {
if (!src.includes('discours.io') && src.includes('http')) {
return src
}
2024-04-24 06:40:37 +00:00
const filename = getLastSegment(src)
const suffix = options.noSizeUrlPart ? '' : buildSizePart(options.width, options.height)
2024-07-13 12:25:25 +00:00
const base = URL_CONFIG.thumborUrl
const subfolder = URL_CONFIG.imageSubfolder
2024-04-24 06:40:37 +00:00
return `${base}${suffix}${URL_CONFIG.productionFolder}${subfolder}/${filename}`
}
2024-07-13 12:25:25 +00:00
export const getAudioUrl = (src: string) => {
const filename = getLastSegment(src)
const base = URL_CONFIG.cdnUrl
const subfolder = URL_CONFIG.audioSubfolder
const prodfolder = URL_CONFIG.productionFolder
return `${base}${prodfolder}${subfolder}/${filename}`
}
export const getOpenGraphImageUrl = (
src: string,
options: {
topic: string
title: string
author: string
width?: number
height?: number
2024-06-26 08:22:05 +00:00
}
2024-04-24 06:40:37 +00:00
): string => {
const sizeUrlPart = buildSizePart(options.width, options.height)
const filtersPart = `filters:discourstext('${encodeURIComponent(options.topic)}','${encodeURIComponent(
2024-06-26 08:22:05 +00:00
options.author
)}','${encodeURIComponent(options.title)}')/`
2024-04-24 06:40:37 +00:00
if (src.startsWith(URL_CONFIG.thumborUrl)) {
const thumborKey = src.replace(URL_CONFIG.thumborUrl, '')
return `${URL_CONFIG.thumborUrl}${sizeUrlPart}${filtersPart}${thumborKey}`
}
2024-04-24 06:40:37 +00:00
return `${URL_CONFIG.thumborUrl}${sizeUrlPart}${filtersPart}${src}`
}