UNPKG

@altostra/core

Version:

Core library for shared types and logic

1 lines 1.66 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMessageQueueUtils=void 0;const Iterable_1=require("../../../common/Iterable"),filter_1=require("@reactivex/ix-es2015-cjs/iterable/operators/filter");function getMessageQueueUtils(e,t){return{isValidDeadLetterTarget(s){const a=e.resources.get(s),r=t.outgoingConnections.ofType("connection.queue.dead-letter").pipe((0,filter_1.filter)(e=>e.targetId!==s));return(0,Iterable_1.isEmpty)(r)?a?a.is("resource.external")?a.actualType===t.type?{isValid:!0,reason:""}:{isValid:!1,reason:"The target of this connection must be a message-queue of the same type as the source"}:a.is("resource.message-queue","resource.message-queue.fifo")?t.type!==a.type?{isValid:!1,reason:t.is("resource.message-queue")?"A standard (not FIFO) queue may not connect to a FIFO dead letter queue":"A FIFO queue may not connect to a standard (not FIFO) dead letter queue"}:isCyclicDeadLetterQueue(t,a)?{isValid:!1,reason:"This connection is not allowed because it would create a circular dependency"}:{isValid:!0,reason:""}:{isValid:!1,reason:"The target of this connection must be a message-queue"}:{isValid:!1,reason:"The target of this connection could not be found"}:{isValid:!1,reason:"Source queue is already connected to a dead-letter queue"}}}}function isCyclicDeadLetterQueue(e,t,s=new Set){if(s.has(t.id))return!0;s.add(t.id);const[a]=t.outgoingConnections.ofType("connection.queue.dead-letter");return e.id===t.id||!(!a||!a.target.is("resource.message-queue","resource.message-queue.fifo"))&&(a.targetId===e.id||isCyclicDeadLetterQueue(e,a.target,s))}exports.getMessageQueueUtils=getMessageQueueUtils;