Spaces:
Runtime error
Runtime error
| import "server-only"; | |
| import { IS_DEV } from "lib/const"; | |
| import type { FileStorage } from "./file-storage.interface"; | |
| import { createS3FileStorage } from "./s3-file-storage"; | |
| import { createVercelBlobStorage } from "./vercel-blob-storage"; | |
| import logger from "logger"; | |
| export type FileStorageDriver = "vercel-blob" | "s3"; | |
| const resolveDriver = (): FileStorageDriver => { | |
| const candidate = process.env.FILE_STORAGE_TYPE; | |
| const normalized = candidate?.trim().toLowerCase(); | |
| if (normalized === "vercel-blob" || normalized === "s3") { | |
| return normalized; | |
| } | |
| // Default to Vercel Blob | |
| return "vercel-blob"; | |
| }; | |
| declare global { | |
| // eslint-disable-next-line no-var | |
| var __server__file_storage__: FileStorage | undefined; | |
| } | |
| const storageDriver = resolveDriver(); | |
| const createFileStorage = (): FileStorage => { | |
| logger.info(`Creating file storage: ${storageDriver}`); | |
| switch (storageDriver) { | |
| case "vercel-blob": | |
| return createVercelBlobStorage(); | |
| case "s3": | |
| return createS3FileStorage(); | |
| default: { | |
| const exhaustiveCheck: never = storageDriver; | |
| throw new Error(`Unsupported file storage driver: ${exhaustiveCheck}`); | |
| } | |
| } | |
| }; | |
| const serverFileStorage = | |
| globalThis.__server__file_storage__ || createFileStorage(); | |
| if (IS_DEV) { | |
| globalThis.__server__file_storage__ = serverFileStorage; | |
| } | |
| export { serverFileStorage, storageDriver }; | |