feat(media): add type-specific upload preset validation
This commit is contained in:
@@ -9,6 +9,56 @@ export const mediaAssetTypeSchema = z.enum([
|
||||
"generic",
|
||||
])
|
||||
|
||||
export type MediaUploadRule = {
|
||||
maxBytes: number
|
||||
allowedMimePrefix?: string
|
||||
allowedMimeExact?: string[]
|
||||
}
|
||||
|
||||
export const mediaUploadRulesByType: Record<MediaAssetType, MediaUploadRule> = {
|
||||
artwork: {
|
||||
maxBytes: 40 * 1024 * 1024,
|
||||
allowedMimePrefix: "image/",
|
||||
},
|
||||
banner: {
|
||||
maxBytes: 20 * 1024 * 1024,
|
||||
allowedMimePrefix: "image/",
|
||||
},
|
||||
promotion: {
|
||||
maxBytes: 20 * 1024 * 1024,
|
||||
allowedMimePrefix: "image/",
|
||||
},
|
||||
video: {
|
||||
maxBytes: 250 * 1024 * 1024,
|
||||
allowedMimePrefix: "video/",
|
||||
},
|
||||
gif: {
|
||||
maxBytes: 40 * 1024 * 1024,
|
||||
allowedMimeExact: ["image/gif"],
|
||||
},
|
||||
generic: {
|
||||
maxBytes: 50 * 1024 * 1024,
|
||||
},
|
||||
}
|
||||
|
||||
export function isMimeAllowedForMediaType(type: MediaAssetType, mimeType: string): boolean {
|
||||
const rule = mediaUploadRulesByType[type]
|
||||
|
||||
if (rule.allowedMimeExact?.includes(mimeType)) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (rule.allowedMimePrefix) {
|
||||
return mimeType.startsWith(rule.allowedMimePrefix)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
export function getMediaUploadMaxBytes(type: MediaAssetType): number {
|
||||
return mediaUploadRulesByType[type].maxBytes
|
||||
}
|
||||
|
||||
export const artworkRenditionSlotSchema = z.enum(["thumbnail", "card", "full", "retina", "custom"])
|
||||
|
||||
export const createMediaAssetInputSchema = z.object({
|
||||
|
||||
Reference in New Issue
Block a user