export function escapeHtml( html: string ) { const entityMap = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/', '`': '`', '=': '=' }; return String( html ).replace( /[&<>"'`=\/]/g, ( s ) => { return entityMap[s]; } ); } export function parseJWT( token: string ) : any { const parts = token.split( '.' ); let encoded = parts[1]; encoded = encoded.replace(/-/g, '+').replace(/_/g, '/'); const pad = encoded.length % 4; if( pad === 1 ) throw new Error( 'what the fuck' ); if( pad > 1 ) encoded += new Array( 5 - pad ).join( '=' ); const payload = JSON.parse( atob( encoded ) ); return payload; } export function sizeHumanReadable( size: number, short: boolean = false ) { if( size < 1024 ) return size + (short? 'B' : ' B'); else if( size < 1024 * 1024 ) return ( size / 1024 ).toFixed( short? 1: 2 ) + (short? 'K' : ' KB'); else if( size < 1024 * 1024 * 1024 ) return ( size / 1024 / 1024 ).toFixed( short? 1 : 2 ) + (short? 'M' : ' MB'); else return ( size / 1024 / 1024 / 1024 ).toFixed( short? 1 : 2 ) + (short? 'G':' GB'); } export function monthToNumber( month: string ) { const months = [ '', 'jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec' ]; return months.indexOf( month.toLowerCase() ); };