@flusys/nestjs-storage 0.1.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/config-index.js +1 -0
- package/cjs/controllers-index.js +31 -0
- package/cjs/docs-index.js +257 -0
- package/cjs/dtos-index.js +1 -0
- package/cjs/entities-index.js +1 -0
- package/cjs/enums-index.js +1 -0
- package/cjs/index.js +287 -0
- package/cjs/interfaces-index.js +1 -0
- package/cjs/modules-index.js +31 -0
- package/cjs/providers-index.js +1 -0
- package/cjs/services-index.js +1 -0
- package/cjs/utils-index.js +1 -0
- package/config/index.d.ts +2 -0
- package/config/storage-config.service.d.ts +20 -0
- package/config/storage.constants.d.ts +11 -0
- package/controllers/file-manager.controller.d.ts +21 -0
- package/controllers/folder.controller.d.ts +17 -0
- package/controllers/index.d.ts +4 -0
- package/controllers/storage-config.controller.d.ts +17 -0
- package/controllers/upload.controller.d.ts +15 -0
- package/docs/index.d.ts +1 -0
- package/docs/storage-swagger.config.d.ts +3 -0
- package/dtos/file-manager.dto.d.ts +29 -0
- package/dtos/folder.dto.d.ts +13 -0
- package/dtos/index.d.ts +4 -0
- package/dtos/storage-config.dto.d.ts +21 -0
- package/dtos/upload.dto.d.ts +29 -0
- package/entities/file-manager-base.entity.d.ts +13 -0
- package/entities/file-manager-with-company.entity.d.ts +6 -0
- package/entities/file-manager.entity.d.ts +5 -0
- package/entities/folder-base.entity.d.ts +5 -0
- package/entities/folder-with-company.entity.d.ts +5 -0
- package/entities/folder.entity.d.ts +4 -0
- package/entities/index.d.ts +19 -0
- package/entities/storage-config-base.entity.d.ts +7 -0
- package/entities/storage-config-with-company.entity.d.ts +4 -0
- package/entities/storage-config.entity.d.ts +3 -0
- package/enums/file-location.enum.d.ts +6 -0
- package/enums/index.d.ts +1 -0
- package/fesm/config-index.js +1 -0
- package/fesm/controllers-index.js +31 -0
- package/fesm/docs-index.js +257 -0
- package/fesm/dtos-index.js +1 -0
- package/fesm/entities-index.js +1 -0
- package/fesm/enums-index.js +1 -0
- package/fesm/index.js +287 -0
- package/fesm/interfaces-index.js +0 -0
- package/fesm/modules-index.js +31 -0
- package/fesm/providers-index.js +1 -0
- package/fesm/services-index.js +1 -0
- package/fesm/utils-index.js +1 -0
- package/index.d.ts +11 -0
- package/interfaces/file-manager.interface.d.ts +13 -0
- package/interfaces/file-upload-response.interface.d.ts +6 -0
- package/interfaces/folder.interface.d.ts +6 -0
- package/interfaces/index.d.ts +6 -0
- package/interfaces/storage-config.interface.d.ts +28 -0
- package/interfaces/storage-module-options.interface.d.ts +26 -0
- package/interfaces/storage-provider.interface.d.ts +20 -0
- package/modules/index.d.ts +1 -0
- package/modules/storage.module.d.ts +9 -0
- package/package.json +109 -0
- package/providers/azure-provider.optional.d.ts +21 -0
- package/providers/index.d.ts +3 -0
- package/providers/local-provider.d.ts +24 -0
- package/providers/s3-provider.optional.d.ts +21 -0
- package/providers/sftp-provider.optional.d.ts +25 -0
- package/providers/storage-factory.service.d.ts +13 -0
- package/providers/storage-provider.registry.d.ts +10 -0
- package/services/file-manager.service.d.ts +39 -0
- package/services/folder.service.d.ts +28 -0
- package/services/index.d.ts +5 -0
- package/services/storage-datasource.provider.d.ts +25 -0
- package/services/storage-provider-config.service.d.ts +31 -0
- package/services/upload.service.d.ts +23 -0
- package/utils/image-compressor.util.d.ts +14 -0
- package/utils/index.d.ts +1 -0
package/fesm/index.js
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf;var __hasOwnProp=Object.prototype.hasOwnProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:true,configurable:true,writable:true,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:true});var __require=(x=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(x,{get:(a,b)=>(typeof require!=="undefined"?require:a)[b]}):x)(function(x){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+x+'" is not supported')});var __esm=(fn,res)=>function __init(){return fn&&(res=(0,fn[__getOwnPropNames(fn)[0]])(fn=0)),res};var __commonJS=(cb,mod)=>function __require2(){return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:true}):target,mod));var __decorateClass=(decorators,target,key,kind)=>{var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target;for(var i=decorators.length-1,decorator;i>=0;i--)if(decorator=decorators[i])result=(kind?decorator(target,key,result):decorator(result))||result;if(kind&&result)__defProp(target,key,result);return result};var __decorateParam=(index,decorator)=>(target,key)=>decorator(target,key,index);var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!=="symbol"?key+"":key,value);var file_location_enum_exports={};__export(file_location_enum_exports,{FileLocationEnum:()=>FileLocationEnum});var FileLocationEnum;var init_file_location_enum=__esm({"projects/nestjs-storage/src/enums/file-location.enum.ts"(){"use strict";FileLocationEnum=(FileLocationEnum6=>{FileLocationEnum6["AWS"]="aws";FileLocationEnum6["AZURE"]="azure";FileLocationEnum6["SFTP"]="sftp";FileLocationEnum6["LOCAL"]="local";return FileLocationEnum6})(FileLocationEnum||{})}});import*as sharp from"sharp";var ImageCompressor;var init_image_compressor_util=__esm({"projects/nestjs-storage/src/utils/image-compressor.util.ts"(){"use strict";ImageCompressor=class{static{__name(this,"ImageCompressor")}static async compress(buffer,mimetype,options={}){const{maxWidth=1280,maxHeight=1280,quality=85,format="original"}=options;if(mimetype==="image/svg+xml"){return{buffer,format:mimetype}}const image=sharp(buffer,{failOnError:false,density:300});image.resize({width:maxWidth,height:maxHeight,fit:"inside",withoutEnlargement:true});let targetFormat=format!=="original"?format:mimetype.split("/")[1];switch(targetFormat.toLowerCase()){case"jpeg":case"jpg":image.jpeg({quality,mozjpeg:true,chromaSubsampling:"4:4:4"});break;case"png":image.png({compressionLevel:9,adaptiveFiltering:true,palette:true,quality,colors:256,dither:1});break;case"webp":image.webp({quality,smartSubsample:true,effort:6,lossless:quality===100});break;case"avif":image.avif({quality,effort:6,chromaSubsampling:"4:4:4"});break;case"tiff":image.tiff({quality,compression:"lzw",predictor:"horizontal",pyramid:true});break;case"gif":image.gif({colours:256,effort:10,dither:1});break;case"jp2":image.jp2({quality,lossless:quality===100});break;default:targetFormat="webp";image.webp({quality,smartSubsample:true,effort:6});break}try{const{data,info}=await image.toBuffer({resolveWithObject:true});return{buffer:data,format:`image/${targetFormat}`}}catch(error){console.warn(`Image processing failed: ${error instanceof Error?error.message:String(error)}`);return{buffer,format:mimetype}}}}}});var local_provider_exports={};__export(local_provider_exports,{LocalProvider:()=>LocalProvider});import{Logger}from"@nestjs/common";import*as fs from"fs/promises";import*as path from"path";import{v4 as uuidv4}from"uuid";var LocalProvider;var init_local_provider=__esm({"projects/nestjs-storage/src/providers/local-provider.ts"(){"use strict";init_image_compressor_util();LocalProvider=class _LocalProvider{static{__name(this,"LocalProvider")}logger=new Logger(_LocalProvider.name);basePath="";baseUrl="";async initialize(config){this.basePath=path.resolve(config.basePath);this.baseUrl=config.baseUrl||"";await fs.mkdir(this.basePath,{recursive:true});this.logger.log(`Local Provider initialized: ${this.basePath}`)}async uploadFile(file,options){let processedBuffer=file.buffer;let contentType=file.mimetype;const fileName=`${uuidv4()}-${file.originalname}`;if(options.compress&&file.mimetype.startsWith("image/")){const result=await ImageCompressor.compress(file.buffer,file.mimetype,{maxWidth:options.maxWidth,maxHeight:options.maxHeight,quality:options.quality,format:options.format});processedBuffer=result.buffer;contentType=result.format}const folderPath=options.folderPath?path.join(this.basePath,options.folderPath):this.basePath;const filePath=path.join(folderPath,fileName);await fs.mkdir(folderPath,{recursive:true});await fs.writeFile(filePath,processedBuffer);const relativeKey=path.relative(this.basePath,filePath);this.logger.log(`Uploaded file to local storage: ${relativeKey}`);return{name:fileName,key:relativeKey,size:processedBuffer.length,contentType}}async uploadMultipleFiles(files,options){return Promise.all(files.map(file=>this.uploadFile(file,options)))}async deleteFile(key){try{const filePath=path.join(this.basePath,key);await fs.unlink(filePath);this.logger.log(`Deleted file from local storage: ${key}`)}catch(_error){this.logger.warn(`Failed to delete file from local storage: ${key}`)}}async deleteMultipleFiles(keys){await Promise.all(keys.map(key=>this.deleteFile(key)));this.logger.log(`Deleted ${keys.length} files from local storage`)}async generatePresignedUrl(key,_expiresInSeconds){return this.baseUrl?`${this.baseUrl}/${key}`:`/${key}`}async healthCheck(){try{await fs.access(this.basePath);return true}catch{return false}}getAbsolutePath(key){return path.join(this.basePath,key)}async fileExists(key){try{const filePath=path.join(this.basePath,key);await fs.access(filePath);return true}catch{return false}}async getFileStats(key){const filePath=path.join(this.basePath,key);const stats=await fs.stat(filePath);return{size:stats.size,createdAt:stats.birthtime,modifiedAt:stats.mtime}}}}});var s3_provider_optional_exports={};__export(s3_provider_optional_exports,{S3Provider:()=>S3Provider});import{Logger as Logger2}from"@nestjs/common";import{v4 as uuidv42}from"uuid";var S3Provider;var init_s3_provider_optional=__esm({"projects/nestjs-storage/src/providers/s3-provider.optional.ts"(){"use strict";init_image_compressor_util();S3Provider=class _S3Provider{static{__name(this,"S3Provider")}logger=new Logger2(_S3Provider.name);s3;bucketName="";region="";async initialize(config){try{const{S3Client}=await import("@aws-sdk/client-s3");this.region=config.region;this.bucketName=config.bucket;this.s3=new S3Client({region:config.region,credentials:config.accessKeyId&&config.secretAccessKey?{accessKeyId:config.accessKeyId,secretAccessKey:config.secretAccessKey}:void 0,endpoint:config.endpoint});this.logger.log(`S3 Provider initialized: region=${config.region}, bucket=${config.bucket}`)}catch(_error){this.logger.error("Failed to initialize S3Provider. Make sure @aws-sdk packages are installed.");throw new Error("AWS SDK not found. Install it with: npm install @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner")}}async uploadFile(file,options){const{Upload}=await import("@aws-sdk/lib-storage");let processedBuffer=file.buffer;let contentType=file.mimetype;const fileName=`${uuidv42()}-${file.originalname}`;if(options.compress&&file.mimetype.startsWith("image/")){const result=await ImageCompressor.compress(file.buffer,file.mimetype,{maxWidth:options.maxWidth,maxHeight:options.maxHeight,quality:options.quality,format:options.format});processedBuffer=result.buffer;contentType=result.format}const key=options.folderPath?`${options.folderPath}/${fileName}`:fileName;const upload=new Upload({client:this.s3,params:{Bucket:this.bucketName,Key:key,Body:processedBuffer,ContentType:contentType}});await upload.done();return{name:fileName,key,size:processedBuffer.length,contentType}}async uploadMultipleFiles(files,options){return Promise.all(files.map(file=>this.uploadFile(file,options)))}async deleteFile(key){const{DeleteObjectCommand}=await import("@aws-sdk/client-s3");const command=new DeleteObjectCommand({Bucket:this.bucketName,Key:key});await this.s3.send(command);this.logger.log(`Deleted file from S3: ${key}`)}async deleteMultipleFiles(keys){const{DeleteObjectsCommand}=await import("@aws-sdk/client-s3");const command=new DeleteObjectsCommand({Bucket:this.bucketName,Delete:{Objects:keys.map(key=>({Key:key}))}});await this.s3.send(command);this.logger.log(`Deleted ${keys.length} files from S3`)}async generatePresignedUrl(key,expiresInSeconds=3600){const{GetObjectCommand}=await import("@aws-sdk/client-s3");const{getSignedUrl}=await import("@aws-sdk/s3-request-presigner");const command=new GetObjectCommand({Bucket:this.bucketName,Key:key});return getSignedUrl(this.s3,command,{expiresIn:expiresInSeconds})}async healthCheck(){try{const{HeadBucketCommand}=await import("@aws-sdk/client-s3");const command=new HeadBucketCommand({Bucket:this.bucketName});await this.s3.send(command);return true}catch{return false}}}}});var azure_provider_optional_exports={};__export(azure_provider_optional_exports,{AzureProvider:()=>AzureProvider});import{Logger as Logger3}from"@nestjs/common";import{v4 as uuidv43}from"uuid";var AzureProvider;var init_azure_provider_optional=__esm({"projects/nestjs-storage/src/providers/azure-provider.optional.ts"(){"use strict";init_image_compressor_util();AzureProvider=class _AzureProvider{static{__name(this,"AzureProvider")}logger=new Logger3(_AzureProvider.name);blobServiceClient;containerClient;containerName="";accountName="";async initialize(config){try{const{BlobServiceClient}=await import("@azure/storage-blob");this.accountName=config.accountName;this.containerName=config.containerName;if(config.connectionString){this.blobServiceClient=BlobServiceClient.fromConnectionString(config.connectionString)}else{const{StorageSharedKeyCredential}=await import("@azure/storage-blob");const sharedKeyCredential=new StorageSharedKeyCredential(config.accountName,config.accountKey);this.blobServiceClient=new BlobServiceClient(`https://${config.accountName}.blob.core.windows.net`,sharedKeyCredential)}this.containerClient=this.blobServiceClient.getContainerClient(config.containerName);await this.containerClient.createIfNotExists();this.logger.log(`Azure Provider initialized: account=${config.accountName}, container=${config.containerName}`)}catch(error){this.logger.error("Failed to initialize AzureProvider. Make sure @azure/storage-blob is installed.");throw new Error("Azure Storage SDK not found. Install it with: npm install @azure/storage-blob")}}async uploadFile(file,options){let processedBuffer=file.buffer;let contentType=file.mimetype;const fileName=`${uuidv43()}-${file.originalname}`;if(options.compress&&file.mimetype.startsWith("image/")){const result=await ImageCompressor.compress(file.buffer,file.mimetype,{maxWidth:options.maxWidth,maxHeight:options.maxHeight,quality:options.quality,format:options.format});processedBuffer=result.buffer;contentType=result.format}const blobName=options.folderPath?`${options.folderPath}/${fileName}`:fileName;const blockBlobClient=this.containerClient.getBlockBlobClient(blobName);await blockBlobClient.upload(processedBuffer,processedBuffer.length,{blobHTTPHeaders:{blobContentType:contentType}});const url=blockBlobClient.url;return{name:fileName,key:blobName,size:processedBuffer.length,contentType}}async uploadMultipleFiles(files,options){return Promise.all(files.map(file=>this.uploadFile(file,options)))}async deleteFile(key){const blockBlobClient=this.containerClient.getBlockBlobClient(key);await blockBlobClient.deleteIfExists();this.logger.log(`Deleted file from Azure: ${key}`)}async deleteMultipleFiles(keys){await Promise.all(keys.map(key=>this.deleteFile(key)));this.logger.log(`Deleted ${keys.length} files from Azure`)}async generatePresignedUrl(key,expiresInSeconds=3600){const{BlobSASPermissions,generateBlobSASQueryParameters}=await import("@azure/storage-blob");const blockBlobClient=this.containerClient.getBlockBlobClient(key);const startsOn=new Date;const expiresOn=new Date(startsOn.getTime()+expiresInSeconds*1e3);const sasToken=generateBlobSASQueryParameters({containerName:this.containerName,blobName:key,permissions:BlobSASPermissions.parse("r"),startsOn,expiresOn},blockBlobClient.credential).toString();return`${blockBlobClient.url}?${sasToken}`}async healthCheck(){try{await this.containerClient.exists();return true}catch{return false}}}}});var sftp_provider_optional_exports={};__export(sftp_provider_optional_exports,{SftpProvider:()=>SftpProvider});import{Logger as Logger4}from"@nestjs/common";import*as path2 from"path";import{v4 as uuidv44}from"uuid";var SftpProvider;var init_sftp_provider_optional=__esm({"projects/nestjs-storage/src/providers/sftp-provider.optional.ts"(){"use strict";init_image_compressor_util();SftpProvider=class _SftpProvider{static{__name(this,"SftpProvider")}logger=new Logger4(_SftpProvider.name);sftp;config;connected=false;async initialize(config){try{const sftp=await import("ssh2-sftp-client");const SftpClient=sftp.default||sftp;this.sftp=new SftpClient;this.config={host:config.host,port:config.port||22,username:config.username,password:config.password,privateKey:config.privateKey,basePath:config.basePath||"/uploads"};await this.connect();await this.ensureDirectory(this.config.basePath);this.logger.log(`SFTP Provider initialized: ${config.username}@${config.host}:${config.port||22}`)}catch(_error){this.logger.error("Failed to initialize SftpProvider. Make sure ssh2-sftp-client is installed.");throw new Error("SFTP client not found. Install it with: npm install ssh2-sftp-client")}}async connect(){if(!this.connected){await this.sftp.connect({host:this.config.host,port:this.config.port,username:this.config.username,password:this.config.password,privateKey:this.config.privateKey});this.connected=true}}async ensureDirectory(dirPath){try{await this.sftp.mkdir(dirPath,true)}catch(_error){}}async uploadFile(file,options){await this.connect();let processedBuffer=file.buffer;let contentType=file.mimetype;const fileName=`${uuidv44()}-${file.originalname}`;if(options.compress&&file.mimetype.startsWith("image/")){const result=await ImageCompressor.compress(file.buffer,file.mimetype,{maxWidth:options.maxWidth,maxHeight:options.maxHeight,quality:options.quality,format:options.format});processedBuffer=result.buffer;contentType=result.format}const remotePath=options.folderPath?path2.join(this.config.basePath,options.folderPath,fileName):path2.join(this.config.basePath,fileName);const remoteDir=path2.dirname(remotePath);await this.ensureDirectory(remoteDir);await this.sftp.put(processedBuffer,remotePath);return{name:fileName,key:remotePath,size:processedBuffer.length,contentType}}async uploadMultipleFiles(files,options){return Promise.all(files.map(file=>this.uploadFile(file,options)))}async deleteFile(key){await this.connect();try{await this.sftp.delete(key);this.logger.log(`Deleted file from SFTP: ${key}`)}catch(_error){this.logger.warn(`Failed to delete file from SFTP: ${key}`)}}async deleteMultipleFiles(keys){await Promise.all(keys.map(key=>this.deleteFile(key)));this.logger.log(`Deleted ${keys.length} files from SFTP`)}async generatePresignedUrl(key,_expiresInSeconds){return key}async healthCheck(){try{await this.connect();return this.connected}catch{return false}}async close(){if(this.connected){await this.sftp.end();this.connected=false}}}}});import{Identity}from"@flusys/nestjs-shared/entities";import{Column}from"typeorm";var FileManagerBase;var init_file_manager_base_entity=__esm({"projects/nestjs-storage/src/entities/file-manager-base.entity.ts"(){"use strict";FileManagerBase=class extends Identity{static{__name(this,"FileManagerBase")}name;contentType;size;key;url;location;storageConfigId;expiresAt=null;isPrivate};__decorateClass([Column({type:"varchar",length:255,nullable:false})],FileManagerBase.prototype,"name",2);__decorateClass([Column({type:"varchar",length:255,nullable:false})],FileManagerBase.prototype,"contentType",2);__decorateClass([Column({type:"varchar",length:255,nullable:false})],FileManagerBase.prototype,"size",2);__decorateClass([Column({type:"text",nullable:false})],FileManagerBase.prototype,"key",2);__decorateClass([Column({type:"text",nullable:true})],FileManagerBase.prototype,"url",2);__decorateClass([Column({type:"text",nullable:false})],FileManagerBase.prototype,"location",2);__decorateClass([Column({type:"uuid",nullable:true})],FileManagerBase.prototype,"storageConfigId",2);__decorateClass([Column({type:"bigint",nullable:true})],FileManagerBase.prototype,"expiresAt",2);__decorateClass([Column({type:"boolean",nullable:false,default:false})],FileManagerBase.prototype,"isPrivate",2)}});import{Identity as Identity2}from"@flusys/nestjs-shared/entities";import{Column as Column2}from"typeorm";var FolderBase;var init_folder_base_entity=__esm({"projects/nestjs-storage/src/entities/folder-base.entity.ts"(){"use strict";FolderBase=class extends Identity2{static{__name(this,"FolderBase")}name;slug};__decorateClass([Column2({type:"varchar",length:255,nullable:false})],FolderBase.prototype,"name",2);__decorateClass([Column2({type:"varchar",length:255,nullable:false})],FolderBase.prototype,"slug",2)}});import{Identity as Identity3}from"@flusys/nestjs-shared/entities";import{FileLocationEnum as FileLocationEnum2}from"@flusys/nestjs-storage/enums";import{Column as Column3}from"typeorm";var StorageConfigBase;var init_storage_config_base_entity=__esm({"projects/nestjs-storage/src/entities/storage-config-base.entity.ts"(){"use strict";StorageConfigBase=class extends Identity3{static{__name(this,"StorageConfigBase")}name;storage;config};__decorateClass([Column3({type:"varchar",length:255,nullable:false})],StorageConfigBase.prototype,"name",2);__decorateClass([Column3({type:"enum",enum:FileLocationEnum2,nullable:false})],StorageConfigBase.prototype,"storage",2);__decorateClass([Column3({type:"json",nullable:false})],StorageConfigBase.prototype,"config",2)}});import{Entity,JoinColumn,ManyToOne}from"typeorm";var FileManager;var init_file_manager_entity=__esm({"projects/nestjs-storage/src/entities/file-manager.entity.ts"(){"use strict";init_file_manager_base_entity();FileManager=class extends FileManagerBase{folder};__name(FileManager,"FileManager");__decorateClass([ManyToOne("Folder",folder=>folder.fileManager,{nullable:true,onDelete:"SET NULL"}),JoinColumn({name:"folder_id"})],FileManager.prototype,"folder",2);FileManager=__decorateClass([Entity({name:"file_manager"})],FileManager)}});import{Entity as Entity2,OneToMany}from"typeorm";var Folder;var init_folder_entity=__esm({"projects/nestjs-storage/src/entities/folder.entity.ts"(){"use strict";init_folder_base_entity();Folder=class extends FolderBase{fileManager};__name(Folder,"Folder");__decorateClass([OneToMany("FileManager",fileManager=>fileManager.folder)],Folder.prototype,"fileManager",2);Folder=__decorateClass([Entity2({name:"folder"})],Folder)}});import{Entity as Entity3}from"typeorm";var StorageConfig;var init_storage_config_entity=__esm({"projects/nestjs-storage/src/entities/storage-config.entity.ts"(){"use strict";init_storage_config_base_entity();StorageConfig=class extends StorageConfigBase{};__name(StorageConfig,"StorageConfig");StorageConfig=__decorateClass([Entity3({name:"storage_config"})],StorageConfig)}});import{Column as Column4,Entity as Entity4,JoinColumn as JoinColumn2,ManyToOne as ManyToOne2}from"typeorm";var FileManagerWithCompany;var init_file_manager_with_company_entity=__esm({"projects/nestjs-storage/src/entities/file-manager-with-company.entity.ts"(){"use strict";init_file_manager_base_entity();FileManagerWithCompany=class extends FileManagerBase{companyId;folder};__name(FileManagerWithCompany,"FileManagerWithCompany");__decorateClass([Column4({type:"uuid",nullable:true})],FileManagerWithCompany.prototype,"companyId",2);__decorateClass([ManyToOne2("FolderWithCompany",folder=>folder.fileManager,{nullable:true,onDelete:"SET NULL"}),JoinColumn2({name:"folder_id"})],FileManagerWithCompany.prototype,"folder",2);FileManagerWithCompany=__decorateClass([Entity4({name:"file_manager"})],FileManagerWithCompany)}});import{Column as Column5,Entity as Entity5,OneToMany as OneToMany2}from"typeorm";var FolderWithCompany;var init_folder_with_company_entity=__esm({"projects/nestjs-storage/src/entities/folder-with-company.entity.ts"(){"use strict";init_folder_base_entity();FolderWithCompany=class extends FolderBase{companyId;fileManager};__name(FolderWithCompany,"FolderWithCompany");__decorateClass([Column5({type:"uuid",nullable:true})],FolderWithCompany.prototype,"companyId",2);__decorateClass([OneToMany2("FileManagerWithCompany",fileManager=>fileManager.folder)],FolderWithCompany.prototype,"fileManager",2);FolderWithCompany=__decorateClass([Entity5({name:"folder"})],FolderWithCompany)}});import{Column as Column6,Entity as Entity6}from"typeorm";var StorageConfigWithCompany;var init_storage_config_with_company_entity=__esm({"projects/nestjs-storage/src/entities/storage-config-with-company.entity.ts"(){"use strict";init_storage_config_base_entity();StorageConfigWithCompany=class extends StorageConfigBase{companyId};__name(StorageConfigWithCompany,"StorageConfigWithCompany");__decorateClass([Column6({type:"uuid",nullable:true})],StorageConfigWithCompany.prototype,"companyId",2);StorageConfigWithCompany=__decorateClass([Entity6({name:"storage_config"})],StorageConfigWithCompany)}});var entities_exports={};__export(entities_exports,{FileManager:()=>FileManager,FileManagerBase:()=>FileManagerBase,FileManagerWithCompany:()=>FileManagerWithCompany,Folder:()=>Folder,FolderBase:()=>FolderBase,FolderWithCompany:()=>FolderWithCompany,StorageAllEntities:()=>StorageAllEntities,StorageCompanyEntities:()=>StorageCompanyEntities,StorageConfig:()=>StorageConfig,StorageConfigBase:()=>StorageConfigBase,StorageConfigWithCompany:()=>StorageConfigWithCompany,StorageCoreEntities:()=>StorageCoreEntities,getStorageEntitiesByConfig:()=>getStorageEntitiesByConfig});function getStorageEntitiesByConfig(enableCompanyFeature){return enableCompanyFeature?StorageCompanyEntities:StorageCoreEntities}var StorageCoreEntities,StorageCompanyEntities,StorageAllEntities;var init_entities=__esm({"projects/nestjs-storage/src/entities/index.ts"(){"use strict";init_file_manager_base_entity();init_folder_base_entity();init_storage_config_base_entity();init_file_manager_entity();init_folder_entity();init_storage_config_entity();init_file_manager_with_company_entity();init_folder_with_company_entity();init_storage_config_with_company_entity();init_file_manager_entity();init_folder_entity();init_storage_config_entity();init_file_manager_with_company_entity();init_folder_with_company_entity();init_storage_config_with_company_entity();StorageCoreEntities=[FileManager,Folder,StorageConfig];StorageCompanyEntities=[FileManagerWithCompany,FolderWithCompany,StorageConfigWithCompany];StorageAllEntities=[...StorageCoreEntities,...StorageCompanyEntities];__name(getStorageEntitiesByConfig,"getStorageEntitiesByConfig")}});var require_db=__commonJS({"node_modules/mime-db/db.json"(exports,module){module.exports={"application/1d-interleaved-parityfec":{source:"iana"},"application/3gpdash-qoe-report+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/3gpp-ims+xml":{source:"iana",compressible:true},"application/3gpphal+json":{source:"iana",compressible:true},"application/3gpphalforms+json":{source:"iana",compressible:true},"application/a2l":{source:"iana"},"application/ace+cbor":{source:"iana"},"application/ace+json":{source:"iana",compressible:true},"application/ace-groupcomm+cbor":{source:"iana"},"application/ace-trl+cbor":{source:"iana"},"application/activemessage":{source:"iana"},"application/activity+json":{source:"iana",compressible:true},"application/aif+cbor":{source:"iana"},"application/aif+json":{source:"iana",compressible:true},"application/alto-cdni+json":{source:"iana",compressible:true},"application/alto-cdnifilter+json":{source:"iana",compressible:true},"application/alto-costmap+json":{source:"iana",compressible:true},"application/alto-costmapfilter+json":{source:"iana",compressible:true},"application/alto-directory+json":{source:"iana",compressible:true},"application/alto-endpointcost+json":{source:"iana",compressible:true},"application/alto-endpointcostparams+json":{source:"iana",compressible:true},"application/alto-endpointprop+json":{source:"iana",compressible:true},"application/alto-endpointpropparams+json":{source:"iana",compressible:true},"application/alto-error+json":{source:"iana",compressible:true},"application/alto-networkmap+json":{source:"iana",compressible:true},"application/alto-networkmapfilter+json":{source:"iana",compressible:true},"application/alto-propmap+json":{source:"iana",compressible:true},"application/alto-propmapparams+json":{source:"iana",compressible:true},"application/alto-tips+json":{source:"iana",compressible:true},"application/alto-tipsparams+json":{source:"iana",compressible:true},"application/alto-updatestreamcontrol+json":{source:"iana",compressible:true},"application/alto-updatestreamparams+json":{source:"iana",compressible:true},"application/aml":{source:"iana"},"application/andrew-inset":{source:"iana",extensions:["ez"]},"application/appinstaller":{compressible:false,extensions:["appinstaller"]},"application/applefile":{source:"iana"},"application/applixware":{source:"apache",extensions:["aw"]},"application/appx":{compressible:false,extensions:["appx"]},"application/appxbundle":{compressible:false,extensions:["appxbundle"]},"application/at+jwt":{source:"iana"},"application/atf":{source:"iana"},"application/atfx":{source:"iana"},"application/atom+xml":{source:"iana",compressible:true,extensions:["atom"]},"application/atomcat+xml":{source:"iana",compressible:true,extensions:["atomcat"]},"application/atomdeleted+xml":{source:"iana",compressible:true,extensions:["atomdeleted"]},"application/atomicmail":{source:"iana"},"application/atomsvc+xml":{source:"iana",compressible:true,extensions:["atomsvc"]},"application/atsc-dwd+xml":{source:"iana",compressible:true,extensions:["dwd"]},"application/atsc-dynamic-event-message":{source:"iana"},"application/atsc-held+xml":{source:"iana",compressible:true,extensions:["held"]},"application/atsc-rdt+json":{source:"iana",compressible:true},"application/atsc-rsat+xml":{source:"iana",compressible:true,extensions:["rsat"]},"application/atxml":{source:"iana"},"application/auth-policy+xml":{source:"iana",compressible:true},"application/automationml-aml+xml":{source:"iana",compressible:true,extensions:["aml"]},"application/automationml-amlx+zip":{source:"iana",compressible:false,extensions:["amlx"]},"application/bacnet-xdd+zip":{source:"iana",compressible:false},"application/batch-smtp":{source:"iana"},"application/bdoc":{compressible:false,extensions:["bdoc"]},"application/beep+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/bufr":{source:"iana"},"application/c2pa":{source:"iana"},"application/calendar+json":{source:"iana",compressible:true},"application/calendar+xml":{source:"iana",compressible:true,extensions:["xcs"]},"application/call-completion":{source:"iana"},"application/cals-1840":{source:"iana"},"application/captive+json":{source:"iana",compressible:true},"application/cbor":{source:"iana"},"application/cbor-seq":{source:"iana"},"application/cccex":{source:"iana"},"application/ccmp+xml":{source:"iana",compressible:true},"application/ccxml+xml":{source:"iana",compressible:true,extensions:["ccxml"]},"application/cda+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/cdfx+xml":{source:"iana",compressible:true,extensions:["cdfx"]},"application/cdmi-capability":{source:"iana",extensions:["cdmia"]},"application/cdmi-container":{source:"iana",extensions:["cdmic"]},"application/cdmi-domain":{source:"iana",extensions:["cdmid"]},"application/cdmi-object":{source:"iana",extensions:["cdmio"]},"application/cdmi-queue":{source:"iana",extensions:["cdmiq"]},"application/cdni":{source:"iana"},"application/ce+cbor":{source:"iana"},"application/cea":{source:"iana"},"application/cea-2018+xml":{source:"iana",compressible:true},"application/cellml+xml":{source:"iana",compressible:true},"application/cfw":{source:"iana"},"application/cid-edhoc+cbor-seq":{source:"iana"},"application/city+json":{source:"iana",compressible:true},"application/city+json-seq":{source:"iana"},"application/clr":{source:"iana"},"application/clue+xml":{source:"iana",compressible:true},"application/clue_info+xml":{source:"iana",compressible:true},"application/cms":{source:"iana"},"application/cnrp+xml":{source:"iana",compressible:true},"application/coap-eap":{source:"iana"},"application/coap-group+json":{source:"iana",compressible:true},"application/coap-payload":{source:"iana"},"application/commonground":{source:"iana"},"application/concise-problem-details+cbor":{source:"iana"},"application/conference-info+xml":{source:"iana",compressible:true},"application/cose":{source:"iana"},"application/cose-key":{source:"iana"},"application/cose-key-set":{source:"iana"},"application/cose-x509":{source:"iana"},"application/cpl+xml":{source:"iana",compressible:true,extensions:["cpl"]},"application/csrattrs":{source:"iana"},"application/csta+xml":{source:"iana",compressible:true},"application/cstadata+xml":{source:"iana",compressible:true},"application/csvm+json":{source:"iana",compressible:true},"application/cu-seeme":{source:"apache",extensions:["cu"]},"application/cwl":{source:"iana",extensions:["cwl"]},"application/cwl+json":{source:"iana",compressible:true},"application/cwl+yaml":{source:"iana"},"application/cwt":{source:"iana"},"application/cybercash":{source:"iana"},"application/dart":{compressible:true},"application/dash+xml":{source:"iana",compressible:true,extensions:["mpd"]},"application/dash-patch+xml":{source:"iana",compressible:true,extensions:["mpp"]},"application/dashdelta":{source:"iana"},"application/davmount+xml":{source:"iana",compressible:true,extensions:["davmount"]},"application/dca-rft":{source:"iana"},"application/dcd":{source:"iana"},"application/dec-dx":{source:"iana"},"application/dialog-info+xml":{source:"iana",compressible:true},"application/dicom":{source:"iana",extensions:["dcm"]},"application/dicom+json":{source:"iana",compressible:true},"application/dicom+xml":{source:"iana",compressible:true},"application/dii":{source:"iana"},"application/dit":{source:"iana"},"application/dns":{source:"iana"},"application/dns+json":{source:"iana",compressible:true},"application/dns-message":{source:"iana"},"application/docbook+xml":{source:"apache",compressible:true,extensions:["dbk"]},"application/dots+cbor":{source:"iana"},"application/dpop+jwt":{source:"iana"},"application/dskpp+xml":{source:"iana",compressible:true},"application/dssc+der":{source:"iana",extensions:["dssc"]},"application/dssc+xml":{source:"iana",compressible:true,extensions:["xdssc"]},"application/dvcs":{source:"iana"},"application/eat+cwt":{source:"iana"},"application/eat+jwt":{source:"iana"},"application/eat-bun+cbor":{source:"iana"},"application/eat-bun+json":{source:"iana",compressible:true},"application/eat-ucs+cbor":{source:"iana"},"application/eat-ucs+json":{source:"iana",compressible:true},"application/ecmascript":{source:"apache",compressible:true,extensions:["ecma"]},"application/edhoc+cbor-seq":{source:"iana"},"application/edi-consent":{source:"iana"},"application/edi-x12":{source:"iana",compressible:false},"application/edifact":{source:"iana",compressible:false},"application/efi":{source:"iana"},"application/elm+json":{source:"iana",charset:"UTF-8",compressible:true},"application/elm+xml":{source:"iana",compressible:true},"application/emergencycalldata.cap+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/emergencycalldata.comment+xml":{source:"iana",compressible:true},"application/emergencycalldata.control+xml":{source:"iana",compressible:true},"application/emergencycalldata.deviceinfo+xml":{source:"iana",compressible:true},"application/emergencycalldata.ecall.msd":{source:"iana"},"application/emergencycalldata.legacyesn+json":{source:"iana",compressible:true},"application/emergencycalldata.providerinfo+xml":{source:"iana",compressible:true},"application/emergencycalldata.serviceinfo+xml":{source:"iana",compressible:true},"application/emergencycalldata.subscriberinfo+xml":{source:"iana",compressible:true},"application/emergencycalldata.veds+xml":{source:"iana",compressible:true},"application/emma+xml":{source:"iana",compressible:true,extensions:["emma"]},"application/emotionml+xml":{source:"iana",compressible:true,extensions:["emotionml"]},"application/encaprtp":{source:"iana"},"application/entity-statement+jwt":{source:"iana"},"application/epp+xml":{source:"iana",compressible:true},"application/epub+zip":{source:"iana",compressible:false,extensions:["epub"]},"application/eshop":{source:"iana"},"application/exi":{source:"iana",extensions:["exi"]},"application/expect-ct-report+json":{source:"iana",compressible:true},"application/express":{source:"iana",extensions:["exp"]},"application/fastinfoset":{source:"iana"},"application/fastsoap":{source:"iana"},"application/fdf":{source:"iana",extensions:["fdf"]},"application/fdt+xml":{source:"iana",compressible:true,extensions:["fdt"]},"application/fhir+json":{source:"iana",charset:"UTF-8",compressible:true},"application/fhir+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/fido.trusted-apps+json":{compressible:true},"application/fits":{source:"iana"},"application/flexfec":{source:"iana"},"application/font-sfnt":{source:"iana"},"application/font-tdpfr":{source:"iana",extensions:["pfr"]},"application/font-woff":{source:"iana",compressible:false},"application/framework-attributes+xml":{source:"iana",compressible:true},"application/geo+json":{source:"iana",compressible:true,extensions:["geojson"]},"application/geo+json-seq":{source:"iana"},"application/geopackage+sqlite3":{source:"iana"},"application/geopose+json":{source:"iana",compressible:true},"application/geoxacml+json":{source:"iana",compressible:true},"application/geoxacml+xml":{source:"iana",compressible:true},"application/gltf-buffer":{source:"iana"},"application/gml+xml":{source:"iana",compressible:true,extensions:["gml"]},"application/gnap-binding-jws":{source:"iana"},"application/gnap-binding-jwsd":{source:"iana"},"application/gnap-binding-rotation-jws":{source:"iana"},"application/gnap-binding-rotation-jwsd":{source:"iana"},"application/gpx+xml":{source:"apache",compressible:true,extensions:["gpx"]},"application/grib":{source:"iana"},"application/gxf":{source:"apache",extensions:["gxf"]},"application/gzip":{source:"iana",compressible:false,extensions:["gz"]},"application/h224":{source:"iana"},"application/held+xml":{source:"iana",compressible:true},"application/hjson":{extensions:["hjson"]},"application/hl7v2+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/http":{source:"iana"},"application/hyperstudio":{source:"iana",extensions:["stk"]},"application/ibe-key-request+xml":{source:"iana",compressible:true},"application/ibe-pkg-reply+xml":{source:"iana",compressible:true},"application/ibe-pp-data":{source:"iana"},"application/iges":{source:"iana"},"application/im-iscomposing+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/index":{source:"iana"},"application/index.cmd":{source:"iana"},"application/index.obj":{source:"iana"},"application/index.response":{source:"iana"},"application/index.vnd":{source:"iana"},"application/inkml+xml":{source:"iana",compressible:true,extensions:["ink","inkml"]},"application/iotp":{source:"iana"},"application/ipfix":{source:"iana",extensions:["ipfix"]},"application/ipp":{source:"iana"},"application/isup":{source:"iana"},"application/its+xml":{source:"iana",compressible:true,extensions:["its"]},"application/java-archive":{source:"iana",compressible:false,extensions:["jar","war","ear"]},"application/java-serialized-object":{source:"apache",compressible:false,extensions:["ser"]},"application/java-vm":{source:"apache",compressible:false,extensions:["class"]},"application/javascript":{source:"apache",charset:"UTF-8",compressible:true,extensions:["js"]},"application/jf2feed+json":{source:"iana",compressible:true},"application/jose":{source:"iana"},"application/jose+json":{source:"iana",compressible:true},"application/jrd+json":{source:"iana",compressible:true},"application/jscalendar+json":{source:"iana",compressible:true},"application/jscontact+json":{source:"iana",compressible:true},"application/json":{source:"iana",charset:"UTF-8",compressible:true,extensions:["json","map"]},"application/json-patch+json":{source:"iana",compressible:true},"application/json-seq":{source:"iana"},"application/json5":{extensions:["json5"]},"application/jsonml+json":{source:"apache",compressible:true,extensions:["jsonml"]},"application/jsonpath":{source:"iana"},"application/jwk+json":{source:"iana",compressible:true},"application/jwk-set+json":{source:"iana",compressible:true},"application/jwk-set+jwt":{source:"iana"},"application/jwt":{source:"iana"},"application/kpml-request+xml":{source:"iana",compressible:true},"application/kpml-response+xml":{source:"iana",compressible:true},"application/ld+json":{source:"iana",compressible:true,extensions:["jsonld"]},"application/lgr+xml":{source:"iana",compressible:true,extensions:["lgr"]},"application/link-format":{source:"iana"},"application/linkset":{source:"iana"},"application/linkset+json":{source:"iana",compressible:true},"application/load-control+xml":{source:"iana",compressible:true},"application/logout+jwt":{source:"iana"},"application/lost+xml":{source:"iana",compressible:true,extensions:["lostxml"]},"application/lostsync+xml":{source:"iana",compressible:true},"application/lpf+zip":{source:"iana",compressible:false},"application/lxf":{source:"iana"},"application/mac-binhex40":{source:"iana",extensions:["hqx"]},"application/mac-compactpro":{source:"apache",extensions:["cpt"]},"application/macwriteii":{source:"iana"},"application/mads+xml":{source:"iana",compressible:true,extensions:["mads"]},"application/manifest+json":{source:"iana",charset:"UTF-8",compressible:true,extensions:["webmanifest"]},"application/marc":{source:"iana",extensions:["mrc"]},"application/marcxml+xml":{source:"iana",compressible:true,extensions:["mrcx"]},"application/mathematica":{source:"iana",extensions:["ma","nb","mb"]},"application/mathml+xml":{source:"iana",compressible:true,extensions:["mathml"]},"application/mathml-content+xml":{source:"iana",compressible:true},"application/mathml-presentation+xml":{source:"iana",compressible:true},"application/mbms-associated-procedure-description+xml":{source:"iana",compressible:true},"application/mbms-deregister+xml":{source:"iana",compressible:true},"application/mbms-envelope+xml":{source:"iana",compressible:true},"application/mbms-msk+xml":{source:"iana",compressible:true},"application/mbms-msk-response+xml":{source:"iana",compressible:true},"application/mbms-protection-description+xml":{source:"iana",compressible:true},"application/mbms-reception-report+xml":{source:"iana",compressible:true},"application/mbms-register+xml":{source:"iana",compressible:true},"application/mbms-register-response+xml":{source:"iana",compressible:true},"application/mbms-schedule+xml":{source:"iana",compressible:true},"application/mbms-user-service-description+xml":{source:"iana",compressible:true},"application/mbox":{source:"iana",extensions:["mbox"]},"application/media-policy-dataset+xml":{source:"iana",compressible:true,extensions:["mpf"]},"application/media_control+xml":{source:"iana",compressible:true},"application/mediaservercontrol+xml":{source:"iana",compressible:true,extensions:["mscml"]},"application/merge-patch+json":{source:"iana",compressible:true},"application/metalink+xml":{source:"apache",compressible:true,extensions:["metalink"]},"application/metalink4+xml":{source:"iana",compressible:true,extensions:["meta4"]},"application/mets+xml":{source:"iana",compressible:true,extensions:["mets"]},"application/mf4":{source:"iana"},"application/mikey":{source:"iana"},"application/mipc":{source:"iana"},"application/missing-blocks+cbor-seq":{source:"iana"},"application/mmt-aei+xml":{source:"iana",compressible:true,extensions:["maei"]},"application/mmt-usd+xml":{source:"iana",compressible:true,extensions:["musd"]},"application/mods+xml":{source:"iana",compressible:true,extensions:["mods"]},"application/moss-keys":{source:"iana"},"application/moss-signature":{source:"iana"},"application/mosskey-data":{source:"iana"},"application/mosskey-request":{source:"iana"},"application/mp21":{source:"iana",extensions:["m21","mp21"]},"application/mp4":{source:"iana",extensions:["mp4","mpg4","mp4s","m4p"]},"application/mpeg4-generic":{source:"iana"},"application/mpeg4-iod":{source:"iana"},"application/mpeg4-iod-xmt":{source:"iana"},"application/mrb-consumer+xml":{source:"iana",compressible:true},"application/mrb-publish+xml":{source:"iana",compressible:true},"application/msc-ivr+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/msc-mixer+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/msix":{compressible:false,extensions:["msix"]},"application/msixbundle":{compressible:false,extensions:["msixbundle"]},"application/msword":{source:"iana",compressible:false,extensions:["doc","dot"]},"application/mud+json":{source:"iana",compressible:true},"application/multipart-core":{source:"iana"},"application/mxf":{source:"iana",extensions:["mxf"]},"application/n-quads":{source:"iana",extensions:["nq"]},"application/n-triples":{source:"iana",extensions:["nt"]},"application/nasdata":{source:"iana"},"application/news-checkgroups":{source:"iana",charset:"US-ASCII"},"application/news-groupinfo":{source:"iana",charset:"US-ASCII"},"application/news-transmission":{source:"iana"},"application/nlsml+xml":{source:"iana",compressible:true},"application/node":{source:"iana",extensions:["cjs"]},"application/nss":{source:"iana"},"application/oauth-authz-req+jwt":{source:"iana"},"application/oblivious-dns-message":{source:"iana"},"application/ocsp-request":{source:"iana"},"application/ocsp-response":{source:"iana"},"application/octet-stream":{source:"iana",compressible:true,extensions:["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]},"application/oda":{source:"iana",extensions:["oda"]},"application/odm+xml":{source:"iana",compressible:true},"application/odx":{source:"iana"},"application/oebps-package+xml":{source:"iana",compressible:true,extensions:["opf"]},"application/ogg":{source:"iana",compressible:false,extensions:["ogx"]},"application/ohttp-keys":{source:"iana"},"application/omdoc+xml":{source:"apache",compressible:true,extensions:["omdoc"]},"application/onenote":{source:"apache",extensions:["onetoc","onetoc2","onetmp","onepkg","one","onea"]},"application/opc-nodeset+xml":{source:"iana",compressible:true},"application/oscore":{source:"iana"},"application/oxps":{source:"iana",extensions:["oxps"]},"application/p21":{source:"iana"},"application/p21+zip":{source:"iana",compressible:false},"application/p2p-overlay+xml":{source:"iana",compressible:true,extensions:["relo"]},"application/parityfec":{source:"iana"},"application/passport":{source:"iana"},"application/patch-ops-error+xml":{source:"iana",compressible:true,extensions:["xer"]},"application/pdf":{source:"iana",compressible:false,extensions:["pdf"]},"application/pdx":{source:"iana"},"application/pem-certificate-chain":{source:"iana"},"application/pgp-encrypted":{source:"iana",compressible:false,extensions:["pgp"]},"application/pgp-keys":{source:"iana",extensions:["asc"]},"application/pgp-signature":{source:"iana",extensions:["sig","asc"]},"application/pics-rules":{source:"apache",extensions:["prf"]},"application/pidf+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/pidf-diff+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/pkcs10":{source:"iana",extensions:["p10"]},"application/pkcs12":{source:"iana"},"application/pkcs7-mime":{source:"iana",extensions:["p7m","p7c"]},"application/pkcs7-signature":{source:"iana",extensions:["p7s"]},"application/pkcs8":{source:"iana",extensions:["p8"]},"application/pkcs8-encrypted":{source:"iana"},"application/pkix-attr-cert":{source:"iana",extensions:["ac"]},"application/pkix-cert":{source:"iana",extensions:["cer"]},"application/pkix-crl":{source:"iana",extensions:["crl"]},"application/pkix-pkipath":{source:"iana",extensions:["pkipath"]},"application/pkixcmp":{source:"iana",extensions:["pki"]},"application/pls+xml":{source:"iana",compressible:true,extensions:["pls"]},"application/poc-settings+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/postscript":{source:"iana",compressible:true,extensions:["ai","eps","ps"]},"application/ppsp-tracker+json":{source:"iana",compressible:true},"application/private-token-issuer-directory":{source:"iana"},"application/private-token-request":{source:"iana"},"application/private-token-response":{source:"iana"},"application/problem+json":{source:"iana",compressible:true},"application/problem+xml":{source:"iana",compressible:true},"application/provenance+xml":{source:"iana",compressible:true,extensions:["provx"]},"application/provided-claims+jwt":{source:"iana"},"application/prs.alvestrand.titrax-sheet":{source:"iana"},"application/prs.cww":{source:"iana",extensions:["cww"]},"application/prs.cyn":{source:"iana",charset:"7-BIT"},"application/prs.hpub+zip":{source:"iana",compressible:false},"application/prs.implied-document+xml":{source:"iana",compressible:true},"application/prs.implied-executable":{source:"iana"},"application/prs.implied-object+json":{source:"iana",compressible:true},"application/prs.implied-object+json-seq":{source:"iana"},"application/prs.implied-object+yaml":{source:"iana"},"application/prs.implied-structure":{source:"iana"},"application/prs.mayfile":{source:"iana"},"application/prs.nprend":{source:"iana"},"application/prs.plucker":{source:"iana"},"application/prs.rdf-xml-crypt":{source:"iana"},"application/prs.vcfbzip2":{source:"iana"},"application/prs.xsf+xml":{source:"iana",compressible:true,extensions:["xsf"]},"application/pskc+xml":{source:"iana",compressible:true,extensions:["pskcxml"]},"application/pvd+json":{source:"iana",compressible:true},"application/qsig":{source:"iana"},"application/raml+yaml":{compressible:true,extensions:["raml"]},"application/raptorfec":{source:"iana"},"application/rdap+json":{source:"iana",compressible:true},"application/rdf+xml":{source:"iana",compressible:true,extensions:["rdf","owl"]},"application/reginfo+xml":{source:"iana",compressible:true,extensions:["rif"]},"application/relax-ng-compact-syntax":{source:"iana",extensions:["rnc"]},"application/remote-printing":{source:"apache"},"application/reputon+json":{source:"iana",compressible:true},"application/resolve-response+jwt":{source:"iana"},"application/resource-lists+xml":{source:"iana",compressible:true,extensions:["rl"]},"application/resource-lists-diff+xml":{source:"iana",compressible:true,extensions:["rld"]},"application/rfc+xml":{source:"iana",compressible:true},"application/riscos":{source:"iana"},"application/rlmi+xml":{source:"iana",compressible:true},"application/rls-services+xml":{source:"iana",compressible:true,extensions:["rs"]},"application/route-apd+xml":{source:"iana",compressible:true,extensions:["rapd"]},"application/route-s-tsid+xml":{source:"iana",compressible:true,extensions:["sls"]},"application/route-usd+xml":{source:"iana",compressible:true,extensions:["rusd"]},"application/rpki-checklist":{source:"iana"},"application/rpki-ghostbusters":{source:"iana",extensions:["gbr"]},"application/rpki-manifest":{source:"iana",extensions:["mft"]},"application/rpki-publication":{source:"iana"},"application/rpki-roa":{source:"iana",extensions:["roa"]},"application/rpki-signed-tal":{source:"iana"},"application/rpki-updown":{source:"iana"},"application/rsd+xml":{source:"apache",compressible:true,extensions:["rsd"]},"application/rss+xml":{source:"apache",compressible:true,extensions:["rss"]},"application/rtf":{source:"iana",compressible:true,extensions:["rtf"]},"application/rtploopback":{source:"iana"},"application/rtx":{source:"iana"},"application/samlassertion+xml":{source:"iana",compressible:true},"application/samlmetadata+xml":{source:"iana",compressible:true},"application/sarif+json":{source:"iana",compressible:true},"application/sarif-external-properties+json":{source:"iana",compressible:true},"application/sbe":{source:"iana"},"application/sbml+xml":{source:"iana",compressible:true,extensions:["sbml"]},"application/scaip+xml":{source:"iana",compressible:true},"application/scim+json":{source:"iana",compressible:true},"application/scvp-cv-request":{source:"iana",extensions:["scq"]},"application/scvp-cv-response":{source:"iana",extensions:["scs"]},"application/scvp-vp-request":{source:"iana",extensions:["spq"]},"application/scvp-vp-response":{source:"iana",extensions:["spp"]},"application/sdp":{source:"iana",extensions:["sdp"]},"application/secevent+jwt":{source:"iana"},"application/senml+cbor":{source:"iana"},"application/senml+json":{source:"iana",compressible:true},"application/senml+xml":{source:"iana",compressible:true,extensions:["senmlx"]},"application/senml-etch+cbor":{source:"iana"},"application/senml-etch+json":{source:"iana",compressible:true},"application/senml-exi":{source:"iana"},"application/sensml+cbor":{source:"iana"},"application/sensml+json":{source:"iana",compressible:true},"application/sensml+xml":{source:"iana",compressible:true,extensions:["sensmlx"]},"application/sensml-exi":{source:"iana"},"application/sep+xml":{source:"iana",compressible:true},"application/sep-exi":{source:"iana"},"application/session-info":{source:"iana"},"application/set-payment":{source:"iana"},"application/set-payment-initiation":{source:"iana",extensions:["setpay"]},"application/set-registration":{source:"iana"},"application/set-registration-initiation":{source:"iana",extensions:["setreg"]},"application/sgml":{source:"iana"},"application/sgml-open-catalog":{source:"iana"},"application/shf+xml":{source:"iana",compressible:true,extensions:["shf"]},"application/sieve":{source:"iana",extensions:["siv","sieve"]},"application/simple-filter+xml":{source:"iana",compressible:true},"application/simple-message-summary":{source:"iana"},"application/simplesymbolcontainer":{source:"iana"},"application/sipc":{source:"iana"},"application/slate":{source:"iana"},"application/smil":{source:"apache"},"application/smil+xml":{source:"iana",compressible:true,extensions:["smi","smil"]},"application/smpte336m":{source:"iana"},"application/soap+fastinfoset":{source:"iana"},"application/soap+xml":{source:"iana",compressible:true},"application/sparql-query":{source:"iana",extensions:["rq"]},"application/sparql-results+xml":{source:"iana",compressible:true,extensions:["srx"]},"application/spdx+json":{source:"iana",compressible:true},"application/spirits-event+xml":{source:"iana",compressible:true},"application/sql":{source:"iana",extensions:["sql"]},"application/srgs":{source:"iana",extensions:["gram"]},"application/srgs+xml":{source:"iana",compressible:true,extensions:["grxml"]},"application/sru+xml":{source:"iana",compressible:true,extensions:["sru"]},"application/ssdl+xml":{source:"apache",compressible:true,extensions:["ssdl"]},"application/sslkeylogfile":{source:"iana"},"application/ssml+xml":{source:"iana",compressible:true,extensions:["ssml"]},"application/st2110-41":{source:"iana"},"application/stix+json":{source:"iana",compressible:true},"application/stratum":{source:"iana"},"application/swid+cbor":{source:"iana"},"application/swid+xml":{source:"iana",compressible:true,extensions:["swidtag"]},"application/tamp-apex-update":{source:"iana"},"application/tamp-apex-update-confirm":{source:"iana"},"application/tamp-community-update":{source:"iana"},"application/tamp-community-update-confirm":{source:"iana"},"application/tamp-error":{source:"iana"},"application/tamp-sequence-adjust":{source:"iana"},"application/tamp-sequence-adjust-confirm":{source:"iana"},"application/tamp-status-query":{source:"iana"},"application/tamp-status-response":{source:"iana"},"application/tamp-update":{source:"iana"},"application/tamp-update-confirm":{source:"iana"},"application/tar":{compressible:true},"application/taxii+json":{source:"iana",compressible:true},"application/td+json":{source:"iana",compressible:true},"application/tei+xml":{source:"iana",compressible:true,extensions:["tei","teicorpus"]},"application/tetra_isi":{source:"iana"},"application/thraud+xml":{source:"iana",compressible:true,extensions:["tfi"]},"application/timestamp-query":{source:"iana"},"application/timestamp-reply":{source:"iana"},"application/timestamped-data":{source:"iana",extensions:["tsd"]},"application/tlsrpt+gzip":{source:"iana"},"application/tlsrpt+json":{source:"iana",compressible:true},"application/tm+json":{source:"iana",compressible:true},"application/tnauthlist":{source:"iana"},"application/toc+cbor":{source:"iana"},"application/token-introspection+jwt":{source:"iana"},"application/toml":{source:"iana",compressible:true,extensions:["toml"]},"application/trickle-ice-sdpfrag":{source:"iana"},"application/trig":{source:"iana",extensions:["trig"]},"application/trust-chain+json":{source:"iana",compressible:true},"application/trust-mark+jwt":{source:"iana"},"application/trust-mark-delegation+jwt":{source:"iana"},"application/ttml+xml":{source:"iana",compressible:true,extensions:["ttml"]},"application/tve-trigger":{source:"iana"},"application/tzif":{source:"iana"},"application/tzif-leap":{source:"iana"},"application/ubjson":{compressible:false,extensions:["ubj"]},"application/uccs+cbor":{source:"iana"},"application/ujcs+json":{source:"iana",compressible:true},"application/ulpfec":{source:"iana"},"application/urc-grpsheet+xml":{source:"iana",compressible:true},"application/urc-ressheet+xml":{source:"iana",compressible:true,extensions:["rsheet"]},"application/urc-targetdesc+xml":{source:"iana",compressible:true,extensions:["td"]},"application/urc-uisocketdesc+xml":{source:"iana",compressible:true},"application/vc":{source:"iana"},"application/vc+cose":{source:"iana"},"application/vc+jwt":{source:"iana"},"application/vcard+json":{source:"iana",compressible:true},"application/vcard+xml":{source:"iana",compressible:true},"application/vemmi":{source:"iana"},"application/vividence.scriptfile":{source:"apache"},"application/vnd.1000minds.decision-model+xml":{source:"iana",compressible:true,extensions:["1km"]},"application/vnd.1ob":{source:"iana"},"application/vnd.3gpp-prose+xml":{source:"iana",compressible:true},"application/vnd.3gpp-prose-pc3a+xml":{source:"iana",compressible:true},"application/vnd.3gpp-prose-pc3ach+xml":{source:"iana",compressible:true},"application/vnd.3gpp-prose-pc3ch+xml":{source:"iana",compressible:true},"application/vnd.3gpp-prose-pc8+xml":{source:"iana",compressible:true},"application/vnd.3gpp-v2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gnas":{source:"iana"},"application/vnd.3gpp.5gsa2x":{source:"iana"},"application/vnd.3gpp.5gsa2x-local-service-information":{source:"iana"},"application/vnd.3gpp.5gsv2x":{source:"iana"},"application/vnd.3gpp.5gsv2x-local-service-information":{source:"iana"},"application/vnd.3gpp.access-transfer-events+xml":{source:"iana",compressible:true},"application/vnd.3gpp.bsf+xml":{source:"iana",compressible:true},"application/vnd.3gpp.crs+xml":{source:"iana",compressible:true},"application/vnd.3gpp.current-location-discovery+xml":{source:"iana",compressible:true},"application/vnd.3gpp.gmop+xml":{source:"iana",compressible:true},"application/vnd.3gpp.gtpc":{source:"iana"},"application/vnd.3gpp.interworking-data":{source:"iana"},"application/vnd.3gpp.lpp":{source:"iana"},"application/vnd.3gpp.mc-signalling-ear":{source:"iana"},"application/vnd.3gpp.mcdata-affiliation-command+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-payload":{source:"iana"},"application/vnd.3gpp.mcdata-regroup+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-service-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-signalling":{source:"iana"},"application/vnd.3gpp.mcdata-ue-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcdata-user-profile+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-affiliation-command+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-floor-request+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-location-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-mbms-usage-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-regroup+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-service-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-signed+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-ue-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-ue-init-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcptt-user-profile+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-affiliation-command+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-location-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-mbms-usage-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-regroup+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-service-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-transmission-request+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-ue-config+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mcvideo-user-profile+xml":{source:"iana",compressible:true},"application/vnd.3gpp.mid-call+xml":{source:"iana",compressible:true},"application/vnd.3gpp.ngap":{source:"iana"},"application/vnd.3gpp.pfcp":{source:"iana"},"application/vnd.3gpp.pic-bw-large":{source:"iana",extensions:["plb"]},"application/vnd.3gpp.pic-bw-small":{source:"iana",extensions:["psb"]},"application/vnd.3gpp.pic-bw-var":{source:"iana",extensions:["pvb"]},"application/vnd.3gpp.pinapp-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.s1ap":{source:"iana"},"application/vnd.3gpp.seal-group-doc+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-location-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-mbms-usage-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-network-qos-management-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-ue-config-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-unicast-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.seal-user-profile-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.sms":{source:"iana"},"application/vnd.3gpp.sms+xml":{source:"iana",compressible:true},"application/vnd.3gpp.srvcc-ext+xml":{source:"iana",compressible:true},"application/vnd.3gpp.srvcc-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.state-and-event-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp.ussd+xml":{source:"iana",compressible:true},"application/vnd.3gpp.v2x":{source:"iana"},"application/vnd.3gpp.vae-info+xml":{source:"iana",compressible:true},"application/vnd.3gpp2.bcmcsinfo+xml":{source:"iana",compressible:true},"application/vnd.3gpp2.sms":{source:"iana"},"application/vnd.3gpp2.tcap":{source:"iana",extensions:["tcap"]},"application/vnd.3lightssoftware.imagescal":{source:"iana"},"application/vnd.3m.post-it-notes":{source:"iana",extensions:["pwn"]},"application/vnd.accpac.simply.aso":{source:"iana",extensions:["aso"]},"application/vnd.accpac.simply.imp":{source:"iana",extensions:["imp"]},"application/vnd.acm.addressxfer+json":{source:"iana",compressible:true},"application/vnd.acm.chatbot+json":{source:"iana",compressible:true},"application/vnd.acucobol":{source:"iana",extensions:["acu"]},"application/vnd.acucorp":{source:"iana",extensions:["atc","acutc"]},"application/vnd.adobe.air-application-installer-package+zip":{source:"apache",compressible:false,extensions:["air"]},"application/vnd.adobe.flash.movie":{source:"iana"},"application/vnd.adobe.formscentral.fcdt":{source:"iana",extensions:["fcdt"]},"application/vnd.adobe.fxp":{source:"iana",extensions:["fxp","fxpl"]},"application/vnd.adobe.partial-upload":{source:"iana"},"application/vnd.adobe.xdp+xml":{source:"iana",compressible:true,extensions:["xdp"]},"application/vnd.adobe.xfdf":{source:"apache",extensions:["xfdf"]},"application/vnd.aether.imp":{source:"iana"},"application/vnd.afpc.afplinedata":{source:"iana"},"application/vnd.afpc.afplinedata-pagedef":{source:"iana"},"application/vnd.afpc.cmoca-cmresource":{source:"iana"},"application/vnd.afpc.foca-charset":{source:"iana"},"application/vnd.afpc.foca-codedfont":{source:"iana"},"application/vnd.afpc.foca-codepage":{source:"iana"},"application/vnd.afpc.modca":{source:"iana"},"application/vnd.afpc.modca-cmtable":{source:"iana"},"application/vnd.afpc.modca-formdef":{source:"iana"},"application/vnd.afpc.modca-mediummap":{source:"iana"},"application/vnd.afpc.modca-objectcontainer":{source:"iana"},"application/vnd.afpc.modca-overlay":{source:"iana"},"application/vnd.afpc.modca-pagesegment":{source:"iana"},"application/vnd.age":{source:"iana",extensions:["age"]},"application/vnd.ah-barcode":{source:"apache"},"application/vnd.ahead.space":{source:"iana",extensions:["ahead"]},"application/vnd.airzip.filesecure.azf":{source:"iana",extensions:["azf"]},"application/vnd.airzip.filesecure.azs":{source:"iana",extensions:["azs"]},"application/vnd.amadeus+json":{source:"iana",compressible:true},"application/vnd.amazon.ebook":{source:"apache",extensions:["azw"]},"application/vnd.amazon.mobi8-ebook":{source:"iana"},"application/vnd.americandynamics.acc":{source:"iana",extensions:["acc"]},"application/vnd.amiga.ami":{source:"iana",extensions:["ami"]},"application/vnd.amundsen.maze+xml":{source:"iana",compressible:true},"application/vnd.android.ota":{source:"iana"},"application/vnd.android.package-archive":{source:"apache",compressible:false,extensions:["apk"]},"application/vnd.anki":{source:"iana"},"application/vnd.anser-web-certificate-issue-initiation":{source:"iana",extensions:["cii"]},"application/vnd.anser-web-funds-transfer-initiation":{source:"apache",extensions:["fti"]},"application/vnd.antix.game-component":{source:"iana",extensions:["atx"]},"application/vnd.apache.arrow.file":{source:"iana"},"application/vnd.apache.arrow.stream":{source:"iana"},"application/vnd.apache.parquet":{source:"iana"},"application/vnd.apache.thrift.binary":{source:"iana"},"application/vnd.apache.thrift.compact":{source:"iana"},"application/vnd.apache.thrift.json":{source:"iana"},"application/vnd.apexlang":{source:"iana"},"application/vnd.api+json":{source:"iana",compressible:true},"application/vnd.aplextor.warrp+json":{source:"iana",compressible:true},"application/vnd.apothekende.reservation+json":{source:"iana",compressible:true},"application/vnd.apple.installer+xml":{source:"iana",compressible:true,extensions:["mpkg"]},"application/vnd.apple.keynote":{source:"iana",extensions:["key"]},"application/vnd.apple.mpegurl":{source:"iana",extensions:["m3u8"]},"application/vnd.apple.numbers":{source:"iana",extensions:["numbers"]},"application/vnd.apple.pages":{source:"iana",extensions:["pages"]},"application/vnd.apple.pkpass":{compressible:false,extensions:["pkpass"]},"application/vnd.arastra.swi":{source:"apache"},"application/vnd.aristanetworks.swi":{source:"iana",extensions:["swi"]},"application/vnd.artisan+json":{source:"iana",compressible:true},"application/vnd.artsquare":{source:"iana"},"application/vnd.astraea-software.iota":{source:"iana",extensions:["iota"]},"application/vnd.audiograph":{source:"iana",extensions:["aep"]},"application/vnd.autodesk.fbx":{extensions:["fbx"]},"application/vnd.autopackage":{source:"iana"},"application/vnd.avalon+json":{source:"iana",compressible:true},"application/vnd.avistar+xml":{source:"iana",compressible:true},"application/vnd.balsamiq.bmml+xml":{source:"iana",compressible:true,extensions:["bmml"]},"application/vnd.balsamiq.bmpr":{source:"iana"},"application/vnd.banana-accounting":{source:"iana"},"application/vnd.bbf.usp.error":{source:"iana"},"application/vnd.bbf.usp.msg":{source:"iana"},"application/vnd.bbf.usp.msg+json":{source:"iana",compressible:true},"application/vnd.bekitzur-stech+json":{source:"iana",compressible:true},"application/vnd.belightsoft.lhzd+zip":{source:"iana",compressible:false},"application/vnd.belightsoft.lhzl+zip":{source:"iana",compressible:false},"application/vnd.bint.med-content":{source:"iana"},"application/vnd.biopax.rdf+xml":{source:"iana",compressible:true},"application/vnd.blink-idb-value-wrapper":{source:"iana"},"application/vnd.blueice.multipass":{source:"iana",extensions:["mpm"]},"application/vnd.bluetooth.ep.oob":{source:"iana"},"application/vnd.bluetooth.le.oob":{source:"iana"},"application/vnd.bmi":{source:"iana",extensions:["bmi"]},"application/vnd.bpf":{source:"iana"},"application/vnd.bpf3":{source:"iana"},"application/vnd.businessobjects":{source:"iana",extensions:["rep"]},"application/vnd.byu.uapi+json":{source:"iana",compressible:true},"application/vnd.bzip3":{source:"iana"},"application/vnd.c3voc.schedule+xml":{source:"iana",compressible:true},"application/vnd.cab-jscript":{source:"iana"},"application/vnd.canon-cpdl":{source:"iana"},"application/vnd.canon-lips":{source:"iana"},"application/vnd.capasystems-pg+json":{source:"iana",compressible:true},"application/vnd.cendio.thinlinc.clientconf":{source:"iana"},"application/vnd.century-systems.tcp_stream":{source:"iana"},"application/vnd.chemdraw+xml":{source:"iana",compressible:true,extensions:["cdxml"]},"application/vnd.chess-pgn":{source:"iana"},"application/vnd.chipnuts.karaoke-mmd":{source:"iana",extensions:["mmd"]},"application/vnd.ciedi":{source:"iana"},"application/vnd.cinderella":{source:"iana",extensions:["cdy"]},"application/vnd.cirpack.isdn-ext":{source:"iana"},"application/vnd.citationstyles.style+xml":{source:"iana",compressible:true,extensions:["csl"]},"application/vnd.claymore":{source:"iana",extensions:["cla"]},"application/vnd.cloanto.rp9":{source:"iana",extensions:["rp9"]},"application/vnd.clonk.c4group":{source:"iana",extensions:["c4g","c4d","c4f","c4p","c4u"]},"application/vnd.cluetrust.cartomobile-config":{source:"iana",extensions:["c11amc"]},"application/vnd.cluetrust.cartomobile-config-pkg":{source:"iana",extensions:["c11amz"]},"application/vnd.cncf.helm.chart.content.v1.tar+gzip":{source:"iana"},"application/vnd.cncf.helm.chart.provenance.v1.prov":{source:"iana"},"application/vnd.cncf.helm.config.v1+json":{source:"iana",compressible:true},"application/vnd.coffeescript":{source:"iana"},"application/vnd.collabio.xodocuments.document":{source:"iana"},"application/vnd.collabio.xodocuments.document-template":{source:"iana"},"application/vnd.collabio.xodocuments.presentation":{source:"iana"},"application/vnd.collabio.xodocuments.presentation-template":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet":{source:"iana"},"application/vnd.collabio.xodocuments.spreadsheet-template":{source:"iana"},"application/vnd.collection+json":{source:"iana",compressible:true},"application/vnd.collection.doc+json":{source:"iana",compressible:true},"application/vnd.collection.next+json":{source:"iana",compressible:true},"application/vnd.comicbook+zip":{source:"iana",compressible:false},"application/vnd.comicbook-rar":{source:"iana"},"application/vnd.commerce-battelle":{source:"iana"},"application/vnd.commonspace":{source:"iana",extensions:["csp"]},"application/vnd.contact.cmsg":{source:"iana",extensions:["cdbcmsg"]},"application/vnd.coreos.ignition+json":{source:"iana",compressible:true},"application/vnd.cosmocaller":{source:"iana",extensions:["cmc"]},"application/vnd.crick.clicker":{source:"iana",extensions:["clkx"]},"application/vnd.crick.clicker.keyboard":{source:"iana",extensions:["clkk"]},"application/vnd.crick.clicker.palette":{source:"iana",extensions:["clkp"]},"application/vnd.crick.clicker.template":{source:"iana",extensions:["clkt"]},"application/vnd.crick.clicker.wordbank":{source:"iana",extensions:["clkw"]},"application/vnd.criticaltools.wbs+xml":{source:"iana",compressible:true,extensions:["wbs"]},"application/vnd.cryptii.pipe+json":{source:"iana",compressible:true},"application/vnd.crypto-shade-file":{source:"iana"},"application/vnd.cryptomator.encrypted":{source:"iana"},"application/vnd.cryptomator.vault":{source:"iana"},"application/vnd.ctc-posml":{source:"iana",extensions:["pml"]},"application/vnd.ctct.ws+xml":{source:"iana",compressible:true},"application/vnd.cups-pdf":{source:"iana"},"application/vnd.cups-postscript":{source:"iana"},"application/vnd.cups-ppd":{source:"iana",extensions:["ppd"]},"application/vnd.cups-raster":{source:"iana"},"application/vnd.cups-raw":{source:"iana"},"application/vnd.curl":{source:"iana"},"application/vnd.curl.car":{source:"apache",extensions:["car"]},"application/vnd.curl.pcurl":{source:"apache",extensions:["pcurl"]},"application/vnd.cyan.dean.root+xml":{source:"iana",compressible:true},"application/vnd.cybank":{source:"iana"},"application/vnd.cyclonedx+json":{source:"iana",compressible:true},"application/vnd.cyclonedx+xml":{source:"iana",compressible:true},"application/vnd.d2l.coursepackage1p0+zip":{source:"iana",compressible:false},"application/vnd.d3m-dataset":{source:"iana"},"application/vnd.d3m-problem":{source:"iana"},"application/vnd.dart":{source:"iana",compressible:true,extensions:["dart"]},"application/vnd.data-vision.rdz":{source:"iana",extensions:["rdz"]},"application/vnd.datalog":{source:"iana"},"application/vnd.datapackage+json":{source:"iana",compressible:true},"application/vnd.dataresource+json":{source:"iana",compressible:true},"application/vnd.dbf":{source:"iana",extensions:["dbf"]},"application/vnd.dcmp+xml":{source:"iana",compressible:true,extensions:["dcmp"]},"application/vnd.debian.binary-package":{source:"iana"},"application/vnd.dece.data":{source:"iana",extensions:["uvf","uvvf","uvd","uvvd"]},"application/vnd.dece.ttml+xml":{source:"iana",compressible:true,extensions:["uvt","uvvt"]},"application/vnd.dece.unspecified":{source:"iana",extensions:["uvx","uvvx"]},"application/vnd.dece.zip":{source:"iana",extensions:["uvz","uvvz"]},"application/vnd.denovo.fcselayout-link":{source:"iana",extensions:["fe_launch"]},"application/vnd.desmume.movie":{source:"iana"},"application/vnd.dir-bi.plate-dl-nosuffix":{source:"iana"},"application/vnd.dm.delegation+xml":{source:"iana",compressible:true},"application/vnd.dna":{source:"iana",extensions:["dna"]},"application/vnd.document+json":{source:"iana",compressible:true},"application/vnd.dolby.mlp":{source:"apache",extensions:["mlp"]},"application/vnd.dolby.mobile.1":{source:"iana"},"application/vnd.dolby.mobile.2":{source:"iana"},"application/vnd.doremir.scorecloud-binary-document":{source:"iana"},"application/vnd.dpgraph":{source:"iana",extensions:["dpg"]},"application/vnd.dreamfactory":{source:"iana",extensions:["dfac"]},"application/vnd.drive+json":{source:"iana",compressible:true},"application/vnd.ds-keypoint":{source:"apache",extensions:["kpxx"]},"application/vnd.dtg.local":{source:"iana"},"application/vnd.dtg.local.flash":{source:"iana"},"application/vnd.dtg.local.html":{source:"iana"},"application/vnd.dvb.ait":{source:"iana",extensions:["ait"]},"application/vnd.dvb.dvbisl+xml":{source:"iana",compressible:true},"application/vnd.dvb.dvbj":{source:"iana"},"application/vnd.dvb.esgcontainer":{source:"iana"},"application/vnd.dvb.ipdcdftnotifaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess":{source:"iana"},"application/vnd.dvb.ipdcesgaccess2":{source:"iana"},"application/vnd.dvb.ipdcesgpdd":{source:"iana"},"application/vnd.dvb.ipdcroaming":{source:"iana"},"application/vnd.dvb.iptv.alfec-base":{source:"iana"},"application/vnd.dvb.iptv.alfec-enhancement":{source:"iana"},"application/vnd.dvb.notif-aggregate-root+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-container+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-generic+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-ia-msglist+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-ia-registration-request+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-ia-registration-response+xml":{source:"iana",compressible:true},"application/vnd.dvb.notif-init+xml":{source:"iana",compressible:true},"application/vnd.dvb.pfr":{source:"iana"},"application/vnd.dvb.service":{source:"iana",extensions:["svc"]},"application/vnd.dxr":{source:"iana"},"application/vnd.dynageo":{source:"iana",extensions:["geo"]},"application/vnd.dzr":{source:"iana"},"application/vnd.easykaraoke.cdgdownload":{source:"iana"},"application/vnd.ecdis-update":{source:"iana"},"application/vnd.ecip.rlp":{source:"iana"},"application/vnd.eclipse.ditto+json":{source:"iana",compressible:true},"application/vnd.ecowin.chart":{source:"iana",extensions:["mag"]},"application/vnd.ecowin.filerequest":{source:"iana"},"application/vnd.ecowin.fileupdate":{source:"iana"},"application/vnd.ecowin.series":{source:"iana"},"application/vnd.ecowin.seriesrequest":{source:"iana"},"application/vnd.ecowin.seriesupdate":{source:"iana"},"application/vnd.efi.img":{source:"iana"},"application/vnd.efi.iso":{source:"iana"},"application/vnd.eln+zip":{source:"iana",compressible:false},"application/vnd.emclient.accessrequest+xml":{source:"iana",compressible:true},"application/vnd.enliven":{source:"iana",extensions:["nml"]},"application/vnd.enphase.envoy":{source:"iana"},"application/vnd.eprints.data+xml":{source:"iana",compressible:true},"application/vnd.epson.esf":{source:"iana",extensions:["esf"]},"application/vnd.epson.msf":{source:"iana",extensions:["msf"]},"application/vnd.epson.quickanime":{source:"iana",extensions:["qam"]},"application/vnd.epson.salt":{source:"iana",extensions:["slt"]},"application/vnd.epson.ssf":{source:"iana",extensions:["ssf"]},"application/vnd.ericsson.quickcall":{source:"iana"},"application/vnd.erofs":{source:"iana"},"application/vnd.espass-espass+zip":{source:"iana",compressible:false},"application/vnd.eszigno3+xml":{source:"iana",compressible:true,extensions:["es3","et3"]},"application/vnd.etsi.aoc+xml":{source:"iana",compressible:true},"application/vnd.etsi.asic-e+zip":{source:"iana",compressible:false},"application/vnd.etsi.asic-s+zip":{source:"iana",compressible:false},"application/vnd.etsi.cug+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvcommand+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvdiscovery+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvprofile+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvsad-bc+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvsad-cod+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvsad-npvr+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvservice+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvsync+xml":{source:"iana",compressible:true},"application/vnd.etsi.iptvueprofile+xml":{source:"iana",compressible:true},"application/vnd.etsi.mcid+xml":{source:"iana",compressible:true},"application/vnd.etsi.mheg5":{source:"iana"},"application/vnd.etsi.overload-control-policy-dataset+xml":{source:"iana",compressible:true},"application/vnd.etsi.pstn+xml":{source:"iana",compressible:true},"application/vnd.etsi.sci+xml":{source:"iana",compressible:true},"application/vnd.etsi.simservs+xml":{source:"iana",compressible:true},"application/vnd.etsi.timestamp-token":{source:"iana"},"application/vnd.etsi.tsl+xml":{source:"iana",compressible:true},"application/vnd.etsi.tsl.der":{source:"iana"},"application/vnd.eu.kasparian.car+json":{source:"iana",compressible:true},"application/vnd.eudora.data":{source:"iana"},"application/vnd.evolv.ecig.profile":{source:"iana"},"application/vnd.evolv.ecig.settings":{source:"iana"},"application/vnd.evolv.ecig.theme":{source:"iana"},"application/vnd.exstream-empower+zip":{source:"iana",compressible:false},"application/vnd.exstream-package":{source:"iana"},"application/vnd.ezpix-album":{source:"iana",extensions:["ez2"]},"application/vnd.ezpix-package":{source:"iana",extensions:["ez3"]},"application/vnd.f-secure.mobile":{source:"iana"},"application/vnd.familysearch.gedcom+zip":{source:"iana",compressible:false},"application/vnd.fastcopy-disk-image":{source:"iana"},"application/vnd.fdf":{source:"apache",extensions:["fdf"]},"application/vnd.fdsn.mseed":{source:"iana",extensions:["mseed"]},"application/vnd.fdsn.seed":{source:"iana",extensions:["seed","dataless"]},"application/vnd.fdsn.stationxml+xml":{source:"iana",charset:"XML-BASED",compressible:true},"application/vnd.ffsns":{source:"iana"},"application/vnd.ficlab.flb+zip":{source:"iana",compressible:false},"application/vnd.filmit.zfc":{source:"iana"},"application/vnd.fints":{source:"iana"},"application/vnd.firemonkeys.cloudcell":{source:"iana"},"application/vnd.flographit":{source:"iana",extensions:["gph"]},"application/vnd.fluxtime.clip":{source:"iana",extensions:["ftc"]},"application/vnd.font-fontforge-sfd":{source:"iana"},"application/vnd.framemaker":{source:"iana",extensions:["fm","frame","maker","book"]},"application/vnd.freelog.comic":{source:"iana"},"application/vnd.frogans.fnc":{source:"apache",extensions:["fnc"]},"application/vnd.frogans.ltf":{source:"apache",extensions:["ltf"]},"application/vnd.fsc.weblaunch":{source:"iana",extensions:["fsc"]},"application/vnd.fujifilm.fb.docuworks":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.binder":{source:"iana"},"application/vnd.fujifilm.fb.docuworks.container":{source:"iana"},"application/vnd.fujifilm.fb.jfi+xml":{source:"iana",compressible:true},"application/vnd.fujitsu.oasys":{source:"iana",extensions:["oas"]},"application/vnd.fujitsu.oasys2":{source:"iana",extensions:["oa2"]},"application/vnd.fujitsu.oasys3":{source:"iana",extensions:["oa3"]},"application/vnd.fujitsu.oasysgp":{source:"iana",extensions:["fg5"]},"application/vnd.fujitsu.oasysprs":{source:"iana",extensions:["bh2"]},"application/vnd.fujixerox.art-ex":{source:"iana"},"application/vnd.fujixerox.art4":{source:"iana"},"application/vnd.fujixerox.ddd":{source:"iana",extensions:["ddd"]},"application/vnd.fujixerox.docuworks":{source:"iana",extensions:["xdw"]},"application/vnd.fujixerox.docuworks.binder":{source:"iana",extensions:["xbd"]},"application/vnd.fujixerox.docuworks.container":{source:"iana"},"application/vnd.fujixerox.hbpl":{source:"iana"},"application/vnd.fut-misnet":{source:"iana"},"application/vnd.futoin+cbor":{source:"iana"},"application/vnd.futoin+json":{source:"iana",compressible:true},"application/vnd.fuzzysheet":{source:"iana",extensions:["fzs"]},"application/vnd.ga4gh.passport+jwt":{source:"iana"},"application/vnd.genomatix.tuxedo":{source:"iana",extensions:["txd"]},"application/vnd.genozip":{source:"iana"},"application/vnd.gentics.grd+json":{source:"iana",compressible:true},"application/vnd.gentoo.catmetadata+xml":{source:"iana",compressible:true},"application/vnd.gentoo.ebuild":{source:"iana"},"application/vnd.gentoo.eclass":{source:"iana"},"application/vnd.gentoo.gpkg":{source:"iana"},"application/vnd.gentoo.manifest":{source:"iana"},"application/vnd.gentoo.pkgmetadata+xml":{source:"iana",compressible:true},"application/vnd.gentoo.xpak":{source:"iana"},"application/vnd.geo+json":{source:"apache",compressible:true},"application/vnd.geocube+xml":{source:"apache",compressible:true},"application/vnd.geogebra.file":{source:"iana",extensions:["ggb"]},"application/vnd.geogebra.pinboard":{source:"iana"},"application/vnd.geogebra.slides":{source:"iana",extensions:["ggs"]},"application/vnd.geogebra.tool":{source:"iana",extensions:["ggt"]},"application/vnd.geometry-explorer":{source:"iana",extensions:["gex","gre"]},"application/vnd.geonext":{source:"iana",extensions:["gxt"]},"application/vnd.geoplan":{source:"iana",extensions:["g2w"]},"application/vnd.geospace":{source:"iana",extensions:["g3w"]},"application/vnd.gerber":{source:"iana"},"application/vnd.globalplatform.card-content-mgt":{source:"iana"},"application/vnd.globalplatform.card-content-mgt-response":{source:"iana"},"application/vnd.gmx":{source:"iana",extensions:["gmx"]},"application/vnd.gnu.taler.exchange+json":{source:"iana",compressible:true},"application/vnd.gnu.taler.merchant+json":{source:"iana",compressible:true},"application/vnd.google-apps.audio":{},"application/vnd.google-apps.document":{compressible:false,extensions:["gdoc"]},"application/vnd.google-apps.drawing":{compressible:false,extensions:["gdraw"]},"application/vnd.google-apps.drive-sdk":{compressible:false},"application/vnd.google-apps.file":{},"application/vnd.google-apps.folder":{compressible:false},"application/vnd.google-apps.form":{compressible:false,extensions:["gform"]},"application/vnd.google-apps.fusiontable":{},"application/vnd.google-apps.jam":{compressible:false,extensions:["gjam"]},"application/vnd.google-apps.mail-layout":{},"application/vnd.google-apps.map":{compressible:false,extensions:["gmap"]},"application/vnd.google-apps.photo":{},"application/vnd.google-apps.presentation":{compressible:false,extensions:["gslides"]},"application/vnd.google-apps.script":{compressible:false,extensions:["gscript"]},"application/vnd.google-apps.shortcut":{},"application/vnd.google-apps.site":{compressible:false,extensions:["gsite"]},"application/vnd.google-apps.spreadsheet":{compressible:false,extensions:["gsheet"]},"application/vnd.google-apps.unknown":{},"application/vnd.google-apps.video":{},"application/vnd.google-earth.kml+xml":{source:"iana",compressible:true,extensions:["kml"]},"application/vnd.google-earth.kmz":{source:"iana",compressible:false,extensions:["kmz"]},"application/vnd.gov.sk.e-form+xml":{source:"apache",compressible:true},"application/vnd.gov.sk.e-form+zip":{source:"iana",compressible:false},"application/vnd.gov.sk.xmldatacontainer+xml":{source:"iana",compressible:true,extensions:["xdcf"]},"application/vnd.gpxsee.map+xml":{source:"iana",compressible:true},"application/vnd.grafeq":{source:"iana",extensions:["gqf","gqs"]},"application/vnd.gridmp":{source:"iana"},"application/vnd.groove-account":{source:"iana",extensions:["gac"]},"application/vnd.groove-help":{source:"iana",extensions:["ghf"]},"application/vnd.groove-identity-message":{source:"iana",extensions:["gim"]},"application/vnd.groove-injector":{source:"iana",extensions:["grv"]},"application/vnd.groove-tool-message":{source:"iana",extensions:["gtm"]},"application/vnd.groove-tool-template":{source:"iana",extensions:["tpl"]},"application/vnd.groove-vcard":{source:"iana",extensions:["vcg"]},"application/vnd.hal+json":{source:"iana",compressible:true},"application/vnd.hal+xml":{source:"iana",compressible:true,extensions:["hal"]},"application/vnd.handheld-entertainment+xml":{source:"iana",compressible:true,extensions:["zmm"]},"application/vnd.hbci":{source:"iana",extensions:["hbci"]},"application/vnd.hc+json":{source:"iana",compressible:true},"application/vnd.hcl-bireports":{source:"iana"},"application/vnd.hdt":{source:"iana"},"application/vnd.heroku+json":{source:"iana",compressible:true},"application/vnd.hhe.lesson-player":{source:"iana",extensions:["les"]},"application/vnd.hp-hpgl":{source:"iana",extensions:["hpgl"]},"application/vnd.hp-hpid":{source:"iana",extensions:["hpid"]},"application/vnd.hp-hps":{source:"iana",extensions:["hps"]},"application/vnd.hp-jlyt":{source:"iana",extensions:["jlt"]},"application/vnd.hp-pcl":{source:"iana",extensions:["pcl"]},"application/vnd.hp-pclxl":{source:"iana",extensions:["pclxl"]},"application/vnd.hsl":{source:"iana"},"application/vnd.httphone":{source:"iana"},"application/vnd.hydrostatix.sof-data":{source:"iana",extensions:["sfd-hdstx"]},"application/vnd.hyper+json":{source:"iana",compressible:true},"application/vnd.hyper-item+json":{source:"iana",compressible:true},"application/vnd.hyperdrive+json":{source:"iana",compressible:true},"application/vnd.hzn-3d-crossword":{source:"iana"},"application/vnd.ibm.afplinedata":{source:"apache"},"application/vnd.ibm.electronic-media":{source:"iana"},"application/vnd.ibm.minipay":{source:"iana",extensions:["mpy"]},"application/vnd.ibm.modcap":{source:"apache",extensions:["afp","listafp","list3820"]},"application/vnd.ibm.rights-management":{source:"iana",extensions:["irm"]},"application/vnd.ibm.secure-container":{source:"iana",extensions:["sc"]},"application/vnd.iccprofile":{source:"iana",extensions:["icc","icm"]},"application/vnd.ieee.1905":{source:"iana"},"application/vnd.igloader":{source:"iana",extensions:["igl"]},"application/vnd.imagemeter.folder+zip":{source:"iana",compressible:false},"application/vnd.imagemeter.image+zip":{source:"iana",compressible:false},"application/vnd.immervision-ivp":{source:"iana",extensions:["ivp"]},"application/vnd.immervision-ivu":{source:"iana",extensions:["ivu"]},"application/vnd.ims.imsccv1p1":{source:"iana"},"application/vnd.ims.imsccv1p2":{source:"iana"},"application/vnd.ims.imsccv1p3":{source:"iana"},"application/vnd.ims.lis.v2.result+json":{source:"iana",compressible:true},"application/vnd.ims.lti.v2.toolconsumerprofile+json":{source:"iana",compressible:true},"application/vnd.ims.lti.v2.toolproxy+json":{source:"iana",compressible:true},"application/vnd.ims.lti.v2.toolproxy.id+json":{source:"iana",compressible:true},"application/vnd.ims.lti.v2.toolsettings+json":{source:"iana",compressible:true},"application/vnd.ims.lti.v2.toolsettings.simple+json":{source:"iana",compressible:true},"application/vnd.informedcontrol.rms+xml":{source:"iana",compressible:true},"application/vnd.informix-visionary":{source:"apache"},"application/vnd.infotech.project":{source:"iana"},"application/vnd.infotech.project+xml":{source:"iana",compressible:true},"application/vnd.innopath.wamp.notification":{source:"iana"},"application/vnd.insors.igm":{source:"iana",extensions:["igm"]},"application/vnd.intercon.formnet":{source:"iana",extensions:["xpw","xpx"]},"application/vnd.intergeo":{source:"iana",extensions:["i2g"]},"application/vnd.intertrust.digibox":{source:"iana"},"application/vnd.intertrust.nncp":{source:"iana"},"application/vnd.intu.qbo":{source:"iana",extensions:["qbo"]},"application/vnd.intu.qfx":{source:"iana",extensions:["qfx"]},"application/vnd.ipfs.ipns-record":{source:"iana"},"application/vnd.ipld.car":{source:"iana"},"application/vnd.ipld.dag-cbor":{source:"iana"},"application/vnd.ipld.dag-json":{source:"iana"},"application/vnd.ipld.raw":{source:"iana"},"application/vnd.iptc.g2.catalogitem+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.conceptitem+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.knowledgeitem+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.newsitem+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.newsmessage+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.packageitem+xml":{source:"iana",compressible:true},"application/vnd.iptc.g2.planningitem+xml":{source:"iana",compressible:true},"application/vnd.ipunplugged.rcprofile":{source:"iana",extensions:["rcprofile"]},"application/vnd.irepository.package+xml":{source:"iana",compressible:true,extensions:["irp"]},"application/vnd.is-xpr":{source:"iana",extensions:["xpr"]},"application/vnd.isac.fcs":{source:"iana",extensions:["fcs"]},"application/vnd.iso11783-10+zip":{source:"iana",compressible:false},"application/vnd.jam":{source:"iana",extensions:["jam"]},"application/vnd.japannet-directory-service":{source:"iana"},"application/vnd.japannet-jpnstore-wakeup":{source:"iana"},"application/vnd.japannet-payment-wakeup":{source:"iana"},"application/vnd.japannet-registration":{source:"iana"},"application/vnd.japannet-registration-wakeup":{source:"iana"},"application/vnd.japannet-setstore-wakeup":{source:"iana"},"application/vnd.japannet-verification":{source:"iana"},"application/vnd.japannet-verification-wakeup":{source:"iana"},"application/vnd.jcp.javame.midlet-rms":{source:"iana",extensions:["rms"]},"application/vnd.jisp":{source:"iana",extensions:["jisp"]},"application/vnd.joost.joda-archive":{source:"iana",extensions:["joda"]},"application/vnd.jsk.isdn-ngn":{source:"iana"},"application/vnd.kahootz":{source:"iana",extensions:["ktz","ktr"]},"application/vnd.kde.karbon":{source:"iana",extensions:["karbon"]},"application/vnd.kde.kchart":{source:"iana",extensions:["chrt"]},"application/vnd.kde.kformula":{source:"iana",extensions:["kfo"]},"application/vnd.kde.kivio":{source:"iana",extensions:["flw"]},"application/vnd.kde.kontour":{source:"iana",extensions:["kon"]},"application/vnd.kde.kpresenter":{source:"iana",extensions:["kpr","kpt"]},"application/vnd.kde.kspread":{source:"iana",extensions:["ksp"]},"application/vnd.kde.kword":{source:"iana",extensions:["kwd","kwt"]},"application/vnd.kdl":{source:"iana"},"application/vnd.kenameaapp":{source:"iana",extensions:["htke"]},"application/vnd.keyman.kmp+zip":{source:"iana",compressible:false},"application/vnd.keyman.kmx":{source:"iana"},"application/vnd.kidspiration":{source:"iana",extensions:["kia"]},"application/vnd.kinar":{source:"iana",extensions:["kne","knp"]},"application/vnd.koan":{source:"iana",extensions:["skp","skd","skt","skm"]},"application/vnd.kodak-descriptor":{source:"iana",extensions:["sse"]},"application/vnd.las":{source:"iana"},"application/vnd.las.las+json":{source:"iana",compressible:true},"application/vnd.las.las+xml":{source:"iana",compressible:true,extensions:["lasxml"]},"application/vnd.laszip":{source:"iana"},"application/vnd.ldev.productlicensing":{source:"iana"},"application/vnd.leap+json":{source:"iana",compressible:true},"application/vnd.liberty-request+xml":{source:"iana",compressible:true},"application/vnd.llamagraphics.life-balance.desktop":{source:"iana",extensions:["lbd"]},"application/vnd.llamagraphics.life-balance.exchange+xml":{source:"iana",compressible:true,extensions:["lbe"]},"application/vnd.logipipe.circuit+zip":{source:"iana",compressible:false},"application/vnd.loom":{source:"iana"},"application/vnd.lotus-1-2-3":{source:"iana",extensions:["123"]},"application/vnd.lotus-approach":{source:"iana",extensions:["apr"]},"application/vnd.lotus-freelance":{source:"iana",extensions:["pre"]},"application/vnd.lotus-notes":{source:"iana",extensions:["nsf"]},"application/vnd.lotus-organizer":{source:"iana",extensions:["org"]},"application/vnd.lotus-screencam":{source:"iana",extensions:["scm"]},"application/vnd.lotus-wordpro":{source:"iana",extensions:["lwp"]},"application/vnd.macports.portpkg":{source:"iana",extensions:["portpkg"]},"application/vnd.mapbox-vector-tile":{source:"iana",extensions:["mvt"]},"application/vnd.marlin.drm.actiontoken+xml":{source:"iana",compressible:true},"application/vnd.marlin.drm.conftoken+xml":{source:"iana",compressible:true},"application/vnd.marlin.drm.license+xml":{source:"iana",compressible:true},"application/vnd.marlin.drm.mdcf":{source:"iana"},"application/vnd.mason+json":{source:"iana",compressible:true},"application/vnd.maxar.archive.3tz+zip":{source:"iana",compressible:false},"application/vnd.maxmind.maxmind-db":{source:"iana"},"application/vnd.mcd":{source:"iana",extensions:["mcd"]},"application/vnd.mdl":{source:"iana"},"application/vnd.mdl-mbsdf":{source:"iana"},"application/vnd.medcalcdata":{source:"iana",extensions:["mc1"]},"application/vnd.mediastation.cdkey":{source:"iana",extensions:["cdkey"]},"application/vnd.medicalholodeck.recordxr":{source:"iana"},"application/vnd.meridian-slingshot":{source:"iana"},"application/vnd.mermaid":{source:"iana"},"application/vnd.mfer":{source:"iana",extensions:["mwf"]},"application/vnd.mfmp":{source:"iana",extensions:["mfm"]},"application/vnd.micro+json":{source:"iana",compressible:true},"application/vnd.micrografx.flo":{source:"iana",extensions:["flo"]},"application/vnd.micrografx.igx":{source:"iana",extensions:["igx"]},"application/vnd.microsoft.portable-executable":{source:"iana"},"application/vnd.microsoft.windows.thumbnail-cache":{source:"iana"},"application/vnd.miele+json":{source:"iana",compressible:true},"application/vnd.mif":{source:"iana",extensions:["mif"]},"application/vnd.minisoft-hp3000-save":{source:"iana"},"application/vnd.mitsubishi.misty-guard.trustweb":{source:"iana"},"application/vnd.mobius.daf":{source:"iana",extensions:["daf"]},"application/vnd.mobius.dis":{source:"iana",extensions:["dis"]},"application/vnd.mobius.mbk":{source:"iana",extensions:["mbk"]},"application/vnd.mobius.mqy":{source:"iana",extensions:["mqy"]},"application/vnd.mobius.msl":{source:"iana",extensions:["msl"]},"application/vnd.mobius.plc":{source:"iana",extensions:["plc"]},"application/vnd.mobius.txf":{source:"iana",extensions:["txf"]},"application/vnd.modl":{source:"iana"},"application/vnd.mophun.application":{source:"iana",extensions:["mpn"]},"application/vnd.mophun.certificate":{source:"iana",extensions:["mpc"]},"application/vnd.motorola.flexsuite":{source:"iana"},"application/vnd.motorola.flexsuite.adsi":{source:"iana"},"application/vnd.motorola.flexsuite.fis":{source:"iana"},"application/vnd.motorola.flexsuite.gotap":{source:"iana"},"application/vnd.motorola.flexsuite.kmr":{source:"iana"},"application/vnd.motorola.flexsuite.ttc":{source:"iana"},"application/vnd.motorola.flexsuite.wem":{source:"iana"},"application/vnd.motorola.iprm":{source:"iana"},"application/vnd.mozilla.xul+xml":{source:"iana",compressible:true,extensions:["xul"]},"application/vnd.ms-3mfdocument":{source:"iana"},"application/vnd.ms-artgalry":{source:"iana",extensions:["cil"]},"application/vnd.ms-asf":{source:"iana"},"application/vnd.ms-cab-compressed":{source:"iana",extensions:["cab"]},"application/vnd.ms-color.iccprofile":{source:"apache"},"application/vnd.ms-excel":{source:"iana",compressible:false,extensions:["xls","xlm","xla","xlc","xlt","xlw"]},"application/vnd.ms-excel.addin.macroenabled.12":{source:"iana",extensions:["xlam"]},"application/vnd.ms-excel.sheet.binary.macroenabled.12":{source:"iana",extensions:["xlsb"]},"application/vnd.ms-excel.sheet.macroenabled.12":{source:"iana",extensions:["xlsm"]},"application/vnd.ms-excel.template.macroenabled.12":{source:"iana",extensions:["xltm"]},"application/vnd.ms-fontobject":{source:"iana",compressible:true,extensions:["eot"]},"application/vnd.ms-htmlhelp":{source:"iana",extensions:["chm"]},"application/vnd.ms-ims":{source:"iana",extensions:["ims"]},"application/vnd.ms-lrm":{source:"iana",extensions:["lrm"]},"application/vnd.ms-office.activex+xml":{source:"iana",compressible:true},"application/vnd.ms-officetheme":{source:"iana",extensions:["thmx"]},"application/vnd.ms-opentype":{source:"apache",compressible:true},"application/vnd.ms-outlook":{compressible:false,extensions:["msg"]},"application/vnd.ms-package.obfuscated-opentype":{source:"apache"},"application/vnd.ms-pki.seccat":{source:"apache",extensions:["cat"]},"application/vnd.ms-pki.stl":{source:"apache",extensions:["stl"]},"application/vnd.ms-playready.initiator+xml":{source:"iana",compressible:true},"application/vnd.ms-powerpoint":{source:"iana",compressible:false,extensions:["ppt","pps","pot"]},"application/vnd.ms-powerpoint.addin.macroenabled.12":{source:"iana",extensions:["ppam"]},"application/vnd.ms-powerpoint.presentation.macroenabled.12":{source:"iana",extensions:["pptm"]},"application/vnd.ms-powerpoint.slide.macroenabled.12":{source:"iana",extensions:["sldm"]},"application/vnd.ms-powerpoint.slideshow.macroenabled.12":{source:"iana",extensions:["ppsm"]},"application/vnd.ms-powerpoint.template.macroenabled.12":{source:"iana",extensions:["potm"]},"application/vnd.ms-printdevicecapabilities+xml":{source:"iana",compressible:true},"application/vnd.ms-printing.printticket+xml":{source:"apache",compressible:true},"application/vnd.ms-printschematicket+xml":{source:"iana",compressible:true},"application/vnd.ms-project":{source:"iana",extensions:["mpp","mpt"]},"application/vnd.ms-tnef":{source:"iana"},"application/vnd.ms-visio.viewer":{extensions:["vdx"]},"application/vnd.ms-windows.devicepairing":{source:"iana"},"application/vnd.ms-windows.nwprinting.oob":{source:"iana"},"application/vnd.ms-windows.printerpairing":{source:"iana"},"application/vnd.ms-windows.wsd.oob":{source:"iana"},"application/vnd.ms-wmdrm.lic-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.lic-resp":{source:"iana"},"application/vnd.ms-wmdrm.meter-chlg-req":{source:"iana"},"application/vnd.ms-wmdrm.meter-resp":{source:"iana"},"application/vnd.ms-word.document.macroenabled.12":{source:"iana",extensions:["docm"]},"application/vnd.ms-word.template.macroenabled.12":{source:"iana",extensions:["dotm"]},"application/vnd.ms-works":{source:"iana",extensions:["wps","wks","wcm","wdb"]},"application/vnd.ms-wpl":{source:"iana",extensions:["wpl"]},"application/vnd.ms-xpsdocument":{source:"iana",compressible:false,extensions:["xps"]},"application/vnd.msa-disk-image":{source:"iana"},"application/vnd.mseq":{source:"iana",extensions:["mseq"]},"application/vnd.msgpack":{source:"iana"},"application/vnd.msign":{source:"iana"},"application/vnd.multiad.creator":{source:"iana"},"application/vnd.multiad.creator.cif":{source:"iana"},"application/vnd.music-niff":{source:"iana"},"application/vnd.musician":{source:"iana",extensions:["mus"]},"application/vnd.muvee.style":{source:"iana",extensions:["msty"]},"application/vnd.mynfc":{source:"iana",extensions:["taglet"]},"application/vnd.nacamar.ybrid+json":{source:"iana",compressible:true},"application/vnd.nato.bindingdataobject+cbor":{source:"iana"},"application/vnd.nato.bindingdataobject+json":{source:"iana",compressible:true},"application/vnd.nato.bindingdataobject+xml":{source:"iana",compressible:true,extensions:["bdo"]},"application/vnd.nato.openxmlformats-package.iepd+zip":{source:"iana",compressible:false},"application/vnd.ncd.control":{source:"iana"},"application/vnd.ncd.reference":{source:"iana"},"application/vnd.nearst.inv+json":{source:"iana",compressible:true},"application/vnd.nebumind.line":{source:"iana"},"application/vnd.nervana":{source:"iana"},"application/vnd.netfpx":{source:"iana"},"application/vnd.neurolanguage.nlu":{source:"iana",extensions:["nlu"]},"application/vnd.nimn":{source:"iana"},"application/vnd.nintendo.nitro.rom":{source:"iana"},"application/vnd.nintendo.snes.rom":{source:"iana"},"application/vnd.nitf":{source:"iana",extensions:["ntf","nitf"]},"application/vnd.noblenet-directory":{source:"iana",extensions:["nnd"]},"application/vnd.noblenet-sealer":{source:"iana",extensions:["nns"]},"application/vnd.noblenet-web":{source:"iana",extensions:["nnw"]},"application/vnd.nokia.catalogs":{source:"iana"},"application/vnd.nokia.conml+wbxml":{source:"iana"},"application/vnd.nokia.conml+xml":{source:"iana",compressible:true},"application/vnd.nokia.iptv.config+xml":{source:"iana",compressible:true},"application/vnd.nokia.isds-radio-presets":{source:"iana"},"application/vnd.nokia.landmark+wbxml":{source:"iana"},"application/vnd.nokia.landmark+xml":{source:"iana",compressible:true},"application/vnd.nokia.landmarkcollection+xml":{source:"iana",compressible:true},"application/vnd.nokia.n-gage.ac+xml":{source:"iana",compressible:true,extensions:["ac"]},"application/vnd.nokia.n-gage.data":{source:"iana",extensions:["ngdat"]},"application/vnd.nokia.n-gage.symbian.install":{source:"apache",extensions:["n-gage"]},"application/vnd.nokia.ncd":{source:"iana"},"application/vnd.nokia.pcd+wbxml":{source:"iana"},"application/vnd.nokia.pcd+xml":{source:"iana",compressible:true},"application/vnd.nokia.radio-preset":{source:"iana",extensions:["rpst"]},"application/vnd.nokia.radio-presets":{source:"iana",extensions:["rpss"]},"application/vnd.novadigm.edm":{source:"iana",extensions:["edm"]},"application/vnd.novadigm.edx":{source:"iana",extensions:["edx"]},"application/vnd.novadigm.ext":{source:"iana",extensions:["ext"]},"application/vnd.ntt-local.content-share":{source:"iana"},"application/vnd.ntt-local.file-transfer":{source:"iana"},"application/vnd.ntt-local.ogw_remote-access":{source:"iana"},"application/vnd.ntt-local.sip-ta_remote":{source:"iana"},"application/vnd.ntt-local.sip-ta_tcp_stream":{source:"iana"},"application/vnd.oai.workflows":{source:"iana"},"application/vnd.oai.workflows+json":{source:"iana",compressible:true},"application/vnd.oai.workflows+yaml":{source:"iana"},"application/vnd.oasis.opendocument.base":{source:"iana"},"application/vnd.oasis.opendocument.chart":{source:"iana",extensions:["odc"]},"application/vnd.oasis.opendocument.chart-template":{source:"iana",extensions:["otc"]},"application/vnd.oasis.opendocument.database":{source:"apache",extensions:["odb"]},"application/vnd.oasis.opendocument.formula":{source:"iana",extensions:["odf"]},"application/vnd.oasis.opendocument.formula-template":{source:"iana",extensions:["odft"]},"application/vnd.oasis.opendocument.graphics":{source:"iana",compressible:false,extensions:["odg"]},"application/vnd.oasis.opendocument.graphics-template":{source:"iana",extensions:["otg"]},"application/vnd.oasis.opendocument.image":{source:"iana",extensions:["odi"]},"application/vnd.oasis.opendocument.image-template":{source:"iana",extensions:["oti"]},"application/vnd.oasis.opendocument.presentation":{source:"iana",compressible:false,extensions:["odp"]},"application/vnd.oasis.opendocument.presentation-template":{source:"iana",extensions:["otp"]},"application/vnd.oasis.opendocument.spreadsheet":{source:"iana",compressible:false,extensions:["ods"]},"application/vnd.oasis.opendocument.spreadsheet-template":{source:"iana",extensions:["ots"]},"application/vnd.oasis.opendocument.text":{source:"iana",compressible:false,extensions:["odt"]},"application/vnd.oasis.opendocument.text-master":{source:"iana",extensions:["odm"]},"application/vnd.oasis.opendocument.text-master-template":{source:"iana"},"application/vnd.oasis.opendocument.text-template":{source:"iana",extensions:["ott"]},"application/vnd.oasis.opendocument.text-web":{source:"iana",extensions:["oth"]},"application/vnd.obn":{source:"iana"},"application/vnd.ocf+cbor":{source:"iana"},"application/vnd.oci.image.manifest.v1+json":{source:"iana",compressible:true},"application/vnd.oftn.l10n+json":{source:"iana",compressible:true},"application/vnd.oipf.contentaccessdownload+xml":{source:"iana",compressible:true},"application/vnd.oipf.contentaccessstreaming+xml":{source:"iana",compressible:true},"application/vnd.oipf.cspg-hexbinary":{source:"iana"},"application/vnd.oipf.dae.svg+xml":{source:"iana",compressible:true},"application/vnd.oipf.dae.xhtml+xml":{source:"iana",compressible:true},"application/vnd.oipf.mippvcontrolmessage+xml":{source:"iana",compressible:true},"application/vnd.oipf.pae.gem":{source:"iana"},"application/vnd.oipf.spdiscovery+xml":{source:"iana",compressible:true},"application/vnd.oipf.spdlist+xml":{source:"iana",compressible:true},"application/vnd.oipf.ueprofile+xml":{source:"iana",compressible:true},"application/vnd.oipf.userprofile+xml":{source:"iana",compressible:true},"application/vnd.olpc-sugar":{source:"iana",extensions:["xo"]},"application/vnd.oma-scws-config":{source:"iana"},"application/vnd.oma-scws-http-request":{source:"iana"},"application/vnd.oma-scws-http-response":{source:"iana"},"application/vnd.oma.bcast.associated-procedure-parameter+xml":{source:"iana",compressible:true},"application/vnd.oma.bcast.drm-trigger+xml":{source:"apache",compressible:true},"application/vnd.oma.bcast.imd+xml":{source:"iana",compressible:true},"application/vnd.oma.bcast.ltkm":{source:"iana"},"application/vnd.oma.bcast.notification+xml":{source:"iana",compressible:true},"application/vnd.oma.bcast.provisioningtrigger":{source:"iana"},"application/vnd.oma.bcast.sgboot":{source:"iana"},"application/vnd.oma.bcast.sgdd+xml":{source:"iana",compressible:true},"application/vnd.oma.bcast.sgdu":{source:"iana"},"application/vnd.oma.bcast.simple-symbol-container":{source:"iana"},"application/vnd.oma.bcast.smartcard-trigger+xml":{source:"apache",compressible:true},"application/vnd.oma.bcast.sprov+xml":{source:"iana",compressible:true},"application/vnd.oma.bcast.stkm":{source:"iana"},"application/vnd.oma.cab-address-book+xml":{source:"iana",compressible:true},"application/vnd.oma.cab-feature-handler+xml":{source:"iana",compressible:true},"application/vnd.oma.cab-pcc+xml":{source:"iana",compressible:true},"application/vnd.oma.cab-subs-invite+xml":{source:"iana",compressible:true},"application/vnd.oma.cab-user-prefs+xml":{source:"iana",compressible:true},"application/vnd.oma.dcd":{source:"iana"},"application/vnd.oma.dcdc":{source:"iana"},"application/vnd.oma.dd2+xml":{source:"iana",compressible:true,extensions:["dd2"]},"application/vnd.oma.drm.risd+xml":{source:"iana",compressible:true},"application/vnd.oma.group-usage-list+xml":{source:"iana",compressible:true},"application/vnd.oma.lwm2m+cbor":{source:"iana"},"application/vnd.oma.lwm2m+json":{source:"iana",compressible:true},"application/vnd.oma.lwm2m+tlv":{source:"iana"},"application/vnd.oma.pal+xml":{source:"iana",compressible:true},"application/vnd.oma.poc.detailed-progress-report+xml":{source:"iana",compressible:true},"application/vnd.oma.poc.final-report+xml":{source:"iana",compressible:true},"application/vnd.oma.poc.groups+xml":{source:"iana",compressible:true},"application/vnd.oma.poc.invocation-descriptor+xml":{source:"iana",compressible:true},"application/vnd.oma.poc.optimized-progress-report+xml":{source:"iana",compressible:true},"application/vnd.oma.push":{source:"iana"},"application/vnd.oma.scidm.messages+xml":{source:"iana",compressible:true},"application/vnd.oma.xcap-directory+xml":{source:"iana",compressible:true},"application/vnd.omads-email+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/vnd.omads-file+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/vnd.omads-folder+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/vnd.omaloc-supl-init":{source:"iana"},"application/vnd.onepager":{source:"iana"},"application/vnd.onepagertamp":{source:"iana"},"application/vnd.onepagertamx":{source:"iana"},"application/vnd.onepagertat":{source:"iana"},"application/vnd.onepagertatp":{source:"iana"},"application/vnd.onepagertatx":{source:"iana"},"application/vnd.onvif.metadata":{source:"iana"},"application/vnd.openblox.game+xml":{source:"iana",compressible:true,extensions:["obgx"]},"application/vnd.openblox.game-binary":{source:"iana"},"application/vnd.openeye.oeb":{source:"iana"},"application/vnd.openofficeorg.extension":{source:"apache",extensions:["oxt"]},"application/vnd.openstreetmap.data+xml":{source:"iana",compressible:true,extensions:["osm"]},"application/vnd.opentimestamps.ots":{source:"iana"},"application/vnd.openvpi.dspx+json":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.custom-properties+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.customxmlproperties+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawing+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.chart+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.extended-properties+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.comments+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{source:"iana",compressible:false,extensions:["pptx"]},"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.slide":{source:"iana",extensions:["sldx"]},"application/vnd.openxmlformats-officedocument.presentationml.slide+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.slideshow":{source:"iana",extensions:["ppsx"]},"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.tags+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.template":{source:"iana",extensions:["potx"]},"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{source:"iana",compressible:false,extensions:["xlsx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.template":{source:"iana",extensions:["xltx"]},"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.theme+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.themeoverride+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.vmldrawing":{source:"iana"},"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{source:"iana",compressible:false,extensions:["docx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.template":{source:"iana",extensions:["dotx"]},"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-package.core-properties+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml":{source:"iana",compressible:true},"application/vnd.openxmlformats-package.relationships+xml":{source:"iana",compressible:true},"application/vnd.oracle.resource+json":{source:"iana",compressible:true},"application/vnd.orange.indata":{source:"iana"},"application/vnd.osa.netdeploy":{source:"iana"},"application/vnd.osgeo.mapguide.package":{source:"iana",extensions:["mgp"]},"application/vnd.osgi.bundle":{source:"iana"},"application/vnd.osgi.dp":{source:"iana",extensions:["dp"]},"application/vnd.osgi.subsystem":{source:"iana",extensions:["esa"]},"application/vnd.otps.ct-kip+xml":{source:"iana",compressible:true},"application/vnd.oxli.countgraph":{source:"iana"},"application/vnd.pagerduty+json":{source:"iana",compressible:true},"application/vnd.palm":{source:"iana",extensions:["pdb","pqa","oprc"]},"application/vnd.panoply":{source:"iana"},"application/vnd.paos.xml":{source:"iana"},"application/vnd.patentdive":{source:"iana"},"application/vnd.patientecommsdoc":{source:"iana"},"application/vnd.pawaafile":{source:"iana",extensions:["paw"]},"application/vnd.pcos":{source:"iana"},"application/vnd.pg.format":{source:"iana",extensions:["str"]},"application/vnd.pg.osasli":{source:"iana",extensions:["ei6"]},"application/vnd.piaccess.application-licence":{source:"iana"},"application/vnd.picsel":{source:"iana",extensions:["efif"]},"application/vnd.pmi.widget":{source:"iana",extensions:["wg"]},"application/vnd.poc.group-advertisement+xml":{source:"iana",compressible:true},"application/vnd.pocketlearn":{source:"iana",extensions:["plf"]},"application/vnd.powerbuilder6":{source:"iana",extensions:["pbd"]},"application/vnd.powerbuilder6-s":{source:"iana"},"application/vnd.powerbuilder7":{source:"iana"},"application/vnd.powerbuilder7-s":{source:"iana"},"application/vnd.powerbuilder75":{source:"iana"},"application/vnd.powerbuilder75-s":{source:"iana"},"application/vnd.preminet":{source:"iana"},"application/vnd.previewsystems.box":{source:"iana",extensions:["box"]},"application/vnd.procrate.brushset":{extensions:["brushset"]},"application/vnd.procreate.brush":{extensions:["brush"]},"application/vnd.procreate.dream":{extensions:["drm"]},"application/vnd.proteus.magazine":{source:"iana",extensions:["mgz"]},"application/vnd.psfs":{source:"iana"},"application/vnd.pt.mundusmundi":{source:"iana"},"application/vnd.publishare-delta-tree":{source:"iana",extensions:["qps"]},"application/vnd.pvi.ptid1":{source:"iana",extensions:["ptid"]},"application/vnd.pwg-multiplexed":{source:"iana"},"application/vnd.pwg-xhtml-print+xml":{source:"iana",compressible:true,extensions:["xhtm"]},"application/vnd.qualcomm.brew-app-res":{source:"iana"},"application/vnd.quarantainenet":{source:"iana"},"application/vnd.quark.quarkxpress":{source:"iana",extensions:["qxd","qxt","qwd","qwt","qxl","qxb"]},"application/vnd.quobject-quoxdocument":{source:"iana"},"application/vnd.radisys.moml+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-audit+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-audit-conf+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-audit-conn+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-audit-dialog+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-audit-stream+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-conf+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-base+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-fax-detect+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-fax-sendrecv+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-group+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-speech+xml":{source:"iana",compressible:true},"application/vnd.radisys.msml-dialog-transform+xml":{source:"iana",compressible:true},"application/vnd.rainstor.data":{source:"iana"},"application/vnd.rapid":{source:"iana"},"application/vnd.rar":{source:"iana",extensions:["rar"]},"application/vnd.realvnc.bed":{source:"iana",extensions:["bed"]},"application/vnd.recordare.musicxml":{source:"iana",extensions:["mxl"]},"application/vnd.recordare.musicxml+xml":{source:"iana",compressible:true,extensions:["musicxml"]},"application/vnd.relpipe":{source:"iana"},"application/vnd.renlearn.rlprint":{source:"iana"},"application/vnd.resilient.logic":{source:"iana"},"application/vnd.restful+json":{source:"iana",compressible:true},"application/vnd.rig.cryptonote":{source:"iana",extensions:["cryptonote"]},"application/vnd.rim.cod":{source:"apache",extensions:["cod"]},"application/vnd.rn-realmedia":{source:"apache",extensions:["rm"]},"application/vnd.rn-realmedia-vbr":{source:"apache",extensions:["rmvb"]},"application/vnd.route66.link66+xml":{source:"iana",compressible:true,extensions:["link66"]},"application/vnd.rs-274x":{source:"iana"},"application/vnd.ruckus.download":{source:"iana"},"application/vnd.s3sms":{source:"iana"},"application/vnd.sailingtracker.track":{source:"iana",extensions:["st"]},"application/vnd.sar":{source:"iana"},"application/vnd.sbm.cid":{source:"iana"},"application/vnd.sbm.mid2":{source:"iana"},"application/vnd.scribus":{source:"iana"},"application/vnd.sealed.3df":{source:"iana"},"application/vnd.sealed.csf":{source:"iana"},"application/vnd.sealed.doc":{source:"iana"},"application/vnd.sealed.eml":{source:"iana"},"application/vnd.sealed.mht":{source:"iana"},"application/vnd.sealed.net":{source:"iana"},"application/vnd.sealed.ppt":{source:"iana"},"application/vnd.sealed.tiff":{source:"iana"},"application/vnd.sealed.xls":{source:"iana"},"application/vnd.sealedmedia.softseal.html":{source:"iana"},"application/vnd.sealedmedia.softseal.pdf":{source:"iana"},"application/vnd.seemail":{source:"iana",extensions:["see"]},"application/vnd.seis+json":{source:"iana",compressible:true},"application/vnd.sema":{source:"iana",extensions:["sema"]},"application/vnd.semd":{source:"iana",extensions:["semd"]},"application/vnd.semf":{source:"iana",extensions:["semf"]},"application/vnd.shade-save-file":{source:"iana"},"application/vnd.shana.informed.formdata":{source:"iana",extensions:["ifm"]},"application/vnd.shana.informed.formtemplate":{source:"iana",extensions:["itp"]},"application/vnd.shana.informed.interchange":{source:"iana",extensions:["iif"]},"application/vnd.shana.informed.package":{source:"iana",extensions:["ipk"]},"application/vnd.shootproof+json":{source:"iana",compressible:true},"application/vnd.shopkick+json":{source:"iana",compressible:true},"application/vnd.shp":{source:"iana"},"application/vnd.shx":{source:"iana"},"application/vnd.sigrok.session":{source:"iana"},"application/vnd.simtech-mindmapper":{source:"iana",extensions:["twd","twds"]},"application/vnd.siren+json":{source:"iana",compressible:true},"application/vnd.sketchometry":{source:"iana"},"application/vnd.smaf":{source:"iana",extensions:["mmf"]},"application/vnd.smart.notebook":{source:"iana"},"application/vnd.smart.teacher":{source:"iana",extensions:["teacher"]},"application/vnd.smintio.portals.archive":{source:"iana"},"application/vnd.snesdev-page-table":{source:"iana"},"application/vnd.software602.filler.form+xml":{source:"iana",compressible:true,extensions:["fo"]},"application/vnd.software602.filler.form-xml-zip":{source:"iana"},"application/vnd.solent.sdkm+xml":{source:"iana",compressible:true,extensions:["sdkm","sdkd"]},"application/vnd.spotfire.dxp":{source:"iana",extensions:["dxp"]},"application/vnd.spotfire.sfs":{source:"iana",extensions:["sfs"]},"application/vnd.sqlite3":{source:"iana"},"application/vnd.sss-cod":{source:"iana"},"application/vnd.sss-dtf":{source:"iana"},"application/vnd.sss-ntf":{source:"iana"},"application/vnd.stardivision.calc":{source:"apache",extensions:["sdc"]},"application/vnd.stardivision.draw":{source:"apache",extensions:["sda"]},"application/vnd.stardivision.impress":{source:"apache",extensions:["sdd"]},"application/vnd.stardivision.math":{source:"apache",extensions:["smf"]},"application/vnd.stardivision.writer":{source:"apache",extensions:["sdw","vor"]},"application/vnd.stardivision.writer-global":{source:"apache",extensions:["sgl"]},"application/vnd.stepmania.package":{source:"iana",extensions:["smzip"]},"application/vnd.stepmania.stepchart":{source:"iana",extensions:["sm"]},"application/vnd.street-stream":{source:"iana"},"application/vnd.sun.wadl+xml":{source:"iana",compressible:true,extensions:["wadl"]},"application/vnd.sun.xml.calc":{source:"apache",extensions:["sxc"]},"application/vnd.sun.xml.calc.template":{source:"apache",extensions:["stc"]},"application/vnd.sun.xml.draw":{source:"apache",extensions:["sxd"]},"application/vnd.sun.xml.draw.template":{source:"apache",extensions:["std"]},"application/vnd.sun.xml.impress":{source:"apache",extensions:["sxi"]},"application/vnd.sun.xml.impress.template":{source:"apache",extensions:["sti"]},"application/vnd.sun.xml.math":{source:"apache",extensions:["sxm"]},"application/vnd.sun.xml.writer":{source:"apache",extensions:["sxw"]},"application/vnd.sun.xml.writer.global":{source:"apache",extensions:["sxg"]},"application/vnd.sun.xml.writer.template":{source:"apache",extensions:["stw"]},"application/vnd.sus-calendar":{source:"iana",extensions:["sus","susp"]},"application/vnd.svd":{source:"iana",extensions:["svd"]},"application/vnd.swiftview-ics":{source:"iana"},"application/vnd.sybyl.mol2":{source:"iana"},"application/vnd.sycle+xml":{source:"iana",compressible:true},"application/vnd.syft+json":{source:"iana",compressible:true},"application/vnd.symbian.install":{source:"apache",extensions:["sis","sisx"]},"application/vnd.syncml+xml":{source:"iana",charset:"UTF-8",compressible:true,extensions:["xsm"]},"application/vnd.syncml.dm+wbxml":{source:"iana",charset:"UTF-8",extensions:["bdm"]},"application/vnd.syncml.dm+xml":{source:"iana",charset:"UTF-8",compressible:true,extensions:["xdm"]},"application/vnd.syncml.dm.notification":{source:"iana"},"application/vnd.syncml.dmddf+wbxml":{source:"iana"},"application/vnd.syncml.dmddf+xml":{source:"iana",charset:"UTF-8",compressible:true,extensions:["ddf"]},"application/vnd.syncml.dmtnds+wbxml":{source:"iana"},"application/vnd.syncml.dmtnds+xml":{source:"iana",charset:"UTF-8",compressible:true},"application/vnd.syncml.ds.notification":{source:"iana"},"application/vnd.tableschema+json":{source:"iana",compressible:true},"application/vnd.tao.intent-module-archive":{source:"iana",extensions:["tao"]},"application/vnd.tcpdump.pcap":{source:"iana",extensions:["pcap","cap","dmp"]},"application/vnd.think-cell.ppttc+json":{source:"iana",compressible:true},"application/vnd.tmd.mediaflex.api+xml":{source:"iana",compressible:true},"application/vnd.tml":{source:"iana"},"application/vnd.tmobile-livetv":{source:"iana",extensions:["tmo"]},"application/vnd.tri.onesource":{source:"iana"},"application/vnd.trid.tpt":{source:"iana",extensions:["tpt"]},"application/vnd.triscape.mxs":{source:"iana",extensions:["mxs"]},"application/vnd.trueapp":{source:"iana",extensions:["tra"]},"application/vnd.truedoc":{source:"iana"},"application/vnd.ubisoft.webplayer":{source:"iana"},"application/vnd.ufdl":{source:"iana",extensions:["ufd","ufdl"]},"application/vnd.uic.osdm+json":{source:"iana",compressible:true},"application/vnd.uiq.theme":{source:"iana",extensions:["utz"]},"application/vnd.umajin":{source:"iana",extensions:["umj"]},"application/vnd.unity":{source:"iana",extensions:["unityweb"]},"application/vnd.uoml+xml":{source:"iana",compressible:true,extensions:["uoml","uo"]},"application/vnd.uplanet.alert":{source:"iana"},"application/vnd.uplanet.alert-wbxml":{source:"iana"},"application/vnd.uplanet.bearer-choice":{source:"iana"},"application/vnd.uplanet.bearer-choice-wbxml":{source:"iana"},"application/vnd.uplanet.cacheop":{source:"iana"},"application/vnd.uplanet.cacheop-wbxml":{source:"iana"},"application/vnd.uplanet.channel":{source:"iana"},"application/vnd.uplanet.channel-wbxml":{source:"iana"},"application/vnd.uplanet.list":{source:"iana"},"application/vnd.uplanet.list-wbxml":{source:"iana"},"application/vnd.uplanet.listcmd":{source:"iana"},"application/vnd.uplanet.listcmd-wbxml":{source:"iana"},"application/vnd.uplanet.signal":{source:"iana"},"application/vnd.uri-map":{source:"iana"},"application/vnd.valve.source.material":{source:"iana"},"application/vnd.vcx":{source:"iana",extensions:["vcx"]},"application/vnd.vd-study":{source:"iana"},"application/vnd.vectorworks":{source:"iana"},"application/vnd.vel+json":{source:"iana",compressible:true},"application/vnd.veraison.tsm-report+cbor":{source:"iana"},"application/vnd.veraison.tsm-report+json":{source:"iana",compressible:true},"application/vnd.verimatrix.vcas":{source:"iana"},"application/vnd.veritone.aion+json":{source:"iana",compressible:true},"application/vnd.veryant.thin":{source:"iana"},"application/vnd.ves.encrypted":{source:"iana"},"application/vnd.vidsoft.vidconference":{source:"iana"},"application/vnd.visio":{source:"iana",extensions:["vsd","vst","vss","vsw","vsdx","vtx"]},"application/vnd.visionary":{source:"iana",extensions:["vis"]},"application/vnd.vividence.scriptfile":{source:"iana"},"application/vnd.vocalshaper.vsp4":{source:"iana"},"application/vnd.vsf":{source:"iana",extensions:["vsf"]},"application/vnd.wap.sic":{source:"iana"},"application/vnd.wap.slc":{source:"iana"},"application/vnd.wap.wbxml":{source:"iana",charset:"UTF-8",extensions:["wbxml"]},"application/vnd.wap.wmlc":{source:"iana",extensions:["wmlc"]},"application/vnd.wap.wmlscriptc":{source:"iana",extensions:["wmlsc"]},"application/vnd.wasmflow.wafl":{source:"iana"},"application/vnd.webturbo":{source:"iana",extensions:["wtb"]},"application/vnd.wfa.dpp":{source:"iana"},"application/vnd.wfa.p2p":{source:"iana"},"application/vnd.wfa.wsc":{source:"iana"},"application/vnd.windows.devicepairing":{source:"iana"},"application/vnd.wmc":{source:"iana"},"application/vnd.wmf.bootstrap":{source:"iana"},"application/vnd.wolfram.mathematica":{source:"iana"},"application/vnd.wolfram.mathematica.package":{source:"iana"},"application/vnd.wolfram.player":{source:"iana",extensions:["nbp"]},"application/vnd.wordlift":{source:"iana"},"application/vnd.wordperfect":{source:"iana",extensions:["wpd"]},"application/vnd.wqd":{source:"iana",extensions:["wqd"]},"application/vnd.wrq-hp3000-labelled":{source:"iana"},"application/vnd.wt.stf":{source:"iana",extensions:["stf"]},"application/vnd.wv.csp+wbxml":{source:"iana"},"application/vnd.wv.csp+xml":{source:"iana",compressible:true},"application/vnd.wv.ssp+xml":{source:"iana",compressible:true},"application/vnd.xacml+json":{source:"iana",compressible:true},"application/vnd.xara":{source:"iana",extensions:["xar"]},"application/vnd.xarin.cpj":{source:"iana"},"application/vnd.xecrets-encrypted":{source:"iana"},"application/vnd.xfdl":{source:"iana",extensions:["xfdl"]},"application/vnd.xfdl.webform":{source:"iana"},"application/vnd.xmi+xml":{source:"iana",compressible:true},"application/vnd.xmpie.cpkg":{source:"iana"},"application/vnd.xmpie.dpkg":{source:"iana"},"application/vnd.xmpie.plan":{source:"iana"},"application/vnd.xmpie.ppkg":{source:"iana"},"application/vnd.xmpie.xlim":{source:"iana"},"application/vnd.yamaha.hv-dic":{source:"iana",extensions:["hvd"]},"application/vnd.yamaha.hv-script":{source:"iana",extensions:["hvs"]},"application/vnd.yamaha.hv-voice":{source:"iana",extensions:["hvp"]},"application/vnd.yamaha.openscoreformat":{source:"iana",extensions:["osf"]},"application/vnd.yamaha.openscoreformat.osfpvg+xml":{source:"iana",compressible:true,extensions:["osfpvg"]},"application/vnd.yamaha.remote-setup":{source:"iana"},"application/vnd.yamaha.smaf-audio":{source:"iana",extensions:["saf"]},"application/vnd.yamaha.smaf-phrase":{source:"iana",extensions:["spf"]},"application/vnd.yamaha.through-ngn":{source:"iana"},"application/vnd.yamaha.tunnel-udpencap":{source:"iana"},"application/vnd.yaoweme":{source:"iana"},"application/vnd.yellowriver-custom-menu":{source:"iana",extensions:["cmp"]},"application/vnd.zul":{source:"iana",extensions:["zir","zirz"]},"application/vnd.zzazz.deck+xml":{source:"iana",compressible:true,extensions:["zaz"]},"application/voicexml+xml":{source:"iana",compressible:true,extensions:["vxml"]},"application/voucher-cms+json":{source:"iana",compressible:true},"application/voucher-jws+json":{source:"iana",compressible:true},"application/vp":{source:"iana"},"application/vp+cose":{source:"iana"},"application/vp+jwt":{source:"iana"},"application/vq-rtcpxr":{source:"iana"},"application/wasm":{source:"iana",compressible:true,extensions:["wasm"]},"application/watcherinfo+xml":{source:"iana",compressible:true,extensions:["wif"]},"application/webpush-options+json":{source:"iana",compressible:true},"application/whoispp-query":{source:"iana"},"application/whoispp-response":{source:"iana"},"application/widget":{source:"iana",extensions:["wgt"]},"application/winhlp":{source:"apache",extensions:["hlp"]},"application/wita":{source:"iana"},"application/wordperfect5.1":{source:"iana"},"application/wsdl+xml":{source:"iana",compressible:true,extensions:["wsdl"]},"application/wspolicy+xml":{source:"iana",compressible:true,extensions:["wspolicy"]},"application/x-7z-compressed":{source:"apache",compressible:false,extensions:["7z"]},"application/x-abiword":{source:"apache",extensions:["abw"]},"application/x-ace-compressed":{source:"apache",extensions:["ace"]},"application/x-amf":{source:"apache"},"application/x-apple-diskimage":{source:"apache",extensions:["dmg"]},"application/x-arj":{compressible:false,extensions:["arj"]},"application/x-authorware-bin":{source:"apache",extensions:["aab","x32","u32","vox"]},"application/x-authorware-map":{source:"apache",extensions:["aam"]},"application/x-authorware-seg":{source:"apache",extensions:["aas"]},"application/x-bcpio":{source:"apache",extensions:["bcpio"]},"application/x-bdoc":{compressible:false,extensions:["bdoc"]},"application/x-bittorrent":{source:"apache",extensions:["torrent"]},"application/x-blender":{extensions:["blend"]},"application/x-blorb":{source:"apache",extensions:["blb","blorb"]},"application/x-bzip":{source:"apache",compressible:false,extensions:["bz"]},"application/x-bzip2":{source:"apache",compressible:false,extensions:["bz2","boz"]},"application/x-cbr":{source:"apache",extensions:["cbr","cba","cbt","cbz","cb7"]},"application/x-cdlink":{source:"apache",extensions:["vcd"]},"application/x-cfs-compressed":{source:"apache",extensions:["cfs"]},"application/x-chat":{source:"apache",extensions:["chat"]},"application/x-chess-pgn":{source:"apache",extensions:["pgn"]},"application/x-chrome-extension":{extensions:["crx"]},"application/x-cocoa":{source:"nginx",extensions:["cco"]},"application/x-compress":{source:"apache"},"application/x-compressed":{extensions:["rar"]},"application/x-conference":{source:"apache",extensions:["nsc"]},"application/x-cpio":{source:"apache",extensions:["cpio"]},"application/x-csh":{source:"apache",extensions:["csh"]},"application/x-deb":{compressible:false},"application/x-debian-package":{source:"apache",extensions:["deb","udeb"]},"application/x-dgc-compressed":{source:"apache",extensions:["dgc"]},"application/x-director":{source:"apache",extensions:["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]},"application/x-doom":{source:"apache",extensions:["wad"]},"application/x-dtbncx+xml":{source:"apache",compressible:true,extensions:["ncx"]},"application/x-dtbook+xml":{source:"apache",compressible:true,extensions:["dtb"]},"application/x-dtbresource+xml":{source:"apache",compressible:true,extensions:["res"]},"application/x-dvi":{source:"apache",compressible:false,extensions:["dvi"]},"application/x-envoy":{source:"apache",extensions:["evy"]},"application/x-eva":{source:"apache",extensions:["eva"]},"application/x-font-bdf":{source:"apache",extensions:["bdf"]},"application/x-font-dos":{source:"apache"},"application/x-font-framemaker":{source:"apache"},"application/x-font-ghostscript":{source:"apache",extensions:["gsf"]},"application/x-font-libgrx":{source:"apache"},"application/x-font-linux-psf":{source:"apache",extensions:["psf"]},"application/x-font-pcf":{source:"apache",extensions:["pcf"]},"application/x-font-snf":{source:"apache",extensions:["snf"]},"application/x-font-speedo":{source:"apache"},"application/x-font-sunos-news":{source:"apache"},"application/x-font-type1":{source:"apache",extensions:["pfa","pfb","pfm","afm"]},"application/x-font-vfont":{source:"apache"},"application/x-freearc":{source:"apache",extensions:["arc"]},"application/x-futuresplash":{source:"apache",extensions:["spl"]},"application/x-gca-compressed":{source:"apache",extensions:["gca"]},"application/x-glulx":{source:"apache",extensions:["ulx"]},"application/x-gnumeric":{source:"apache",extensions:["gnumeric"]},"application/x-gramps-xml":{source:"apache",extensions:["gramps"]},"application/x-gtar":{source:"apache",extensions:["gtar"]},"application/x-gzip":{source:"apache"},"application/x-hdf":{source:"apache",extensions:["hdf"]},"application/x-httpd-php":{compressible:true,extensions:["php"]},"application/x-install-instructions":{source:"apache",extensions:["install"]},"application/x-ipynb+json":{compressible:true,extensions:["ipynb"]},"application/x-iso9660-image":{source:"apache",extensions:["iso"]},"application/x-iwork-keynote-sffkey":{extensions:["key"]},"application/x-iwork-numbers-sffnumbers":{extensions:["numbers"]},"application/x-iwork-pages-sffpages":{extensions:["pages"]},"application/x-java-archive-diff":{source:"nginx",extensions:["jardiff"]},"application/x-java-jnlp-file":{source:"apache",compressible:false,extensions:["jnlp"]},"application/x-javascript":{compressible:true},"application/x-keepass2":{extensions:["kdbx"]},"application/x-latex":{source:"apache",compressible:false,extensions:["latex"]},"application/x-lua-bytecode":{extensions:["luac"]},"application/x-lzh-compressed":{source:"apache",extensions:["lzh","lha"]},"application/x-makeself":{source:"nginx",extensions:["run"]},"application/x-mie":{source:"apache",extensions:["mie"]},"application/x-mobipocket-ebook":{source:"apache",extensions:["prc","mobi"]},"application/x-mpegurl":{compressible:false},"application/x-ms-application":{source:"apache",extensions:["application"]},"application/x-ms-shortcut":{source:"apache",extensions:["lnk"]},"application/x-ms-wmd":{source:"apache",extensions:["wmd"]},"application/x-ms-wmz":{source:"apache",extensions:["wmz"]},"application/x-ms-xbap":{source:"apache",extensions:["xbap"]},"application/x-msaccess":{source:"apache",extensions:["mdb"]},"application/x-msbinder":{source:"apache",extensions:["obd"]},"application/x-mscardfile":{source:"apache",extensions:["crd"]},"application/x-msclip":{source:"apache",extensions:["clp"]},"application/x-msdos-program":{extensions:["exe"]},"application/x-msdownload":{source:"apache",extensions:["exe","dll","com","bat","msi"]},"application/x-msmediaview":{source:"apache",extensions:["mvb","m13","m14"]},"application/x-msmetafile":{source:"apache",extensions:["wmf","wmz","emf","emz"]},"application/x-msmoney":{source:"apache",extensions:["mny"]},"application/x-mspublisher":{source:"apache",extensions:["pub"]},"application/x-msschedule":{source:"apache",extensions:["scd"]},"application/x-msterminal":{source:"apache",extensions:["trm"]},"application/x-mswrite":{source:"apache",extensions:["wri"]},"application/x-netcdf":{source:"apache",extensions:["nc","cdf"]},"application/x-ns-proxy-autoconfig":{compressible:true,extensions:["pac"]},"application/x-nzb":{source:"apache",extensions:["nzb"]},"application/x-perl":{source:"nginx",extensions:["pl","pm"]},"application/x-pilot":{source:"nginx",extensions:["prc","pdb"]},"application/x-pkcs12":{source:"apache",compressible:false,extensions:["p12","pfx"]},"application/x-pkcs7-certificates":{source:"apache",extensions:["p7b","spc"]},"application/x-pkcs7-certreqresp":{source:"apache",extensions:["p7r"]},"application/x-pki-message":{source:"iana"},"application/x-rar-compressed":{source:"apache",compressible:false,extensions:["rar"]},"application/x-redhat-package-manager":{source:"nginx",extensions:["rpm"]},"application/x-research-info-systems":{source:"apache",extensions:["ris"]},"application/x-sea":{source:"nginx",extensions:["sea"]},"application/x-sh":{source:"apache",compressible:true,extensions:["sh"]},"application/x-shar":{source:"apache",extensions:["shar"]},"application/x-shockwave-flash":{source:"apache",compressible:false,extensions:["swf"]},"application/x-silverlight-app":{source:"apache",extensions:["xap"]},"application/x-sql":{source:"apache",extensions:["sql"]},"application/x-stuffit":{source:"apache",compressible:false,extensions:["sit"]},"application/x-stuffitx":{source:"apache",extensions:["sitx"]},"application/x-subrip":{source:"apache",extensions:["srt"]},"application/x-sv4cpio":{source:"apache",extensions:["sv4cpio"]},"application/x-sv4crc":{source:"apache",extensions:["sv4crc"]},"application/x-t3vm-image":{source:"apache",extensions:["t3"]},"application/x-tads":{source:"apache",extensions:["gam"]},"application/x-tar":{source:"apache",compressible:true,extensions:["tar"]},"application/x-tcl":{source:"apache",extensions:["tcl","tk"]},"application/x-tex":{source:"apache",extensions:["tex"]},"application/x-tex-tfm":{source:"apache",extensions:["tfm"]},"application/x-texinfo":{source:"apache",extensions:["texinfo","texi"]},"application/x-tgif":{source:"apache",extensions:["obj"]},"application/x-ustar":{source:"apache",extensions:["ustar"]},"application/x-virtualbox-hdd":{compressible:true,extensions:["hdd"]},"application/x-virtualbox-ova":{compressible:true,extensions:["ova"]},"application/x-virtualbox-ovf":{compressible:true,extensions:["ovf"]},"application/x-virtualbox-vbox":{compressible:true,extensions:["vbox"]},"application/x-virtualbox-vbox-extpack":{compressible:false,extensions:["vbox-extpack"]},"application/x-virtualbox-vdi":{compressible:true,extensions:["vdi"]},"application/x-virtualbox-vhd":{compressible:true,extensions:["vhd"]},"application/x-virtualbox-vmdk":{compressible:true,extensions:["vmdk"]},"application/x-wais-source":{source:"apache",extensions:["src"]},"application/x-web-app-manifest+json":{compressible:true,extensions:["webapp"]},"application/x-www-form-urlencoded":{source:"iana",compressible:true},"application/x-x509-ca-cert":{source:"iana",extensions:["der","crt","pem"]},"application/x-x509-ca-ra-cert":{source:"iana"},"application/x-x509-next-ca-cert":{source:"iana"},"application/x-xfig":{source:"apache",extensions:["fig"]},"application/x-xliff+xml":{source:"apache",compressible:true,extensions:["xlf"]},"application/x-xpinstall":{source:"apache",compressible:false,extensions:["xpi"]},"application/x-xz":{source:"apache",extensions:["xz"]},"application/x-zip-compressed":{extensions:["zip"]},"application/x-zmachine":{source:"apache",extensions:["z1","z2","z3","z4","z5","z6","z7","z8"]},"application/x400-bp":{source:"iana"},"application/xacml+xml":{source:"iana",compressible:true},"application/xaml+xml":{source:"apache",compressible:true,extensions:["xaml"]},"application/xcap-att+xml":{source:"iana",compressible:true,extensions:["xav"]},"application/xcap-caps+xml":{source:"iana",compressible:true,extensions:["xca"]},"application/xcap-diff+xml":{source:"iana",compressible:true,extensions:["xdf"]},"application/xcap-el+xml":{source:"iana",compressible:true,extensions:["xel"]},"application/xcap-error+xml":{source:"iana",compressible:true},"application/xcap-ns+xml":{source:"iana",compressible:true,extensions:["xns"]},"application/xcon-conference-info+xml":{source:"iana",compressible:true},"application/xcon-conference-info-diff+xml":{source:"iana",compressible:true},"application/xenc+xml":{source:"iana",compressible:true,extensions:["xenc"]},"application/xfdf":{source:"iana",extensions:["xfdf"]},"application/xhtml+xml":{source:"iana",compressible:true,extensions:["xhtml","xht"]},"application/xhtml-voice+xml":{source:"apache",compressible:true},"application/xliff+xml":{source:"iana",compressible:true,extensions:["xlf"]},"application/xml":{source:"iana",compressible:true,extensions:["xml","xsl","xsd","rng"]},"application/xml-dtd":{source:"iana",compressible:true,extensions:["dtd"]},"application/xml-external-parsed-entity":{source:"iana"},"application/xml-patch+xml":{source:"iana",compressible:true},"application/xmpp+xml":{source:"iana",compressible:true},"application/xop+xml":{source:"iana",compressible:true,extensions:["xop"]},"application/xproc+xml":{source:"apache",compressible:true,extensions:["xpl"]},"application/xslt+xml":{source:"iana",compressible:true,extensions:["xsl","xslt"]},"application/xspf+xml":{source:"apache",compressible:true,extensions:["xspf"]},"application/xv+xml":{source:"iana",compressible:true,extensions:["mxml","xhvml","xvml","xvm"]},"application/yaml":{source:"iana"},"application/yang":{source:"iana",extensions:["yang"]},"application/yang-data+cbor":{source:"iana"},"application/yang-data+json":{source:"iana",compressible:true},"application/yang-data+xml":{source:"iana",compressible:true},"application/yang-patch+json":{source:"iana",compressible:true},"application/yang-patch+xml":{source:"iana",compressible:true},"application/yang-sid+json":{source:"iana",compressible:true},"application/yin+xml":{source:"iana",compressible:true,extensions:["yin"]},"application/zip":{source:"iana",compressible:false,extensions:["zip"]},"application/zip+dotlottie":{extensions:["lottie"]},"application/zlib":{source:"iana"},"application/zstd":{source:"iana"},"audio/1d-interleaved-parityfec":{source:"iana"},"audio/32kadpcm":{source:"iana"},"audio/3gpp":{source:"iana",compressible:false,extensions:["3gpp"]},"audio/3gpp2":{source:"iana"},"audio/aac":{source:"iana",extensions:["adts","aac"]},"audio/ac3":{source:"iana"},"audio/adpcm":{source:"apache",extensions:["adp"]},"audio/amr":{source:"iana",extensions:["amr"]},"audio/amr-wb":{source:"iana"},"audio/amr-wb+":{source:"iana"},"audio/aptx":{source:"iana"},"audio/asc":{source:"iana"},"audio/atrac-advanced-lossless":{source:"iana"},"audio/atrac-x":{source:"iana"},"audio/atrac3":{source:"iana"},"audio/basic":{source:"iana",compressible:false,extensions:["au","snd"]},"audio/bv16":{source:"iana"},"audio/bv32":{source:"iana"},"audio/clearmode":{source:"iana"},"audio/cn":{source:"iana"},"audio/dat12":{source:"iana"},"audio/dls":{source:"iana"},"audio/dsr-es201108":{source:"iana"},"audio/dsr-es202050":{source:"iana"},"audio/dsr-es202211":{source:"iana"},"audio/dsr-es202212":{source:"iana"},"audio/dv":{source:"iana"},"audio/dvi4":{source:"iana"},"audio/eac3":{source:"iana"},"audio/encaprtp":{source:"iana"},"audio/evrc":{source:"iana"},"audio/evrc-qcp":{source:"iana"},"audio/evrc0":{source:"iana"},"audio/evrc1":{source:"iana"},"audio/evrcb":{source:"iana"},"audio/evrcb0":{source:"iana"},"audio/evrcb1":{source:"iana"},"audio/evrcnw":{source:"iana"},"audio/evrcnw0":{source:"iana"},"audio/evrcnw1":{source:"iana"},"audio/evrcwb":{source:"iana"},"audio/evrcwb0":{source:"iana"},"audio/evrcwb1":{source:"iana"},"audio/evs":{source:"iana"},"audio/flac":{source:"iana"},"audio/flexfec":{source:"iana"},"audio/fwdred":{source:"iana"},"audio/g711-0":{source:"iana"},"audio/g719":{source:"iana"},"audio/g722":{source:"iana"},"audio/g7221":{source:"iana"},"audio/g723":{source:"iana"},"audio/g726-16":{source:"iana"},"audio/g726-24":{source:"iana"},"audio/g726-32":{source:"iana"},"audio/g726-40":{source:"iana"},"audio/g728":{source:"iana"},"audio/g729":{source:"iana"},"audio/g7291":{source:"iana"},"audio/g729d":{source:"iana"},"audio/g729e":{source:"iana"},"audio/gsm":{source:"iana"},"audio/gsm-efr":{source:"iana"},"audio/gsm-hr-08":{source:"iana"},"audio/ilbc":{source:"iana"},"audio/ip-mr_v2.5":{source:"iana"},"audio/isac":{source:"apache"},"audio/l16":{source:"iana"},"audio/l20":{source:"iana"},"audio/l24":{source:"iana",compressible:false},"audio/l8":{source:"iana"},"audio/lpc":{source:"iana"},"audio/matroska":{source:"iana"},"audio/melp":{source:"iana"},"audio/melp1200":{source:"iana"},"audio/melp2400":{source:"iana"},"audio/melp600":{source:"iana"},"audio/mhas":{source:"iana"},"audio/midi":{source:"apache",extensions:["mid","midi","kar","rmi"]},"audio/midi-clip":{source:"iana"},"audio/mobile-xmf":{source:"iana",extensions:["mxmf"]},"audio/mp3":{compressible:false,extensions:["mp3"]},"audio/mp4":{source:"iana",compressible:false,extensions:["m4a","mp4a","m4b"]},"audio/mp4a-latm":{source:"iana"},"audio/mpa":{source:"iana"},"audio/mpa-robust":{source:"iana"},"audio/mpeg":{source:"iana",compressible:false,extensions:["mpga","mp2","mp2a","mp3","m2a","m3a"]},"audio/mpeg4-generic":{source:"iana"},"audio/musepack":{source:"apache"},"audio/ogg":{source:"iana",compressible:false,extensions:["oga","ogg","spx","opus"]},"audio/opus":{source:"iana"},"audio/parityfec":{source:"iana"},"audio/pcma":{source:"iana"},"audio/pcma-wb":{source:"iana"},"audio/pcmu":{source:"iana"},"audio/pcmu-wb":{source:"iana"},"audio/prs.sid":{source:"iana"},"audio/qcelp":{source:"iana"},"audio/raptorfec":{source:"iana"},"audio/red":{source:"iana"},"audio/rtp-enc-aescm128":{source:"iana"},"audio/rtp-midi":{source:"iana"},"audio/rtploopback":{source:"iana"},"audio/rtx":{source:"iana"},"audio/s3m":{source:"apache",extensions:["s3m"]},"audio/scip":{source:"iana"},"audio/silk":{source:"apache",extensions:["sil"]},"audio/smv":{source:"iana"},"audio/smv-qcp":{source:"iana"},"audio/smv0":{source:"iana"},"audio/sofa":{source:"iana"},"audio/sp-midi":{source:"iana"},"audio/speex":{source:"iana"},"audio/t140c":{source:"iana"},"audio/t38":{source:"iana"},"audio/telephone-event":{source:"iana"},"audio/tetra_acelp":{source:"iana"},"audio/tetra_acelp_bb":{source:"iana"},"audio/tone":{source:"iana"},"audio/tsvcis":{source:"iana"},"audio/uemclip":{source:"iana"},"audio/ulpfec":{source:"iana"},"audio/usac":{source:"iana"},"audio/vdvi":{source:"iana"},"audio/vmr-wb":{source:"iana"},"audio/vnd.3gpp.iufp":{source:"iana"},"audio/vnd.4sb":{source:"iana"},"audio/vnd.audiokoz":{source:"iana"},"audio/vnd.celp":{source:"iana"},"audio/vnd.cisco.nse":{source:"iana"},"audio/vnd.cmles.radio-events":{source:"iana"},"audio/vnd.cns.anp1":{source:"iana"},"audio/vnd.cns.inf1":{source:"iana"},"audio/vnd.dece.audio":{source:"iana",extensions:["uva","uvva"]},"audio/vnd.digital-winds":{source:"iana",extensions:["eol"]},"audio/vnd.dlna.adts":{source:"iana"},"audio/vnd.dolby.heaac.1":{source:"iana"},"audio/vnd.dolby.heaac.2":{source:"iana"},"audio/vnd.dolby.mlp":{source:"iana"},"audio/vnd.dolby.mps":{source:"iana"},"audio/vnd.dolby.pl2":{source:"iana"},"audio/vnd.dolby.pl2x":{source:"iana"},"audio/vnd.dolby.pl2z":{source:"iana"},"audio/vnd.dolby.pulse.1":{source:"iana"},"audio/vnd.dra":{source:"iana",extensions:["dra"]},"audio/vnd.dts":{source:"iana",extensions:["dts"]},"audio/vnd.dts.hd":{source:"iana",extensions:["dtshd"]},"audio/vnd.dts.uhd":{source:"iana"},"audio/vnd.dvb.file":{source:"iana"},"audio/vnd.everad.plj":{source:"iana"},"audio/vnd.hns.audio":{source:"iana"},"audio/vnd.lucent.voice":{source:"iana",extensions:["lvp"]},"audio/vnd.ms-playready.media.pya":{source:"iana",extensions:["pya"]},"audio/vnd.nokia.mobile-xmf":{source:"iana"},"audio/vnd.nortel.vbk":{source:"iana"},"audio/vnd.nuera.ecelp4800":{source:"iana",extensions:["ecelp4800"]},"audio/vnd.nuera.ecelp7470":{source:"iana",extensions:["ecelp7470"]},"audio/vnd.nuera.ecelp9600":{source:"iana",extensions:["ecelp9600"]},"audio/vnd.octel.sbc":{source:"iana"},"audio/vnd.presonus.multitrack":{source:"iana"},"audio/vnd.qcelp":{source:"apache"},"audio/vnd.rhetorex.32kadpcm":{source:"iana"},"audio/vnd.rip":{source:"iana",extensions:["rip"]},"audio/vnd.rn-realaudio":{compressible:false},"audio/vnd.sealedmedia.softseal.mpeg":{source:"iana"},"audio/vnd.vmx.cvsd":{source:"iana"},"audio/vnd.wave":{compressible:false},"audio/vorbis":{source:"iana",compressible:false},"audio/vorbis-config":{source:"iana"},"audio/wav":{compressible:false,extensions:["wav"]},"audio/wave":{compressible:false,extensions:["wav"]},"audio/webm":{source:"apache",compressible:false,extensions:["weba"]},"audio/x-aac":{source:"apache",compressible:false,extensions:["aac"]},"audio/x-aiff":{source:"apache",extensions:["aif","aiff","aifc"]},"audio/x-caf":{source:"apache",compressible:false,extensions:["caf"]},"audio/x-flac":{source:"apache",extensions:["flac"]},"audio/x-m4a":{source:"nginx",extensions:["m4a"]},"audio/x-matroska":{source:"apache",extensions:["mka"]},"audio/x-mpegurl":{source:"apache",extensions:["m3u"]},"audio/x-ms-wax":{source:"apache",extensions:["wax"]},"audio/x-ms-wma":{source:"apache",extensions:["wma"]},"audio/x-pn-realaudio":{source:"apache",extensions:["ram","ra"]},"audio/x-pn-realaudio-plugin":{source:"apache",extensions:["rmp"]},"audio/x-realaudio":{source:"nginx",extensions:["ra"]},"audio/x-tta":{source:"apache"},"audio/x-wav":{source:"apache",extensions:["wav"]},"audio/xm":{source:"apache",extensions:["xm"]},"chemical/x-cdx":{source:"apache",extensions:["cdx"]},"chemical/x-cif":{source:"apache",extensions:["cif"]},"chemical/x-cmdf":{source:"apache",extensions:["cmdf"]},"chemical/x-cml":{source:"apache",extensions:["cml"]},"chemical/x-csml":{source:"apache",extensions:["csml"]},"chemical/x-pdb":{source:"apache"},"chemical/x-xyz":{source:"apache",extensions:["xyz"]},"font/collection":{source:"iana",extensions:["ttc"]},"font/otf":{source:"iana",compressible:true,extensions:["otf"]},"font/sfnt":{source:"iana"},"font/ttf":{source:"iana",compressible:true,extensions:["ttf"]},"font/woff":{source:"iana",extensions:["woff"]},"font/woff2":{source:"iana",extensions:["woff2"]},"image/aces":{source:"iana",extensions:["exr"]},"image/apng":{source:"iana",compressible:false,extensions:["apng"]},"image/avci":{source:"iana",extensions:["avci"]},"image/avcs":{source:"iana",extensions:["avcs"]},"image/avif":{source:"iana",compressible:false,extensions:["avif"]},"image/bmp":{source:"iana",compressible:true,extensions:["bmp","dib"]},"image/cgm":{source:"iana",extensions:["cgm"]},"image/dicom-rle":{source:"iana",extensions:["drle"]},"image/dpx":{source:"iana",extensions:["dpx"]},"image/emf":{source:"iana",extensions:["emf"]},"image/fits":{source:"iana",extensions:["fits"]},"image/g3fax":{source:"iana",extensions:["g3"]},"image/gif":{source:"iana",compressible:false,extensions:["gif"]},"image/heic":{source:"iana",extensions:["heic"]},"image/heic-sequence":{source:"iana",extensions:["heics"]},"image/heif":{source:"iana",extensions:["heif"]},"image/heif-sequence":{source:"iana",extensions:["heifs"]},"image/hej2k":{source:"iana",extensions:["hej2"]},"image/ief":{source:"iana",extensions:["ief"]},"image/j2c":{source:"iana"},"image/jaii":{source:"iana",extensions:["jaii"]},"image/jais":{source:"iana",extensions:["jais"]},"image/jls":{source:"iana",extensions:["jls"]},"image/jp2":{source:"iana",compressible:false,extensions:["jp2","jpg2"]},"image/jpeg":{source:"iana",compressible:false,extensions:["jpg","jpeg","jpe"]},"image/jph":{source:"iana",extensions:["jph"]},"image/jphc":{source:"iana",extensions:["jhc"]},"image/jpm":{source:"iana",compressible:false,extensions:["jpm","jpgm"]},"image/jpx":{source:"iana",compressible:false,extensions:["jpx","jpf"]},"image/jxl":{source:"iana",extensions:["jxl"]},"image/jxr":{source:"iana",extensions:["jxr"]},"image/jxra":{source:"iana",extensions:["jxra"]},"image/jxrs":{source:"iana",extensions:["jxrs"]},"image/jxs":{source:"iana",extensions:["jxs"]},"image/jxsc":{source:"iana",extensions:["jxsc"]},"image/jxsi":{source:"iana",extensions:["jxsi"]},"image/jxss":{source:"iana",extensions:["jxss"]},"image/ktx":{source:"iana",extensions:["ktx"]},"image/ktx2":{source:"iana",extensions:["ktx2"]},"image/naplps":{source:"iana"},"image/pjpeg":{compressible:false,extensions:["jfif"]},"image/png":{source:"iana",compressible:false,extensions:["png"]},"image/prs.btif":{source:"iana",extensions:["btif","btf"]},"image/prs.pti":{source:"iana",extensions:["pti"]},"image/pwg-raster":{source:"iana"},"image/sgi":{source:"apache",extensions:["sgi"]},"image/svg+xml":{source:"iana",compressible:true,extensions:["svg","svgz"]},"image/t38":{source:"iana",extensions:["t38"]},"image/tiff":{source:"iana",compressible:false,extensions:["tif","tiff"]},"image/tiff-fx":{source:"iana",extensions:["tfx"]},"image/vnd.adobe.photoshop":{source:"iana",compressible:true,extensions:["psd"]},"image/vnd.airzip.accelerator.azv":{source:"iana",extensions:["azv"]},"image/vnd.clip":{source:"iana"},"image/vnd.cns.inf2":{source:"iana"},"image/vnd.dece.graphic":{source:"iana",extensions:["uvi","uvvi","uvg","uvvg"]},"image/vnd.djvu":{source:"iana",extensions:["djvu","djv"]},"image/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"image/vnd.dwg":{source:"iana",extensions:["dwg"]},"image/vnd.dxf":{source:"iana",extensions:["dxf"]},"image/vnd.fastbidsheet":{source:"iana",extensions:["fbs"]},"image/vnd.fpx":{source:"iana",extensions:["fpx"]},"image/vnd.fst":{source:"iana",extensions:["fst"]},"image/vnd.fujixerox.edmics-mmr":{source:"iana",extensions:["mmr"]},"image/vnd.fujixerox.edmics-rlc":{source:"iana",extensions:["rlc"]},"image/vnd.globalgraphics.pgb":{source:"iana"},"image/vnd.microsoft.icon":{source:"iana",compressible:true,extensions:["ico"]},"image/vnd.mix":{source:"iana"},"image/vnd.mozilla.apng":{source:"iana"},"image/vnd.ms-dds":{compressible:true,extensions:["dds"]},"image/vnd.ms-modi":{source:"iana",extensions:["mdi"]},"image/vnd.ms-photo":{source:"apache",extensions:["wdp"]},"image/vnd.net-fpx":{source:"iana",extensions:["npx"]},"image/vnd.pco.b16":{source:"iana",extensions:["b16"]},"image/vnd.radiance":{source:"iana"},"image/vnd.sealed.png":{source:"iana"},"image/vnd.sealedmedia.softseal.gif":{source:"iana"},"image/vnd.sealedmedia.softseal.jpg":{source:"iana"},"image/vnd.svf":{source:"iana"},"image/vnd.tencent.tap":{source:"iana",extensions:["tap"]},"image/vnd.valve.source.texture":{source:"iana",extensions:["vtf"]},"image/vnd.wap.wbmp":{source:"iana",extensions:["wbmp"]},"image/vnd.xiff":{source:"iana",extensions:["xif"]},"image/vnd.zbrush.pcx":{source:"iana",extensions:["pcx"]},"image/webp":{source:"iana",extensions:["webp"]},"image/wmf":{source:"iana",extensions:["wmf"]},"image/x-3ds":{source:"apache",extensions:["3ds"]},"image/x-adobe-dng":{extensions:["dng"]},"image/x-cmu-raster":{source:"apache",extensions:["ras"]},"image/x-cmx":{source:"apache",extensions:["cmx"]},"image/x-emf":{source:"iana"},"image/x-freehand":{source:"apache",extensions:["fh","fhc","fh4","fh5","fh7"]},"image/x-icon":{source:"apache",compressible:true,extensions:["ico"]},"image/x-jng":{source:"nginx",extensions:["jng"]},"image/x-mrsid-image":{source:"apache",extensions:["sid"]},"image/x-ms-bmp":{source:"nginx",compressible:true,extensions:["bmp"]},"image/x-pcx":{source:"apache",extensions:["pcx"]},"image/x-pict":{source:"apache",extensions:["pic","pct"]},"image/x-portable-anymap":{source:"apache",extensions:["pnm"]},"image/x-portable-bitmap":{source:"apache",extensions:["pbm"]},"image/x-portable-graymap":{source:"apache",extensions:["pgm"]},"image/x-portable-pixmap":{source:"apache",extensions:["ppm"]},"image/x-rgb":{source:"apache",extensions:["rgb"]},"image/x-tga":{source:"apache",extensions:["tga"]},"image/x-wmf":{source:"iana"},"image/x-xbitmap":{source:"apache",extensions:["xbm"]},"image/x-xcf":{compressible:false},"image/x-xpixmap":{source:"apache",extensions:["xpm"]},"image/x-xwindowdump":{source:"apache",extensions:["xwd"]},"message/bhttp":{source:"iana"},"message/cpim":{source:"iana"},"message/delivery-status":{source:"iana"},"message/disposition-notification":{source:"iana",extensions:["disposition-notification"]},"message/external-body":{source:"iana"},"message/feedback-report":{source:"iana"},"message/global":{source:"iana",extensions:["u8msg"]},"message/global-delivery-status":{source:"iana",extensions:["u8dsn"]},"message/global-disposition-notification":{source:"iana",extensions:["u8mdn"]},"message/global-headers":{source:"iana",extensions:["u8hdr"]},"message/http":{source:"iana",compressible:false},"message/imdn+xml":{source:"iana",compressible:true},"message/mls":{source:"iana"},"message/news":{source:"apache"},"message/ohttp-req":{source:"iana"},"message/ohttp-res":{source:"iana"},"message/partial":{source:"iana",compressible:false},"message/rfc822":{source:"iana",compressible:true,extensions:["eml","mime","mht","mhtml"]},"message/s-http":{source:"apache"},"message/sip":{source:"iana"},"message/sipfrag":{source:"iana"},"message/tracking-status":{source:"iana"},"message/vnd.si.simp":{source:"apache"},"message/vnd.wfa.wsc":{source:"iana",extensions:["wsc"]},"model/3mf":{source:"iana",extensions:["3mf"]},"model/e57":{source:"iana"},"model/gltf+json":{source:"iana",compressible:true,extensions:["gltf"]},"model/gltf-binary":{source:"iana",compressible:true,extensions:["glb"]},"model/iges":{source:"iana",compressible:false,extensions:["igs","iges"]},"model/jt":{source:"iana",extensions:["jt"]},"model/mesh":{source:"iana",compressible:false,extensions:["msh","mesh","silo"]},"model/mtl":{source:"iana",extensions:["mtl"]},"model/obj":{source:"iana",extensions:["obj"]},"model/prc":{source:"iana",extensions:["prc"]},"model/step":{source:"iana",extensions:["step","stp","stpnc","p21","210"]},"model/step+xml":{source:"iana",compressible:true,extensions:["stpx"]},"model/step+zip":{source:"iana",compressible:false,extensions:["stpz"]},"model/step-xml+zip":{source:"iana",compressible:false,extensions:["stpxz"]},"model/stl":{source:"iana",extensions:["stl"]},"model/u3d":{source:"iana",extensions:["u3d"]},"model/vnd.bary":{source:"iana",extensions:["bary"]},"model/vnd.cld":{source:"iana",extensions:["cld"]},"model/vnd.collada+xml":{source:"iana",compressible:true,extensions:["dae"]},"model/vnd.dwf":{source:"iana",extensions:["dwf"]},"model/vnd.flatland.3dml":{source:"iana"},"model/vnd.gdl":{source:"iana",extensions:["gdl"]},"model/vnd.gs-gdl":{source:"apache"},"model/vnd.gs.gdl":{source:"iana"},"model/vnd.gtw":{source:"iana",extensions:["gtw"]},"model/vnd.moml+xml":{source:"iana",compressible:true},"model/vnd.mts":{source:"iana",extensions:["mts"]},"model/vnd.opengex":{source:"iana",extensions:["ogex"]},"model/vnd.parasolid.transmit.binary":{source:"iana",extensions:["x_b"]},"model/vnd.parasolid.transmit.text":{source:"iana",extensions:["x_t"]},"model/vnd.pytha.pyox":{source:"iana",extensions:["pyo","pyox"]},"model/vnd.rosette.annotated-data-model":{source:"iana"},"model/vnd.sap.vds":{source:"iana",extensions:["vds"]},"model/vnd.usda":{source:"iana",extensions:["usda"]},"model/vnd.usdz+zip":{source:"iana",compressible:false,extensions:["usdz"]},"model/vnd.valve.source.compiled-map":{source:"iana",extensions:["bsp"]},"model/vnd.vtu":{source:"iana",extensions:["vtu"]},"model/vrml":{source:"iana",compressible:false,extensions:["wrl","vrml"]},"model/x3d+binary":{source:"apache",compressible:false,extensions:["x3db","x3dbz"]},"model/x3d+fastinfoset":{source:"iana",extensions:["x3db"]},"model/x3d+vrml":{source:"apache",compressible:false,extensions:["x3dv","x3dvz"]},"model/x3d+xml":{source:"iana",compressible:true,extensions:["x3d","x3dz"]},"model/x3d-vrml":{source:"iana",extensions:["x3dv"]},"multipart/alternative":{source:"iana",compressible:false},"multipart/appledouble":{source:"iana"},"multipart/byteranges":{source:"iana"},"multipart/digest":{source:"iana"},"multipart/encrypted":{source:"iana",compressible:false},"multipart/form-data":{source:"iana",compressible:false},"multipart/header-set":{source:"iana"},"multipart/mixed":{source:"iana"},"multipart/multilingual":{source:"iana"},"multipart/parallel":{source:"iana"},"multipart/related":{source:"iana",compressible:false},"multipart/report":{source:"iana"},"multipart/signed":{source:"iana",compressible:false},"multipart/vnd.bint.med-plus":{source:"iana"},"multipart/voice-message":{source:"iana"},"multipart/x-mixed-replace":{source:"iana"},"text/1d-interleaved-parityfec":{source:"iana"},"text/cache-manifest":{source:"iana",compressible:true,extensions:["appcache","manifest"]},"text/calendar":{source:"iana",extensions:["ics","ifb"]},"text/calender":{compressible:true},"text/cmd":{compressible:true},"text/coffeescript":{extensions:["coffee","litcoffee"]},"text/cql":{source:"iana"},"text/cql-expression":{source:"iana"},"text/cql-identifier":{source:"iana"},"text/css":{source:"iana",charset:"UTF-8",compressible:true,extensions:["css"]},"text/csv":{source:"iana",compressible:true,extensions:["csv"]},"text/csv-schema":{source:"iana"},"text/directory":{source:"iana"},"text/dns":{source:"iana"},"text/ecmascript":{source:"apache"},"text/encaprtp":{source:"iana"},"text/enriched":{source:"iana"},"text/fhirpath":{source:"iana"},"text/flexfec":{source:"iana"},"text/fwdred":{source:"iana"},"text/gff3":{source:"iana"},"text/grammar-ref-list":{source:"iana"},"text/hl7v2":{source:"iana"},"text/html":{source:"iana",compressible:true,extensions:["html","htm","shtml"]},"text/jade":{extensions:["jade"]},"text/javascript":{source:"iana",charset:"UTF-8",compressible:true,extensions:["js","mjs"]},"text/jcr-cnd":{source:"iana"},"text/jsx":{compressible:true,extensions:["jsx"]},"text/less":{compressible:true,extensions:["less"]},"text/markdown":{source:"iana",compressible:true,extensions:["md","markdown"]},"text/mathml":{source:"nginx",extensions:["mml"]},"text/mdx":{compressible:true,extensions:["mdx"]},"text/mizar":{source:"iana"},"text/n3":{source:"iana",charset:"UTF-8",compressible:true,extensions:["n3"]},"text/parameters":{source:"iana",charset:"UTF-8"},"text/parityfec":{source:"iana"},"text/plain":{source:"iana",compressible:true,extensions:["txt","text","conf","def","list","log","in","ini"]},"text/provenance-notation":{source:"iana",charset:"UTF-8"},"text/prs.fallenstein.rst":{source:"iana"},"text/prs.lines.tag":{source:"iana",extensions:["dsc"]},"text/prs.prop.logic":{source:"iana"},"text/prs.texi":{source:"iana"},"text/raptorfec":{source:"iana"},"text/red":{source:"iana"},"text/rfc822-headers":{source:"iana"},"text/richtext":{source:"iana",compressible:true,extensions:["rtx"]},"text/rtf":{source:"iana",compressible:true,extensions:["rtf"]},"text/rtp-enc-aescm128":{source:"iana"},"text/rtploopback":{source:"iana"},"text/rtx":{source:"iana"},"text/sgml":{source:"iana",extensions:["sgml","sgm"]},"text/shaclc":{source:"iana"},"text/shex":{source:"iana",extensions:["shex"]},"text/slim":{extensions:["slim","slm"]},"text/spdx":{source:"iana",extensions:["spdx"]},"text/strings":{source:"iana"},"text/stylus":{extensions:["stylus","styl"]},"text/t140":{source:"iana"},"text/tab-separated-values":{source:"iana",compressible:true,extensions:["tsv"]},"text/troff":{source:"iana",extensions:["t","tr","roff","man","me","ms"]},"text/turtle":{source:"iana",charset:"UTF-8",extensions:["ttl"]},"text/ulpfec":{source:"iana"},"text/uri-list":{source:"iana",compressible:true,extensions:["uri","uris","urls"]},"text/vcard":{source:"iana",compressible:true,extensions:["vcard"]},"text/vnd.a":{source:"iana"},"text/vnd.abc":{source:"iana"},"text/vnd.ascii-art":{source:"iana"},"text/vnd.curl":{source:"iana",extensions:["curl"]},"text/vnd.curl.dcurl":{source:"apache",extensions:["dcurl"]},"text/vnd.curl.mcurl":{source:"apache",extensions:["mcurl"]},"text/vnd.curl.scurl":{source:"apache",extensions:["scurl"]},"text/vnd.debian.copyright":{source:"iana",charset:"UTF-8"},"text/vnd.dmclientscript":{source:"iana"},"text/vnd.dvb.subtitle":{source:"iana",extensions:["sub"]},"text/vnd.esmertec.theme-descriptor":{source:"iana",charset:"UTF-8"},"text/vnd.exchangeable":{source:"iana"},"text/vnd.familysearch.gedcom":{source:"iana",extensions:["ged"]},"text/vnd.ficlab.flt":{source:"iana"},"text/vnd.fly":{source:"iana",extensions:["fly"]},"text/vnd.fmi.flexstor":{source:"iana",extensions:["flx"]},"text/vnd.gml":{source:"iana"},"text/vnd.graphviz":{source:"iana",extensions:["gv"]},"text/vnd.hans":{source:"iana"},"text/vnd.hgl":{source:"iana"},"text/vnd.in3d.3dml":{source:"iana",extensions:["3dml"]},"text/vnd.in3d.spot":{source:"iana",extensions:["spot"]},"text/vnd.iptc.newsml":{source:"iana"},"text/vnd.iptc.nitf":{source:"iana"},"text/vnd.latex-z":{source:"iana"},"text/vnd.motorola.reflex":{source:"iana"},"text/vnd.ms-mediapackage":{source:"iana"},"text/vnd.net2phone.commcenter.command":{source:"iana"},"text/vnd.radisys.msml-basic-layout":{source:"iana"},"text/vnd.senx.warpscript":{source:"iana"},"text/vnd.si.uricatalogue":{source:"apache"},"text/vnd.sosi":{source:"iana"},"text/vnd.sun.j2me.app-descriptor":{source:"iana",charset:"UTF-8",extensions:["jad"]},"text/vnd.trolltech.linguist":{source:"iana",charset:"UTF-8"},"text/vnd.vcf":{source:"iana"},"text/vnd.wap.si":{source:"iana"},"text/vnd.wap.sl":{source:"iana"},"text/vnd.wap.wml":{source:"iana",extensions:["wml"]},"text/vnd.wap.wmlscript":{source:"iana",extensions:["wmls"]},"text/vnd.zoo.kcl":{source:"iana"},"text/vtt":{source:"iana",charset:"UTF-8",compressible:true,extensions:["vtt"]},"text/wgsl":{source:"iana",extensions:["wgsl"]},"text/x-asm":{source:"apache",extensions:["s","asm"]},"text/x-c":{source:"apache",extensions:["c","cc","cxx","cpp","h","hh","dic"]},"text/x-component":{source:"nginx",extensions:["htc"]},"text/x-fortran":{source:"apache",extensions:["f","for","f77","f90"]},"text/x-gwt-rpc":{compressible:true},"text/x-handlebars-template":{extensions:["hbs"]},"text/x-java-source":{source:"apache",extensions:["java"]},"text/x-jquery-tmpl":{compressible:true},"text/x-lua":{extensions:["lua"]},"text/x-markdown":{compressible:true,extensions:["mkd"]},"text/x-nfo":{source:"apache",extensions:["nfo"]},"text/x-opml":{source:"apache",extensions:["opml"]},"text/x-org":{compressible:true,extensions:["org"]},"text/x-pascal":{source:"apache",extensions:["p","pas"]},"text/x-processing":{compressible:true,extensions:["pde"]},"text/x-sass":{extensions:["sass"]},"text/x-scss":{extensions:["scss"]},"text/x-setext":{source:"apache",extensions:["etx"]},"text/x-sfv":{source:"apache",extensions:["sfv"]},"text/x-suse-ymp":{compressible:true,extensions:["ymp"]},"text/x-uuencode":{source:"apache",extensions:["uu"]},"text/x-vcalendar":{source:"apache",extensions:["vcs"]},"text/x-vcard":{source:"apache",extensions:["vcf"]},"text/xml":{source:"iana",compressible:true,extensions:["xml"]},"text/xml-external-parsed-entity":{source:"iana"},"text/yaml":{compressible:true,extensions:["yaml","yml"]},"video/1d-interleaved-parityfec":{source:"iana"},"video/3gpp":{source:"iana",extensions:["3gp","3gpp"]},"video/3gpp-tt":{source:"iana"},"video/3gpp2":{source:"iana",extensions:["3g2"]},"video/av1":{source:"iana"},"video/bmpeg":{source:"iana"},"video/bt656":{source:"iana"},"video/celb":{source:"iana"},"video/dv":{source:"iana"},"video/encaprtp":{source:"iana"},"video/evc":{source:"iana"},"video/ffv1":{source:"iana"},"video/flexfec":{source:"iana"},"video/h261":{source:"iana",extensions:["h261"]},"video/h263":{source:"iana",extensions:["h263"]},"video/h263-1998":{source:"iana"},"video/h263-2000":{source:"iana"},"video/h264":{source:"iana",extensions:["h264"]},"video/h264-rcdo":{source:"iana"},"video/h264-svc":{source:"iana"},"video/h265":{source:"iana"},"video/h266":{source:"iana"},"video/iso.segment":{source:"iana",extensions:["m4s"]},"video/jpeg":{source:"iana",extensions:["jpgv"]},"video/jpeg2000":{source:"iana"},"video/jpm":{source:"apache",extensions:["jpm","jpgm"]},"video/jxsv":{source:"iana"},"video/lottie+json":{source:"iana",compressible:true},"video/matroska":{source:"iana"},"video/matroska-3d":{source:"iana"},"video/mj2":{source:"iana",extensions:["mj2","mjp2"]},"video/mp1s":{source:"iana"},"video/mp2p":{source:"iana"},"video/mp2t":{source:"iana",extensions:["ts","m2t","m2ts","mts"]},"video/mp4":{source:"iana",compressible:false,extensions:["mp4","mp4v","mpg4"]},"video/mp4v-es":{source:"iana"},"video/mpeg":{source:"iana",compressible:false,extensions:["mpeg","mpg","mpe","m1v","m2v"]},"video/mpeg4-generic":{source:"iana"},"video/mpv":{source:"iana"},"video/nv":{source:"iana"},"video/ogg":{source:"iana",compressible:false,extensions:["ogv"]},"video/parityfec":{source:"iana"},"video/pointer":{source:"iana"},"video/quicktime":{source:"iana",compressible:false,extensions:["qt","mov"]},"video/raptorfec":{source:"iana"},"video/raw":{source:"iana"},"video/rtp-enc-aescm128":{source:"iana"},"video/rtploopback":{source:"iana"},"video/rtx":{source:"iana"},"video/scip":{source:"iana"},"video/smpte291":{source:"iana"},"video/smpte292m":{source:"iana"},"video/ulpfec":{source:"iana"},"video/vc1":{source:"iana"},"video/vc2":{source:"iana"},"video/vnd.cctv":{source:"iana"},"video/vnd.dece.hd":{source:"iana",extensions:["uvh","uvvh"]},"video/vnd.dece.mobile":{source:"iana",extensions:["uvm","uvvm"]},"video/vnd.dece.mp4":{source:"iana"},"video/vnd.dece.pd":{source:"iana",extensions:["uvp","uvvp"]},"video/vnd.dece.sd":{source:"iana",extensions:["uvs","uvvs"]},"video/vnd.dece.video":{source:"iana",extensions:["uvv","uvvv"]},"video/vnd.directv.mpeg":{source:"iana"},"video/vnd.directv.mpeg-tts":{source:"iana"},"video/vnd.dlna.mpeg-tts":{source:"iana"},"video/vnd.dvb.file":{source:"iana",extensions:["dvb"]},"video/vnd.fvt":{source:"iana",extensions:["fvt"]},"video/vnd.hns.video":{source:"iana"},"video/vnd.iptvforum.1dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.1dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.2dparityfec-1010":{source:"iana"},"video/vnd.iptvforum.2dparityfec-2005":{source:"iana"},"video/vnd.iptvforum.ttsavc":{source:"iana"},"video/vnd.iptvforum.ttsmpeg2":{source:"iana"},"video/vnd.motorola.video":{source:"iana"},"video/vnd.motorola.videop":{source:"iana"},"video/vnd.mpegurl":{source:"iana",extensions:["mxu","m4u"]},"video/vnd.ms-playready.media.pyv":{source:"iana",extensions:["pyv"]},"video/vnd.nokia.interleaved-multimedia":{source:"iana"},"video/vnd.nokia.mp4vr":{source:"iana"},"video/vnd.nokia.videovoip":{source:"iana"},"video/vnd.objectvideo":{source:"iana"},"video/vnd.planar":{source:"iana"},"video/vnd.radgamettools.bink":{source:"iana"},"video/vnd.radgamettools.smacker":{source:"apache"},"video/vnd.sealed.mpeg1":{source:"iana"},"video/vnd.sealed.mpeg4":{source:"iana"},"video/vnd.sealed.swf":{source:"iana"},"video/vnd.sealedmedia.softseal.mov":{source:"iana"},"video/vnd.uvvu.mp4":{source:"iana",extensions:["uvu","uvvu"]},"video/vnd.vivo":{source:"iana",extensions:["viv"]},"video/vnd.youtube.yt":{source:"iana"},"video/vp8":{source:"iana"},"video/vp9":{source:"iana"},"video/webm":{source:"apache",compressible:false,extensions:["webm"]},"video/x-f4v":{source:"apache",extensions:["f4v"]},"video/x-fli":{source:"apache",extensions:["fli"]},"video/x-flv":{source:"apache",compressible:false,extensions:["flv"]},"video/x-m4v":{source:"apache",extensions:["m4v"]},"video/x-matroska":{source:"apache",compressible:false,extensions:["mkv","mk3d","mks"]},"video/x-mng":{source:"apache",extensions:["mng"]},"video/x-ms-asf":{source:"apache",extensions:["asf","asx"]},"video/x-ms-vob":{source:"apache",extensions:["vob"]},"video/x-ms-wm":{source:"apache",extensions:["wm"]},"video/x-ms-wmv":{source:"apache",compressible:false,extensions:["wmv"]},"video/x-ms-wmx":{source:"apache",extensions:["wmx"]},"video/x-ms-wvx":{source:"apache",extensions:["wvx"]},"video/x-msvideo":{source:"apache",extensions:["avi"]},"video/x-sgi-movie":{source:"apache",extensions:["movie"]},"video/x-smv":{source:"apache",extensions:["smv"]},"x-conference/x-cooltalk":{source:"apache",extensions:["ice"]},"x-shader/x-fragment":{compressible:true},"x-shader/x-vertex":{compressible:true}}}});var require_mime_db=__commonJS({"node_modules/mime-db/index.js"(exports,module){module.exports=require_db()}});var require_mimeScore=__commonJS({"node_modules/mime-types/mimeScore.js"(exports,module){var FACET_SCORES={"prs.":100,"x-":200,"x.":300,"vnd.":400,default:900};var SOURCE_SCORES={nginx:10,apache:20,iana:40,default:30};var TYPE_SCORES={application:1,font:2,default:0};module.exports=__name(function mimeScore(mimeType,source="default"){if(mimeType==="application/octet-stream"){return 0}const[type,subtype]=mimeType.split("/");const facet=subtype.replace(/(\.|x-).*/,"$1");const facetScore=FACET_SCORES[facet]||FACET_SCORES.default;const sourceScore=SOURCE_SCORES[source]||SOURCE_SCORES.default;const typeScore=TYPE_SCORES[type]||TYPE_SCORES.default;const lengthScore=1-mimeType.length/100;return facetScore+sourceScore+typeScore+lengthScore},"mimeScore")}});var require_mime_types=__commonJS({"node_modules/mime-types/index.js"(exports){"use strict";var db=require_mime_db();var extname=__require("path").extname;var mimeScore=require_mimeScore();var EXTRACT_TYPE_REGEXP=/^\s*([^;\s]*)(?:;|\s|$)/;var TEXT_TYPE_REGEXP=/^text\//i;exports.charset=charset;exports.charsets={lookup:charset};exports.contentType=contentType;exports.extension=extension;exports.extensions=Object.create(null);exports.lookup=lookup2;exports.types=Object.create(null);exports._extensionConflicts=[];populateMaps(exports.extensions,exports.types);function charset(type){if(!type||typeof type!=="string"){return false}var match=EXTRACT_TYPE_REGEXP.exec(type);var mime2=match&&db[match[1].toLowerCase()];if(mime2&&mime2.charset){return mime2.charset}if(match&&TEXT_TYPE_REGEXP.test(match[1])){return"UTF-8"}return false}__name(charset,"charset");function contentType(str){if(!str||typeof str!=="string"){return false}var mime2=str.indexOf("/")===-1?exports.lookup(str):str;if(!mime2){return false}if(mime2.indexOf("charset")===-1){var charset2=exports.charset(mime2);if(charset2)mime2+="; charset="+charset2.toLowerCase()}return mime2}__name(contentType,"contentType");function extension(type){if(!type||typeof type!=="string"){return false}var match=EXTRACT_TYPE_REGEXP.exec(type);var exts=match&&exports.extensions[match[1].toLowerCase()];if(!exts||!exts.length){return false}return exts[0]}__name(extension,"extension");function lookup2(path3){if(!path3||typeof path3!=="string"){return false}var extension2=extname("x."+path3).toLowerCase().slice(1);if(!extension2){return false}return exports.types[extension2]||false}__name(lookup2,"lookup");function populateMaps(extensions,types){Object.keys(db).forEach(__name(function forEachMimeType(type){var mime2=db[type];var exts=mime2.extensions;if(!exts||!exts.length){return}extensions[type]=exts;for(var i=0;i<exts.length;i++){var extension2=exts[i];types[extension2]=_preferredType(extension2,types[extension2],type);const legacyType=_preferredTypeLegacy(extension2,types[extension2],type);if(legacyType!==types[extension2]){exports._extensionConflicts.push([extension2,legacyType,types[extension2]])}}},"forEachMimeType"))}__name(populateMaps,"populateMaps");function _preferredType(ext,type0,type1){var score0=type0?mimeScore(type0,db[type0].source):0;var score1=type1?mimeScore(type1,db[type1].source):0;return score0>score1?type0:type1}__name(_preferredType,"_preferredType");function _preferredTypeLegacy(ext,type0,type1){var SOURCE_RANK=["nginx","apache",void 0,"iana"];var score0=type0?SOURCE_RANK.indexOf(db[type0].source):0;var score1=type1?SOURCE_RANK.indexOf(db[type1].source):0;if(exports.types[extension]!=="application/octet-stream"&&(score0>score1||score0===score1&&exports.types[extension]?.slice(0,12)==="application/")){return type0}return score0>score1?type0:type1}__name(_preferredTypeLegacy,"_preferredTypeLegacy")}});import{BadRequestException as BadRequestException3,Body,Controller,HttpCode,Inject as Inject3,Post,Req,UseGuards}from"@nestjs/common";import{JwtAuthGuard}from"@flusys/nestjs-shared/guards";import{createApiController}from"@flusys/nestjs-shared/classes";import{CurrentUser}from"@flusys/nestjs-shared/decorators";import{SingleResponseDto}from"@flusys/nestjs-shared/dtos";import{CreateFileManagerDto as CreateFileManagerDto2,FileManagerResponseDto,GetFilesRequestDto as GetFilesRequestDto2,UpdateFileManagerDto as UpdateFileManagerDto2}from"@flusys/nestjs-storage/dtos";import{ApiBearerAuth,ApiBody,ApiOperation,ApiResponse,ApiTags}from"@nestjs/swagger";import{RequestScopedApiService}from"@flusys/nestjs-shared/classes";import{UpdateFileManagerDto}from"@flusys/nestjs-storage/dtos";import{FileLocationEnum as FileLocationEnum3}from"@flusys/nestjs-storage/enums/file-location.enum";import{FileManager as FileManager2,FileManagerWithCompany as FileManagerWithCompany2,Folder as Folder2,FolderWithCompany as FolderWithCompany2}from"@flusys/nestjs-storage/entities";import{BadRequestException as BadRequestException2,Inject as Inject2,Injectable as Injectable3,NotFoundException as NotFoundException2}from"@nestjs/common";import{Brackets,In}from"typeorm";init_file_location_enum();import{BadRequestException,Injectable,InternalServerErrorException,Logger as Logger5,NotFoundException}from"@nestjs/common";var StorageProviderRegistry=class{static{__name(this,"StorageProviderRegistry")}static providers=new Map;static register(providerName,providerClass){this.providers.set(providerName.toLowerCase(),providerClass)}static get(providerName){return this.providers.get(providerName.toLowerCase())}static has(providerName){return this.providers.has(providerName.toLowerCase())}static getAll(){return Array.from(this.providers.keys())}static clear(){this.providers.clear()}};var UploadService=class{constructor(storageFactory,storageConfigService,storageProviderConfigService){this.storageFactory=storageFactory;this.storageConfigService=storageConfigService;this.storageProviderConfigService=storageProviderConfigService}logger=new Logger5(UploadService.name);async onModuleInit(){try{const{LocalProvider:LocalProvider2}=await Promise.resolve().then(()=>(init_local_provider(),local_provider_exports));StorageProviderRegistry.register("local",LocalProvider2);this.logger.log("\u2705 Local Storage Provider registered")}catch(error){this.logger.error("\u274C Failed to register Local Storage Provider",error)}try{const{S3Provider:S3Provider2}=await Promise.resolve().then(()=>(init_s3_provider_optional(),s3_provider_optional_exports));StorageProviderRegistry.register("aws",S3Provider2);this.logger.log("\u2705 AWS S3 Provider registered")}catch{this.logger.warn("\u26A0\uFE0F AWS S3 Provider not available")}try{const{AzureProvider:AzureProvider2}=await Promise.resolve().then(()=>(init_azure_provider_optional(),azure_provider_optional_exports));StorageProviderRegistry.register("azure",AzureProvider2);this.logger.log("\u2705 Azure Blob Provider registered")}catch{this.logger.warn("\u26A0\uFE0F Azure Blob Provider not available")}try{const{SftpProvider:SftpProvider2}=await Promise.resolve().then(()=>(init_sftp_provider_optional(),sftp_provider_optional_exports));StorageProviderRegistry.register("sftp",SftpProvider2);this.logger.log("\u2705 SFTP Provider registered")}catch{this.logger.warn("\u26A0\uFE0F SFTP Provider not available")}this.logger.log(`Available providers: ${this.storageFactory.getAvailableProviders().join(", ")}`)}validateFile(file){const sizeValidation=this.storageConfigService.validateFileSize(file.size);if(!sizeValidation.valid){throw new BadRequestException(sizeValidation.message)}const typeValidation=this.storageConfigService.validateFileType(file.mimetype);if(!typeValidation.valid){throw new BadRequestException(typeValidation.message)}}async getStorageProvider(storageConfigId,user){let storageConfig;if(storageConfigId){const config=await this.storageProviderConfigService.findById(storageConfigId,user??null,["name","storage","config","companyId"]);if(!config){throw new NotFoundException("Storage configuration not found")}if(this.storageConfigService.isCompanyFeatureEnabled()&&user?.companyId){const configWithCompany=config;if(configWithCompany.companyId&&configWithCompany.companyId!==user.companyId){throw new BadRequestException("Storage configuration belongs to another company")}}storageConfig=config}else{const defaultConfig=await this.storageProviderConfigService.getDefaultConfig(user);if(!defaultConfig){throw new NotFoundException("No default storage configuration found for your company/branch. Please create one.")}storageConfig=defaultConfig}const providerConfig={provider:storageConfig.storage,config:storageConfig.config};return await this.storageFactory.createProvider(providerConfig)}async uploadSingleFile(file,options,user){try{this.validateFile(file);const provider=await this.getStorageProvider(options.storageConfigId,user);return await provider.uploadFile(file,options)}catch(err){this.logger.error("Single file upload failed",err);throw new InternalServerErrorException(err.message)}}async uploadMultipleFiles(files,options,user){try{for(const file of files){this.validateFile(file)}const provider=await this.getStorageProvider(options.storageConfigId,user);return await provider.uploadMultipleFiles(files,options)}catch(err){this.logger.error("Multiple files upload failed",err);throw new InternalServerErrorException(err.message)}}async deleteSingleFile(key,storageConfigId,user){try{if(!key)throw new Error("No file path provided");const provider=await this.getStorageProvider(storageConfigId,user);await provider.deleteFile(key);return true}catch(err){this.logger.error("Delete single file failed",err);throw new InternalServerErrorException(err.message)}}async deleteMultipleFile(keys,storageConfigId,user){try{if(!keys||!keys.length)throw new Error("No file paths provided");const provider=await this.getStorageProvider(storageConfigId,user);await provider.deleteMultipleFiles(keys);return true}catch(err){this.logger.error("Delete multiple files failed",err);throw new InternalServerErrorException(err.message)}}bytesToKb(bytes){return Number((bytes*.001).toFixed(2))}async makeFileUrl(key,storageConfigId,expiresIn=3600,user){try{const provider=await this.getStorageProvider(storageConfigId,user);if(provider.generatePresignedUrl){return await provider.generatePresignedUrl(key,expiresIn)}return key}catch(err){this.logger.error("Generate file URL failed",err);throw new InternalServerErrorException(err.message)}}};__name(UploadService,"UploadService");UploadService=__decorateClass([Injectable()],UploadService);var STORAGE_MODULE_OPTIONS="STORAGE_MODULE_OPTIONS";var STORAGE_CONFIG_SERVICE="STORAGE_CONFIG_SERVICE";var STORAGE_DATA_SOURCE_PROVIDER="STORAGE_DATA_SOURCE_PROVIDER";var DEFAULT_MAX_FILE_SIZE=100*1024*1024;var DEFAULT_ALLOWED_FILE_TYPES=["*/*"];var FILE_VALIDATION_MESSAGES={FILE_TOO_LARGE:"File size exceeds the maximum allowed size",INVALID_FILE_TYPE:"File type is not allowed",NO_FILE_PROVIDED:"No file was provided",UPLOAD_FAILED:"File upload failed"};import{Inject,Injectable as Injectable2}from"@nestjs/common";var StorageConfigService=class{constructor(options){this.options=options}isCompanyFeatureEnabled(){return this.options.bootstrapAppConfig?.enableCompanyFeature??false}getDatabaseMode(){return this.options.bootstrapAppConfig?.databaseMode??"single"}getMaxFileSize(){return this.options.config?.maxFileSize??DEFAULT_MAX_FILE_SIZE}getAllowedFileTypes(){return this.options.config?.allowedFileTypes??DEFAULT_ALLOWED_FILE_TYPES}isFileTypeAllowed(mimeType){const allowedTypes=this.getAllowedFileTypes();if(allowedTypes.includes("*/*")){return true}return allowedTypes.some(allowedType=>{if(allowedType.endsWith("/*")){const prefix=allowedType.slice(0,-2);return mimeType.startsWith(prefix)}return allowedType===mimeType})}validateFileSize(fileSize){const maxSize=this.getMaxFileSize();if(fileSize>maxSize){const maxSizeMB=(maxSize/(1024*1024)).toFixed(2);const fileSizeMB=(fileSize/(1024*1024)).toFixed(2);return{valid:false,message:`File size (${fileSizeMB}MB) exceeds the maximum allowed size of ${maxSizeMB}MB`}}return{valid:true}}validateFileType(mimeType){if(!this.isFileTypeAllowed(mimeType)){const allowedTypes=this.getAllowedFileTypes();return{valid:false,message:`File type "${mimeType}" is not allowed. Allowed types: ${allowedTypes.join(", ")}`}}return{valid:true}}getDefaultDatabaseConfig(){return this.options.config?.defaultDatabaseConfig}getOptions(){return this.options}};__name(StorageConfigService,"StorageConfigService");StorageConfigService=__decorateClass([Injectable2(),__decorateParam(0,Inject(STORAGE_MODULE_OPTIONS))],StorageConfigService);var USER_ACTION_PERMISSION_CACHE_KEY="user_action_permission";var SHOW_PRIVATE_FILE_ACTION="storage.file.viewPrivate";var FileManagerService=class extends RequestScopedApiService{constructor(cacheManager,utilsService,uploadService,storageConfig,dataSourceProvider){super("file_manager",null,cacheManager,utilsService,FileManagerService.name,true);this.cacheManager=cacheManager;this.utilsService=utilsService;this.uploadService=uploadService;this.storageConfig=storageConfig;this.dataSourceProvider=dataSourceProvider}FILE_URL_EXPIRY_SECONDS=3600;resolveEntity(){const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();return enableCompanyFeature?FileManagerWithCompany2:FileManager2}getDataSourceProvider(){return this.dataSourceProvider}async convertSingleDtoToEntity(dto,user){let fileManager={};if(dto instanceof UpdateFileManagerDto&&dto.id){const dbData=await this.repository.findOne({where:{id:dto.id}});if(!dbData){throw new NotFoundException2("No such entity data found for update! Please, Try Again.")}fileManager=dbData}let validatedFolder=null;if(dto.folderId){const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();const folderEntity=enableCompanyFeature?FolderWithCompany2:Folder2;const folderRepository=await this.dataSourceProvider.getRepository(folderEntity);const whereCondition={id:dto.folderId};if(enableCompanyFeature&&user?.companyId){whereCondition.companyId=user.companyId}const folder=await folderRepository.findOne({where:whereCondition});if(!folder){throw new BadRequestException2(`Folder with ID ${dto.folderId} does not exist or you don't have access to it.`)}validatedFolder={id:dto.folderId}}let storageLocation=dto.location||FileLocationEnum3.LOCAL;if(dto.storageConfigId){try{const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();const storageConfigEntity=enableCompanyFeature?(await Promise.resolve().then(()=>(init_entities(),entities_exports))).StorageConfigWithCompany:(await Promise.resolve().then(()=>(init_entities(),entities_exports))).StorageConfig;const storageConfigRepository=await this.dataSourceProvider.getRepository(storageConfigEntity);const whereCondition={id:dto.storageConfigId};if(enableCompanyFeature&&user?.companyId){whereCondition.companyId=user.companyId}const storageConfig=await storageConfigRepository.findOne({where:whereCondition});if(storageConfig){storageLocation=storageConfig.storage}}catch(error){this.logger.warn(`Failed to get storage location from config: ${error}`)}}fileManager={...fileManager,...dto,location:storageLocation,folder:validatedFolder};if("companyId"in fileManager){fileManager.companyId=user?.companyId??null}return fileManager}async getSelectQuery(query,_user,select){if(!select||!select.length){select=["id","name","contentType","size","key","url","location","isPrivate","createdAt","deletedAt"]}const selectFields=select.map(field=>`${this.entityName}.${field}`);if(this.storageConfig.isCompanyFeatureEnabled()){selectFields.push("file_manager.companyId")}selectFields.push("folder.id");selectFields.push("folder.name");query.leftJoinAndSelect("file_manager.folder","folder");query.select(selectFields);return{query,isRaw:false}}async getFilterQuery(query,filter,_user){Object.entries(filter).forEach(([key,value])=>{if(key==="contentType"){const types=value.split(",").map(t=>t.trim());const patterns=types.map(t=>t.replace("*","%"));query.where(new Brackets(qb1=>{patterns.forEach((p,i)=>{const param=`p${i}`;if(i===0)qb1.where(`${this.entityName}.contentType LIKE :${param}`,{[param]:p});else qb1.orWhere(`${this.entityName}.contentType LIKE :${param}`,{[param]:p})})}));return}query.andWhere(`${this.entityName}.${key} = :value`,{value})});return{query,isRaw:false}}async getExtraManipulateQuery(query,filterDto,user){const result=await super.getExtraManipulateQuery(query,filterDto,user);const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();if(enableCompanyFeature&&user?.companyId){query.andWhere("file_manager.companyId = :companyId",{companyId:user.companyId})}if(user){const cacheKey=enableCompanyFeature?`${USER_ACTION_PERMISSION_CACHE_KEY}_${user.id}_${user.companyId}`:`${USER_ACTION_PERMISSION_CACHE_KEY}_${user.id}`;const userActions=await this.cacheManager.get(cacheKey);if(userActions){const userActionUrls=userActions.map(item=>item.url);if(!userActionUrls.includes(SHOW_PRIVATE_FILE_ACTION)){query.andWhere("file_manager.isPrivate = :isPrivate",{isPrivate:false})}}else{query.andWhere("file_manager.isPrivate = :isPrivate",{isPrivate:false})}}else{query.andWhere("file_manager.isPrivate = :isPrivate",{isPrivate:false})}return result}async beforeDeleteOperation(dto,_user,_queryRunner){if(dto.type==="permanent"){const ids=Array.isArray(dto.id)?dto.id:[dto.id];const fileManager=await this.repository.findBy({id:In(ids)});const filesByConfig=new Map;fileManager.forEach(file=>{const configId=file.storageConfigId||"default";if(!filesByConfig.has(configId)){filesByConfig.set(configId,[])}filesByConfig.get(configId).push(file.key)});for(const[configId,keys]of filesByConfig){await this.uploadService.deleteMultipleFile(keys,configId==="default"?void 0:configId)}}}async getFiles(dtos,protocol,host,user){await this.ensureRepositoryInitialized();const ids=dtos.map(d=>d.id).filter(Boolean);if(!ids.length)throw new BadRequestException2("No valid file IDs provided");const files=await this.repository.findBy({id:In(ids)});const now=Date.now();const expiresIn=this.FILE_URL_EXPIRY_SECONDS;const updatedFiles=[];const responses=await Promise.all(files.map(async file=>{let shouldUpdate=false;if(!file.storageConfigId){this.logger.warn(`File ${file.id} has no storageConfigId. Please update this file with a valid storage config.`)}const needsNewUrl=!file.url||file.location===FileLocationEnum3.AWS&&(typeof file.expiresAt!=="number"||now>=file.expiresAt)||file.location===FileLocationEnum3.AZURE&&(typeof file.expiresAt!=="number"||now>=file.expiresAt);if(needsNewUrl&&file.storageConfigId){try{file.url=await this.uploadService.makeFileUrl(file.key,file.storageConfigId,expiresIn,user);file.expiresAt=now+expiresIn*1e3;shouldUpdate=true}catch(error){this.logger.error(`Failed to generate URL for file ${file.id}: ${error?.message||"Unknown error"}`);file.url=`${protocol}://${host}/storage/upload/file/${file.key}`}}if(file.location===FileLocationEnum3.SFTP||file.location===FileLocationEnum3.LOCAL){const expectedUrl=`${protocol}://${host}/storage/upload/file/${file.key}`;if(file.url!==expectedUrl){file.url=expectedUrl;shouldUpdate=true}}if(shouldUpdate)updatedFiles.push(file);return{id:file.id,name:file.name,contentType:file.contentType,url:file.url||""}}));if(updatedFiles.length>0){try{await this.repository.save(updatedFiles)}catch(error){this.logger.error(`Failed to save updated file URLs: ${error?.message||"Unknown error"}`)}}return responses}};__name(FileManagerService,"FileManagerService");FileManagerService=__decorateClass([Injectable3(),__decorateParam(0,Inject2("CACHE_INSTANCE")),__decorateParam(2,Inject2(UploadService)),__decorateParam(3,Inject2(StorageConfigService))],FileManagerService);var FileManagerController=class extends createApiController(CreateFileManagerDto2,UpdateFileManagerDto2,FileManagerResponseDto){constructor(fileService){super(fileService);this.fileService=fileService}async getFiles(dto,req,user){if(!dto||!dto.length){throw new BadRequestException3("No files provided")}const files=await this.fileService.getFiles(dto,req.protocol,req.host,user);return{success:true,message:"Files retrieved successfully",data:files}}};__name(FileManagerController,"FileManagerController");__decorateClass([Post("get-files"),HttpCode(200),ApiBody({type:GetFilesRequestDto2,isArray:true}),ApiOperation({summary:"Get multiple files by IDs with authentication (local or S3)"}),ApiResponse({status:200,description:"Files retrieved successfully",type:SingleResponseDto}),__decorateParam(0,Body()),__decorateParam(1,Req()),__decorateParam(2,CurrentUser())],FileManagerController.prototype,"getFiles",1);FileManagerController=__decorateClass([ApiTags("Files"),ApiBearerAuth(),Controller("storage/file-manager"),UseGuards(JwtAuthGuard),__decorateParam(0,Inject3(FileManagerService))],FileManagerController);import{JwtAuthGuard as JwtAuthGuard2}from"@flusys/nestjs-shared/guards";import{createApiController as createApiController2}from"@flusys/nestjs-shared/classes";import{CreateFolderDto as CreateFolderDto2,FolderResponseDto,UpdateFolderDto as UpdateFolderDto2}from"@flusys/nestjs-storage/dtos";import{Controller as Controller2,Inject as Inject5,UseGuards as UseGuards2}from"@nestjs/common";import{ApiBearerAuth as ApiBearerAuth2,ApiTags as ApiTags2}from"@nestjs/swagger";import{RequestScopedApiService as RequestScopedApiService2}from"@flusys/nestjs-shared/classes";import{UpdateFolderDto}from"@flusys/nestjs-storage/dtos";import{Folder as Folder3,FolderWithCompany as FolderWithCompany3}from"@flusys/nestjs-storage/entities";import{Inject as Inject4,Injectable as Injectable4,NotFoundException as NotFoundException3}from"@nestjs/common";var FolderService=class extends RequestScopedApiService2{constructor(cacheManager,utilsService,storageConfig,dataSourceProvider){super("folder",null,cacheManager,utilsService,FolderService.name,true);this.cacheManager=cacheManager;this.utilsService=utilsService;this.storageConfig=storageConfig;this.dataSourceProvider=dataSourceProvider}resolveEntity(){const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();return enableCompanyFeature?FolderWithCompany3:Folder3}getDataSourceProvider(){return this.dataSourceProvider}async convertSingleDtoToEntity(dto,user){let folder={};if(dto instanceof UpdateFolderDto&&dto.id){const dbData=await this.repository.findOne({where:{id:dto.id}});if(!dbData){throw new NotFoundException3("No such entity data found for update! Please, Try Again.")}folder=dbData}folder={...folder,...dto};if("companyId"in folder){folder.companyId=user?.companyId??null}return folder}async getSelectQuery(query,_user,select){if(!select||!select.length){select=["id","name","slug","createdAt","deletedAt"]}const selectFields=select.map(field=>`${this.entityName}.${field}`);if(this.storageConfig.isCompanyFeatureEnabled()){selectFields.push("folder.companyId")}query.select(selectFields);return{query,isRaw:false}}async getExtraManipulateQuery(query,filterDto,user){const result=await super.getExtraManipulateQuery(query,filterDto,user);const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();if(enableCompanyFeature&&user?.companyId){query.andWhere("folder.companyId = :companyId",{companyId:user.companyId})}return result}};__name(FolderService,"FolderService");FolderService=__decorateClass([Injectable4(),__decorateParam(0,Inject4("CACHE_INSTANCE")),__decorateParam(2,Inject4(StorageConfigService))],FolderService);var FolderController=class extends createApiController2(CreateFolderDto2,UpdateFolderDto2,FolderResponseDto){constructor(folderService){super(folderService);this.folderService=folderService}};__name(FolderController,"FolderController");FolderController=__decorateClass([ApiTags2("Folders"),ApiBearerAuth2(),Controller2("storage/folder"),UseGuards2(JwtAuthGuard2),__decorateParam(0,Inject5(FolderService))],FolderController);import{JwtAuthGuard as JwtAuthGuard3}from"@flusys/nestjs-shared/guards";import{createApiController as createApiController3}from"@flusys/nestjs-shared/classes";import{CreateStorageConfigDto,StorageConfigResponseDto,UpdateStorageConfigDto}from"@flusys/nestjs-storage/dtos";import{Controller as Controller3,Inject as Inject7,UseGuards as UseGuards3}from"@nestjs/common";import{ApiBearerAuth as ApiBearerAuth3,ApiTags as ApiTags3}from"@nestjs/swagger";import{RequestScopedApiService as RequestScopedApiService3}from"@flusys/nestjs-shared/classes";import{StorageConfig as StorageConfig2,StorageConfigWithCompany as StorageConfigWithCompany2}from"@flusys/nestjs-storage/entities";import{Inject as Inject6,Injectable as Injectable5}from"@nestjs/common";var StorageProviderConfigService=class extends RequestScopedApiService3{constructor(cacheManager,utilsService,storageConfig,dataSourceProvider){super("storageConfig",null,cacheManager,utilsService,StorageProviderConfigService.name,true);this.cacheManager=cacheManager;this.utilsService=utilsService;this.storageConfig=storageConfig;this.dataSourceProvider=dataSourceProvider}resolveEntity(){const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();return enableCompanyFeature?StorageConfigWithCompany2:StorageConfig2}getDataSourceProvider(){return this.dataSourceProvider}async convertSingleDtoToEntity(dto,user){let storageConfig={};storageConfig={...storageConfig,...dto};if("companyId"in storageConfig){storageConfig.companyId=user?.companyId??null}return storageConfig}async getSelectQuery(query,_user,select){if(!select||!select.length){select=["id","name","storage","config","createdAt","updatedAt"];if(this.storageConfig.isCompanyFeatureEnabled()){select.push("companyId")}}const selectFields=select.map(field=>`${this.entityName}.${field}`);query.select(selectFields);return{query,isRaw:false}}async getExtraManipulateQuery(query,filterDto,user){const result=await super.getExtraManipulateQuery(query,filterDto,user);const enableCompanyFeature=this.storageConfig.isCompanyFeatureEnabled();if(enableCompanyFeature&&user?.companyId){query.andWhere("storageConfig.companyId = :companyId",{companyId:user.companyId})}query.orderBy(`${this.entityName}.createdAt`,"DESC");return result}async getDefaultConfig(user){await this.ensureRepositoryInitialized();const baseWhere={};if(this.storageConfig.isCompanyFeatureEnabled()&&user?.companyId){baseWhere.companyId=user.companyId}const defaultConfig=await this.repository.findOne({where:{...baseWhere,name:"default"},order:{createdAt:"ASC"}});if(defaultConfig){return defaultConfig}return await this.repository.findOne({where:baseWhere,order:{createdAt:"ASC"}})}async getConfigByType(storage,user){await this.ensureRepositoryInitialized();const where={storage};if(this.storageConfig.isCompanyFeatureEnabled()&&user?.companyId){where.companyId=user.companyId}return await this.repository.find({where})}};__name(StorageProviderConfigService,"StorageProviderConfigService");StorageProviderConfigService=__decorateClass([Injectable5(),__decorateParam(0,Inject6("CACHE_INSTANCE")),__decorateParam(2,Inject6(StorageConfigService))],StorageProviderConfigService);var StorageConfigController=class extends createApiController3(CreateStorageConfigDto,UpdateStorageConfigDto,StorageConfigResponseDto){constructor(storageConfigService){super(storageConfigService);this.storageConfigService=storageConfigService}};__name(StorageConfigController,"StorageConfigController");StorageConfigController=__decorateClass([ApiTags3("Storage Config"),ApiBearerAuth3(),Controller3("storage/storage-config"),UseGuards3(JwtAuthGuard3),__decorateParam(0,Inject7(StorageProviderConfigService))],StorageConfigController);var mime=__toESM(require_mime_types());import{JwtAuthGuard as JwtAuthGuard4}from"@flusys/nestjs-shared/guards";import{CurrentUser as CurrentUser2,Public as Public2}from"@flusys/nestjs-shared/decorators";import{ApiResponseDto}from"@flusys/nestjs-shared/decorators/api-response.decorator";import{FileUploadResponsePayloadDto}from"@flusys/nestjs-storage/dtos";import{Body as Body2,Controller as Controller4,Get,Inject as Inject8,Logger as Logger6,NotFoundException as NotFoundException4,Param,Post as Post2,Query,Res,UploadedFile,UploadedFiles,UseGuards as UseGuards4,UseInterceptors}from"@nestjs/common";import{FileInterceptor,FilesInterceptor}from"@nestjs/platform-express";import{ApiBearerAuth as ApiBearerAuth4,ApiBody as ApiBody2,ApiConsumes,ApiOperation as ApiOperation2,ApiParam,ApiProduces,ApiQuery,ApiResponse as ApiResponse2,ApiTags as ApiTags4}from"@nestjs/swagger";import{createReadStream,existsSync,statSync}from"fs";import{join as join3}from"path";var UploadController=class{constructor(uploadService){this.uploadService=uploadService}logger=new Logger6(UploadController.name);async uploadSingleFile(file,options,user){const url=await this.uploadService.uploadSingleFile(file,options,user);return{success:true,message:"File uploaded successfully",data:{size:this.uploadService.bytesToKb(url.size),name:url.name,key:url.key,contentType:url.contentType}}}async uploadMultipleFiles(files,options,user){const uploadResponses=await this.uploadService.uploadMultipleFiles(files,options,user);const responseData=uploadResponses.map(file=>({size:this.uploadService.bytesToKb(file.size),name:file.name,key:file.key,contentType:file.contentType}));return{success:true,message:"Files uploaded successfully",data:responseData}}async deleteSingleFile(dto,user){const data=await this.uploadService.deleteSingleFile(dto.key,dto.storageConfigId,user);return{success:true,message:"File deleted successfully",data}}async deleteMultipleFile(dto,user){const data=await this.uploadService.deleteMultipleFile(dto.keys,dto.storageConfigId,user);return{success:true,message:"Files deleted successfully",data}}async seeUploadedFile(filePath,res){try{const uploadDir=join3(process.cwd(),"uploads");const normalizedPath=Array.isArray(filePath)?filePath.join("/"):filePath;const fullPath=join3(uploadDir,normalizedPath);this.logger.debug(`Attempting to serve file from: ${fullPath}`);if(!fullPath.startsWith(uploadDir)){throw new NotFoundException4("Invalid file path")}if(!existsSync(fullPath)){throw new NotFoundException4(`File not found: ${normalizedPath}`)}const stats=statSync(fullPath);if(!stats.isFile()){throw new NotFoundException4(`Not a file: ${normalizedPath}`)}let mimeType=mime.lookup(fullPath)||"application/octet-stream";if(fullPath.toLowerCase().endsWith(".svg")){mimeType="image/svg+xml"}const viewableTypes=["image/","video/","audio/","text/","application/pdf","application/json","application/xml"];const isViewable=viewableTypes.some(type=>mimeType.startsWith(type));const contentDisposition=isViewable?"inline":`attachment; filename="${encodeURIComponent(normalizedPath.split("/").pop()||"download")}"`;res.set({"Content-Type":mimeType,"Content-Length":stats.size,"Content-Disposition":contentDisposition,"Cache-Control":"public, max-age=3600","Accept-Ranges":"bytes","Cross-Origin-Resource-Policy":"cross-origin","Access-Control-Allow-Origin":"*","X-Content-Type-Options":"nosniff"});const stream=createReadStream(fullPath);stream.pipe(res);return new Promise((resolve2,reject)=>{stream.on("end",()=>{res.end();resolve2()});stream.on("error",err=>{this.logger.error("File stream error",err);reject(new NotFoundException4(`Failed to serve file: ${normalizedPath}`))});res.on("close",()=>{stream.destroy()})})}catch(error){this.logger.error("File retrieval error:",error);throw new NotFoundException4(`File not found: ${filePath}`)}}};__name(UploadController,"UploadController");__decorateClass([Post2("single-file"),ApiResponseDto(FileUploadResponsePayloadDto,false),ApiOperation2({summary:"Upload a single file"}),ApiConsumes("multipart/form-data"),ApiQuery({name:"folderPath",type:String,required:false,description:"Optional folder path to store the file"}),ApiBody2({description:"File upload form data",schema:{type:"object",properties:{file:{type:"string",format:"binary",description:"File to be uploaded"}},required:["file"]}}),UseInterceptors(FileInterceptor("file")),__decorateParam(0,UploadedFile()),__decorateParam(1,Query()),__decorateParam(2,CurrentUser2())],UploadController.prototype,"uploadSingleFile",1);__decorateClass([Post2("multiple-file"),ApiOperation2({summary:"Upload multiple files (up to 50)"}),ApiConsumes("multipart/form-data"),ApiQuery({name:"folderPath",type:String,required:false,description:"Optional folder path to store uploaded files"}),ApiBody2({description:"Form data for multiple file uploads",schema:{type:"object",properties:{files:{type:"array",items:{type:"string",format:"binary"},description:"List of files to be uploaded"}},required:["files"]}}),ApiResponseDto(FileUploadResponsePayloadDto,false),UseInterceptors(FilesInterceptor("files",50)),__decorateParam(0,UploadedFiles()),__decorateParam(1,Query()),__decorateParam(2,CurrentUser2())],UploadController.prototype,"uploadMultipleFiles",1);__decorateClass([Post2("delete-single-file"),ApiOperation2({summary:"Delete a single file"}),__decorateParam(0,Body2()),__decorateParam(1,CurrentUser2())],UploadController.prototype,"deleteSingleFile",1);__decorateClass([Post2("delete-multiple-file"),ApiOperation2({summary:"Delete multiple files"}),__decorateParam(0,Body2()),__decorateParam(1,CurrentUser2())],UploadController.prototype,"deleteMultipleFile",1);__decorateClass([Public2(),Get("file/*filePath"),ApiOperation2({summary:"Serve uploaded file by relative path (Public endpoint)",description:`
|
|
2
|
+
This endpoint returns a stored file from the server.
|
|
3
|
+
|
|
4
|
+
- The \`filePath\` is a **wildcard path parameter** that supports nested folders.
|
|
5
|
+
- Example:
|
|
6
|
+
\`GET /uploads/file/profile/user123/avatar.png\`
|
|
7
|
+
\u2192 Will serve the file from \`./profile/user123/avatar.png\`
|
|
8
|
+
|
|
9
|
+
**Use case:**
|
|
10
|
+
Access uploaded files publicly through a structured path.
|
|
11
|
+
|
|
12
|
+
**Note:** This endpoint is public and does not require authentication.
|
|
13
|
+
`}),ApiParam({name:"filePath",required:true,description:'Relative path to the uploaded file (supports nested directories, e.g. "profile/user123/avatar.png")',example:"profile/user123/avatar.png"}),ApiProduces("image/jpeg"),ApiResponse2({status:200,description:"Uploaded file successfully returned",schema:{type:"string",format:"binary"}}),__decorateParam(0,Param("filePath")),__decorateParam(1,Res())],UploadController.prototype,"seeUploadedFile",1);UploadController=__decorateClass([ApiTags4("Upload"),ApiBearerAuth4(),Controller4("storage/upload"),UseGuards4(JwtAuthGuard4),__decorateParam(0,Inject8(UploadService))],UploadController);import{MultiTenantDataSourceService}from"@flusys/nestjs-shared/modules";import{Inject as Inject9,Injectable as Injectable6,Logger as Logger7,Optional,Scope}from"@nestjs/common";import{REQUEST}from"@nestjs/core";var StorageDataSourceProvider=class extends MultiTenantDataSourceService{constructor(storageOptions,request){super(StorageDataSourceProvider.buildParentOptions(storageOptions),request);this.storageOptions=storageOptions}logger=new Logger7(StorageDataSourceProvider.name);static buildParentOptions(options){return{bootstrapAppConfig:options.bootstrapAppConfig,defaultDatabaseConfig:options.config?.defaultDatabaseConfig,tenantDefaultDatabaseConfig:options.config?.tenantDefaultDatabaseConfig,tenants:options.config?.tenants}}getEnableCompanyFeature(){return this.storageOptions.bootstrapAppConfig?.enableCompanyFeature??false}getEnableCompanyFeatureForTenant(tenant){return tenant?.enableCompanyFeature??this.getEnableCompanyFeature()}getEnableCompanyFeatureForCurrentTenant(){return this.getEnableCompanyFeatureForTenant(this.getCurrentTenant()??void 0)}async getStorageEntities(enableCompanyFeature){const enable=enableCompanyFeature??this.getEnableCompanyFeature();const{FileManager:FileManager3,Folder:Folder4,StorageConfig:StorageConfig3}=await Promise.resolve().then(()=>(init_entities(),entities_exports));if(enable){const{FileManagerWithCompany:FileManagerWithCompany3,FolderWithCompany:FolderWithCompany4,StorageConfigWithCompany:StorageConfigWithCompany3}=await Promise.resolve().then(()=>(init_entities(),entities_exports));return[FileManagerWithCompany3,FolderWithCompany4,StorageConfigWithCompany3]}return[FileManager3,Folder4,StorageConfig3]}async createDataSourceFromConfig(config){const currentTenant=this.getCurrentTenant();const enableCompanyFeature=this.getEnableCompanyFeatureForTenant(currentTenant??void 0);const entities=await this.getStorageEntities(enableCompanyFeature);return super.createDataSourceFromConfig(config,entities)}async getSingleDataSource(){if(StorageDataSourceProvider.singleDataSource?.isInitialized){return StorageDataSourceProvider.singleDataSource}if(StorageDataSourceProvider.singleConnectionLock){return StorageDataSourceProvider.singleConnectionLock}const config=this.getDefaultDatabaseConfig();if(!config){throw new Error("No database config available. Provide defaultDatabaseConfig or tenantDefaultDatabaseConfig.")}const connectionPromise=this.createDataSourceFromConfig(config);StorageDataSourceProvider.singleConnectionLock=connectionPromise;try{const dataSource=await connectionPromise;StorageDataSourceProvider.singleDataSource=dataSource;return dataSource}finally{StorageDataSourceProvider.singleConnectionLock=null}}async getOrCreateTenantConnection(tenant){const existing=StorageDataSourceProvider.tenantConnections.get(tenant.id);if(existing?.isInitialized){return existing}const pendingConnection=StorageDataSourceProvider.connectionLocks.get(tenant.id);if(pendingConnection){return pendingConnection}const config=this.buildTenantDatabaseConfig(tenant);const connectionPromise=this.createDataSourceFromConfig(config);StorageDataSourceProvider.connectionLocks.set(tenant.id,connectionPromise);try{const dataSource=await connectionPromise;StorageDataSourceProvider.tenantConnections.set(tenant.id,dataSource);return dataSource}finally{StorageDataSourceProvider.connectionLocks.delete(tenant.id)}}};__name(StorageDataSourceProvider,"StorageDataSourceProvider");__publicField(StorageDataSourceProvider,"tenantConnections",new Map);__publicField(StorageDataSourceProvider,"singleDataSource",null);__publicField(StorageDataSourceProvider,"tenantsRegistry",new Map);__publicField(StorageDataSourceProvider,"initialized",false);__publicField(StorageDataSourceProvider,"connectionLocks",new Map);__publicField(StorageDataSourceProvider,"singleConnectionLock",null);StorageDataSourceProvider=__decorateClass([Injectable6({scope:Scope.REQUEST}),__decorateParam(0,Inject9(STORAGE_MODULE_OPTIONS)),__decorateParam(1,Optional()),__decorateParam(1,Inject9(REQUEST))],StorageDataSourceProvider);init_entities();import{CacheModule,UtilsModule}from"@flusys/nestjs-shared/modules";import{Module}from"@nestjs/common";import{Injectable as Injectable7,Logger as Logger8,NotFoundException as NotFoundException5}from"@nestjs/common";import*as crypto from"crypto";var StorageFactoryService=class{logger=new Logger8(StorageFactoryService.name);providerCache=new Map;generateCacheKey(config){const configString=JSON.stringify(config.config,Object.keys(config.config||{}).sort());const configHash=crypto.createHash("sha256").update(configString).digest("hex").substring(0,16);return`${config.provider}-${configHash}`}async createProvider(config){const providerKey=this.generateCacheKey(config);if(this.providerCache.has(providerKey)){return this.providerCache.get(providerKey)}const ProviderClass=StorageProviderRegistry.get(config.provider);if(!ProviderClass){throw new NotFoundException5(`Storage provider '${config.provider}' is not registered. Available providers: ${StorageProviderRegistry.getAll().join(", ")}`)}try{const instance=new ProviderClass;if("initialize"in instance&&typeof instance.initialize==="function"){await instance.initialize(config.config)}this.providerCache.set(providerKey,instance);this.logger.log(`Created storage provider: ${config.provider} (key: ${providerKey})`);return instance}catch(error){this.logger.error(`Failed to create provider ${config.provider}:`,error);const originalMessage=error?.message||"Unknown error";throw new Error(`Failed to initialize storage provider '${config.provider}': ${originalMessage}`)}}async getProvider(providerName){const cachedKey=Array.from(this.providerCache.keys()).find(key=>key.startsWith(providerName));if(cachedKey){return this.providerCache.get(cachedKey)}return this.createProvider({provider:providerName,config:{}})}clearCache(){this.providerCache.clear()}isProviderAvailable(providerName){return StorageProviderRegistry.has(providerName)}getAvailableProviders(){return StorageProviderRegistry.getAll()}async onModuleDestroy(){this.logger.log("Cleaning up storage provider connections...");const closePromises=[];for(const[key,provider]of this.providerCache.entries()){if("close"in provider&&typeof provider.close==="function"){closePromises.push(provider.close().then(()=>this.logger.debug(`Closed provider: ${key}`)).catch(err=>this.logger.warn(`Failed to close provider ${key}: ${err.message}`)))}}await Promise.allSettled(closePromises);this.providerCache.clear();this.logger.log("Storage provider cleanup complete")}};__name(StorageFactoryService,"StorageFactoryService");StorageFactoryService=__decorateClass([Injectable7()],StorageFactoryService);init_local_provider();var StorageModule=class{static forRoot(options){const controllers=this.getControllers(options);const providers=this.getProviders(options);return{module:StorageModule,global:options.global??false,imports:[CacheModule,UtilsModule],controllers:options.includeController!==false?controllers:[],providers,exports:[StorageConfigService,StorageDataSourceProvider,FileManagerService,FolderService,StorageProviderConfigService,UploadService,StorageFactoryService,StorageProviderRegistry]}}static forRootAsync(options){const controllers=this.getControllers(options);const asyncProviders=this.createAsyncProviders(options);return{module:StorageModule,global:options.global??false,imports:[...options.imports||[],CacheModule,UtilsModule],controllers:options.includeController!==false?controllers:[],providers:[...asyncProviders,...this.getProviders(options)],exports:[StorageConfigService,StorageDataSourceProvider,FileManagerService,FolderService,StorageProviderConfigService,UploadService,StorageFactoryService,StorageProviderRegistry]}}static getControllers(options){return[FileManagerController,FolderController,StorageConfigController,UploadController]}static getProviders(options){const enableCompanyFeature=options.bootstrapAppConfig?.enableCompanyFeature??false;const optionsProvider={provide:STORAGE_MODULE_OPTIONS,useValue:options};return[optionsProvider,StorageConfigService,{provide:STORAGE_DATA_SOURCE_PROVIDER,useClass:StorageDataSourceProvider},StorageDataSourceProvider,FileManagerService,FolderService,StorageProviderConfigService,UploadService,StorageFactoryService,StorageProviderRegistry,{provide:"STORAGE_PROVIDER_INITIALIZER",useFactory:__name(async()=>{const{LocalProvider:LocalProvider2}=await Promise.resolve().then(()=>(init_local_provider(),local_provider_exports));const{FileLocationEnum:FileLocationEnum6}=await Promise.resolve().then(()=>(init_file_location_enum(),file_location_enum_exports));StorageProviderRegistry.register(FileLocationEnum6.LOCAL,LocalProvider2);try{const{S3Provider:S3Provider2}=await Promise.resolve().then(()=>(init_s3_provider_optional(),s3_provider_optional_exports));StorageProviderRegistry.register(FileLocationEnum6.AWS,S3Provider2)}catch{}try{const{AzureProvider:AzureProvider2}=await Promise.resolve().then(()=>(init_azure_provider_optional(),azure_provider_optional_exports));StorageProviderRegistry.register(FileLocationEnum6.AZURE,AzureProvider2)}catch{}try{const{SftpProvider:SftpProvider2}=await Promise.resolve().then(()=>(init_sftp_provider_optional(),sftp_provider_optional_exports));StorageProviderRegistry.register(FileLocationEnum6.SFTP,SftpProvider2)}catch{}return true},"useFactory")}]}static createAsyncProviders(options){if(options.useFactory){return[{provide:STORAGE_MODULE_OPTIONS,useFactory:__name(async(...args)=>{const config=await options.useFactory(...args);return{...options,config}},"useFactory"),inject:options.inject||[]}]}if(options.useClass){return[{provide:STORAGE_MODULE_OPTIONS,useFactory:__name(async optionsFactory=>{const config=await optionsFactory.createStorageOptions();return{...options,config}},"useFactory"),inject:[options.useClass]},{provide:options.useClass,useClass:options.useClass}]}if(options.useExisting){return[{provide:STORAGE_MODULE_OPTIONS,useFactory:__name(async optionsFactory=>{const config=await optionsFactory.createStorageOptions();return{...options,config}},"useFactory"),inject:[options.useExisting]}]}return[]}};__name(StorageModule,"StorageModule");StorageModule=__decorateClass([Module({})],StorageModule);var COMPANY_SCHEMA_EXCLUSIONS=[{schemaName:"FileManagerResponseDto",properties:["companyId"]},{schemaName:"FolderResponseDto",properties:["companyId"]},{schemaName:"StorageConfigResponseDto",properties:["companyId"]}];function storageSwaggerConfig(bootstrapConfig){const enableCompanyFeature=bootstrapConfig?.enableCompanyFeature??true;return{title:"Storage API",description:enableCompanyFeature?`
|
|
14
|
+
# Storage Management API
|
|
15
|
+
|
|
16
|
+
Complete file storage and management system with multi-tenant support.
|
|
17
|
+
|
|
18
|
+
## Features
|
|
19
|
+
|
|
20
|
+
### \u{1F4C1} File Management
|
|
21
|
+
- Upload single or multiple files
|
|
22
|
+
- Download files with presigned URLs
|
|
23
|
+
- Delete files (single or batch)
|
|
24
|
+
- File metadata management
|
|
25
|
+
- Automatic compression and optimization
|
|
26
|
+
- **Company isolation**
|
|
27
|
+
|
|
28
|
+
### \u{1F5C2}\uFE0F Folder Company
|
|
29
|
+
- Create folder hierarchies
|
|
30
|
+
- Organize files by folders
|
|
31
|
+
- **Company-level permissions**
|
|
32
|
+
- Automatic context filtering
|
|
33
|
+
|
|
34
|
+
### \u2699\uFE0F Storage Configuration
|
|
35
|
+
- Multiple storage providers (AWS S3, Azure, SFTP, Local)
|
|
36
|
+
- Provider-specific configurations
|
|
37
|
+
- Default storage settings
|
|
38
|
+
- Dynamic provider switching
|
|
39
|
+
|
|
40
|
+
### \u{1F512} Security
|
|
41
|
+
- JWT authentication required
|
|
42
|
+
- **Company isolation**
|
|
43
|
+
- File access control
|
|
44
|
+
- Presigned URL generation
|
|
45
|
+
|
|
46
|
+
## Storage Providers
|
|
47
|
+
|
|
48
|
+
### AWS S3
|
|
49
|
+
- Scalable cloud storage
|
|
50
|
+
- Automatic redundancy
|
|
51
|
+
- Global CDN integration
|
|
52
|
+
|
|
53
|
+
### Azure Blob Storage
|
|
54
|
+
- Microsoft Azure integration
|
|
55
|
+
- Geo-redundant storage
|
|
56
|
+
- Advanced security features
|
|
57
|
+
|
|
58
|
+
### SFTP
|
|
59
|
+
- Secure file transfer
|
|
60
|
+
- Legacy system integration
|
|
61
|
+
- Custom server support
|
|
62
|
+
|
|
63
|
+
### Local Storage
|
|
64
|
+
- Same-server storage
|
|
65
|
+
- Fast access
|
|
66
|
+
- No external dependencies
|
|
67
|
+
|
|
68
|
+
## Multi-Tenant Support
|
|
69
|
+
|
|
70
|
+
Files are automatically isolated by:
|
|
71
|
+
- **Company ID**: Company-level storage
|
|
72
|
+
|
|
73
|
+
All queries automatically filter by current user's company context.
|
|
74
|
+
|
|
75
|
+
## File Validation
|
|
76
|
+
|
|
77
|
+
### Size Limits
|
|
78
|
+
Configure maximum file size per upload (default: 10MB)
|
|
79
|
+
|
|
80
|
+
### File Types
|
|
81
|
+
Restrict allowed file types (default: images, PDFs)
|
|
82
|
+
|
|
83
|
+
### Image Compression
|
|
84
|
+
- Automatic image optimization
|
|
85
|
+
- Format conversion (JPEG, PNG, WebP, AVIF)
|
|
86
|
+
- Resize to maximum dimensions
|
|
87
|
+
- Quality control
|
|
88
|
+
|
|
89
|
+
## Response Format
|
|
90
|
+
|
|
91
|
+
All endpoints return standardized responses with success status, data, message, and timestamp.
|
|
92
|
+
|
|
93
|
+
## Error Handling
|
|
94
|
+
|
|
95
|
+
Errors return structured responses with success false, error message, error code, and timestamp.
|
|
96
|
+
|
|
97
|
+
## Common Error Codes
|
|
98
|
+
|
|
99
|
+
- **400 Bad Request**: Invalid input data
|
|
100
|
+
- **401 Unauthorized**: Missing or invalid authentication
|
|
101
|
+
- **403 Forbidden**: Insufficient permissions
|
|
102
|
+
- **404 Not Found**: Resource not found
|
|
103
|
+
- **413 Payload Too Large**: File exceeds size limit
|
|
104
|
+
- **415 Unsupported Media Type**: File type not allowed
|
|
105
|
+
- **500 Internal Server Error**: Server error
|
|
106
|
+
|
|
107
|
+
## Getting Started
|
|
108
|
+
|
|
109
|
+
1. **Authenticate**: Obtain JWT token from /auth/login
|
|
110
|
+
2. **Configure Storage**: Create storage configuration via /storage/storage-config/insert
|
|
111
|
+
3. **Create Folders**: Organize files with /storage/folder/insert
|
|
112
|
+
4. **Upload Files**: Upload files via /storage/upload/single-file
|
|
113
|
+
5. **Manage Files**: Track uploads in /storage/file-manager
|
|
114
|
+
|
|
115
|
+
## API Endpoints
|
|
116
|
+
|
|
117
|
+
All storage endpoints are prefixed with \`/storage\`:
|
|
118
|
+
- \`/storage/file-manager/*\` - File metadata management
|
|
119
|
+
- \`/storage/folder/*\` - Folder organization
|
|
120
|
+
- \`/storage/storage-config/*\` - Storage configuration
|
|
121
|
+
- \`/storage/upload/*\` - File upload/download
|
|
122
|
+
|
|
123
|
+
## Examples
|
|
124
|
+
|
|
125
|
+
### Upload a File
|
|
126
|
+
|
|
127
|
+
POST /storage/upload/single-file with multipart/form-data containing file and optional folderId
|
|
128
|
+
|
|
129
|
+
### Get All Files
|
|
130
|
+
|
|
131
|
+
POST /storage/file-manager/get-all with JSON body containing page and pageSize parameters
|
|
132
|
+
|
|
133
|
+
### Create Folder
|
|
134
|
+
|
|
135
|
+
POST /storage/folder/insert with JSON body containing folder name
|
|
136
|
+
|
|
137
|
+
## Best Practices
|
|
138
|
+
|
|
139
|
+
1. **Always authenticate**: Include JWT token in Authorization header
|
|
140
|
+
2. **Use folders**: Organize files hierarchically
|
|
141
|
+
3. **Check file size**: Validate before upload
|
|
142
|
+
4. **Handle errors**: Implement proper error handling
|
|
143
|
+
5. **Clean up**: Delete unused files regularly
|
|
144
|
+
6. **Use presigned URLs**: Generate temporary URLs for file access
|
|
145
|
+
7. **Compress images**: Enable compression for faster loading
|
|
146
|
+
|
|
147
|
+
## Rate Limiting
|
|
148
|
+
|
|
149
|
+
All endpoints are rate-limited to prevent abuse. Default limits:
|
|
150
|
+
- **Upload**: 100 requests per hour
|
|
151
|
+
- **Download**: 1000 requests per hour
|
|
152
|
+
- **Delete**: 50 requests per hour
|
|
153
|
+
`:`
|
|
154
|
+
# Storage Management API
|
|
155
|
+
|
|
156
|
+
Complete file storage and management system.
|
|
157
|
+
|
|
158
|
+
## Features
|
|
159
|
+
|
|
160
|
+
### \u{1F4C1} File Management
|
|
161
|
+
- Upload single or multiple files
|
|
162
|
+
- Download files with presigned URLs
|
|
163
|
+
- Delete files (single or batch)
|
|
164
|
+
- File metadata management
|
|
165
|
+
- Automatic compression and optimization
|
|
166
|
+
|
|
167
|
+
### \u{1F5C2}\uFE0F Folder Company
|
|
168
|
+
- Create folder hierarchies
|
|
169
|
+
- Organize files by folders
|
|
170
|
+
- Folder-level company
|
|
171
|
+
|
|
172
|
+
### \u2699\uFE0F Storage Configuration
|
|
173
|
+
- Multiple storage providers (AWS S3, Azure, SFTP, Local)
|
|
174
|
+
- Provider-specific configurations
|
|
175
|
+
- Default storage settings
|
|
176
|
+
- Dynamic provider switching
|
|
177
|
+
|
|
178
|
+
### \u{1F512} Security
|
|
179
|
+
- JWT authentication required
|
|
180
|
+
- File access control
|
|
181
|
+
- Presigned URL generation
|
|
182
|
+
|
|
183
|
+
## Storage Providers
|
|
184
|
+
|
|
185
|
+
### AWS S3
|
|
186
|
+
- Scalable cloud storage
|
|
187
|
+
- Automatic redundancy
|
|
188
|
+
- Global CDN integration
|
|
189
|
+
|
|
190
|
+
### Azure Blob Storage
|
|
191
|
+
- Microsoft Azure integration
|
|
192
|
+
- Geo-redundant storage
|
|
193
|
+
- Advanced security features
|
|
194
|
+
|
|
195
|
+
### SFTP
|
|
196
|
+
- Secure file transfer
|
|
197
|
+
- Legacy system integration
|
|
198
|
+
- Custom server support
|
|
199
|
+
|
|
200
|
+
### Local Storage
|
|
201
|
+
- Same-server storage
|
|
202
|
+
- Fast access
|
|
203
|
+
- No external dependencies
|
|
204
|
+
|
|
205
|
+
## File Validation
|
|
206
|
+
|
|
207
|
+
### Size Limits
|
|
208
|
+
Configure maximum file size per upload (default: 10MB)
|
|
209
|
+
|
|
210
|
+
### File Types
|
|
211
|
+
Restrict allowed file types (default: images, PDFs)
|
|
212
|
+
|
|
213
|
+
### Image Compression
|
|
214
|
+
- Automatic image optimization
|
|
215
|
+
- Format conversion (JPEG, PNG, WebP, AVIF)
|
|
216
|
+
- Resize to maximum dimensions
|
|
217
|
+
- Quality control
|
|
218
|
+
|
|
219
|
+
## Response Format
|
|
220
|
+
|
|
221
|
+
All endpoints return standardized responses with success status, data, message, and timestamp.
|
|
222
|
+
|
|
223
|
+
## Error Handling
|
|
224
|
+
|
|
225
|
+
Errors return structured responses with success false, error message, error code, and timestamp.
|
|
226
|
+
|
|
227
|
+
## Common Error Codes
|
|
228
|
+
|
|
229
|
+
- **400 Bad Request**: Invalid input data
|
|
230
|
+
- **401 Unauthorized**: Missing or invalid authentication
|
|
231
|
+
- **403 Forbidden**: Insufficient permissions
|
|
232
|
+
- **404 Not Found**: Resource not found
|
|
233
|
+
- **413 Payload Too Large**: File exceeds size limit
|
|
234
|
+
- **415 Unsupported Media Type**: File type not allowed
|
|
235
|
+
- **500 Internal Server Error**: Server error
|
|
236
|
+
|
|
237
|
+
## Getting Started
|
|
238
|
+
|
|
239
|
+
1. **Authenticate**: Obtain JWT token from /auth/login
|
|
240
|
+
2. **Configure Storage**: Create storage configuration via /storage/storage-config/insert
|
|
241
|
+
3. **Create Folders**: Organize files with /storage/folder/insert
|
|
242
|
+
4. **Upload Files**: Upload files via /storage/upload/single-file
|
|
243
|
+
5. **Manage Files**: Track uploads in /storage/file-manager
|
|
244
|
+
|
|
245
|
+
## API Endpoints
|
|
246
|
+
|
|
247
|
+
All storage endpoints are prefixed with \`/storage\`:
|
|
248
|
+
- \`/storage/file-manager/*\` - File metadata management
|
|
249
|
+
- \`/storage/folder/*\` - Folder organization
|
|
250
|
+
- \`/storage/storage-config/*\` - Storage configuration
|
|
251
|
+
- \`/storage/upload/*\` - File upload/download
|
|
252
|
+
|
|
253
|
+
## Best Practices
|
|
254
|
+
|
|
255
|
+
1. **Always authenticate**: Include JWT token in Authorization header
|
|
256
|
+
2. **Use folders**: Organize files hierarchically
|
|
257
|
+
3. **Check file size**: Validate before upload
|
|
258
|
+
4. **Handle errors**: Implement proper error handling
|
|
259
|
+
5. **Clean up**: Delete unused files regularly
|
|
260
|
+
6. **Use presigned URLs**: Generate temporary URLs for file access
|
|
261
|
+
7. **Compress images**: Enable compression for faster loading
|
|
262
|
+
|
|
263
|
+
## Rate Limiting
|
|
264
|
+
|
|
265
|
+
All endpoints are rate-limited to prevent abuse. Default limits:
|
|
266
|
+
- **Upload**: 100 requests per hour
|
|
267
|
+
- **Download**: 1000 requests per hour
|
|
268
|
+
- **Delete**: 50 requests per hour
|
|
269
|
+
`,version:"1.0",path:"api/docs/storage",bearerAuth:true,excludeTags:[],excludeSchemaProperties:enableCompanyFeature?void 0:COMPANY_SCHEMA_EXCLUSIONS}}__name(storageSwaggerConfig,"storageSwaggerConfig");import{ApiProperty,PartialType}from"@nestjs/swagger";import{IsNotEmpty,IsString}from"class-validator";var CreateFolderDto3=class{static{__name(this,"CreateFolderDto")}name};__decorateClass([ApiProperty({description:"Name of the folder",example:"Invoices"}),IsNotEmpty(),IsString()],CreateFolderDto3.prototype,"name",2);var UpdateFolderDto3=class extends PartialType(CreateFolderDto3){static{__name(this,"UpdateFolderDto")}id};__decorateClass([ApiProperty({description:"Unique identifier of the folder",example:"f2e9c8d0-7a2a-11eb-9439-0242ac130002"}),IsNotEmpty()],UpdateFolderDto3.prototype,"id",2);var FolderResponseDto2=class extends UpdateFolderDto3{static{__name(this,"FolderResponseDto")}slug};__decorateClass([ApiProperty({description:"Name of the folder",example:"Invoices"}),IsNotEmpty(),IsString()],FolderResponseDto2.prototype,"slug",2);import{ApiProperty as ApiProperty2,ApiPropertyOptional,PartialType as PartialType2}from"@nestjs/swagger";import{IsBoolean,IsEnum,IsNotEmpty as IsNotEmpty2,IsOptional,IsString as IsString2}from"class-validator";import{FileLocationEnum as FileLocationEnum4}from"@flusys/nestjs-storage/enums";var CreateFileManagerDto3=class{static{__name(this,"CreateFileManagerDto")}name;key;size;contentType;isPrivate;folderId;storageConfigId;location};__decorateClass([ApiProperty2({description:"Name of the FileManager item",example:"Summer Vacation 2025"}),IsNotEmpty2(),IsString2()],CreateFileManagerDto3.prototype,"name",2);__decorateClass([ApiProperty2({description:"Name of the FileManager item",example:"Summer Vacation 2025"}),IsNotEmpty2(),IsString2()],CreateFileManagerDto3.prototype,"key",2);__decorateClass([ApiProperty2({description:"Size of the FileManager item",example:"1024"}),IsNotEmpty2(),IsString2()],CreateFileManagerDto3.prototype,"size",2);__decorateClass([ApiProperty2({description:"mime type of file",example:"image/jpeg"}),IsNotEmpty2(),IsString2()],CreateFileManagerDto3.prototype,"contentType",2);__decorateClass([ApiProperty2({description:"Indicates if the FileManager item is private",example:true}),IsNotEmpty2(),IsBoolean()],CreateFileManagerDto3.prototype,"isPrivate",2);__decorateClass([ApiProperty2({description:"Folder ID (UUID)",example:"f2e9c8d0-7a2a-11eb-9439-0242ac130002"}),IsOptional(),IsString2()],CreateFileManagerDto3.prototype,"folderId",2);__decorateClass([ApiPropertyOptional({description:"Storage configuration ID - if not provided, uses default",example:"123e4567-e89b-12d3-a456-426614174000"}),IsOptional(),IsString2()],CreateFileManagerDto3.prototype,"storageConfigId",2);__decorateClass([ApiPropertyOptional({description:"Storage location type",enum:FileLocationEnum4,example:FileLocationEnum4.AWS}),IsOptional(),IsEnum(FileLocationEnum4)],CreateFileManagerDto3.prototype,"location",2);var UpdateFileManagerDto3=class extends PartialType2(CreateFileManagerDto3){static{__name(this,"UpdateFileManagerDto")}id};__decorateClass([ApiProperty2({description:"Unique identifier of the folder",example:"f2e9c8d0-7a2a-11eb-9439-0242ac130002"}),IsNotEmpty2()],UpdateFileManagerDto3.prototype,"id",2);var FileManagerResponseDto2=class extends UpdateFileManagerDto3{static{__name(this,"FileManagerResponseDto")}};var GetFilesRequestDto3=class{static{__name(this,"GetFilesRequestDto")}id};__decorateClass([ApiProperty2({example:"f2e9c8d0-7a2a-11eb-9439-0242ac130002"})],GetFilesRequestDto3.prototype,"id",2);var FilesResponseDto3=class{static{__name(this,"FilesResponseDto")}id;name;contentType;url};__decorateClass([ApiProperty2({example:"file123.jpg"})],FilesResponseDto3.prototype,"id",2);__decorateClass([ApiProperty2({example:"file123.jpg"})],FilesResponseDto3.prototype,"name",2);__decorateClass([ApiProperty2({example:"file123.jpg"})],FilesResponseDto3.prototype,"contentType",2);__decorateClass([ApiProperty2({example:"file123.jpg"})],FilesResponseDto3.prototype,"url",2);import{ApiProperty as ApiProperty3,ApiPropertyOptional as ApiPropertyOptional2}from"@nestjs/swagger";import{IsBoolean as IsBoolean2,IsEnum as IsEnum2,IsInt,IsOptional as IsOptional2,IsUUID,Matches,Max,Min}from"class-validator";import{Type}from"class-transformer";var ImageFormat=(ImageFormat2=>{ImageFormat2["ORIGINAL"]="original";ImageFormat2["JPEG"]="jpeg";ImageFormat2["PNG"]="png";ImageFormat2["WEBP"]="webp";return ImageFormat2})(ImageFormat||{});var DeleteSingleFileDto2=class{static{__name(this,"DeleteSingleFileDto")}key;storageConfigId};__decorateClass([ApiProperty3({description:"Key of the file to delete",example:"/uploads/some path"})],DeleteSingleFileDto2.prototype,"key",2);__decorateClass([ApiPropertyOptional2({description:"Storage configuration ID (optional - uses default if not provided)",example:"123e4567-e89b-12d3-a456-426614174000"}),IsOptional2(),IsUUID()],DeleteSingleFileDto2.prototype,"storageConfigId",2);var DeleteMultipleFileDto2=class{static{__name(this,"DeleteMultipleFileDto")}keys;storageConfigId};__decorateClass([ApiProperty3({description:"Array of file Keys to delete",example:["/uploads/some path","aws key"],type:[String]})],DeleteMultipleFileDto2.prototype,"keys",2);__decorateClass([ApiPropertyOptional2({description:"Storage configuration ID (optional - uses default if not provided)",example:"123e4567-e89b-12d3-a456-426614174000"}),IsOptional2(),IsUUID()],DeleteMultipleFileDto2.prototype,"storageConfigId",2);var UploadOptionsDto2=class{static{__name(this,"UploadOptionsDto")}storageConfigId;folderPath;maxWidth=1280;maxHeight=1280;quality=85;format="original";compress=true};__decorateClass([ApiPropertyOptional2({description:"Storage configuration ID (optional - uses default if not provided)",example:"123e4567-e89b-12d3-a456-426614174000"}),IsOptional2(),IsUUID()],UploadOptionsDto2.prototype,"storageConfigId",2);__decorateClass([ApiPropertyOptional2({description:'Folder path where the file should be uploaded (e.g., "uploads/images").',example:"uploads/images"}),IsOptional2(),Matches(/^[a-zA-Z0-9-_/]*$/,{message:"folderPath can only contain letters, numbers, hyphens, underscores, and slashes."})],UploadOptionsDto2.prototype,"folderPath",2);__decorateClass([ApiPropertyOptional2({description:"Maximum width of the image in pixels (resize will preserve aspect ratio).",example:1280,minimum:100,maximum:1e4,default:1280}),IsOptional2(),Type(()=>Number),IsInt(),Min(100),Max(1e4)],UploadOptionsDto2.prototype,"maxWidth",2);__decorateClass([ApiPropertyOptional2({description:"Maximum height of the image in pixels (resize will preserve aspect ratio).",example:1280,minimum:100,maximum:1e4,default:1280}),IsOptional2(),Type(()=>Number),IsInt(),Min(100),Max(1e4)],UploadOptionsDto2.prototype,"maxHeight",2);__decorateClass([ApiPropertyOptional2({description:"Compression quality (1\u2013100). Higher means better quality but larger file size.",example:85,minimum:1,maximum:100,default:85}),IsOptional2(),Type(()=>Number),IsInt(),Min(1),Max(100)],UploadOptionsDto2.prototype,"quality",2);__decorateClass([ApiPropertyOptional2({description:'Output format of the image. "original" keeps the source format.',enum:ImageFormat,default:"original"}),IsOptional2(),IsEnum2(ImageFormat)],UploadOptionsDto2.prototype,"format",2);__decorateClass([ApiPropertyOptional2({description:"Whether to compress the image or not.",example:true,default:true}),IsOptional2(),Type(()=>Boolean),IsBoolean2()],UploadOptionsDto2.prototype,"compress",2);var FileUploadResponsePayloadDto2=class{static{__name(this,"FileUploadResponsePayloadDto")}name;contentType;size;key};__decorateClass([ApiProperty3({example:"file123.jpg"})],FileUploadResponsePayloadDto2.prototype,"name",2);__decorateClass([ApiProperty3({example:"file123.jpg"})],FileUploadResponsePayloadDto2.prototype,"contentType",2);__decorateClass([ApiProperty3({example:2048})],FileUploadResponsePayloadDto2.prototype,"size",2);__decorateClass([ApiProperty3({example:"file path or aws key"})],FileUploadResponsePayloadDto2.prototype,"key",2);import{IdentityResponseDto}from"@flusys/nestjs-shared/dtos";import{FileLocationEnum as FileLocationEnum5}from"@flusys/nestjs-storage/enums";import{ApiProperty as ApiProperty4,ApiPropertyOptional as ApiPropertyOptional3}from"@nestjs/swagger";import{IsEnum as IsEnum3,IsNotEmpty as IsNotEmpty3,IsObject,IsOptional as IsOptional3,IsString as IsString3,MaxLength}from"class-validator";var CreateStorageConfigDto2=class{static{__name(this,"CreateStorageConfigDto")}name;storage;config};__decorateClass([ApiProperty4({example:"Production AWS S3"}),IsString3(),IsNotEmpty3(),MaxLength(255)],CreateStorageConfigDto2.prototype,"name",2);__decorateClass([ApiProperty4({enum:FileLocationEnum5,example:FileLocationEnum5.AWS,description:"Storage provider type"}),IsEnum3(FileLocationEnum5),IsNotEmpty3()],CreateStorageConfigDto2.prototype,"storage",2);__decorateClass([ApiProperty4({type:"object",properties:{region:{type:"string",example:"us-east-1",description:"Cloud region"},bucket:{type:"string",example:"my-bucket",description:"Bucket name"}},additionalProperties:true,description:"Provider-specific configuration",example:{region:"us-east-1",bucket:"my-bucket"}}),IsObject(),IsNotEmpty3()],CreateStorageConfigDto2.prototype,"config",2);var UpdateStorageConfigDto2=class{static{__name(this,"UpdateStorageConfigDto")}id;name;storage;config};__decorateClass([ApiProperty4({example:"123e4567-e89b-12d3-a456-426614174000"}),IsString3(),IsNotEmpty3()],UpdateStorageConfigDto2.prototype,"id",2);__decorateClass([ApiPropertyOptional3({example:"Production AWS S3"}),IsString3(),IsOptional3(),MaxLength(255)],UpdateStorageConfigDto2.prototype,"name",2);__decorateClass([ApiPropertyOptional3({enum:FileLocationEnum5,example:FileLocationEnum5.AWS}),IsEnum3(FileLocationEnum5),IsOptional3()],UpdateStorageConfigDto2.prototype,"storage",2);__decorateClass([ApiPropertyOptional3({type:"object",properties:{region:{type:"string",example:"us-east-1",description:"Cloud region"},bucket:{type:"string",example:"my-bucket",description:"Bucket name"}},additionalProperties:true,description:"Provider-specific configuration",example:{region:"us-east-1",bucket:"my-bucket"}}),IsObject(),IsOptional3()],UpdateStorageConfigDto2.prototype,"config",2);var StorageConfigResponseDto2=class extends IdentityResponseDto{static{__name(this,"StorageConfigResponseDto")}name;storage;config};init_file_location_enum();init_image_compressor_util();export{CreateFileManagerDto3 as CreateFileManagerDto,CreateFolderDto3 as CreateFolderDto,CreateStorageConfigDto2 as CreateStorageConfigDto,DEFAULT_ALLOWED_FILE_TYPES,DEFAULT_MAX_FILE_SIZE,DeleteMultipleFileDto2 as DeleteMultipleFileDto,DeleteSingleFileDto2 as DeleteSingleFileDto,FILE_VALIDATION_MESSAGES,FileLocationEnum,FileManager,FileManagerBase,FileManagerController,FileManagerResponseDto2 as FileManagerResponseDto,FileManagerService,FileManagerWithCompany,FileUploadResponsePayloadDto2 as FileUploadResponsePayloadDto,FilesResponseDto3 as FilesResponseDto,Folder,FolderBase,FolderController,FolderResponseDto2 as FolderResponseDto,FolderService,FolderWithCompany,GetFilesRequestDto3 as GetFilesRequestDto,ImageCompressor,ImageFormat,LocalProvider,STORAGE_CONFIG_SERVICE,STORAGE_DATA_SOURCE_PROVIDER,STORAGE_MODULE_OPTIONS,StorageAllEntities,StorageCompanyEntities,StorageConfig,StorageConfigBase,StorageConfigController,StorageConfigResponseDto2 as StorageConfigResponseDto,StorageConfigService,StorageConfigWithCompany,StorageCoreEntities,StorageDataSourceProvider,StorageFactoryService,StorageModule,StorageProviderConfigService,StorageProviderRegistry,UpdateFileManagerDto3 as UpdateFileManagerDto,UpdateFolderDto3 as UpdateFolderDto,UpdateStorageConfigDto2 as UpdateStorageConfigDto,UploadController,UploadOptionsDto2 as UploadOptionsDto,UploadService,getStorageEntitiesByConfig,storageSwaggerConfig};
|
|
270
|
+
/*! Bundled license information:
|
|
271
|
+
|
|
272
|
+
mime-db/index.js:
|
|
273
|
+
(*!
|
|
274
|
+
* mime-db
|
|
275
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
276
|
+
* Copyright(c) 2015-2022 Douglas Christopher Wilson
|
|
277
|
+
* MIT Licensed
|
|
278
|
+
*)
|
|
279
|
+
|
|
280
|
+
mime-types/index.js:
|
|
281
|
+
(*!
|
|
282
|
+
* mime-types
|
|
283
|
+
* Copyright(c) 2014 Jonathan Ong
|
|
284
|
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
|
285
|
+
* MIT Licensed
|
|
286
|
+
*)
|
|
287
|
+
*/
|