diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/Actor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/Actor.java index 3a00cdb9..bab38751 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/Actor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/Actor.java @@ -20,13 +20,13 @@ public void onReceive(Object message) throws Exception {} @Override public void preStart() throws Exception{ super.preStart(); - logger.debug(self().path() + " - starting"); + logger.debug("{} - starting", self().path()); } @Override public void postStop() throws Exception{ super.postStop(); - logger.debug(self().path() + " - stopping"); + logger.debug("{} - stopping", self().path()); } @Override diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractMessagingStepProcessorActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractMessagingStepProcessorActor.java index c4c69698..b4b2101d 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractMessagingStepProcessorActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractMessagingStepProcessorActor.java @@ -232,7 +232,14 @@ protected OnSuccess handleSuccess(Promise() { @Override public void onSuccess(TestStepReportType result) { - promise.trySuccess(result); + if (result != null) { + /* + * If the report is null this means that we should not mark the step's promise as successfully completed. + * The report in this case is expected to be produced asynchronously. It is important to keep the step's + * promise as not completed as like this we can react to stop notifications. + */ + promise.trySuccess(result); + } } }; } diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractTestStepActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractTestStepActor.java index 2bf16315..14609b9b 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractTestStepActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/AbstractTestStepActor.java @@ -147,7 +147,6 @@ public void onReceive(Object message) { try { super.onReceive(message); if (message instanceof ErrorStatusEvent) { -// inform((StatusEvent) message); handleStatusEvent((StatusEvent) message); } else if (message instanceof StatusEvent) { handleStatusEvent((StatusEvent) message); diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/InteractionStepProcessorActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/InteractionStepProcessorActor.java index 89bb1042..c3f3e16f 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/InteractionStepProcessorActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/InteractionStepProcessorActor.java @@ -7,7 +7,6 @@ import com.gitb.engine.TestbedService; import com.gitb.engine.commands.messaging.TimeoutExpired; import com.gitb.engine.events.TestStepInputEventBus; -import com.gitb.engine.events.model.ErrorStatusEvent; import com.gitb.engine.events.model.InputEvent; import com.gitb.engine.expr.ExpressionHandler; import com.gitb.engine.expr.resolvers.VariableResolver; @@ -57,7 +56,6 @@ public class InteractionStepProcessorActor extends AbstractTestStepActor promise; public InteractionStepProcessorActor(UserInteraction step, TestCaseScope scope, String stepId) { @@ -67,7 +65,7 @@ public InteractionStepProcessorActor(UserInteraction step, TestCaseScope scope, @Override public void onReceive(Object message) { if (message instanceof TimeoutExpired) { - if (!receivedInput) { + if (!promise.isCompleted()) { logger.debug(addMarker(), "Timeout expired while waiting to receive input"); var inputEvent = new InputEvent(scope.getContext().getSessionId(), step.getId(), Collections.emptyList(), step.isAdmin()); this.handleInputEvent(inputEvent); @@ -84,14 +82,19 @@ protected void init() { .getInstance() .subscribe(self(), classifier); - final ActorContext context = getContext(); - promise = Futures.promise(); + promise.future().foreach(new OnSuccess<>() { + @Override + public void onSuccess(TestStepReportType result) { + completed(result); + } + }, getContext().dispatcher()); + promise.future().failed().foreach(new OnFailure() { @Override public void onFailure(Throwable failure) { - updateTestStepStatus(context, new ErrorStatusEvent(failure, scope, self()), null, true); + handleFutureFailure(failure); } }, getContext().dispatcher()); } @@ -213,17 +216,10 @@ protected void start() { } }, context.dispatcher()); - future.foreach(new OnSuccess<>() { - - @Override - public void onSuccess(TestStepReportType result) { - promise.trySuccess(result); - } - }, context.dispatcher()); - future.failed().foreach(new OnFailure() { @Override - public void onFailure(Throwable failure) { promise.tryFailure(failure); + public void onFailure(Throwable failure) { + promise.tryFailure(failure); } }, context.dispatcher()); waiting(); @@ -254,7 +250,6 @@ private Instruction processInstruction(com.gitb.tdl.Instruction instructionComma return instruction; } - /** * Process TDL InputRequest command and convert it to TBS InputRequest object * @@ -349,12 +344,11 @@ private String resolveTokenValues(VariableResolver variableResolver, String expr @Override protected void handleInputEvent(InputEvent event) { - receivedInput = true; processing(); if (step.isAdmin() && !event.isAdmin()) { // This was an administrator-level interaction for which we received input from a non-administrator. // This is not normal and should be logged and recorded as an error. - throw new GITBEngineInternalError(ErrorUtils.errorInfo(ErrorCode.INVALID_SESSION, String.format("User-provided inputs were expected to be received by an administrator - step [%s] - ID [%s]", TestCaseUtils.extractStepDescription(step, scope), stepId))); + promise.tryFailure(new GITBEngineInternalError(ErrorUtils.errorInfo(ErrorCode.INVALID_SESSION, String.format("User-provided inputs were expected to be received by an administrator - step [%s] - ID [%s]", TestCaseUtils.extractStepDescription(step, scope), stepId)))); } else { logger.debug(MarkerFactory.getDetachedMarker(scope.getContext().getSessionId()), String.format("Handling user-provided inputs - step [%s] - ID [%s]", TestCaseUtils.extractStepDescription(step, scope), stepId)); List userInputs = event.getUserInputs(); @@ -429,10 +423,16 @@ protected void handleInputEvent(InputEvent event) { TestCaseScope.ScopedVariable scopedVariable = scope.createVariable(step.getId()); scopedVariable.setValue(interactionResult); } - completed(report); + promise.trySuccess(report); } } + @Override + protected void stop() { + if (promise != null && !promise.isCompleted()) { + promise.tryFailure(new GITBEngineInternalError(ErrorUtils.errorInfo(ErrorCode.CANCELLATION, "Test step ["+stepId+"] is cancelled."))); + } + } public static ActorRef create(ActorContext context, UserInteraction step, TestCaseScope scope, String stepId) throws Exception { return context.actorOf(props(InteractionStepProcessorActor.class, step, scope, stepId), getName(NAME)); diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/ReceiveStepProcessorActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/ReceiveStepProcessorActor.java index 65675dfd..a402ef1d 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/ReceiveStepProcessorActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/ReceiveStepProcessorActor.java @@ -48,7 +48,6 @@ public class ReceiveStepProcessorActor extends AbstractMessagingStepProcessorAct private MessagingContext messagingContext; private TransactionContext transactionContext; - private boolean receivedResponse = false; private Promise promise; @@ -165,14 +164,16 @@ protected void start() { public void onReceive(Object message) { try { if (message instanceof NotificationReceived notificationMessage) { - if (notificationMessage.getError() != null) { - throw notificationMessage.getError(); + if (promise != null && !promise.isCompleted()) { + if (notificationMessage.getError() != null) { + promise.tryFailure(notificationMessage.getError()); + } else { + logger.debug(addMarker(), "Received notification"); + promise.trySuccess(handleMessagingResult(notificationMessage.getReport())); + } } - logger.debug(addMarker(), "Received notification"); - receivedResponse = true; - signalStepStatus(handleMessagingResult(notificationMessage.getReport())); } else if (message instanceof TimeoutExpired) { - if (!receivedResponse) { + if (promise != null && !promise.isCompleted()) { VariableResolver resolver = new VariableResolver(scope); String flagName = null; if (!StringUtils.isBlank(step.getTimeoutFlag())) { @@ -195,7 +196,7 @@ public void onReceive(Object message) { } else { logger.debug(addMarker(), "Timeout expired while waiting to receive message"); } - signalStepStatus(handleMessagingResult(MessagingHandlerUtils.getMessagingReportForTimeout(flagName, errorIfTimeout))); + promise.trySuccess(handleMessagingResult(MessagingHandlerUtils.getMessagingReportForTimeout(flagName, errorIfTimeout))); } } else { super.onReceive(message); @@ -250,7 +251,7 @@ private TAR handleMessagingResult(MessagingReport report) { @Override protected void stop() { - if(promise != null && !promise.isCompleted()) { + if (promise != null && !promise.isCompleted()) { promise.tryFailure(new GITBEngineInternalError(ErrorUtils.errorInfo(ErrorCode.CANCELLATION, "Test step ["+stepId+"] is cancelled."))); } } diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SendStepProcessorActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SendStepProcessorActor.java index 9caa67b9..8dc1573f 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SendStepProcessorActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SendStepProcessorActor.java @@ -152,7 +152,7 @@ public void onReceive(Object message) { @Override protected void stop() { - if(promise != null) { + if (promise != null && !promise.isCompleted()) { promise.tryFailure(new GITBEngineInternalError(ErrorUtils.errorInfo(ErrorCode.CANCELLATION, "Test step ["+stepId+"] is cancelled."))); } } diff --git a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SequenceProcessorActor.java b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SequenceProcessorActor.java index ba9fd354..71f5595f 100644 --- a/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SequenceProcessorActor.java +++ b/gitb-engine/src/main/java/com/gitb/engine/actors/processors/SequenceProcessorActor.java @@ -157,7 +157,7 @@ protected void handleStatusEvent(StatusEvent event) throws Exception { try { getContext().system().actorSelection(SessionActor.getPath(scope.getContext().getSessionId())).tell(new PrepareForStopCommand(scope.getContext().getSessionId(), self()), self()); } catch (Exception e) { - LOG.error(addMarker(), "Error sending the signal to stop the test session from test step actor [" + stepId + "]."); + LOG.error(addMarker(), "Error sending the signal to stop the test session from test step actor [{}].", stepId); } } else { // Proceed. diff --git a/gitb-ui/app/models/Constants.scala b/gitb-ui/app/models/Constants.scala index 30a5df6e..c370491e 100644 --- a/gitb-ui/app/models/Constants.scala +++ b/gitb-ui/app/models/Constants.scala @@ -70,7 +70,7 @@ object Constants { val UserAttributeAuthenticationLevel = "authLevel" // When ending in "-snapshot", this is considered a non-published release. - val VersionNumber = "1.24.2" + val VersionNumber = "1.24.3" val VersionNumberPostfixForResources = "" } diff --git a/gitb-ui/build.sbt b/gitb-ui/build.sbt index b39961c0..a06765c3 100644 --- a/gitb-ui/build.sbt +++ b/gitb-ui/build.sbt @@ -20,7 +20,7 @@ val pekkoVersion = "1.0.3" val jacksonVersion = "2.16.2" val cxfVersion = "4.0.5" val commonsTextVersion = "1.12.0" -val gitbTypesVersion = "1.24.2" +val gitbTypesVersion = "1.24.3" val bouncyCastleVersion = "1.78.1" useCoursier := false diff --git a/gitb-ui/project/owasp-suppressions.xml b/gitb-ui/project/owasp-suppressions.xml index 403f51c9..cf66b51d 100644 --- a/gitb-ui/project/owasp-suppressions.xml +++ b/gitb-ui/project/owasp-suppressions.xml @@ -105,18 +105,18 @@ ^pkg:maven/org\.glassfish\.jaxb/txw2@.*$ CVE-2024-9329 - - - ^pkg:maven/org\.eclipse\.jetty/jetty-http@.*$ - CVE-2024-6763 - - ^pkg:maven/org\.eclipse\.jetty/jetty-server@.*$ + ^pkg:maven/org\.eclipse\.jetty/jetty-.*@.*$ CVE-2024-8184 - + + + + ^pkg:maven/org\.eclipse\.jetty/jetty-.*@.*$ + CVE-2024-6763 + diff --git a/gitb-ui/ui/package-lock.json b/gitb-ui/ui/package-lock.json index 134039ea..a7e38e1a 100644 --- a/gitb-ui/ui/package-lock.json +++ b/gitb-ui/ui/package-lock.json @@ -8,15 +8,15 @@ "name": "ui", "version": "0.0.0", "dependencies": { - "@angular/animations": "^18.2.6", - "@angular/cdk": "^18.2.6", - "@angular/common": "^18.2.6", - "@angular/compiler": "^18.2.6", - "@angular/core": "^18.2.6", - "@angular/forms": "^18.2.6", - "@angular/platform-browser": "^18.2.6", - "@angular/platform-browser-dynamic": "^18.2.6", - "@angular/router": "^18.2.6", + "@angular/animations": "^18.2.9", + "@angular/cdk": "^18.2.10", + "@angular/common": "^18.2.9", + "@angular/compiler": "^18.2.9", + "@angular/core": "^18.2.9", + "@angular/forms": "^18.2.9", + "@angular/platform-browser": "^18.2.9", + "@angular/platform-browser-dynamic": "^18.2.9", + "@angular/router": "^18.2.9", "@ctrl/ngx-codemirror": "^7.0.0", "@fortawesome/fontawesome-free": "6.6.0", "@tinymce/tinymce-angular": "^8.0.1", @@ -33,9 +33,9 @@ "zone.js": "0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.6", - "@angular/cli": "^18.2.6", - "@angular/compiler-cli": "^18.2.6", + "@angular-devkit/build-angular": "^18.2.10", + "@angular/cli": "^18.2.10", + "@angular/compiler-cli": "^18.2.9", "@types/file-saver": "^2.0.7", "@types/jasmine": "^5.1.4", "@types/lodash": "^4.17.0", @@ -62,13 +62,13 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1802.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.6.tgz", - "integrity": "sha512-oF7cPFdTLxeuvXkK/opSdIxZ1E4LrBbmuytQ/nCoAGOaKBWdqvwagRZ6jVhaI0Gwu48rkcV7Zhesg/ESNnROdw==", + "version": "0.1802.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1802.10.tgz", + "integrity": "sha512-/xudcHK2s4J/GcL6qyobmGaWMHQcYLSMqCaWMT+nK6I6tu9VEAj/p3R83Tzx8B/eKi31Pz499uHw9pmqdtbafg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.6", + "@angular-devkit/core": "18.2.10", "rxjs": "7.8.1" }, "engines": { @@ -78,17 +78,17 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.6.tgz", - "integrity": "sha512-u12cJZttgs5j7gICHWSmcaTCu0EFXEzKqI8nkYCwq2MtuJlAXiMQSXYuEP9OU3Go4vMAPtQh2kShyOWCX5b4EQ==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-18.2.10.tgz", + "integrity": "sha512-47XgJ5fdIqlZUFWAo/XtNsh3y597DtLZWvfsnwShw6/TgyiV0rbL1Z24Rn2TCV1D/b3VhLutAIIZ/i5O5BirxQ==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.6", - "@angular-devkit/build-webpack": "0.1802.6", - "@angular-devkit/core": "18.2.6", - "@angular/build": "18.2.6", + "@angular-devkit/architect": "0.1802.10", + "@angular-devkit/build-webpack": "0.1802.10", + "@angular-devkit/core": "18.2.10", + "@angular/build": "18.2.10", "@babel/core": "7.25.2", "@babel/generator": "7.25.0", "@babel/helper-annotate-as-pure": "7.24.7", @@ -99,7 +99,7 @@ "@babel/preset-env": "7.25.3", "@babel/runtime": "7.25.0", "@discoveryjs/json-ext": "0.6.1", - "@ngtools/webpack": "18.2.6", + "@ngtools/webpack": "18.2.10", "@vitejs/plugin-basic-ssl": "1.1.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -110,7 +110,7 @@ "css-loader": "7.1.2", "esbuild-wasm": "0.23.0", "fast-glob": "3.3.2", - "http-proxy-middleware": "3.0.0", + "http-proxy-middleware": "3.0.3", "https-proxy-agent": "7.0.5", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", @@ -243,13 +243,13 @@ "license": "0BSD" }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1802.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.6.tgz", - "integrity": "sha512-JMLcXFaitJplwZMKkqhbYirINCRD6eOPZuIGaIOVynXYGWgvJkLT9t5C2wm9HqSLtp1K7NcYG2Y7PtTVR4krnQ==", + "version": "0.1802.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1802.10.tgz", + "integrity": "sha512-WRftK/RJ9rBDDmkx5IAtIpyNo0DJiMfgGUTuZNpNUaJfSfGeaSZYgC7o1++axMchID8pncmI3Hr8L8gaP94WQg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/architect": "0.1802.10", "rxjs": "7.8.1" }, "engines": { @@ -263,9 +263,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.6.tgz", - "integrity": "sha512-la4CFvs5PcRWSkQ/H7TB5cPZirFVA9GoWk5LzIk8si6VjWBJRm8b3keKJoC9LlNeABRUIR5z0ocYkyQQUhdMfg==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-18.2.10.tgz", + "integrity": "sha512-LFqiNdraBujg8e1lhuB0bkFVAoIbVbeXXwfoeROKH60OPbP8tHdgV6sFTqU7UGBKA+b+bYye70KFTG2Ys8QzKQ==", "dev": true, "license": "MIT", "dependencies": { @@ -309,13 +309,13 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.6.tgz", - "integrity": "sha512-uIttrQ2cQ2PWAFFVPeCoNR8xvs7tPJ2i8gzqsIwYdge107xDC6u9CqfgmBqPDSFpWj+IiC2Jwcm8Z4HYKU4+7A==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-18.2.10.tgz", + "integrity": "sha512-EIm/yCYg3ZYPsPYJxXRX5F6PofJCbNQ5rZEuQEY09vy+ZRTqGezH0qoUP5WxlYeJrjiRLYqADI9WtVNzDyaD4w==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.6", + "@angular-devkit/core": "18.2.10", "jsonc-parser": "3.3.1", "magic-string": "0.30.11", "ora": "5.4.1", @@ -328,9 +328,9 @@ } }, "node_modules/@angular/animations": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.6.tgz", - "integrity": "sha512-vy9wy+Q9beiRxkEO8wNxFQ63AqAujGvk8AUHepxxIT7QNNc512TNKz8uH+feWDPO38Dm2obwYQHMGzs3WO7pUA==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-18.2.9.tgz", + "integrity": "sha512-GAsTKENoTRVKgXX4ACBMMTp8SW4rW8u637uLag+ttJV2XBzC3YJlw5m6b/W4cdrmqZjztoEwUjR6CUTjBqMujQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -339,18 +339,18 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.6" + "@angular/core": "18.2.9" } }, "node_modules/@angular/build": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.6.tgz", - "integrity": "sha512-TQzX6Mi7uXFvmz7+OVl4Za7WawYPcx+B5Ewm6IY/DdMyB9P/Z4tbKb1LO+ynWUXYwm7avXo6XQQ4m5ArDY5F/A==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/build/-/build-18.2.10.tgz", + "integrity": "sha512-YFBKvAyC5sH17yRYcx7VHCtJ4KUg7xCjCQ4Pe16kiTvW6vuYsgU6Btyti0Qgewd7XaWpTM8hk8N6hE4Z0hpflw==", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1802.6", + "@angular-devkit/architect": "0.1802.10", "@babel/core": "7.25.2", "@babel/helper-annotate-as-pure": "7.24.7", "@babel/helper-split-export-declaration": "7.24.7", @@ -412,9 +412,9 @@ } }, "node_modules/@angular/cdk": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.6.tgz", - "integrity": "sha512-Gfq/iv4zhlKYpdQkDaBRwxI71NHNUHM1Cs1XhnZ0/oFct5HXvSv1RHRGTKqBJLLACaAPzZKXJ/UglLoyO5CNiQ==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-18.2.10.tgz", + "integrity": "sha512-Weh0slrfWNp5N6UO4m3tXzs2QBFexNsnJf1dq0oaLDBgfkuqUmxdCkurSv5+lWZRkTPLYmd/hQeJpvrhxMCleg==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -429,18 +429,18 @@ } }, "node_modules/@angular/cli": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.6.tgz", - "integrity": "sha512-tdXsnV/w+Rgu8q0zFsLU5L9ImTVqrTol1vppHaQkJ/vuoHy+s8ZEbBqhVrO/ffosNb2xseUybGYvqMS4zkNQjg==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-18.2.10.tgz", + "integrity": "sha512-qW/F3XVZMzzenFzbn+7FGpw8GOt9qW8UxBtYya7gUNdWlcsgGUk+ZaGC2OLbfI5gX6pchW4TOPMsDSMeaCEI2Q==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/architect": "0.1802.6", - "@angular-devkit/core": "18.2.6", - "@angular-devkit/schematics": "18.2.6", + "@angular-devkit/architect": "0.1802.10", + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", "@inquirer/prompts": "5.3.8", "@listr2/prompt-adapter-inquirer": "2.0.15", - "@schematics/angular": "18.2.6", + "@schematics/angular": "18.2.10", "@yarnpkg/lockfile": "1.1.0", "ini": "4.1.3", "jsonc-parser": "3.3.1", @@ -463,9 +463,9 @@ } }, "node_modules/@angular/common": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.6.tgz", - "integrity": "sha512-89793ow+wrI1c7C6kyMbnweLNIZHzXthosxAEjipRZGBrqBYjvTtkE45Fl+5yBa3JO7bAhyGkUnEoyvWtZIAEA==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-18.2.9.tgz", + "integrity": "sha512-Opi6DVaU0aGyJqLk5jPmeYx559fp3afj4wuxM5aDzV4KEVGDVbNCpO0hMuwHZ6rtCjHhv1fQthgS48qoiQ6LKw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -474,14 +474,14 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.6", + "@angular/core": "18.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.6.tgz", - "integrity": "sha512-3tX2/Qw+bZ8XzKitviH8jzNGyY0uohhehhBB57OJOCc+yr4ojy/7SYFnun1lSsRnDztdCE461641X4iQLCQ94w==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-18.2.9.tgz", + "integrity": "sha512-fchbcbsyTOd/qHGy+yPEmE1p10OTNEjGrWHQzUbf3xdlm23EvxHTitHh8i6EBdwYnM5zz0IIBhltP8tt89oeYw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -490,7 +490,7 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/core": "18.2.6" + "@angular/core": "18.2.9" }, "peerDependenciesMeta": { "@angular/core": { @@ -499,15 +499,15 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.6.tgz", - "integrity": "sha512-b5x9STfjNiNM/S0D+CnqRP9UOxPtSz1+RlCH5WdOMiW/p8j5p6dBix8YYgTe6Wg3OD7eItD2pnFQKgF/dWiopA==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-18.2.9.tgz", + "integrity": "sha512-4iMoRvyMmq/fdI/4Gob9HKjL/jvTlCjbS4kouAYHuGO9w9dmUhi1pY1z+mALtCEl9/Q8CzU2W8e5cU2xtV4nVg==", "dev": true, "license": "MIT", "dependencies": { "@babel/core": "7.25.2", "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", + "chokidar": "^4.0.0", "convert-source-map": "^1.5.1", "reflect-metadata": "^0.2.0", "semver": "^7.0.0", @@ -523,14 +523,44 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/compiler": "18.2.6", + "@angular/compiler": "18.2.9", "typescript": ">=5.4 <5.6" } }, + "node_modules/@angular/compiler-cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@angular/compiler-cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@angular/core": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.6.tgz", - "integrity": "sha512-PjFad2j4YBwLVTw+0Te8CJCa/tV0W8caTHG8aOjj3ObdL6ihGI+FKnwerLc9RVzDFd14BOO4C6/+LbOQAh3Ltw==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-18.2.9.tgz", + "integrity": "sha512-h9/Bzo/7LTPzzh9I/1Gk8TWOXPGeHt3jLlnYrCh2KbrWbTErNtW0V3ad5I3Zv+K2Z7RSl9Z3D3Y6ILH796N4ZA==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -544,9 +574,9 @@ } }, "node_modules/@angular/forms": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.6.tgz", - "integrity": "sha512-quGkUqTxlBaLB8C/RnpfFG57fdmNF5RQ+368N89Ma++2lpIsVAHaGZZn4yOyo3wNYaM2jBxNqaYxOzZNUl5Tig==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-18.2.9.tgz", + "integrity": "sha512-yyN5dG60CXH6MRte8rv4aGUTeNOMz/pUV7rVxittpjN7tPHfGEL9Xz89Or90Aa1QiHuBmHFk+9A39s03aO1rDQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -555,16 +585,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.6", - "@angular/core": "18.2.6", - "@angular/platform-browser": "18.2.6", + "@angular/common": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.6.tgz", - "integrity": "sha512-RA8UMiYNLga+QMwpKcDw1357gYPfPyY/rmLeezMak//BbsENFYQOJ4Z6DBOBNiPlHxmBsUJMGaKdlpQhfCROyQ==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-18.2.9.tgz", + "integrity": "sha512-UNu6XjK0SV35FFe55yd1yefZI8tzflVKzev/RzC31XngrczhlH0+WCbae4rG1XJULzJwJ1R1p7gqq4+ktEczRQ==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -573,9 +603,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/animations": "18.2.6", - "@angular/common": "18.2.6", - "@angular/core": "18.2.6" + "@angular/animations": "18.2.9", + "@angular/common": "18.2.9", + "@angular/core": "18.2.9" }, "peerDependenciesMeta": { "@angular/animations": { @@ -584,9 +614,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.6.tgz", - "integrity": "sha512-kGBU3FNc+DF9r33hwHZqiWoZgQbCDdEIucU0NCLCIg0Hw6/Q9Hr2ndjxQI+WynCPg0JeBn34jpouvpeJer3YDQ==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-18.2.9.tgz", + "integrity": "sha512-cUTB8Jc3I/fu2UKv/PJmNGQGvKyyTo8ln4GUX3EJ4wUHzgkrU0s4x7DNok0Ql8FZKs5dLR8C0xVbG7Dv/ViPdw==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -595,16 +625,16 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.6", - "@angular/compiler": "18.2.6", - "@angular/core": "18.2.6", - "@angular/platform-browser": "18.2.6" + "@angular/common": "18.2.9", + "@angular/compiler": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9" } }, "node_modules/@angular/router": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.6.tgz", - "integrity": "sha512-t57Sqja8unHhZlPr+4CWnQacuox2M4p2pMHps+31wt337qH6mKf4jqDmK0dE/MFdRyKjT2a2E/2NwtxXxcWNuw==", + "version": "18.2.9", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-18.2.9.tgz", + "integrity": "sha512-D0rSrMf/sbhr5yQgz+LNBxdv1BR3S4pYDj1Exq6yVRKX8HSbjc5hxe/44VaOEKBh8StJ6GRiNOMoIcDt73Jang==", "license": "MIT", "dependencies": { "tslib": "^2.3.0" @@ -613,9 +643,9 @@ "node": "^18.19.1 || ^20.11.1 || >=22.0.0" }, "peerDependencies": { - "@angular/common": "18.2.6", - "@angular/core": "18.2.6", - "@angular/platform-browser": "18.2.6", + "@angular/common": "18.2.9", + "@angular/core": "18.2.9", + "@angular/platform-browser": "18.2.9", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -3436,9 +3466,9 @@ } }, "node_modules/@jsonjoy.com/util": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.3.0.tgz", - "integrity": "sha512-Cebt4Vk7k1xHy87kHY7KSPLT77A7Ev7IfOblyLZhtYEhrdQ6fX4EoLq3xOQ3O/DRMEh2ok5nyC180E+ABS8Wmw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.5.0.tgz", + "integrity": "sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3644,9 +3674,9 @@ ] }, "node_modules/@ngtools/webpack": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.6.tgz", - "integrity": "sha512-7HwOPE1EOgcHnpt4brSiT8G2CcXB50G0+CbCBaKGy4LYCG3Y3mrlzF5Fup9HvMJ6Tzqd62RqzpKKYBiGUT7hxg==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-18.2.10.tgz", + "integrity": "sha512-CGYr8rdM5ntdb4kLUAhrLBPrhJQ4KBPo3KMT6qJE/S+jJJn5zHzedpuGFOCVhC1Siw+n1pOBSI8leTRJIW/eCQ==", "dev": true, "license": "MIT", "engines": { @@ -4136,14 +4166,14 @@ ] }, "node_modules/@schematics/angular": { - "version": "18.2.6", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.6.tgz", - "integrity": "sha512-Y988EoOEQDLEyHu3414T6AeVUyx21AexBHQNbUNQkK8cxlxyB6m1eH1cx6vFgLRFUTsLVv+C6Ln/ICNTfLcG4A==", + "version": "18.2.10", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-18.2.10.tgz", + "integrity": "sha512-2pDHT4aSzfs8Up4RQmHHuFd5FeuUebS1ZJwyt46MfXzRMFtzUZV/JKsIvDqyMwnkvFfLvgJyTCkl8JGw5jQObg==", "dev": true, "license": "MIT", "dependencies": { - "@angular-devkit/core": "18.2.6", - "@angular-devkit/schematics": "18.2.6", + "@angular-devkit/core": "18.2.10", + "@angular-devkit/schematics": "18.2.10", "jsonc-parser": "3.3.1" }, "engines": { @@ -4421,9 +4451,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.0.tgz", - "integrity": "sha512-AbXMTZGt40T+KON9/Fdxx0B2WK5hsgxcfXJLr5bFpZ7b4JCex2WyQPTEKdXqfHiY5nKKBScZ7yCoO6Pvgxfvnw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", + "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", "dev": true, "license": "MIT", "dependencies": { @@ -4460,10 +4490,11 @@ "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.14", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", - "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -5546,12 +5577,13 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -6597,6 +6629,7 @@ "version": "0.0.24", "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.24.tgz", "integrity": "sha512-Oyqew0FGM0wYUSNqR0L6AteO5MpMoUU0rhKRieXeiKs+PmRTxiJMyaunYB2KF6fQ3dzChXKCpbFOEJx3OQ1v/Q==", + "deprecated": "Ownership of Critters has moved to the Nuxt team, who will be maintaining the project going forward. If you'd like to keep using Critters, please switch to the actively-maintained fork at https://github.com/danielroe/beasties", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6863,12 +6896,13 @@ "dev": true }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -7641,9 +7675,9 @@ "dev": true }, "node_modules/express": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", - "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7652,7 +7686,7 @@ "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -7684,9 +7718,9 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "dev": true, "license": "MIT", "engines": { @@ -7854,10 +7888,11 @@ "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==" }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -8617,22 +8652,33 @@ } }, "node_modules/http-proxy-middleware": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", - "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.3.tgz", + "integrity": "sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/http-proxy": "^1.17.10", - "debug": "^4.3.4", + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.5" + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/http-proxy-middleware/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -9023,6 +9069,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -9071,6 +9118,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -10402,9 +10450,9 @@ } }, "node_modules/memfs": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.12.0.tgz", - "integrity": "sha512-74wDsex5tQDSClVkeK1vtxqYCAgCoXxx+K4NSHzgU/muYVYByFqa+0RnrPO9NM6naWm1+G9JmZ0p6QHhXmeYfA==", + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.14.0.tgz", + "integrity": "sha512-JUeY0F/fQZgIod31Ja1eJgiSxLn7BfQlCnqhwXFBzFHEw63OdLK7VJUJ7bnzNsWgCyoUP5tEp1VRY8rDaYzqOA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -10458,12 +10506,13 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10769,10 +10818,11 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/msgpackr": { "version": "1.11.0", @@ -13194,13 +13244,6 @@ "node": ">=4" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, "node_modules/send/node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -14190,6 +14233,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -15539,9 +15583,9 @@ } }, "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "dev": true, "license": "MIT", "dependencies": { diff --git a/gitb-ui/ui/package.json b/gitb-ui/ui/package.json index 49a781f2..e1c70cfe 100644 --- a/gitb-ui/ui/package.json +++ b/gitb-ui/ui/package.json @@ -11,15 +11,15 @@ }, "private": true, "dependencies": { - "@angular/animations": "^18.2.6", - "@angular/cdk": "^18.2.6", - "@angular/common": "^18.2.6", - "@angular/compiler": "^18.2.6", - "@angular/core": "^18.2.6", - "@angular/forms": "^18.2.6", - "@angular/platform-browser": "^18.2.6", - "@angular/platform-browser-dynamic": "^18.2.6", - "@angular/router": "^18.2.6", + "@angular/animations": "^18.2.9", + "@angular/cdk": "^18.2.10", + "@angular/common": "^18.2.9", + "@angular/compiler": "^18.2.9", + "@angular/core": "^18.2.9", + "@angular/forms": "^18.2.9", + "@angular/platform-browser": "^18.2.9", + "@angular/platform-browser-dynamic": "^18.2.9", + "@angular/router": "^18.2.9", "@ctrl/ngx-codemirror": "^7.0.0", "@fortawesome/fontawesome-free": "6.6.0", "@tinymce/tinymce-angular": "^8.0.1", @@ -36,9 +36,9 @@ "zone.js": "0.14.10" }, "devDependencies": { - "@angular-devkit/build-angular": "^18.2.6", - "@angular/cli": "^18.2.6", - "@angular/compiler-cli": "^18.2.6", + "@angular-devkit/build-angular": "^18.2.10", + "@angular/cli": "^18.2.10", + "@angular/compiler-cli": "^18.2.9", "@types/file-saver": "^2.0.7", "@types/jasmine": "^5.1.4", "@types/lodash": "^4.17.0", diff --git a/pom.xml b/pom.xml index 48a7144c..7355c699 100755 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.4 + 3.3.5 com.gitb GITB @@ -24,15 +24,15 @@ mvn versions:display-dependency-updates -N -N --> - 11.0.0 + 11.1.0 3.1.1 3.11.0 3.1.0 - 3.3.4 - 1.24.2 + 3.3.5 + 1.24.3 1.78.1 - 8.0.2 + 8.0.3 1.9 4.0.5 4.5.13