@ -1,12 +1,10 @@
import { extname } from 'node:path' ;
import { AssetType } from 'src/entities/asset.entity' ;
const image : Record < string , string [ ] > = {
const raw : Record < string , string [ ] > = {
'.3fr' : [ 'image/3fr' , 'image/x-hasselblad-3fr' ] ,
'.ari' : [ 'image/ari' , 'image/x-arriflex-ari' ] ,
'.arw' : [ 'image/arw' , 'image/x-sony-arw' ] ,
'.avif' : [ 'image/avif' ] ,
'.bmp' : [ 'image/bmp' ] ,
'.cap' : [ 'image/cap' , 'image/x-phaseone-cap' ] ,
'.cin' : [ 'image/cin' , 'image/x-phantom-cin' ] ,
'.cr2' : [ 'image/cr2' , 'image/x-canon-cr2' ] ,
@ -16,16 +14,7 @@ const image: Record<string, string[]> = {
'.dng' : [ 'image/dng' , 'image/x-adobe-dng' ] ,
'.erf' : [ 'image/erf' , 'image/x-epson-erf' ] ,
'.fff' : [ 'image/fff' , 'image/x-hasselblad-fff' ] ,
'.gif' : [ 'image/gif' ] ,
'.heic' : [ 'image/heic' ] ,
'.heif' : [ 'image/heif' ] ,
'.hif' : [ 'image/hif' ] ,
'.iiq' : [ 'image/iiq' , 'image/x-phaseone-iiq' ] ,
'.insp' : [ 'image/jpeg' ] ,
'.jpe' : [ 'image/jpeg' ] ,
'.jpeg' : [ 'image/jpeg' ] ,
'.jpg' : [ 'image/jpeg' ] ,
'.jxl' : [ 'image/jxl' ] ,
'.k25' : [ 'image/k25' , 'image/x-kodak-k25' ] ,
'.kdc' : [ 'image/kdc' , 'image/x-kodak-kdc' ] ,
'.mrw' : [ 'image/mrw' , 'image/x-minolta-mrw' ] ,
@ -33,7 +22,6 @@ const image: Record<string, string[]> = {
'.orf' : [ 'image/orf' , 'image/x-olympus-orf' ] ,
'.ori' : [ 'image/ori' , 'image/x-olympus-ori' ] ,
'.pef' : [ 'image/pef' , 'image/x-pentax-pef' ] ,
'.png' : [ 'image/png' ] ,
'.psd' : [ 'image/psd' , 'image/vnd.adobe.photoshop' ] ,
'.raf' : [ 'image/raf' , 'image/x-fuji-raf' ] ,
'.raw' : [ 'image/raw' , 'image/x-panasonic-raw' ] ,
@ -42,11 +30,27 @@ const image: Record<string, string[]> = {
'.sr2' : [ 'image/sr2' , 'image/x-sony-sr2' ] ,
'.srf' : [ 'image/srf' , 'image/x-sony-srf' ] ,
'.srw' : [ 'image/srw' , 'image/x-samsung-srw' ] ,
'.x3f' : [ 'image/x3f' , 'image/x-sigma-x3f' ] ,
} ;
const image : Record < string , string [ ] > = {
. . . raw ,
'.avif' : [ 'image/avif' ] ,
'.bmp' : [ 'image/bmp' ] ,
'.gif' : [ 'image/gif' ] ,
'.heic' : [ 'image/heic' ] ,
'.heif' : [ 'image/heif' ] ,
'.hif' : [ 'image/hif' ] ,
'.insp' : [ 'image/jpeg' ] ,
'.jpe' : [ 'image/jpeg' ] ,
'.jpeg' : [ 'image/jpeg' ] ,
'.jpg' : [ 'image/jpeg' ] ,
'.jxl' : [ 'image/jxl' ] ,
'.png' : [ 'image/png' ] ,
'.svg' : [ 'image/svg' ] ,
'.tif' : [ 'image/tiff' ] ,
'.tiff' : [ 'image/tiff' ] ,
'.webp' : [ 'image/webp' ] ,
'.x3f' : [ 'image/x3f' , 'image/x-sigma-x3f' ] ,
} ;
const profileExtensions = new Set ( [ '.avif' , '.dng' , '.heic' , '.heif' , '.jpeg' , '.jpg' , '.png' , '.webp' , '.svg' ] ) ;
@ -77,22 +81,25 @@ const sidecar: Record<string, string[]> = {
'.xmp' : [ 'application/xml' , 'text/xml' ] ,
} ;
const types = { . . . image , . . . video , . . . sidecar } ;
const isType = ( filename : string , r : Record < string , string [ ] > ) = > extname ( filename ) . toLowerCase ( ) in r ;
const lookup = ( filename : string ) = >
( { . . . image , . . . video , . . . sidecar } ) [ extname ( filename ) . toLowerCase ( ) ] ? . [ 0 ] ? ? 'application/octet-stream' ;
const lookup = ( filename : string ) = > types [ extname ( filename ) . toLowerCase ( ) ] ? . [ 0 ] ? ? 'application/octet-stream' ;
export const mimeTypes = {
image ,
profile ,
sidecar ,
video ,
raw ,
isAsset : ( filename : string ) = > isType ( filename , image ) || isType ( filename , video ) ,
isImage : ( filename : string ) = > isType ( filename , image ) ,
isProfile : ( filename : string ) = > isType ( filename , profile ) ,
isSidecar : ( filename : string ) = > isType ( filename , sidecar ) ,
isVideo : ( filename : string ) = > isType ( filename , video ) ,
isRaw : ( filename : string ) = > isType ( filename , raw ) ,
lookup ,
assetType : ( filename : string ) = > {
const contentType = lookup ( filename ) ;