* spec update * update md files * add plan: monorepo * feat: add empty apps and packages directories * Add shared tsconfig.base.json * feat add workspaces * feat: move hudozka-writer into apps/ * feat: move migrate-to-pocketbase into apps/ * feat: split package.json for apps/hudozka workspace * feat: extend tsconfig.base.json in apps/hudozka * add dockerfile path * feat: verify Phase 3 monorepo migration of Next app * feat: scaffold @hudozka/utils package * feat: add utils barrel export * feat: extract utilities into hudozka-utils package * feat: extract hooks into hudozka-hooks package * Extract Box/Button/Panel/Title/Overlay into @hudozka/ui * Scope Next ESLint rules to apps/hudozka in root flat config * Update README and CLAUDE.md for monorepo layout * disable image optimisation
25 lines
646 B
TypeScript
25 lines
646 B
TypeScript
const units = ["байт", "КБ", "МБ", "ГБ", "ТБ", "ПБ"]
|
|
|
|
const mime = new Map([
|
|
["application/pdf", "ПДФ"],
|
|
["image/jpeg", "ЖПГ"],
|
|
["image/png", "ПНГ"],
|
|
])
|
|
|
|
export function ext(mimeType: string): string {
|
|
if (mime.has(mimeType)) {
|
|
return mime.get(mimeType)!
|
|
}
|
|
|
|
return mimeType
|
|
}
|
|
|
|
export function size(bytes: number, precision = 1): string {
|
|
if (Number.isNaN(bytes) || !Number.isFinite(bytes)) return ""
|
|
|
|
const number = Math.floor(Math.log(bytes) / Math.log(1024))
|
|
const size = (bytes / Math.pow(1024, Math.floor(number))).toFixed(precision)
|
|
|
|
return `${size} ${units[number]}`
|
|
}
|