| 
					
				 | 
			
			
				@@ -6,7 +6,7 @@ import { useWebsocketStore } from "./websocket"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import Model from "@/Model"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 export const useModelStore = defineStore("model", () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const { runJob, subscribe, subscribeMany, unsubscribe } = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const { runJob, subscribe, subscribeMany, unsubscribe, unsubscribeMany } = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		useWebsocketStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	const models = ref([]); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -39,41 +39,51 @@ export const useModelStore = defineStore("model", () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return !!data[permission]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	const unregisterModels = async modelIds => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		forEachIn( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	const unregisterModels = async modelIds => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const removeModels = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await forEachIn( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			Array.isArray(modelIds) ? modelIds : [modelIds], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			async modelId => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				const model = models.value.find(model => model._id === modelId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (!model || model.getUses() > 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					model?.removeUse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (!model) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				model?.removeUse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (model.getUses() > 1) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				removeModels.push(model); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (removeModels.length === 0) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				await model.unregisterRelations(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await forEachIn(removeModels, async model => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			model.unregisterRelations() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		const subscriptions = Object.fromEntries( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			removeModels.flatMap(model => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				const { updated, deleted } = model.getSubscriptions() ?? {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (updated) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					await unsubscribe( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						`model.${model.getName()}.updated.${modelId}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						updated 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (deleted) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					await unsubscribe( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						`model.${model.getName()}.deleted.${modelId}`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						deleted 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				models.value.splice( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					models.value.findIndex(model => model._id === modelId), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				return [ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					[updated, `model.${model.getName()}.updated.${model._id}`], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					[deleted, `model.${model.getName()}.deleted.${model._id}`] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await unsubscribeMany(subscriptions); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		await forEachIn(removeModels, async removeModel => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			models.value.splice( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				models.value.findIndex(model => model._id === removeModel._id), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	const onCreatedCallback = async (modelName: string, data) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if (!subscriptions.value.created[modelName]) return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |