import type { TObject, TString } from "@sinclair/typebox"; import { type Constructor, Registry } from "core"; //export { MIME_TYPES } from "./storage/mime-types"; export { guess as guessMimeType } from "./storage/mime-types-tiny"; export { Storage, type StorageAdapter, type FileMeta, type FileListObject, type StorageConfig } from "./storage/Storage"; import type { StorageAdapter } from "./storage/Storage"; import { type CloudinaryConfig, StorageCloudinaryAdapter } from "./storage/adapters/StorageCloudinaryAdapter"; import { type S3AdapterConfig, StorageS3Adapter } from "./storage/adapters/StorageS3Adapter"; export { StorageS3Adapter, type S3AdapterConfig, StorageCloudinaryAdapter, type CloudinaryConfig }; export * as StorageEvents from "./storage/events"; export type { FileUploadedEventData } from "./storage/events"; export * from "./utils"; type ClassThatImplements = Constructor & { prototype: T }; export const MediaAdapterRegistry = new Registry<{ cls: ClassThatImplements; schema: TObject; }>((cls: ClassThatImplements) => ({ cls, schema: cls.prototype.getSchema() as TObject })) .register("s3", StorageS3Adapter) .register("cloudinary", StorageCloudinaryAdapter); export const Adapters = { s3: { cls: StorageS3Adapter, schema: StorageS3Adapter.prototype.getSchema() }, cloudinary: { cls: StorageCloudinaryAdapter, schema: StorageCloudinaryAdapter.prototype.getSchema() } } as const;