mirror of
				https://github.com/strapi/strapi.git
				synced 2025-10-31 18:08:11 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| const createLifecyclesManager = db => {
 | |
|   let subscribers = [];
 | |
| 
 | |
|   const lifecycleManager = {
 | |
|     subscribe(subscriber) {
 | |
|       // TODO: verify subscriber
 | |
|       subscribers.push(subscriber);
 | |
| 
 | |
|       return () => {
 | |
|         subscribers.splice(subscribers.indexOf(subscriber), 1);
 | |
|       };
 | |
|     },
 | |
| 
 | |
|     createEvent(action, uid, properties) {
 | |
|       const model = db.metadata.get(uid);
 | |
| 
 | |
|       return {
 | |
|         action,
 | |
|         model,
 | |
|         ...properties,
 | |
|       };
 | |
|     },
 | |
| 
 | |
|     async run(action, uid, properties) {
 | |
|       for (const subscriber of subscribers) {
 | |
|         if (typeof subscriber === 'function') {
 | |
|           const event = this.createEvent(action, uid, properties);
 | |
|           await subscriber(event);
 | |
|           continue;
 | |
|         }
 | |
| 
 | |
|         const hasAction = action in subscriber;
 | |
|         const hasModel = !subscriber.models || subscriber.models.includes(uid);
 | |
| 
 | |
|         if (hasAction && hasModel) {
 | |
|           const event = this.createEvent(action, uid, properties);
 | |
| 
 | |
|           await subscriber[action](event);
 | |
|         }
 | |
|       }
 | |
|     },
 | |
| 
 | |
|     clear() {
 | |
|       subscribers = [];
 | |
|     },
 | |
|   };
 | |
| 
 | |
|   return lifecycleManager;
 | |
| };
 | |
| 
 | |
| module.exports = {
 | |
|   createLifecyclesManager,
 | |
| };
 | 
