mirror of https://github.com/Chocobozzz/PeerTube
				
				
				
			
		
			
				
	
	
		
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
| import { HookType } from '../../models/plugins/hook-type.enum'
 | |
| import { isCatchable, isPromise } from '../common/promises'
 | |
| 
 | |
| function getHookType (hookName: string) {
 | |
|   if (hookName.startsWith('filter:')) return HookType.FILTER
 | |
|   if (hookName.startsWith('action:')) return HookType.ACTION
 | |
| 
 | |
|   return HookType.STATIC
 | |
| }
 | |
| 
 | |
| async function internalRunHook <T> (handler: Function, hookType: HookType, result: T, params: any, onError: (err: Error) => void) {
 | |
|   try {
 | |
|     if (hookType === HookType.FILTER) {
 | |
|       const p = handler(result, params)
 | |
| 
 | |
|       if (isPromise(p)) result = await p
 | |
|       else result = p
 | |
| 
 | |
|       return result
 | |
|     }
 | |
| 
 | |
|     // Action/static hooks do not have result value
 | |
|     const p = handler(params)
 | |
| 
 | |
|     if (hookType === HookType.STATIC) {
 | |
|       if (isPromise(p)) await p
 | |
| 
 | |
|       return undefined
 | |
|     }
 | |
| 
 | |
|     if (hookType === HookType.ACTION) {
 | |
|       if (isCatchable(p)) p.catch((err: any) => onError(err))
 | |
| 
 | |
|       return undefined
 | |
|     }
 | |
|   } catch (err) {
 | |
|     onError(err)
 | |
|   }
 | |
| 
 | |
|   return result
 | |
| }
 | |
| 
 | |
| export {
 | |
|   getHookType,
 | |
|   internalRunHook
 | |
| }
 |