107 lines
2.9 KiB
TypeScript
107 lines
2.9 KiB
TypeScript
|
|
import sharp from "sharp"
|
||
|
|
try { require('dotenv').config() } catch (e) { }
|
||
|
|
|
||
|
|
// Export Variables
|
||
|
|
const PARSED_ADDR = /^([A-z0-9.]+):([0-9]+)$/.exec(process.env['WEB_ADDR'] || 'localhost:8080')
|
||
|
|
if (PARSED_ADDR === null) {
|
||
|
|
process.stdout.write(`[ENV] Malformed TCP Address for Variable 'WEB_ADDR' (Ex. localhost:8080, 127.0.0.1:8080)\n`)
|
||
|
|
process.exit(4)
|
||
|
|
}
|
||
|
|
export const PRODUCTION = (process.env['NODE_ENV']?.trim() == 'production')
|
||
|
|
export const WEB_PORT = parseInt(PARSED_ADDR[2]!)
|
||
|
|
export const WEB_ADDR = PARSED_ADDR[1]!
|
||
|
|
|
||
|
|
// Constants
|
||
|
|
export const PROCESSOR_PREFIX = 'file://'
|
||
|
|
export const PROCESSOR_DIRECT = 'https://suzzygames.com' // todo: reimplement direct urls for og tags and such
|
||
|
|
export const PROCESSOR_INDEX: Record<string, number> = {}
|
||
|
|
export const PROCESSOR_ASSETS = new Array<{
|
||
|
|
type: string;
|
||
|
|
size: number;
|
||
|
|
file: string | Buffer;
|
||
|
|
}>()
|
||
|
|
|
||
|
|
// Presets Available to Image Processor
|
||
|
|
export const PROCESSOR_PRESETS: Record<string, {
|
||
|
|
height: number;
|
||
|
|
width: number;
|
||
|
|
quality: number;
|
||
|
|
format: keyof sharp.FormatEnum;
|
||
|
|
resize: sharp.ResizeOptions;
|
||
|
|
}> = {
|
||
|
|
'icon': {
|
||
|
|
height: 64,
|
||
|
|
width: 64,
|
||
|
|
quality: 100,
|
||
|
|
format: 'png',
|
||
|
|
resize: {}
|
||
|
|
},
|
||
|
|
'branding': {
|
||
|
|
height: 128,
|
||
|
|
width: 128,
|
||
|
|
quality: 80,
|
||
|
|
format: 'png',
|
||
|
|
resize: {
|
||
|
|
fit: 'contain',
|
||
|
|
kernel: 'lanczos3',
|
||
|
|
background: {
|
||
|
|
r: 0,
|
||
|
|
g: 0,
|
||
|
|
b: 0,
|
||
|
|
alpha: 0
|
||
|
|
},
|
||
|
|
}
|
||
|
|
},
|
||
|
|
}
|
||
|
|
|
||
|
|
// Common extensions and their MIME types
|
||
|
|
export const CONTENT_TYPE_MAP: Record<string, string> = {
|
||
|
|
// Text and Web
|
||
|
|
'html': 'text/html',
|
||
|
|
'htm': 'text/html',
|
||
|
|
'js': 'text/javascript',
|
||
|
|
'css': 'text/css',
|
||
|
|
'json': 'application/json',
|
||
|
|
'xml': 'application/xml',
|
||
|
|
'csv': 'text/csv',
|
||
|
|
'txt': 'text/plain',
|
||
|
|
'md': 'text/markdown',
|
||
|
|
// Images
|
||
|
|
'png': 'image/png',
|
||
|
|
'jpeg': 'image/jpeg',
|
||
|
|
'jpg': 'image/jpeg',
|
||
|
|
'gif': 'image/gif',
|
||
|
|
'bmp': 'image/bmp',
|
||
|
|
'webp': 'image/webp',
|
||
|
|
'svg': 'image/svg+xml',
|
||
|
|
'ico': 'image/x-icon',
|
||
|
|
'tiff': 'image/tiff',
|
||
|
|
'heic': 'image/heic',
|
||
|
|
// Audio
|
||
|
|
'mp3': 'audio/mpeg',
|
||
|
|
'wav': 'audio/wav',
|
||
|
|
'ogg': 'audio/ogg',
|
||
|
|
'm4a': 'audio/mp4',
|
||
|
|
'flac': 'audio/flac',
|
||
|
|
'opus': 'audio/opus',
|
||
|
|
// Video
|
||
|
|
'mp4': 'video/mp4',
|
||
|
|
'webm': 'video/webm',
|
||
|
|
'avi': 'video/x-msvideo',
|
||
|
|
'mov': 'video/quicktime',
|
||
|
|
'mkv': 'video/x-matroska',
|
||
|
|
// Fonts
|
||
|
|
'woff': 'font/woff',
|
||
|
|
'woff2': 'font/woff2',
|
||
|
|
'ttf': 'font/ttf',
|
||
|
|
'otf': 'font/otf',
|
||
|
|
'eot': 'application/vnd.ms-fontobject',
|
||
|
|
// Application files
|
||
|
|
'pdf': 'application/pdf',
|
||
|
|
'zip': 'application/zip',
|
||
|
|
'gz': 'application/gzip',
|
||
|
|
'tar': 'application/x-tar',
|
||
|
|
'rar': 'application/vnd.rar',
|
||
|
|
'7z': 'application/x-7z-compressed',
|
||
|
|
'exe': 'application/vnd.microsoft.portable-executable',
|
||
|
|
}
|