mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-31 10:37:56 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /**
 | |
|  * These utils are used for managing Duration type values
 | |
|  * (eg. '30m', '365d'). Most often used in the context of TTLs
 | |
|  */
 | |
| interface SecondsMap {
 | |
|   s: 1;
 | |
|   m: 60;
 | |
|   h: 3600;
 | |
|   d: 86400;
 | |
|   [key: string]: number;
 | |
| }
 | |
| export const secondsMap: SecondsMap = {
 | |
|   s: 1,
 | |
|   m: 60,
 | |
|   h: 3600,
 | |
|   d: 86400,
 | |
| };
 | |
| export const convertToSeconds = (time: number, unit: string) => {
 | |
|   return time * (secondsMap[unit] || 1);
 | |
| };
 | |
| export const convertFromSeconds = (seconds: number, unit: string) => {
 | |
|   return seconds / (secondsMap[unit] || 1);
 | |
| };
 | |
| export const goSafeConvertFromSeconds = (seconds: number, unit: string) => {
 | |
|   // Go only accepts s, m, or h units
 | |
|   const u = unit === 'd' ? 'h' : unit;
 | |
|   return convertFromSeconds(seconds, u) + u;
 | |
| };
 | |
| export const largestUnitFromSeconds = (seconds: number) => {
 | |
|   let unit = 's';
 | |
|   if (seconds === 0) return unit;
 | |
|   // get largest unit with no remainder
 | |
|   if (seconds % secondsMap.d === 0) {
 | |
|     unit = 'd';
 | |
|   } else if (seconds % secondsMap.h === 0) {
 | |
|     unit = 'h';
 | |
|   } else if (seconds % secondsMap.m === 0) {
 | |
|     unit = 'm';
 | |
|   }
 | |
|   return unit;
 | |
| };
 | 
