mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			TypeScript
		
	
	
| function pick <O extends object, K extends keyof O> (object: O, keys: K[]): Pick<O, K> {
 | |
|   const result: any = {}
 | |
| 
 | |
|   for (const key of keys) {
 | |
|     if (Object.prototype.hasOwnProperty.call(object, key)) {
 | |
|       result[key] = object[key]
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return result
 | |
| }
 | |
| 
 | |
| function omit <O extends object, K extends keyof O> (object: O, keys: K[]): Exclude<O, K> {
 | |
|   const result: any = {}
 | |
|   const keysSet = new Set(keys) as Set<string>
 | |
| 
 | |
|   for (const [ key, value ] of Object.entries(object)) {
 | |
|     if (keysSet.has(key)) continue
 | |
| 
 | |
|     result[key] = value
 | |
|   }
 | |
| 
 | |
|   return result
 | |
| }
 | |
| 
 | |
| function objectKeysTyped <O extends object, K extends keyof O> (object: O): K[] {
 | |
|   return (Object.keys(object) as K[])
 | |
| }
 | |
| 
 | |
| function getKeys <O extends object, K extends keyof O> (object: O, keys: K[]): K[] {
 | |
|   return (Object.keys(object) as K[]).filter(k => keys.includes(k))
 | |
| }
 | |
| 
 | |
| function hasKey <T extends object> (obj: T, k: keyof any): k is keyof T {
 | |
|   return k in obj
 | |
| }
 | |
| 
 | |
| function sortObjectComparator (key: string, order: 'asc' | 'desc') {
 | |
|   return (a: any, b: any) => {
 | |
|     if (a[key] < b[key]) {
 | |
|       return order === 'asc' ? -1 : 1
 | |
|     }
 | |
| 
 | |
|     if (a[key] > b[key]) {
 | |
|       return order === 'asc' ? 1 : -1
 | |
|     }
 | |
| 
 | |
|     return 0
 | |
|   }
 | |
| }
 | |
| 
 | |
| function shallowCopy <T> (o: T): T {
 | |
|   return Object.assign(Object.create(Object.getPrototypeOf(o)), o)
 | |
| }
 | |
| 
 | |
| function simpleObjectsDeepEqual (a: any, b: any) {
 | |
|   if (a === b) return true
 | |
| 
 | |
|   if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null) {
 | |
|     return false
 | |
|   }
 | |
| 
 | |
|   const keysA = Object.keys(a)
 | |
|   const keysB = Object.keys(b)
 | |
| 
 | |
|   if (keysA.length !== keysB.length) return false
 | |
| 
 | |
|   for (const key of keysA) {
 | |
|     if (!keysB.includes(key)) return false
 | |
| 
 | |
|     if (!simpleObjectsDeepEqual(a[key], b[key])) return false
 | |
|   }
 | |
| 
 | |
|   return true
 | |
| }
 | |
| 
 | |
| export {
 | |
|   pick,
 | |
|   omit,
 | |
|   objectKeysTyped,
 | |
|   getKeys,
 | |
|   hasKey,
 | |
|   shallowCopy,
 | |
|   sortObjectComparator,
 | |
|   simpleObjectsDeepEqual
 | |
| }
 |