From edb022f7c58d65559ac87c3acc01767312283933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinhagen?= Date: Wed, 27 Aug 2025 11:44:38 +0200 Subject: [PATCH 01/19] fix(revit): prevent null reference when extracting workset properties from linked model elements (#1052) --- .../Properties/ClassPropertiesExtractor.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Properties/ClassPropertiesExtractor.cs b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Properties/ClassPropertiesExtractor.cs index b28bab1e3..a094b716b 100644 --- a/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Properties/ClassPropertiesExtractor.cs +++ b/Converters/Revit/Speckle.Converters.RevitShared/ToSpeckle/Properties/ClassPropertiesExtractor.cs @@ -1,6 +1,7 @@ using Speckle.Converters.Common; using Speckle.Converters.RevitShared.Extensions; using Speckle.Converters.RevitShared.Settings; +using Speckle.Sdk; namespace Speckle.Converters.RevitShared.ToSpeckle.Properties; @@ -51,13 +52,27 @@ public class ClassPropertiesExtractor // get workset name if (!_worksetCache.TryGetValue(worksetId.Value, out var worksetName)) { - DB.Workset workset = _converterSettings.Current.Document.GetWorksetTable().GetWorkset(element.WorksetId); - worksetName = workset.Name; - _worksetCache[worksetId.Value] = worksetName; + // FIX: [CNX-2414] use the element's own document instead of the converter settings document, preventing + // null reference exceptions when processing elements from linked models where workset exists in linked + // document but not in the main document + try + { + DB.Workset workset = element.Document.GetWorksetTable().GetWorkset(element.WorksetId); + worksetName = workset?.Name ?? "Unknown Workset"; + _worksetCache[worksetId.Value] = worksetName; + } + catch (Exception ex) when (ex.IsFatal()) + { + // fallback: if we can't get the workset for any reason (e.g., workset doesn't exist), + // provide a safe default instead of crashing (I don't think a workset name prop is cause for a fail!) + worksetName = "Unknown Workset"; + _worksetCache[worksetId.Value] = worksetName; + } } elementProperties.Add("worksetName", worksetName); } + return elementProperties; } } From df4c065dfedc6f04cdfd3324c60a7f4476b8bd6c Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Thu, 28 Aug 2025 10:48:33 +0100 Subject: [PATCH 02/19] fix(all) Progress the final sqlite message....can still take a while (#1042) * Progress the final sqlite message....can still take a while * Update SDK to alpha for testing * fixes speed tests * Add more tests from AI * add more detail to progress message * Fixed tests to make sense * Update SDK to 3.5.2 --- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 48 ++++++------ .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 24 +++--- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 56 +++++++------- .../Speckle.Connectors.DUI/packages.lock.json | 56 +++++++------- Directory.Packages.props | 6 +- .../packages.lock.json | 32 ++++---- .../packages.lock.json | 32 ++++---- .../Speckle.Importers.Ifc/packages.lock.json | 28 +++---- .../packages.lock.json | 30 ++++---- .../packages.lock.json | 30 ++++---- .../Operations/ProgressDisplayManagerTests.cs | 77 +++++++++++++++++-- .../packages.lock.json | 30 ++++---- .../Operations/ProgressDisplayManager.cs | 16 +--- .../Operations/SendProgress.cs | 15 +++- .../packages.lock.json | 44 +++++------ .../packages.lock.json | 26 +++---- .../packages.lock.json | 44 +++++------ Sdk/Speckle.Testing/packages.lock.json | 14 ++-- 78 files changed, 1191 insertions(+), 1127 deletions(-) diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json index 1f5498abb..17d4968a3 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json index 98ecde002..2b0698ff9 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -336,18 +336,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json index 8343bb0db..17de090a3 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -293,7 +293,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json index bfa79cfb0..825d98051 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2025/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -288,18 +288,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json index 1ee2d2f04..4f1af5a10 100644 --- a/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Autocad2026/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -288,18 +288,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -307,14 +307,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json index 1748c301d..6f92659dd 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2022/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json index b5d6b1477..ffa28f73b 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2023/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json index 3845cc1ef..e109a7105 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2024/packages.lock.json @@ -268,9 +268,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -346,18 +346,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -367,14 +367,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json index c59c43308..45c768f1e 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2025/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -254,7 +254,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json b/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json index c322e3717..d4cc760f8 100644 --- a/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json +++ b/Connectors/Autocad/Speckle.Connectors.Civil3d2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -254,7 +254,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -298,18 +298,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json index 8ef15cc15..22b206965 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS21/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.etabs21": { @@ -335,18 +335,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -356,14 +356,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json index 110b991f3..8e9b36b56 100644 --- a/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json +++ b/Connectors/CSi/Speckle.Connectors.ETABS22/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.etabs22": { @@ -286,18 +286,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -305,14 +305,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json index 1e5aa0fdd..e2740b783 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2020/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2020": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json index 35249759a..1dcb4bf33 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2021/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2021": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json index 81d8f1ed5..a220a7671 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2022": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json index 331efd2b7..f39eeaa3d 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2023": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json index 360cd2ec3..ce4316758 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2024": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json index 1195980e3..11d10699d 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2025/packages.lock.json @@ -265,9 +265,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -291,7 +291,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2025": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json b/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json index 6c657dc3f..95b2d5e6b 100644 --- a/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json +++ b/Connectors/Navisworks/Speckle.Connectors.Navisworks2026/packages.lock.json @@ -266,9 +266,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -292,7 +292,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.navisworks2026": { @@ -339,18 +339,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -360,14 +360,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, ".NETFramework,Version=v4.8/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json index 102304bad..e40424c6c 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2022/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.revit2022": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json index b04ef393b..9d095d0ad 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2023/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.revit2023": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json index 7b8f6d1df..365b8bd33 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2024/packages.lock.json @@ -281,9 +281,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -306,7 +306,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.revit2024": { @@ -351,11 +351,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Revit.API": { @@ -366,9 +366,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -378,14 +378,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json index 63bca162c..84b27ae96 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2025/packages.lock.json @@ -226,9 +226,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -251,7 +251,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.revit2025": { @@ -296,11 +296,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Revit.API": { @@ -311,9 +311,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -321,14 +321,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json b/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json index 5763da37e..4c5f2eeea 100644 --- a/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json +++ b/Connectors/Revit/Speckle.Connectors.Revit2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -244,7 +244,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.revit2026": { @@ -280,11 +280,11 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Revit.API": { @@ -295,9 +295,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -305,14 +305,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json index acdbbc29b..16837a7e2 100644 --- a/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Grasshopper7/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -337,7 +337,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino7": { @@ -382,18 +382,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -403,14 +403,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json index ebfa8c5bf..69f541787 100644 --- a/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Grasshopper8/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -337,7 +337,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino8": { @@ -381,18 +381,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -402,14 +402,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json index 9780e996a..b259c8676 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino7/packages.lock.json @@ -306,9 +306,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino7": { @@ -401,18 +401,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -422,14 +422,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "System.Resources.Extensions": { "type": "CentralTransitive", diff --git a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json index cbcf73df8..3ff371daf 100644 --- a/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.Rhino8/packages.lock.json @@ -306,9 +306,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -341,7 +341,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino8": { @@ -400,18 +400,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -421,14 +421,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "System.Resources.Extensions": { "type": "CentralTransitive", diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json index 268b26fd9..8bbcfd70f 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json +++ b/Connectors/Rhino/Speckle.Connectors.RhinoImporter/packages.lock.json @@ -235,9 +235,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -261,7 +261,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino8": { @@ -311,18 +311,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -330,14 +330,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0/win-x64": { diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json index 574d5e4a3..9e0cce06f 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2023/packages.lock.json @@ -325,9 +325,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -360,7 +360,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -410,18 +410,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -431,14 +431,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json index 32731ea6b..62b81807a 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2024/packages.lock.json @@ -406,9 +406,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -441,7 +441,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -491,18 +491,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -512,14 +512,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json b/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json index 649cce6f1..4f98446a9 100644 --- a/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json +++ b/Connectors/Tekla/Speckle.Connector.Tekla2025/packages.lock.json @@ -406,9 +406,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -441,7 +441,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -491,18 +491,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -512,14 +512,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json index 7256cd387..08f07a499 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2022/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json index bfd02d940..98c6780d5 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2023/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json index e17305e22..96e6b4b1d 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -285,7 +285,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -329,18 +329,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -350,14 +350,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json index 88e025109..2f9f13913 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2025/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -280,18 +280,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -299,14 +299,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json b/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json index 2be562c8a..4f3f9cfd0 100644 --- a/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json +++ b/Converters/Autocad/Speckle.Converters.Autocad2026/packages.lock.json @@ -210,9 +210,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -236,7 +236,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -280,18 +280,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -299,14 +299,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json index 3c8d2afef..7df05b174 100644 --- a/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS21/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json index 6bf6b18f2..673f5ad0f 100644 --- a/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json +++ b/Converters/CSi/Speckle.Converters.ETABS22/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json index 58ca88601..937ab2541 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2022/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json index 38885e6a5..9d0fbbad1 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2023/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json index ef5f3f3f4..1be8317a7 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2024/packages.lock.json @@ -267,7 +267,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json index c5cc045af..ac69c26b7 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2025/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -245,7 +245,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -289,18 +289,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json b/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json index 1818337ad..9b76b631e 100644 --- a/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json +++ b/Converters/Civil3d/Speckle.Converters.Civil3d2026/packages.lock.json @@ -219,9 +219,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -245,7 +245,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -289,18 +289,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json index 3c9735c81..8f6e88907 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2020/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json index 41ba46882..64ee60cdb 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2021/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json index 684f98847..29e755177 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2022/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json index cb017a588..884c7d064 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2023/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json index d05e07af0..a488ddd95 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2024/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json index bb3dfcf54..06b24db56 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2025/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -278,7 +278,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -316,18 +316,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -337,14 +337,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json b/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json index d4399aa06..1433850d2 100644 --- a/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json +++ b/Converters/Navisworks/Speckle.Converters.Navisworks2026/packages.lock.json @@ -260,9 +260,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -279,7 +279,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -317,18 +317,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -338,14 +338,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json index bf099a8da..bdf831b10 100644 --- a/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2022/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json index 1e9e1cdfe..1b1d79b5e 100644 --- a/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2023/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json index 1855b6d3f..3284a4cf0 100644 --- a/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2024/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json index e9b9bcee3..1579c940e 100644 --- a/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2025/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json b/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json index 534cd6e8f..94611ae7a 100644 --- a/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json +++ b/Converters/Revit/Speckle.Converters.Revit2026/packages.lock.json @@ -209,7 +209,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -238,18 +238,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -257,14 +257,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json index afdd2a2b6..1b8e04436 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino7/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json index 49ba02c01..7de90a231 100644 --- a/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json +++ b/Converters/Rhino/Speckle.Converters.Rhino8/packages.lock.json @@ -258,7 +258,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -287,18 +287,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -308,14 +308,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0": { @@ -542,7 +542,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -571,18 +571,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -590,14 +590,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json index 13fef4f06..ef5ea5a63 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2023/packages.lock.json @@ -302,7 +302,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -337,18 +337,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -358,14 +358,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "Tekla.Structures.Dialog": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json index 48b345568..f2aecfd09 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2024/packages.lock.json @@ -343,7 +343,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -378,18 +378,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -399,14 +399,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json b/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json index 48b345568..f2aecfd09 100644 --- a/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json +++ b/Converters/Tekla/Speckle.Converter.Tekla2025/packages.lock.json @@ -343,7 +343,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "LibTessDotNet": { @@ -378,18 +378,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -399,14 +399,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "Tekla.Structures.Plugins": { "type": "CentralTransitive", diff --git a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json index 14bf8aa57..89f1589bb 100644 --- a/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.Tests/packages.lock.json @@ -314,9 +314,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -335,7 +335,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.1, )" + "Speckle.Sdk": "[3.5.2, )" } }, "Microsoft.Extensions.DependencyInjection": { @@ -373,18 +373,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -392,14 +392,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json index c193ec8a1..3ff4119cd 100644 --- a/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI.WebView/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -309,18 +309,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -330,14 +330,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0-windows7.0": { @@ -549,9 +549,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -599,18 +599,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -618,14 +618,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/DUI3/Speckle.Connectors.DUI/packages.lock.json b/DUI3/Speckle.Connectors.DUI/packages.lock.json index 740cdf0f1..1eb628394 100644 --- a/DUI3/Speckle.Connectors.DUI/packages.lock.json +++ b/DUI3/Speckle.Connectors.DUI/packages.lock.json @@ -259,9 +259,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -296,18 +296,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -317,14 +317,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0": { @@ -536,9 +536,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -573,18 +573,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -592,14 +592,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Directory.Packages.props b/Directory.Packages.props index 8f56531f5..6595aebe0 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -53,9 +53,9 @@ - - - + + + diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json index cb22516d3..ad65b243d 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester/packages.lock.json @@ -204,9 +204,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -220,8 +220,8 @@ "Ara3D.Utils": "[1.4.5, )", "Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )" } }, "Ara3D.Buffers": { @@ -283,18 +283,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -302,14 +302,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json index cb22516d3..ad65b243d 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc.Tester2/packages.lock.json @@ -204,9 +204,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -220,8 +220,8 @@ "Ara3D.Utils": "[1.4.5, )", "Microsoft.Extensions.DependencyInjection": "[8.0.0, )", "Speckle.Connectors.Common": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )" } }, "Ara3D.Buffers": { @@ -283,18 +283,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -302,14 +302,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json index ae31606b2..14339bdf2 100644 --- a/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json +++ b/Importers/Ifc/Speckle.Importers.Ifc/packages.lock.json @@ -68,18 +68,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -87,7 +87,7 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "GraphQL.Client": { @@ -261,9 +261,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -295,9 +295,9 @@ }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json index 9958aee9d..0f0ed4243 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json @@ -239,9 +239,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -273,7 +273,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino8": { @@ -349,18 +349,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -368,14 +368,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json b/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json index 81c813358..3a9b27f3d 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json +++ b/Importers/Rhino/Speckle.Importers.Rhino/packages.lock.json @@ -254,9 +254,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.dui": { @@ -288,7 +288,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.converters.rhino8": { @@ -338,18 +338,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -357,14 +357,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Sdk/Speckle.Connectors.Common.Tests/Operations/ProgressDisplayManagerTests.cs b/Sdk/Speckle.Connectors.Common.Tests/Operations/ProgressDisplayManagerTests.cs index 1f9905ed1..6d8d99af3 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/Operations/ProgressDisplayManagerTests.cs +++ b/Sdk/Speckle.Connectors.Common.Tests/Operations/ProgressDisplayManagerTests.cs @@ -1,4 +1,5 @@ using FluentAssertions; +using Moq; using NUnit.Framework; using Speckle.Connectors.Common.Operations; using Speckle.Sdk.Transports; @@ -22,15 +23,81 @@ public class ProgressDisplayManagerTests : MoqTest [Test] [SetCulture("en-GB")] - [TestCase(1, 1, 6, 10, "5.00 bytes / sec")] - [TestCase(1, 0, 6, 10, "0 bytes / sec")] //infinity - [TestCase(1 * 1024 * 1024, 1, 6 * 1024 * 1024, 10 * 1024 * 1024, "5.00 MB / sec")] - public void TestSpeed(long previousCount, long elapsed, long count, long? total, string? percentage) + [TestCase(1, 5, 10, "5.00 bytes / sec")] + [TestCase(0, 5, 10, "0 bytes / sec")] //infinity + [TestCase(1, 5 * 1024 * 1024, 10 * 1024 * 1024, "5.00 MB / sec")] + public void TestSpeed(long elapsed, long count, long? total, string? percentage) { var stopwatch = Create(); stopwatch.Setup(x => x.ElapsedSeconds).Returns(elapsed); - var manager = new ProgressDisplayManager(stopwatch.Object) { LastCount = previousCount }; + var manager = new ProgressDisplayManager(stopwatch.Object); var p = manager.CalculateSpeed(new ProgressArgs(ProgressEvent.DownloadBytes, count, total)); p.Should().Be(percentage); } + + [Test] + public void TestBegin_StartsStopwatch() + { + var stopwatch = Create(); + stopwatch.Setup(x => x.Start()); + var manager = new ProgressDisplayManager(stopwatch.Object); + manager.Begin(); + stopwatch.Verify(x => x.Start(), Times.Once()); + } + + [Test] + public void TestShouldUpdate_RespectsInterval() + { + var stopwatch = Create(); + var manager = new ProgressDisplayManager(stopwatch.Object); + // Within interval, should not update + stopwatch.Setup(x => x.ElapsedMilliseconds).Returns(0); + manager.ShouldUpdate().Should().BeFalse(); + // Within interval, should not update + stopwatch.Setup(x => x.ElapsedMilliseconds).Returns(100); + manager.ShouldUpdate().Should().BeFalse(); + // After interval, should update + stopwatch.Setup(x => x.ElapsedMilliseconds).Returns(300); + manager.ShouldUpdate().Should().BeTrue(); + } + + [Test] + [TestCase(-5, 10, -0.5)] + [TestCase(0, 10, 0)] + [TestCase(10, 5, 2)] + [TestCase(long.MaxValue, long.MaxValue, 1)] + public void TestPercentage_EdgeCases(long count, long? total, double? expected) + { + var stopwatch = Create(); + var manager = new ProgressDisplayManager(stopwatch.Object); + var p = manager.CalculatePercentage(new ProgressArgs(ProgressEvent.DownloadBytes, count, total)); + p.Should().Be(expected); + } + + [Test] + [TestCase(1, -5, 10, "0 bytes / sec")] + [TestCase(1, 0, 10, "0 bytes / sec")] + [TestCase(1, long.MaxValue, 10, "8.00 EB / sec")] + [TestCase(0, 5, 10, "0 bytes / sec")] // count = 0 + public void TestSpeed_EdgeCases(long elapsed, long count, long? total, string expected) + { + var stopwatch = Create(); + stopwatch.Setup(x => x.ElapsedSeconds).Returns(elapsed); + var manager = new ProgressDisplayManager(stopwatch.Object); + var p = manager.CalculateSpeed(new ProgressArgs(ProgressEvent.DownloadBytes, count, total)); + p.Should().Be(expected); + } + + [Test] + [TestCase(1, 100, 200, ProgressEvent.DeserializeObject, "100 objects / sec")] + [TestCase(1, 5, 10, ProgressEvent.SerializeObject, "5.00 objects / sec")] + [TestCase(1, 5, 10, (ProgressEvent)999, "")] // Unknown event + public void TestSpeed_AllProgressEvents(long elapsed, long count, long? total, ProgressEvent evt, string expected) + { + var stopwatch = Create(); + stopwatch.Setup(x => x.ElapsedSeconds).Returns(elapsed); + var manager = new ProgressDisplayManager(stopwatch.Object); + var p = manager.CalculateSpeed(new ProgressArgs(evt, count, total)); + p.Should().Be(expected); + } } diff --git a/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json b/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json index c03dfaf22..7b58bc4a0 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common.Tests/packages.lock.json @@ -308,9 +308,9 @@ "dependencies": { "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Speckle.Connectors.Logging": "[1.0.0, )", - "Speckle.Objects": "[3.5.1, )", - "Speckle.Sdk": "[3.5.1, )", - "Speckle.Sdk.Dependencies": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )", + "Speckle.Sdk": "[3.5.2, )", + "Speckle.Sdk.Dependencies": "[3.5.2, )" } }, "speckle.connectors.logging": { @@ -322,7 +322,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.1, )" + "Speckle.Sdk": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -366,18 +366,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -385,14 +385,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Sdk/Speckle.Connectors.Common/Operations/ProgressDisplayManager.cs b/Sdk/Speckle.Connectors.Common/Operations/ProgressDisplayManager.cs index 6208c5ea1..9abc62854 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/ProgressDisplayManager.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/ProgressDisplayManager.cs @@ -11,13 +11,6 @@ public class ProgressDisplayManager(IStopwatchManager stopwatch) : IProgressDisp public void Begin() => stopwatch.Start(); - private long _lastCount; - public long LastCount - { - get => _lastCount; - set => _lastCount = value; - } - public bool ShouldUpdate() { if (stopwatch.ElapsedMilliseconds < _lastMs + UPDATE_INTERVAL) @@ -41,12 +34,7 @@ public class ProgressDisplayManager(IStopwatchManager stopwatch) : IProgressDisp public string CalculateSpeed(ProgressArgs args) { - if (args.Count == 0) - { - return string.Empty; - } - var countPerSecond = (args.Count - _lastCount) / stopwatch.ElapsedSeconds; - Interlocked.Exchange(ref _lastCount, args.Count); + var countPerSecond = args.Count / stopwatch.ElapsedSeconds; switch (args.ProgressEvent) { @@ -82,7 +70,7 @@ public class ProgressDisplayManager(IStopwatchManager stopwatch) : IProgressDisp private static string ThreeNonZeroDigits(double value) { - if (value < 0 || double.IsPositiveInfinity(value)) + if (value <= 0 || double.IsPositiveInfinity(value)) { return "0"; } diff --git a/Sdk/Speckle.Connectors.Common/Operations/SendProgress.cs b/Sdk/Speckle.Connectors.Common/Operations/SendProgress.cs index 5c1ac53e8..e77d17cbd 100644 --- a/Sdk/Speckle.Connectors.Common/Operations/SendProgress.cs +++ b/Sdk/Speckle.Connectors.Common/Operations/SendProgress.cs @@ -48,9 +48,18 @@ public class SendProgress(IProgressDisplayManager progressDisplayManager, ISendP { return; } - onOperationProgressed.Report( - new($"Caching... ({args.Count} objects)", progressDisplayManager.CalculatePercentage(args)) - ); + + if (args.Count >= args.Total) + { + onOperationProgressed.Report(new("Finalizing cache. May take a while for large models...", null)); + } + else + { + onOperationProgressed.Report( + new($"Caching... ({args.Count} objects)", progressDisplayManager.CalculatePercentage(args)) + ); + } + break; case ProgressEvent.UploadingObjects: case ProgressEvent.UploadBytes: diff --git a/Sdk/Speckle.Connectors.Common/packages.lock.json b/Sdk/Speckle.Connectors.Common/packages.lock.json index c0f4567b3..8a6a129a4 100644 --- a/Sdk/Speckle.Connectors.Common/packages.lock.json +++ b/Sdk/Speckle.Connectors.Common/packages.lock.json @@ -44,18 +44,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -65,14 +65,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "GraphQL.Client": { "type": "Transitive", @@ -360,18 +360,18 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" }, "GraphQL.Client": { "type": "Transitive", diff --git a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json index f99385928..fec33f3fc 100644 --- a/Sdk/Speckle.Converters.Common.Tests/packages.lock.json +++ b/Sdk/Speckle.Converters.Common.Tests/packages.lock.json @@ -322,7 +322,7 @@ "type": "Project", "dependencies": { "Microsoft.Extensions.Logging.Abstractions": "[2.2.0, )", - "Speckle.Objects": "[3.5.1, )" + "Speckle.Objects": "[3.5.2, )" } }, "speckle.testing": { @@ -331,7 +331,7 @@ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )", "Moq": "[4.20.70, )", "NUnit": "[4.1.0, )", - "Speckle.Sdk": "[3.5.1, )" + "Speckle.Sdk": "[3.5.2, )" } }, "Microsoft.Extensions.Logging": { @@ -360,18 +360,18 @@ }, "Speckle.Objects": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -379,14 +379,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Sdk/Speckle.Converters.Common/packages.lock.json b/Sdk/Speckle.Converters.Common/packages.lock.json index bff12e21c..01895ba6c 100644 --- a/Sdk/Speckle.Converters.Common/packages.lock.json +++ b/Sdk/Speckle.Converters.Common/packages.lock.json @@ -41,11 +41,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "GraphQL.Client": { @@ -283,9 +283,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Bcl.AsyncInterfaces": "5.0.0", @@ -295,14 +295,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } }, "net8.0": { @@ -345,11 +345,11 @@ }, "Speckle.Objects": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "pBFTwdc49aQgE6Sho/9uYoqRRnkRyqEp9Sg+xBKWJ2i+XdKts91n//GgolUT2i9Xh46MJiZXgezWQx3ne6kr7w==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "4OlvSSV1cxPeIs3gK4GRvq9X0Su3NE/TBxE6uA/rBS4tCCUdRRiF8wJMFSOxj8K6CRuJcdCxAqD6TIB0cwJ/9Q==", "dependencies": { - "Speckle.Sdk": "3.5.1" + "Speckle.Sdk": "3.5.2" } }, "GraphQL.Client": { @@ -538,9 +538,9 @@ }, "Speckle.Sdk": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -548,14 +548,14 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } diff --git a/Sdk/Speckle.Testing/packages.lock.json b/Sdk/Speckle.Testing/packages.lock.json index 200dad5f3..10e6c9931 100644 --- a/Sdk/Speckle.Testing/packages.lock.json +++ b/Sdk/Speckle.Testing/packages.lock.json @@ -59,9 +59,9 @@ }, "Speckle.Sdk": { "type": "Direct", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "J//TnVqZ+RzvMoRu0x3HjVb+7rnYTRMCLQ0bN05fagl0UwyHYrc+Lwn19eyTPMnRoAQIFPXIdZjb2Yk7fyd0FA==", + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "6WUC7nbLOQURVb12eONGewhNdJHJb03jJ74QO8Tc5XODG+Q7Z5ZUcXu62ID/Hst3S0c2dlSXVZLw8WOLE2rGzQ==", "dependencies": { "GraphQL.Client": "6.0.0", "Microsoft.Data.Sqlite": "7.0.5", @@ -69,7 +69,7 @@ "Microsoft.Extensions.Logging": "2.2.0", "Speckle.DoubleNumerics": "4.1.0", "Speckle.Newtonsoft.Json": "13.0.2", - "Speckle.Sdk.Dependencies": "3.5.1" + "Speckle.Sdk.Dependencies": "3.5.2" } }, "Castle.Core": { @@ -277,9 +277,9 @@ }, "Speckle.Sdk.Dependencies": { "type": "CentralTransitive", - "requested": "[3.5.1, )", - "resolved": "3.5.1", - "contentHash": "jNFvbO0CVzBKSGAPtN2J20aixChyqVetLSU/4TwjVERY8UJdbhbvoxYIalaBZoTSIXdQoHshNC7Ul1o6+vTCcA==" + "requested": "[3.5.2, )", + "resolved": "3.5.2", + "contentHash": "EsNd0OIbubhjFptextM6DeiN74hqb+s8J+HwfAmIFU9XOlmZPfznqjPMJnK9B+8sCpcM2pFsWZys0g/g00m1aw==" } } } From 9f99cb593fc0b2be2356fc587111a156df4446d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinhagen?= Date: Thu, 28 Aug 2025 14:48:04 +0200 Subject: [PATCH 03/19] fix(revit): improve error messages when publishing fails (#1053) * chore: some more descriptive logging? * feat: display the message * chore: updated comment --- .../Operations/Send/RevitRootObjectBuilder.cs | 11 ++++++++++- .../Plugin/SpeckleRevitTaskException.cs | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs index 171b02146..ac1fec83b 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Send/RevitRootObjectBuilder.cs @@ -225,7 +225,16 @@ public class RevitRootObjectBuilder( } } - if (results.All(x => x.Status == Status.ERROR) || skippedObjectCount == atomicObjectCount) + // if we ended up skipping everything, there is a reason for this, that users can diagnose themselves + // this can occur if a published view contains only unsupported objects or if user trying to ONLY send linked model + // docs but the setting is disabled + if (skippedObjectCount == atomicObjectCount) + { + throw new SpeckleException("No supported objects visible. Update publish filter or check publish settings."); + } + + // this is, I suppose, fully on us? + if (results.All(x => x.Status == Status.ERROR)) { throw new SpeckleException("Failed to convert all objects."); } diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/SpeckleRevitTaskException.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/SpeckleRevitTaskException.cs index 2a3b1703a..9901cf68a 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/SpeckleRevitTaskException.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Plugin/SpeckleRevitTaskException.cs @@ -7,7 +7,7 @@ using Speckle.Sdk.Common; namespace Speckle.Connectors.Revit.Plugin; #pragma warning disable CA1032 -public class SpeckleRevitTaskException(Exception exception) : SpeckleException("Revit operation failed", exception) +public class SpeckleRevitTaskException(Exception exception) : SpeckleException(exception.Message, exception) #pragma warning restore CA1032 { public static async Task ProcessException( From 1796cacee664b5cf00af7da4029c20242bfe1c56 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Thu, 28 Aug 2025 16:18:49 +0100 Subject: [PATCH 04/19] Merge pull request #1043 from specklesystems/jedd/cnx-2245-importing-3dm-files-causes-fatal-application-crash-on refactor(rhino-importer): Run rhino as a sub process to avoid file locking and improve handling of crashes --- .../Blobs/ImportJobFile.cs | 49 ++++++ .../Blobs/ImportJobFileFactory.cs | 22 +++ .../JobHandlers/IPCModels.cs | 23 +++ .../JobHandlers/RhinoJobHandler.cs | 139 +++++++++++++----- .../JobProcessor.cs | 16 +- .../JobQueue/Repository.cs | 5 +- .../Speckle.Importers.JobProcessor/Program.cs | 45 +----- .../ServiceRegistration.cs | 2 + .../Speckle.Importers.JobProcessor.csproj | 5 +- .../packages.lock.json | 40 ++--- .../Rhino/Speckle.Importers.Rhino/Importer.cs | 31 ---- .../Internal/FileTypeConfig/DefaultConfig.cs | 29 +++- .../FileTypeConfig/IFileTypeConfig.cs | 19 +-- .../Internal/FileTypeConfig/ObjConfig.cs | 39 +++++ .../Internal/FileTypeConfig/Rhino3dmConfig.cs | 23 +++ .../Internal/FileTypeConfig/SketchupConfig.cs | 28 +++- .../Internal/IPCModels.cs | 23 +++ .../Internal/ImporterInstance.cs | 84 ++++++++--- .../Rhino/Speckle.Importers.Rhino/Program.cs | 50 +++++++ .../Speckle.Importers.Rhino.csproj | 1 + .../Operations/ReceiveOperationTests.cs | 6 +- .../Extensions/UserAccountScopeLogging.cs | 1 + Sdk/Speckle.Connectors.Logging/Consts.cs | 1 + 23 files changed, 492 insertions(+), 189 deletions(-) create mode 100644 Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFile.cs create mode 100644 Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFileFactory.cs create mode 100644 Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs delete mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Importer.cs create mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs create mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs create mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs create mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Program.cs diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFile.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFile.cs new file mode 100644 index 000000000..2a8309ca8 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFile.cs @@ -0,0 +1,49 @@ +using Microsoft.Extensions.Logging; + +namespace Speckle.Importers.JobProcessor.Blobs; + +/// +/// wrapper around the downloaded file +/// +/// +/// This is an attempt to use a disposal pattern to ensure that downloaded file is deleted after its use. +/// +/// +/// +internal sealed class ImportJobFile(ILogger logger, FileInfo file) : IDisposable +{ + public FileInfo FileInfo => file; + + private void DeleteFile() + { + var dir = file.Directory; + try + { + file.Delete(); + } + finally + { + dir?.Delete(true); + } + } + + public void Dispose() + { + try + { + DeleteFile(); + GC.SuppressFinalize(this); + } + catch (Exception ex) + { + logger.LogError(ex, "Failed to cleanup file"); + throw; + } + } + + ~ImportJobFile() + { + // Using the full unmanaged style disposal pattern means that the file will be deleted on finalise if dispose wasn't called already. + DeleteFile(); + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFileFactory.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFileFactory.cs new file mode 100644 index 000000000..ffa7f74aa --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Blobs/ImportJobFileFactory.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Logging; +using Speckle.Importers.JobProcessor.Domain; +using Speckle.Sdk.Api; + +namespace Speckle.Importers.JobProcessor.Blobs; + +internal sealed class ImportJobFileDownloader(ILogger logger) +{ + public async Task DownloadFile(FileimportJob job, IClient client, CancellationToken cancellationToken) + { + var directory = Directory.CreateTempSubdirectory("speckle-file-import"); + string targetFilePath = $"{directory.FullName}/{job.Payload.JobId}.{job.Payload.FileType}"; + await client.FileImport.DownloadFile( + job.Payload.ProjectId, + job.Payload.BlobId, + targetFilePath, + null, + cancellationToken + ); + return new ImportJobFile(logger, new FileInfo(targetFilePath)); + } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs new file mode 100644 index 000000000..6d812e9b8 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs @@ -0,0 +1,23 @@ +using Speckle.Sdk.Credentials; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.JobProcessor.JobHandlers; + +//Needs to be aligned between JobProcess and Rhino Importer +internal readonly struct ImporterArgs +{ + public required string FilePath { get; init; } + public required string JobId { get; init; } + public required string BlobId { get; init; } + public required int Attempt { get; init; } + public required string ResultsPath { get; init; } + public required string ProjectId { get; init; } + public required string ModelId { get; init; } + public required Account Account { get; init; } +} + +public readonly struct ImporterResponse +{ + public Version? Version { get; init; } + public string? ErrorMessage { get; init; } +} diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs index 4a978f29b..a657fe62e 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs @@ -1,54 +1,119 @@ -using Microsoft.Extensions.Logging; +using System.Diagnostics; +using System.Reflection; +using Microsoft.Extensions.Logging; +using Speckle.Connectors.Common.Extensions; +using Speckle.Importers.JobProcessor.Blobs; using Speckle.Importers.JobProcessor.Domain; -using Speckle.Importers.Rhino; +using Speckle.Newtonsoft.Json; +using Speckle.Sdk; using Speckle.Sdk.Api; +using Speckle.Sdk.Common; +using JsonSerializer = System.Text.Json.JsonSerializer; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Importers.JobProcessor.JobHandlers; -internal sealed class RhinoJobHandler(ILogger logger) : IJobHandler +internal sealed class RhinoJobHandler(ILogger logger, ImportJobFileDownloader fileDownloader) + : IJobHandler { + private readonly JsonSerializerSettings _settings = + new() { TypeNameHandling = TypeNameHandling.All, MissingMemberHandling = MissingMemberHandling.Error, }; + public async Task ProcessJob(FileimportJob job, IClient client, CancellationToken cancellationToken) { - var directory = Directory.CreateTempSubdirectory("speckle-file-import"); + using var file = await fileDownloader.DownloadFile(job, client, cancellationToken); + var importerArgs = new ImporterArgs + { + FilePath = file.FileInfo.FullName, + ResultsPath = $"{file.FileInfo.DirectoryName}/results.json", + Account = client.Account, + ModelId = job.Payload.ModelId, + ProjectId = job.Payload.ProjectId, + JobId = job.Id, + BlobId = job.Payload.BlobId, + Attempt = job.Attempt, + }; + await RunSubProcess(importerArgs, cancellationToken); + var response = await DeserializeResponse(importerArgs.ResultsPath, cancellationToken); + + if (response.Version is null) + { + string message = response.ErrorMessage ?? "Import job failed without a message"; + throw new SpeckleException(message); + } + + return response.Version; + } + + private async Task RunSubProcess(ImporterArgs args, CancellationToken cancellationToken) + { + using Process process = StartProcess(JsonSerializer.Serialize(args)); + + using var linked = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); + linked.Token.Register(_ => process.Kill(), null); + + await process.WaitForExitAsync(linked.Token); + + logger.LogInformation("Subprocess finished with {ExitCode}", process.ExitCode); + } + + private static Process StartProcess(string serializedArgs) + { + List argList = [serializedArgs]; + string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).NotNull(); + var processStart = new ProcessStartInfo() + { + FileName = $"{path}/Speckle.Importers.Rhino.exe", + Environment = { }, + RedirectStandardError = true, + RedirectStandardOutput = true, + UseShellExecute = false, + }; + processStart.ArgumentList.AddRange(argList); + var process = new Process { StartInfo = processStart, EnableRaisingEvents = true, }; + // Capture output asynchronously + process.OutputDataReceived += (_, e) => + { + if (!string.IsNullOrEmpty(e.Data)) + { + Console.WriteLine("[stdout] " + e.Data); + } + }; + + process.ErrorDataReceived += (_, e) => + { + if (!string.IsNullOrEmpty(e.Data)) + { + Console.WriteLine("[stderr] " + e.Data); + } + }; + + if (!process.Start()) + { + throw new SpeckleException("Process did not start"); + } + + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + + return process; + } + + private async Task DeserializeResponse(string path, CancellationToken cancellationToken) + { try { - string targetFilePath = $"{directory.FullName}/{job.Payload.JobId}.{job.Payload.FileType}"; - await client.FileImport.DownloadFile( - job.Payload.ProjectId, - job.Payload.BlobId, - targetFilePath, - null, - cancellationToken - ); + string response = await File.ReadAllTextAsync(path, cancellationToken); - return await Importer.Import( - targetFilePath, - job.Payload.ProjectId, - job.Payload.ModelId, - client.Account, - cancellationToken - ); + return JsonConvert.DeserializeObject(response, _settings); } - finally + catch (OperationCanceledException) when (cancellationToken.IsCancellationRequested) { - try - { - await Cleanup(directory.FullName); - } - catch (Exception ex) when (ex is IOException or UnauthorizedAccessException) - { - logger.LogError(ex, "Failed to cleanup file"); - } + throw; + } + catch (Exception ex) + { + throw new SpeckleException("Importer left an invalid response", ex); } - } - - private static async Task Cleanup(string path) - { - //Some weird cases where *something* is keeping a lock on the file, this *may* fix things... - await Task.Delay(100); - GC.Collect(); - GC.WaitForPendingFinalizers(); - Directory.Delete(path, true); } } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs index 6f7c06a5d..275c98431 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs @@ -42,13 +42,13 @@ internal sealed class JobProcessorInstance( logger.LogInformation("Starting {jobId}", job.Id); using var activity = activityFactory.Start(); - ActivityScope.SetTag("jobId", job.Id); - ActivityScope.SetTag("jobType", job.Payload.JobType); - ActivityScope.SetTag("job.attempt", job.Attempt.ToString()); - ActivityScope.SetTag("serverUrl", job.Payload.ServerUrl.ToString()); - ActivityScope.SetTag("projectId", job.Payload.ProjectId); - ActivityScope.SetTag("modelId", job.Payload.ModelId); - ActivityScope.SetTag("blobId", job.Payload.BlobId); + using var scopeJobId = ActivityScope.SetTag("jobId", job.Id); + using var scopeJobType = ActivityScope.SetTag("jobType", job.Payload.JobType); + using var scopeAttempt = ActivityScope.SetTag("job.attempt", job.Attempt.ToString()); + using var scopeServerUrl = ActivityScope.SetTag("serverUrl", job.Payload.ServerUrl.ToString()); + using var scopeProjectId = ActivityScope.SetTag("projectId", job.Payload.ProjectId); + using var scopeModelId = ActivityScope.SetTag("modelId", job.Payload.ModelId); + using var scopeBlobId = ActivityScope.SetTag("blobId", job.Payload.BlobId); try { @@ -120,7 +120,7 @@ internal sealed class JobProcessorInstance( try { speckleClient = await SetupClient(job, cancellationToken); - UserActivityScope.AddUserScope(speckleClient.Account); + using var userScope = UserActivityScope.AddUserScope(speckleClient.Account); if (job.Attempt > job.MaxAttempt) { diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs index ef32fe7d6..b2622a147 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs @@ -10,9 +10,10 @@ internal sealed class Repository(ILogger logger) { public async Task SetupConnection(CancellationToken cancellationToken) { + const string ENV_VAR = "FILEIMPORT_QUEUE_POSTGRES_URL"; string fileImportQueuePostgresUrl = - Environment.GetEnvironmentVariable("FILEIMPORT_QUEUE_POSTGRES_URL") - ?? throw new ArgumentException("Expected FILEIMPORT_QUEUE_POSTGRES_URL environment variable to be set"); + Environment.GetEnvironmentVariable(ENV_VAR) + ?? throw new ArgumentException($"Expected {ENV_VAR} environment variable to be set"); string connectionString = ParseConnectionString(new(fileImportQueuePostgresUrl)); var connection = new NpgsqlConnection(connectionString); diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs index 0bcc2ea83..9c6b8180a 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Program.cs @@ -1,10 +1,6 @@ -// See https://aka.ms/new-console-template for more information - -using Dapper; +using Dapper; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; -using Rhino.Runtime.InProcess; -using RhinoInside; using Speckle.Importers.JobProcessor.Domain; using Speckle.Importers.JobProcessor.JobHandlers; using Speckle.Importers.JobProcessor.JobQueue; @@ -13,12 +9,6 @@ namespace Speckle.Importers.JobProcessor; public static class Program { - static Program() - { - Resolver.Initialize(); - } - - [STAThread] public static async Task Main() { ILogger? logger = null; @@ -34,44 +24,25 @@ public static class Program serviceCollection.AddTransient(); var serviceProvider = serviceCollection.BuildServiceProvider(); + logger = serviceProvider.GetRequiredService>(); + TaskScheduler.UnobservedTaskException += (_, eventArgs) => + logger.LogCritical(eventArgs.Exception, "Unobserved Task Exception"); var processor = serviceProvider.GetRequiredService(); - logger = serviceProvider.GetRequiredService>(); - TaskScheduler.UnobservedTaskException += (sender, args) => - logger.LogCritical(args.Exception, "Unobserved Task Exception"); - - using (new RhinoCore(["/netcore-8"], WindowStyle.NoWindow)) - { - //What ever thread RhinoCore is created on it will grab as soon as it's available, and it will hog it forever. - //Right now, we're giving it the main STA thread (not 100% if it needs STA or if it could work on any thread) - await Task.Run(async () => - { - logger.LogInformation("Job processor has started!"); - try - { - await processor.StartProcessing(); - } - catch (Exception ex) - { - logger.LogCritical(ex, "Unhandled exception in Main"); - throw; - } - }) - .ConfigureAwait(false); - } + await processor.StartProcessing(); } catch (Exception ex) { + const string MESSAGE = "Unhandled exception reached entry point"; if (logger is not null) { - logger.LogCritical(ex, "Unhandled exception reached entry point"); + logger.LogCritical(ex, MESSAGE); } else { - Console.WriteLine($"Unhandled exception reached entry point: {ex}"); + Console.WriteLine(MESSAGE); } - throw; } } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs index 7536e483a..749018a92 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/ServiceRegistration.cs @@ -1,5 +1,6 @@ using Microsoft.Extensions.DependencyInjection; using Speckle.Connectors.Common; +using Speckle.Importers.JobProcessor.Blobs; using Speckle.Importers.JobProcessor.JobQueue; using Speckle.Sdk; @@ -14,6 +15,7 @@ internal static class ServiceRegistration serviceCollection.AddLoggingConfig(); serviceCollection.AddTransient(); serviceCollection.AddTransient(); + serviceCollection.AddTransient(); return serviceCollection; } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj b/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj index 6e4e7653e..b610a4b21 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Speckle.Importers.JobProcessor.csproj @@ -13,11 +13,10 @@ - - - + + diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json index 0f0ed4243..b8c14f463 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/packages.lock.json @@ -42,24 +42,6 @@ "resolved": "1.14.1", "contentHash": "mOOmFYwad3MIOL14VCjj02LljyF1GNw1wP0YVlxtcPvqdxjGGMNdNJJxHptlry3MOd8b40Flm8RPOM8JOlN2sQ==" }, - "RhinoCommon": { - "type": "Direct", - "requested": "[8.21.25188.17001, )", - "resolved": "8.21.25188.17001", - "contentHash": "Wo6JXheyDBvilyIwDY6xZCQJC4170jzAlTSlMgh8yokUY+vYyCl4KJVXZofIOynNt/xx5wLqb2On5gZZekXR6w==", - "dependencies": { - "System.Drawing.Common": "7.0.0" - } - }, - "RhinoWindows": { - "type": "Direct", - "requested": "[8.21.25188.17001, )", - "resolved": "8.21.25188.17001", - "contentHash": "9zqCorcLRBeiW/j1RTwUS4E7bnZetAdA9WDdtd/AQccjOpxdtw76wdN+ciyQ6qslseWkwZ9qSBeh7QaM800Ntw==", - "dependencies": { - "RhinoCommon": "[8.21.25188.17001]" - } - }, "Serilog.Extensions.Logging": { "type": "Direct", "requested": "[8.0.0, )", @@ -176,11 +158,6 @@ "resolved": "8.0.0", "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw==" }, - "Microsoft.Win32.SystemEvents": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==" - }, "Speckle.Newtonsoft.Json": { "type": "Transitive", "resolved": "13.0.2", @@ -216,14 +193,6 @@ "SQLitePCLRaw.core": "2.1.4" } }, - "System.Drawing.Common": { - "type": "Transitive", - "resolved": "7.0.0", - "contentHash": "KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==", - "dependencies": { - "Microsoft.Win32.SystemEvents": "7.0.0" - } - }, "System.Memory": { "type": "Transitive", "resolved": "4.5.3", @@ -290,6 +259,15 @@ "Speckle.Converters.Rhino8": "[1.0.0, )" } }, + "Grasshopper": { + "type": "CentralTransitive", + "requested": "[8.9.24194.18121, )", + "resolved": "8.0.23304.9001", + "contentHash": "L1Cse6nAxryzcZ7jsu3WzBiG9BYtgYsaNbRV+p55N+THKTFGmXx1PdBbiWtuxK9kB4jyuLVpeV8XBiYlSGA1Vw==", + "dependencies": { + "RhinoCommon": "[8.0.23304.9001]" + } + }, "Microsoft.Extensions.DependencyInjection": { "type": "CentralTransitive", "requested": "[2.2.0, )", diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs b/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs deleted file mode 100644 index b60ff23d7..000000000 --- a/Importers/Rhino/Speckle.Importers.Rhino/Importer.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Speckle.Importers.Rhino.Internal; -using Speckle.Sdk.Credentials; -using Version = Speckle.Sdk.Api.GraphQL.Models.Version; - -namespace Speckle.Importers.Rhino; - -/// -/// Entry point for the rhino import. -/// Is a wrapper around an internal DI container. -/// It's very important that the state of services doesn't bleed between job, -/// So every import creates a new container for its processing -/// I don't trust the current services to not hold on to caches or state that could influence the next run -/// -public static class Importer -{ - public static async Task Import( - string filePath, - string projectId, - string modelId, - Account account, - CancellationToken cancellationToken - ) - { - var serviceCollection = new ServiceCollection(); - serviceCollection.AddRhinoImporter(); - using var serviceProvider = serviceCollection.BuildServiceProvider(); - var instance = serviceProvider.GetRequiredService(); - return await instance.RunRhinoImport(filePath, projectId, modelId, account, cancellationToken); - } -} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs index 882de073a..d51d1aeac 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/DefaultConfig.cs @@ -1,11 +1,34 @@ using Rhino; -using Rhino.Collections; +using Speckle.Sdk; namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; +/// +/// Creates a headless doc and imports the file +/// +/// +/// Note: imported geometry will be converted to the default mm units +/// If we need to preserve the file units, a custom config needs to be created +/// public sealed class DefaultConfig : IFileTypeConfig { - public ArchivableDictionary? ImportOptions => null; + public RhinoDoc OpenInHeadlessDocument(string filePath) + { + var doc = RhinoDoc.CreateHeadless(null); + try + { + if (!doc.Import(filePath, null)) + { + throw new SpeckleException("Rhino could not import this file"); + } + return doc; + } + catch + { + doc.Dispose(); + throw; + } + } - public void PreProcessDocument(RhinoDoc doc) { } + public void Dispose() { } } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs index a8742bfc0..4eb6e082e 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/IFileTypeConfig.cs @@ -1,24 +1,21 @@ using Rhino; -using Rhino.Collections; +using Speckle.Sdk; namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; /// /// Represents configuration for a specific file type (e.g. .skp) to customise the import behaviour /// -internal interface IFileTypeConfig +internal interface IFileTypeConfig : IDisposable { /// - /// Options to pass to the command - /// - public ArchivableDictionary? ImportOptions { get; } - - /// - /// Run any operations on objects in the rhino document to clean up the export before converting to speckle + /// Import the file at the provided into a new headless document /// /// - /// Ran on the document after importing, but before any Speckle conversion + /// Implementors may apply additional cleanup and import options /// - /// - public void PreProcessDocument(RhinoDoc doc); + /// + /// + /// Rhino could not import the file + public RhinoDoc OpenInHeadlessDocument(string filePath); } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs new file mode 100644 index 000000000..40e62c0f5 --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs @@ -0,0 +1,39 @@ +using Rhino; +using Rhino.FileIO; +using Speckle.Sdk; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +public sealed class ObjConfig : IFileTypeConfig +{ + private readonly FileObjReadOptions _readOptions = + new(new FileReadOptions() { OpenMode = true }) + { + MapYtoZ = true, + UseObjGroupsAs = FileObjReadOptions.UseObjGsAs.ObjGroupsAsLayers, + UseObjObjectsAs = FileObjReadOptions.UseObjOsAs.ObjObjectsAsObjects, + IgnoreTextures = true, //We don't support MTL uploads, so no point trying to find a MTL file... + }; + private readonly DefaultConfig _defaultConfig = new(); + + public RhinoDoc OpenInHeadlessDocument(string filePath) + { + var doc = RhinoDoc.CreateHeadless(null); + try + { + if (!FileObj.Read(filePath, doc, _readOptions)) + { + throw new SpeckleException("Rhino could not import this file"); + } + + return doc; + } + catch + { + doc.Dispose(); + throw; + } + } + + public void Dispose() => _defaultConfig.Dispose(); +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs new file mode 100644 index 000000000..c5189936b --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs @@ -0,0 +1,23 @@ +using Rhino; +using Speckle.Sdk; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +/// +/// will preserve the units defined by the file +/// +public sealed class Rhino3dmConfig : IFileTypeConfig +{ + public RhinoDoc OpenInHeadlessDocument(string filePath) + { + RhinoDoc? doc = RhinoDoc.OpenHeadless(filePath); + if (doc is null) + { + throw new SpeckleException("Rhino could not open this file"); + } + + return doc; + } + + public void Dispose() { } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs index 289fbe458..ca4aa1ca2 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs @@ -1,17 +1,37 @@ using Rhino; -using Rhino.Collections; using Rhino.DocObjects; using Rhino.Geometry; +using Speckle.Sdk; namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; public sealed class SketchupConfig : IFileTypeConfig { - public ArchivableDictionary? ImportOptions => null; + private readonly DefaultConfig _defaultConfig = new(); + + public RhinoDoc OpenInHeadlessDocument(string filePath) + { + var doc = RhinoDoc.CreateHeadless(null); + try + { + if (!doc.Import(filePath, null)) + { + throw new SpeckleException("Rhino could not import this file"); + } + PreProcessDocument(doc); + return doc; + } + catch + { + doc.Dispose(); + throw; + } + } /// /// Clean up step to strip imported meshes of their NGon data, leaving only the triangle/quad data behind. /// This works around a bug in the sketchup importer creating invalid ngons. + /// https://discourse.mcneel.com/t/meshes-imported-from-skp-file-have-invalid-non-cww-ngons/208028 /// /// /// Without this cleanup step, skp imports send incorrect meshes to speckle @@ -22,7 +42,7 @@ public sealed class SketchupConfig : IFileTypeConfig /// would be invalid without this step /// /// - public void PreProcessDocument(RhinoDoc doc) + private static void PreProcessDocument(RhinoDoc doc) { // Process regular meshes in the document foreach (var obj in doc.Objects.GetObjectList(ObjectType.Mesh)) @@ -43,4 +63,6 @@ public sealed class SketchupConfig : IFileTypeConfig //TODO: same for meshes inside blocks } + + public void Dispose() => _defaultConfig.Dispose(); } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs new file mode 100644 index 000000000..477a48c5a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs @@ -0,0 +1,23 @@ +using Speckle.Sdk.Credentials; +using Version = Speckle.Sdk.Api.GraphQL.Models.Version; + +namespace Speckle.Importers.Rhino.Internal; + +//Needs to be aligned between JobProcess and Rhino Importer +internal readonly struct ImporterArgs +{ + public required string FilePath { get; init; } + public required string JobId { get; init; } + public required string BlobId { get; init; } + public required int Attempt { get; init; } + public required string ResultsPath { get; init; } + public required string ProjectId { get; init; } + public required string ModelId { get; init; } + public required Account Account { get; init; } +} + +public readonly struct ImporterResponse +{ + public Version? Version { get; init; } + public string? ErrorMessage { get; init; } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs index 80e90cb08..85cc62524 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs @@ -1,41 +1,70 @@ +using System.Diagnostics.CodeAnalysis; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.Logging; using Rhino; +using Rhino.Runtime.InProcess; +using Speckle.Connectors.Common.Extensions; +using Speckle.Connectors.Logging; using Speckle.Importers.Rhino.Internal.FileTypeConfig; -using Speckle.Sdk; -using Speckle.Sdk.Credentials; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Importers.Rhino.Internal; -internal sealed class ImporterInstance(Sender sender) +internal sealed class ImporterInstance(Sender sender, ILogger logger) : IDisposable { - public async Task RunRhinoImport( - string filePath, - string projectId, - string modelId, - Account account, - CancellationToken cancellationToken - ) + private readonly ILogger _logger = logger; + private readonly RhinoCore _rhinoInstance = new(["/netcore-8"], WindowStyle.NoWindow); + private static readonly JsonSerializerOptions s_serializerOptions = + new() { UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow, }; + + private RhinoDoc? _rhinoDoc; + + public async Task Run(string[] args, CancellationToken cancellationToken) + { + var a = JsonSerializer.Deserialize(args[0], s_serializerOptions); + using var scopeJobId = ActivityScope.SetTag("jobId", a.JobId); + // using var scopeJobType = ActivityScope.SetTag("jobType", a.JobType); + using var scopeAttempt = ActivityScope.SetTag("job.attempt", a.Attempt.ToString()); + using var scopeServerUrl = ActivityScope.SetTag("serverUrl", a.Account.serverInfo.url); + using var scopeProjectId = ActivityScope.SetTag("projectId", a.ProjectId); + using var scopeModelId = ActivityScope.SetTag("modelId", a.ModelId); + using var scopeBlobId = ActivityScope.SetTag("blobId", a.BlobId); + UserActivityScope.AddUserScope(a.Account); + + var result = await TryImport(a, cancellationToken); + var serializedResult = JsonSerializer.Serialize(result, s_serializerOptions); + File.WriteAllLines(a.ResultsPath, [serializedResult]); + } + + [SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "IPC")] + private async Task TryImport(ImporterArgs args, CancellationToken cancellationToken) { - using RhinoDoc open = RhinoDoc.CreateHeadless(null); try { - var config = GetConfig(Path.GetExtension(filePath)); + var version = await RunRhinoImport(args, cancellationToken); + return new ImporterResponse { Version = version, ErrorMessage = null }; + } + catch (Exception ex) + { + _logger.LogWarning(ex, "Import attempt failed with exception"); + return new ImporterResponse { ErrorMessage = ex.Message, Version = null }; + } + } - RhinoDoc.ActiveDoc = open; - if (!open.Import(filePath, config.ImportOptions)) - { - throw new SpeckleException("Rhino could not import this file"); - } + private async Task RunRhinoImport(ImporterArgs args, CancellationToken cancellationToken) + { + try + { + using var config = GetConfig(Path.GetExtension(args.FilePath)); + _rhinoDoc = config.OpenInHeadlessDocument(args.FilePath); + RhinoDoc.ActiveDoc = _rhinoDoc; - config.PreProcessDocument(open); - - var version = await sender.Send(projectId, modelId, account, cancellationToken); + var version = await sender.Send(args.ProjectId, args.ModelId, args.Account, cancellationToken); return version; } finally { - //Being a bit extra defensive to ensure we're cleaning up the old doc - RhinoDoc.ActiveDoc?.Dispose(); RhinoDoc.ActiveDoc = null; } } @@ -44,6 +73,17 @@ internal sealed class ImporterInstance(Sender sender) extension.ToLowerInvariant() switch { ".skp" => new SketchupConfig(), + ".obj" => new ObjConfig(), + ".3dm" => new Rhino3dmConfig(), _ => new DefaultConfig(), }; + + public void Dispose() + { + //There is a bug in Rhino.Inside (>=8.x) + //that will cause an unmanaged crash when disposing 3dm documents + // https://discourse.mcneel.com/t/rhino-inside-fatal-app-crashes-when-disposing-headless-documents/208673 + _rhinoDoc?.Dispose(); + _rhinoInstance.Dispose(); + } } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Program.cs b/Importers/Rhino/Speckle.Importers.Rhino/Program.cs new file mode 100644 index 000000000..68353948a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Program.cs @@ -0,0 +1,50 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using RhinoInside; +using Speckle.Importers.Rhino.Internal; + +namespace Speckle.Importers.Rhino; + +public static class Program +{ + static Program() + { + Resolver.Initialize(); + Console.WriteLine($"Loading Rhino @ {Resolver.RhinoSystemDirectory}"); + } + + public static async Task Main(string[] args) + { + ILogger? logger = null; + try + { + var serviceCollection = new ServiceCollection(); + serviceCollection.AddRhinoImporter(); + using var serviceProvider = serviceCollection.BuildServiceProvider(); + logger = serviceProvider.GetRequiredService>(); + TaskScheduler.UnobservedTaskException += (_, eventArgs) => + logger.LogCritical(eventArgs.Exception, "Unobserved Task Exception"); + + var importer = serviceProvider.GetRequiredService(); + + await Task.Run(async () => + { + await importer.Run(args, CancellationToken.None); + }) + .ConfigureAwait(false); + } + catch (Exception ex) + { + const string MESSAGE = "Unhandled exception reached entry point"; + if (logger is not null) + { + logger.LogCritical(ex, MESSAGE); + } + else + { + Console.WriteLine(MESSAGE); + } + throw; + } + } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj b/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj index 6d40326ab..c8eda4c44 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj +++ b/Importers/Rhino/Speckle.Importers.Rhino/Speckle.Importers.Rhino.csproj @@ -4,6 +4,7 @@ net8.0-windows x64 Debug;Release;Local + Exe diff --git a/Sdk/Speckle.Connectors.Common.Tests/Operations/ReceiveOperationTests.cs b/Sdk/Speckle.Connectors.Common.Tests/Operations/ReceiveOperationTests.cs index 5317ca080..cc87114af 100644 --- a/Sdk/Speckle.Connectors.Common.Tests/Operations/ReceiveOperationTests.cs +++ b/Sdk/Speckle.Connectors.Common.Tests/Operations/ReceiveOperationTests.cs @@ -33,7 +33,11 @@ public class ReceiveOperationTests : MoqTest var threadContext = Create(); var @base = new TestBase(); - var account = new Account { userInfo = new(), }; + var account = new Account + { + userInfo = new(), + serverInfo = new ServerInfo() { url = "https://myserver.example.com" } + }; var version = new Speckle.Sdk.Api.GraphQL.Models.Version(); var projectName = "projectName"; var modelName = "modelName"; diff --git a/Sdk/Speckle.Connectors.Common/Extensions/UserAccountScopeLogging.cs b/Sdk/Speckle.Connectors.Common/Extensions/UserAccountScopeLogging.cs index afcbb7ea4..3683903f4 100644 --- a/Sdk/Speckle.Connectors.Common/Extensions/UserAccountScopeLogging.cs +++ b/Sdk/Speckle.Connectors.Common/Extensions/UserAccountScopeLogging.cs @@ -22,6 +22,7 @@ public static class UserActivityScope [ ActivityScope.SetTag(Consts.USER_ID, account.userInfo.id), ActivityScope.SetTag(Consts.USER_DISTINCT_ID, account.GetHashedEmail()), + ActivityScope.SetTag(Consts.USER_SERVER_URL, new Uri(account.serverInfo.url).ToString()), ] ); } diff --git a/Sdk/Speckle.Connectors.Logging/Consts.cs b/Sdk/Speckle.Connectors.Logging/Consts.cs index 4478b3021..d5e463447 100644 --- a/Sdk/Speckle.Connectors.Logging/Consts.cs +++ b/Sdk/Speckle.Connectors.Logging/Consts.cs @@ -12,6 +12,7 @@ public static class Consts public const string RUNTIME_NAME = "runtime.name"; public const string USER_ID = "user.id"; public const string USER_DISTINCT_ID = "user.distinctId"; + public const string USER_SERVER_URL = "user.server_url"; public const string TRACING_SOURCE = "speckle"; /// From 35a185c65f7e8fb773664393cde559e2ab1ec625 Mon Sep 17 00:00:00 2001 From: Iain Sproat <68657+iainsproat@users.noreply.github.com> Date: Fri, 29 Aug 2025 08:19:45 +0100 Subject: [PATCH 05/19] fix(importer/rhino): server handles terminal job status transitions - do not pick up jobs which have exceeded max attempts --- .../Speckle.Importers.JobProcessor/JobProcessor.cs | 5 ++++- .../JobQueue/Repository.cs | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs index 275c98431..566a5cf40 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs @@ -53,7 +53,10 @@ internal sealed class JobProcessorInstance( try { JobStatus jobStatus = await AttemptJob(job, cancellationToken); - await repository.SetJobStatus(connection, job.Id, jobStatus, cancellationToken); + if (jobStatus == jobStatus.QUEUED) + { + await repository.ReturnJobToQueued(connection, job.Id, cancellationToken); + } activity?.SetStatus(SdkActivityStatusCode.Ok); } catch (Exception ex) diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs index b2622a147..59c9c7489 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs @@ -59,6 +59,7 @@ internal sealed class Repository(ILogger logger) WHERE ( --queued job (payload ->> 'fileType') = ANY(@FileTypes) AND status = @Status2 + AND "attempt" < "maxAttempt" ) OR ( --timed job left on processing state (payload ->> 'fileType') = ANY(@FileTypes) @@ -88,6 +89,15 @@ internal sealed class Repository(ILogger logger) return await connection.QueryFirstOrDefaultAsync(command); } + public async Task ReturnJobToQueued( + IDbConnection connection, + string jobId, + CancellationToken cancellationToken + ) + { + await SetJobStatus(connection, jobId, JobStatus.QUEUED, cancellationToken); + } + public async Task SetJobStatus( IDbConnection connection, string jobId, From c5a6208f7ee4630b465042f46f520fbb235bc014 Mon Sep 17 00:00:00 2001 From: Iain Sproat <68657+iainsproat@users.noreply.github.com> Date: Fri, 29 Aug 2025 08:33:15 +0100 Subject: [PATCH 06/19] fix typo --- Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs index 566a5cf40..105bbb0c3 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobProcessor.cs @@ -53,7 +53,7 @@ internal sealed class JobProcessorInstance( try { JobStatus jobStatus = await AttemptJob(job, cancellationToken); - if (jobStatus == jobStatus.QUEUED) + if (jobStatus == JobStatus.QUEUED) { await repository.ReturnJobToQueued(connection, job.Id, cancellationToken); } From 0023ab16223b39994fc7b258435730cd16cea000 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Fri, 29 Aug 2025 08:38:46 +0100 Subject: [PATCH 07/19] feat(rhinoImporter): Fbx config (#1055) * Add fbx config * actually use it --- .../Internal/FileTypeConfig/FbxConfig.cs | 36 +++++++++++++++++++ .../Internal/FileTypeConfig/ObjConfig.cs | 3 +- .../Internal/ImporterInstance.cs | 1 + 3 files changed, 38 insertions(+), 2 deletions(-) create mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/FbxConfig.cs diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/FbxConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/FbxConfig.cs new file mode 100644 index 000000000..0d5554f6a --- /dev/null +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/FbxConfig.cs @@ -0,0 +1,36 @@ +using Rhino; +using Rhino.FileIO; +using Speckle.Sdk; + +namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; + +public sealed class FbxConfig : IFileTypeConfig +{ + private readonly FileFbxReadOptions _readOptions = + new() + { + MapFbxYtoRhinoZ = true, + ImportLights = false, // Speckle doesn't support LightObject s + ImportCameras = true, + }; + + public RhinoDoc OpenInHeadlessDocument(string filePath) + { + var doc = RhinoDoc.CreateHeadless(null); + try + { + if (!doc.Import(filePath, _readOptions.ToDictionary())) + { + throw new SpeckleException("Rhino could not import this file"); + } + return doc; + } + catch + { + doc.Dispose(); + throw; + } + } + + public void Dispose() { } +} diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs index 40e62c0f5..fc11e61ec 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/ObjConfig.cs @@ -14,7 +14,6 @@ public sealed class ObjConfig : IFileTypeConfig UseObjObjectsAs = FileObjReadOptions.UseObjOsAs.ObjObjectsAsObjects, IgnoreTextures = true, //We don't support MTL uploads, so no point trying to find a MTL file... }; - private readonly DefaultConfig _defaultConfig = new(); public RhinoDoc OpenInHeadlessDocument(string filePath) { @@ -35,5 +34,5 @@ public sealed class ObjConfig : IFileTypeConfig } } - public void Dispose() => _defaultConfig.Dispose(); + public void Dispose() { } } diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs index 85cc62524..f2ae6388b 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs @@ -75,6 +75,7 @@ internal sealed class ImporterInstance(Sender sender, ILogger ".skp" => new SketchupConfig(), ".obj" => new ObjConfig(), ".3dm" => new Rhino3dmConfig(), + ".fbx" => new FbxConfig(), _ => new DefaultConfig(), }; From 12ea8a4597fe130a7f14d192daa93139ac535ff0 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Fri, 29 Aug 2025 10:41:25 +0100 Subject: [PATCH 08/19] Format --- .../Speckle.Importers.JobProcessor/JobQueue/Repository.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs index 59c9c7489..59bf8a8d0 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobQueue/Repository.cs @@ -89,11 +89,7 @@ internal sealed class Repository(ILogger logger) return await connection.QueryFirstOrDefaultAsync(command); } - public async Task ReturnJobToQueued( - IDbConnection connection, - string jobId, - CancellationToken cancellationToken - ) + public async Task ReturnJobToQueued(IDbConnection connection, string jobId, CancellationToken cancellationToken) { await SetJobStatus(connection, jobId, JobStatus.QUEUED, cancellationToken); } From e4b26c92fdc3a54048b597c789c1fd9a7885ceab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinhagen?= Date: Fri, 29 Aug 2025 15:10:42 +0200 Subject: [PATCH 09/19] feat: publish blocks respecting hidden objects (#1057) --- .../HostApp/RhinoInstanceUnpacker.cs | 10 +++++++++- .../HostApp/RhinoLayerHelper.cs | 20 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoInstanceUnpacker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoInstanceUnpacker.cs index ed1c812ee..0671486c6 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoInstanceUnpacker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoInstanceUnpacker.cs @@ -13,14 +13,17 @@ namespace Speckle.Connectors.Rhino.HostApp; public class RhinoInstanceUnpacker : IInstanceUnpacker { private readonly IInstanceObjectsManager> _instanceObjectsManager; + private readonly RhinoLayerHelper _rhinoLayerHelper; private readonly ILogger _logger; public RhinoInstanceUnpacker( IInstanceObjectsManager> instanceObjectsManager, + RhinoLayerHelper rhinoLayerHelper, ILogger logger ) { _instanceObjectsManager = instanceObjectsManager; + _rhinoLayerHelper = rhinoLayerHelper; _logger = logger; } @@ -109,7 +112,12 @@ public class RhinoInstanceUnpacker : IInstanceUnpacker _instanceObjectsManager.AddDefinitionProxy(instance.InstanceDefinition.Id.ToString(), definition); - foreach (var obj in instance.InstanceDefinition.GetObjects()) + // NOTE: InstanceDefinition.GetObjects() returns all constituent objects of a block, but those constituent + // objects can be on layers, that are not visible. The publish should respect that. + // See request: [CNX-2254](https://linear.app/speckle/issue/CNX-2254/rhino-publish-blocks-with-hidden-objects) + var allDefinitionObjects = instance.InstanceDefinition.GetObjects(); + var visibleDefinitionObjects = _rhinoLayerHelper.FilterByLayerVisibility(allDefinitionObjects); + foreach (var obj in visibleDefinitionObjects) { definition.objects.Add(obj.Id.ToString()); if (obj is InstanceObject localInstance) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs index b3ebcedfd..903bd73a4 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoLayerHelper.cs @@ -131,4 +131,24 @@ public class RhinoLayerHelper } } } + + /// + /// Checks if a layer is visible by its index. + /// + public bool IsLayerVisible(int layerIndex) + { + if (layerIndex < 0 || layerIndex >= RhinoDoc.ActiveDoc.Layers.Count) + { + return true; // default to visible for invalid indices (safe fallback) + } + + var layer = RhinoDoc.ActiveDoc.Layers[layerIndex]; + return layer != null && !layer.IsDeleted && layer.IsVisible; + } + + /// + /// Filters a collection of objects to only include those on visible layers. + /// + public IEnumerable FilterByLayerVisibility(IEnumerable objects) + where T : RhinoObject => objects.Where(obj => IsLayerVisible(obj.Attributes.LayerIndex)); } From 57ede4cabd17fbccb356abf11170292b4e90470b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinhagen?= Date: Mon, 1 Sep 2025 11:09:28 +0200 Subject: [PATCH 10/19] fix(revit): preserve selection intent while maintaining dynamic filter behavior (#1054) * fix: poc hackady hack-hack * docs: comments * refactor: simpler --- .../Bindings/RevitSendBinding.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs index 3d7ab2af7..cd6110887 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/RevitSendBinding.cs @@ -216,12 +216,13 @@ internal sealed class RevitSendBinding : RevitBaseBinding, ISendBinding newSelectedObjectIds.Add(element.UniqueId); } - // We update the state on the UI SenderModelCard to prevent potential inconsistencies between hostApp IdMap in sendfilters. - await Commands.SetFilterObjectIds( - modelCard.ModelCardId.NotNull(), - modelCard.SendFilter.IdMap, - newSelectedObjectIds - ); + // NOTE: preserve & persist original user selection for selection filter implemented during + // [CNX-2400](https://linear.app/speckle/issue/CNX-2400/object-dont-update-on-publish) + // NOTE: update with current document for views and categories filter since these represent dynamic queries + // View & categories filters self-update their SelectedObjectIds in RefreshObjectIds(), maintaining consistency + var objectIds = + modelCard.SendFilter is RevitSelectionFilter ? modelCard.SendFilter.SelectedObjectIds : newSelectedObjectIds; + await Commands.SetFilterObjectIds(modelCard.ModelCardId.NotNull(), modelCard.SendFilter.IdMap, objectIds); } return documentElementContexts; From ee32f320eea3e880e3385f807ccea659627a343a Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:50:34 +0100 Subject: [PATCH 11/19] Workaround for rhino materials (#1058) --- .../HostApp/RhinoMaterialUnpacker.cs | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialUnpacker.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialUnpacker.cs index 14559a698..e8a3ffdb8 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialUnpacker.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/RhinoMaterialUnpacker.cs @@ -177,7 +177,7 @@ public class RhinoMaterialUnpacker } // converts a rhino material to a rhino render material - private RenderMaterial? ConvertMaterialToRenderMaterial(Material material) + private static RenderMaterial? ConvertMaterialToRenderMaterial(Material material) { // get physically based render material Material pbMaterial = material; @@ -188,7 +188,18 @@ public class RhinoMaterialUnpacker pbMaterial.ToPhysicallyBased(); } - return RenderMaterial.FromMaterial(pbMaterial, null); + var result = RenderMaterial.FromMaterial(pbMaterial, null); + + if (result is null) + { + // We're seeing some weird behaviour running in the File Importer + // where RenderMaterial.FromMaterial returns null. + // Could be related to headless RhinoDoc or windowless RhinoCore (unsure the cause) + // CreateBasicMaterial appears to work, so we'll use it as fall back + result = RenderMaterial.CreateBasicMaterial(pbMaterial, null); + } + + return result; } private SpeckleRenderMaterial ConvertRenderMaterialToSpeckle(RenderMaterial renderMaterial) From c04cdacef95ee76c725c602d78c6d411b9415075 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Mon, 1 Sep 2025 16:58:27 +0100 Subject: [PATCH 12/19] chore(fileImport): Jedd/cnx 2444 rename rhino file importer to something else (#1060) * Workaround for rhino materials * update file importer name and slug * fix * Use host app name * delete empty file --- Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs | 3 ++- Importers/Rhino/Speckle.Importers.Rhino/Sender.cs | 1 - Sdk/Speckle.Connectors.Common/HostApplications.cs | 6 ++++-- 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 Importers/Rhino/Speckle.Importers.Rhino/Sender.cs diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs index f666fe76a..88a0f5389 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs @@ -2,6 +2,7 @@ using Microsoft.Extensions.Logging; using Rhino; using Rhino.DocObjects; +using Speckle.Connectors.Common; using Speckle.Connectors.Common.Operations; using Speckle.Converters.Common; using Speckle.Converters.Rhino; @@ -50,7 +51,7 @@ internal sealed class Sender( buildResults.RootObject, projectId, modelId, - "Rhino File Importer", + HostApplications.RhinoImporter.Name, null, account, progress, diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs deleted file mode 100644 index 5f282702b..000000000 --- a/Importers/Rhino/Speckle.Importers.Rhino/Sender.cs +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sdk/Speckle.Connectors.Common/HostApplications.cs b/Sdk/Speckle.Connectors.Common/HostApplications.cs index 5d3f9f205..d2d06fd86 100644 --- a/Sdk/Speckle.Connectors.Common/HostApplications.cs +++ b/Sdk/Speckle.Connectors.Common/HostApplications.cs @@ -40,12 +40,13 @@ public static class HostApplications Navisworks = new("Navisworks", "navisworks"), AdvanceSteel = new("Advance Steel", "advancesteel"), Other = new("Other", "other"), - RhinoImporter = new("RhinoImporter", "rhinoimporter"); + RhinoImporter = new("File Import", "fileImport"); /// /// Gets a slug from a host application name and version. /// /// Application name with its version, e.g., "Rhino 7", "Revit 2024". + /// I hate that this function needs to exist /// Slug string. public static string GetSlugFromHostAppNameAndVersion(string appName) { @@ -89,7 +90,8 @@ public static class HostApplications "python", "net", "navisworks", - "advancesteel" + "advancesteel", + "fileImport", }; foreach (var keyword in keywords) From ff5cdf47df876f106aef93ab95ce8e87fba6f7e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Steinhagen?= Date: Tue, 2 Sep 2025 11:39:36 +0200 Subject: [PATCH 13/19] feat(etabs): add result extraction with UI integration (#1044) * feat: poc hack - just send some results as Base to serve as a discussion point * refactor: column forces extraction class * feat: column forces compound keys * feat: basic check if results available * Revert "Merge remote-tracking branch 'origin/dev' into bjorn/properties-curation-structural-connectors-analysis-results" This reverts commit 4b88fc150f7bba46b739851145c34070f2c03da5, reversing changes made to 855240b71321a1426e20723f475d326f58ccc89a. * Reapply "Merge remote-tracking branch 'origin/dev' into bjorn/properties-curation-structural-connectors-analysis-results" This reverts commit 57f66dea7bbb9154479fcf8df99f80b3d68be13f. * feat (etabs): multi-selectable dropdowns for analysis result (#1019) * integrated ui components * populates the dropdown * format * removed filtering logic * feat(etabs): replace database table extraction with direct Results API for analysis results (#1024) * feat: first steps in linking ui to results extractor * refactor: simple frame force extractor * refactor: flexible extractor * chore: cleanup * refactor: computed property * feat(etabs): add UI integration for dynamic result type selection (#1025) * refactor: linking up results type * fix: send settings * feat(etabs): adds more extractors (#1026) * feat: adds `BaseReact` extractor * refactor: repeating strings under constants * fix: array processing only * feat: adds `PierForce`extractor * feat: adds `SpandrelForce` extractor * feat: adds `StoryDrifts` extractor * fix: missing key in selection shouldn't throw * feat: adds `JointReact` extractor * refactor(etabs): improve load case validation and error handling * fix: case status validation * fix(etabs): correct Zip method syntax for load case validation * refactor(etabs): simplify validation by throwing `SpeckleException`inside `LoadCaseManager` * refactor: add unit information --------- Co-authored-by: Dogukan Karatas <61163577+dogukankaratas@users.noreply.github.com> Co-authored-by: Claire Kuang --- .../Bindings/CsiSharedSelectionBinding.cs | 2 +- .../Bindings/CsiSharedSendBinding.cs | 22 ++- .../Helpers/CsiResultsExtractorFactory.cs | 27 +++ .../Operations/Send/CsiRootObjectBuilder.cs | 53 ++++- .../Send/Settings/ToSpeckleSettingsManager.cs | 73 +++++++ .../ServiceRegistration.cs | 7 + .../Settings/LoadCaseCombinationSetting.cs | 13 ++ .../Settings/ResultTypeSetting.cs | 13 ++ .../Speckle.Connectors.CSiShared.projitems | 6 + .../Utils/AnalysisResultsExtractor.cs | 184 ++++++++++++++++++ .../Utils/LoadCaseHelper.cs | 56 ++++++ .../CsiConversionSettings.cs | 7 +- .../CsiConversionSettingsFactory.cs | 13 +- .../CsiRootToSpeckleConverter.cs | 11 +- .../Extensions/DatabaseTableExtensions.cs | 102 ++++++++-- .../ServiceRegistration.cs | 9 + .../Speckle.Converters.CSiShared.projitems | 9 + .../Helpers/CsiBaseReactResultsExtractor.cs | 89 +++++++++ .../Helpers/CsiFrameForceResultsExtractor.cs | 112 +++++++++++ .../Helpers/CsiFramePropertiesExtractor.cs | 1 - .../Helpers/CsiJointReactResultsExtractor.cs | 115 +++++++++++ .../Helpers/CsiPierForceResultsExtractor.cs | 78 ++++++++ .../CsiSpandrelForceResultsExtractor.cs | 79 ++++++++ .../Helpers/CsiStoryDriftsResultsExtractor.cs | 78 ++++++++ .../Helpers/DatabaseTableExtractor.cs | 46 +++-- .../Helpers/IApplicationResultsExtractor.cs | 36 ++++ .../Helpers/ResultsArrayProcessor.cs | 98 ++++++++++ .../Utils/Constants.cs | 24 +++ .../Utils/ResultsConfiguration.cs | 8 + 29 files changed, 1320 insertions(+), 51 deletions(-) create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/HostApp/Helpers/CsiResultsExtractorFactory.cs create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/Settings/LoadCaseCombinationSetting.cs create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/Settings/ResultTypeSetting.cs create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/Utils/AnalysisResultsExtractor.cs create mode 100644 Connectors/CSi/Speckle.Connectors.CSiShared/Utils/LoadCaseHelper.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiBaseReactResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFrameForceResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiJointReactResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiPierForceResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiSpandrelForceResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiStoryDriftsResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/IApplicationResultsExtractor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/ResultsArrayProcessor.cs create mode 100644 Converters/CSi/Speckle.Converters.CSiShared/Utils/ResultsConfiguration.cs diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSelectionBinding.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSelectionBinding.cs index bb3592e44..7aabc0951 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSelectionBinding.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSelectionBinding.cs @@ -96,7 +96,7 @@ public class CsiSharedSelectionBinding : ISelectionBinding, IDisposable var typeKey = (ModelObjectType)objectType[i]; var typeName = typeKey.ToString(); encodedIds.Add(ObjectIdentifier.Encode(objectType[i], objectName[i])); - typeCounts[typeName] = (typeCounts.TryGetValue(typeName, out var count) ? count : 0) + 1; // NOTE: Cross-framework compatibility (net 48 and net8) + typeCounts[typeName] = (typeCounts.TryGetValue(typeName, out var count) ? count : 0) + 1; } var summary = encodedIds.Count == 0 diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs index 62aa2a2d0..a56e85874 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Bindings/CsiSharedSendBinding.cs @@ -1,6 +1,8 @@ using Microsoft.Extensions.DependencyInjection; using Speckle.Connectors.Common.Cancellation; using Speckle.Connectors.CSiShared.HostApp; +using Speckle.Connectors.CSiShared.Operations.Send.Settings; +using Speckle.Connectors.CSiShared.Settings; using Speckle.Connectors.CSiShared.Utils; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -23,6 +25,7 @@ public sealed class CsiSharedSendBinding : ISendBinding private readonly ICsiApplicationService _csiApplicationService; private readonly ICsiConversionSettingsFactory _csiConversionSettingsFactory; private readonly ISendOperationManagerFactory _sendOperationManagerFactory; + private readonly ToSpeckleSettingsManager _toSpeckleSettingsManager; public CsiSharedSendBinding( IBrowserBridge parent, @@ -30,7 +33,8 @@ public sealed class CsiSharedSendBinding : ISendBinding ICancellationManager cancellationManager, ICsiConversionSettingsFactory csiConversionSettingsFactory, ICsiApplicationService csiApplicationService, - ISendOperationManagerFactory sendOperationManagerFactory + ISendOperationManagerFactory sendOperationManagerFactory, + ToSpeckleSettingsManager toSpeckleSettingsManager ) { _sendFilters = sendFilters.ToList(); @@ -40,11 +44,13 @@ public sealed class CsiSharedSendBinding : ISendBinding _csiConversionSettingsFactory = csiConversionSettingsFactory; _csiApplicationService = csiApplicationService; _sendOperationManagerFactory = sendOperationManagerFactory; + _toSpeckleSettingsManager = toSpeckleSettingsManager; } public List GetSendFilters() => _sendFilters; - public List GetSendSettings() => []; + public List GetSendSettings() => + [new LoadCaseCombinationSetting([], _csiApplicationService.SapModel), new ResultTypeSetting([])]; public async Task Send(string modelCardId) { @@ -52,9 +58,17 @@ public sealed class CsiSharedSendBinding : ISendBinding await manager.Process( Commands, modelCardId, - (sp, _) => + (sp, card) => + { sp.GetRequiredService>() - .Initialize(_csiConversionSettingsFactory.Create(_csiApplicationService.SapModel)), + .Initialize( + _csiConversionSettingsFactory.Create( + _csiApplicationService.SapModel, + _toSpeckleSettingsManager.GetLoadCasesAndCombinations(card), + _toSpeckleSettingsManager.GetResultTypes(card) + ) + ); + }, card => card.SendFilter.NotNull().RefreshObjectIds().Select(DecodeObjectIdentifier).ToList() ); } diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/HostApp/Helpers/CsiResultsExtractorFactory.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/HostApp/Helpers/CsiResultsExtractorFactory.cs new file mode 100644 index 000000000..9faa690f9 --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/HostApp/Helpers/CsiResultsExtractorFactory.cs @@ -0,0 +1,27 @@ +using Microsoft.Extensions.DependencyInjection; +using Speckle.Converters.CSiShared.ToSpeckle.Helpers; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Connectors.CSiShared.HostApp.Helpers; + +public class CsiResultsExtractorFactory +{ + private readonly IServiceProvider _serviceProvider; + + public CsiResultsExtractorFactory(IServiceProvider serviceProvider) + { + _serviceProvider = serviceProvider; + } + + public IApplicationResultsExtractor GetExtractor(string resultsKey) => + resultsKey switch + { + ResultsKey.BASE_REACT => _serviceProvider.GetRequiredService(), + ResultsKey.FRAME_FORCES => _serviceProvider.GetRequiredService(), + ResultsKey.JOINT_REACT => _serviceProvider.GetRequiredService(), + ResultsKey.PIER_FORCES => _serviceProvider.GetRequiredService(), + ResultsKey.SPANDREL_FORCES => _serviceProvider.GetRequiredService(), + ResultsKey.STORY_DRIFTS => _serviceProvider.GetRequiredService(), + _ => throw new InvalidOperationException($"{resultsKey} not accounted for in CsiResultsExtractorFactory") + }; +} diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs index 3b16da9c6..0b7cfc39c 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/CsiRootObjectBuilder.cs @@ -4,9 +4,11 @@ using Speckle.Connectors.Common.Conversion; using Speckle.Connectors.Common.Operations; using Speckle.Connectors.CSiShared.HostApp; using Speckle.Connectors.CSiShared.HostApp.Helpers; +using Speckle.Connectors.CSiShared.Utils; using Speckle.Converters.Common; using Speckle.Converters.CSiShared; using Speckle.Converters.CSiShared.Extensions; +using Speckle.Converters.CSiShared.Utils; using Speckle.Sdk; using Speckle.Sdk.Logging; using Speckle.Sdk.Models; @@ -37,6 +39,7 @@ public class CsiRootObjectBuilder : IRootObjectBuilder private readonly ILogger _logger; private readonly ISdkActivityFactory _activityFactory; private readonly ICsiApplicationService _csiApplicationService; + private readonly AnalysisResultsExtractor _analysisResultsExtractor; public CsiRootObjectBuilder( IRootToSpeckleConverter rootToSpeckleConverter, @@ -46,7 +49,8 @@ public class CsiRootObjectBuilder : IRootObjectBuilder ISectionUnpacker sectionUnpacker, ILogger logger, ISdkActivityFactory activityFactory, - ICsiApplicationService csiApplicationService + ICsiApplicationService csiApplicationService, + AnalysisResultsExtractor analysisResultsExtractor ) { _converterSettings = converterSettings; @@ -57,6 +61,7 @@ public class CsiRootObjectBuilder : IRootObjectBuilder _logger = logger; _activityFactory = activityFactory; _csiApplicationService = csiApplicationService; + _analysisResultsExtractor = analysisResultsExtractor; } /// @@ -112,6 +117,34 @@ public class CsiRootObjectBuilder : IRootObjectBuilder rootObjectCollection[ProxyKeys.SECTION] = _sectionUnpacker.UnpackSections().ToList(); } + // Extract analysis results (if applicable) + // NOTE: objectSelectionSummary used to extract results for objects being published ONLY + // NOTE: etabs is complicated and we can't get specifics from original selection + var objectSelectionSummary = GetObjectSummary(csiObjects); + var selectedCasesAndCombinations = _converterSettings.Current.SelectedLoadCasesAndCombinations; + var requestedResultTypes = _converterSettings.Current.SelectedResultTypes; + + if (selectedCasesAndCombinations?.Count > 0) + { + if (requestedResultTypes == null || requestedResultTypes.Count == 0) + { + throw new SpeckleException( + "No result type input for the requested load cases and combinations. Adjust publish settings." + ); + } + + if (!_csiApplicationService.SapModel.GetModelIsLocked()) + { + throw new SpeckleException("Model unlocked. No access to analysis results."); + } + + var analysisResults = _analysisResultsExtractor.ExtractAnalysisResults( + selectedCasesAndCombinations, + requestedResultTypes, + objectSelectionSummary + ); + rootObjectCollection["analysisResults"] = analysisResults; + } return new RootObjectBuilderResult(rootObjectCollection, results); } @@ -158,4 +191,22 @@ public class CsiRootObjectBuilder : IRootObjectBuilder return new(Status.ERROR, applicationId, sourceType, null, ex); } } + + /// + /// Generates a summary of object types and their associated names from the collection of CSI wrappers. + /// + /// + /// A summary of object names for each object type is needed for getting analysis results of the selected objects only. + /// During object conversion, however, we lose the selection (like a clear selection)(presumably because of other api calls). + /// This has to be recreated since GetSelection() return type is bound by the interface. + /// The LINQ-based implementation is computationally inexpensive as it operates on an already-loaded collection without additional API calls. + /// Also, we don't want to rely on user selection remaining active, what if someone re-publishes using model card cache? + /// + private Dictionary> GetObjectSummary(IReadOnlyList csiObjects) => + csiObjects + .GroupBy(csiObject => csiObject.ObjectType) + .ToDictionary( + group => group.Key, // ModelObjectType (FRAME, JOINT, etc.) + group => group.Select(obj => obj.Name).ToList() // Extract Name from each ICsiWrapper and convert to List + ); } diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs new file mode 100644 index 000000000..5a6230b29 --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Operations/Send/Settings/ToSpeckleSettingsManager.cs @@ -0,0 +1,73 @@ +using Speckle.Connectors.Common.Caching; +using Speckle.Connectors.DUI.Models.Card; +using Speckle.InterfaceGenerator; +using Speckle.Newtonsoft.Json.Linq; +using Speckle.Sdk.Common; + +namespace Speckle.Connectors.CSiShared.Operations.Send.Settings; + +[GenerateAutoInterface] +public class ToSpeckleSettingsManager : IToSpeckleSettingsManager +{ + private readonly ISendConversionCache _sendConversionCache; + private readonly Dictionary?> _loadCaseCombinationCache = new(); + private readonly Dictionary?> _resultTypeCache = new(); + + public ToSpeckleSettingsManager(ISendConversionCache sendConversionCache) + { + _sendConversionCache = sendConversionCache; + } + + public List GetLoadCasesAndCombinations(SenderModelCard modelCard) + { + var setting = modelCard.Settings?.FirstOrDefault(s => s.Id == "loadCasesAndCombinations"); + var returnValue = (setting?.Value as JArray)?.Select(x => x.ToString()).ToList() ?? []; + + if (_loadCaseCombinationCache.TryGetValue(modelCard.ModelCardId.NotNull(), out List? previousValue)) + { + if (!AreListsEqual(previousValue, returnValue)) + { + EvictCacheForModelCard(modelCard); + } + } + _loadCaseCombinationCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + public List GetResultTypes(SenderModelCard modelCard) + { + var setting = modelCard.Settings?.FirstOrDefault(s => s.Id == "resultTypes"); + var returnValue = (setting?.Value as JArray)?.Select(x => x.ToString()).ToList() ?? []; + + if (_resultTypeCache.TryGetValue(modelCard.ModelCardId.NotNull(), out List? previousValue)) + { + if (!AreListsEqual(previousValue, returnValue)) + { + EvictCacheForModelCard(modelCard); + } + } + _resultTypeCache[modelCard.ModelCardId] = returnValue; + return returnValue; + } + + private static bool AreListsEqual(List? list1, List? list2) + { + if (list1 == null && list2 == null) + { + return true; + } + + if (list1 == null || list2 == null) + { + return false; + } + + return list1.Count == list2.Count && list1.OrderBy(x => x).SequenceEqual(list2.OrderBy(x => x)); + } + + private void EvictCacheForModelCard(SenderModelCard modelCard) + { + var objectIds = modelCard.SendFilter != null ? modelCard.SendFilter.NotNull().RefreshObjectIds() : []; + _sendConversionCache.EvictObjects(objectIds); + } +} diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs index 6d7ce7487..7d78a2aad 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/ServiceRegistration.cs @@ -8,6 +8,8 @@ using Speckle.Connectors.CSiShared.Builders; using Speckle.Connectors.CSiShared.Filters; using Speckle.Connectors.CSiShared.HostApp; using Speckle.Connectors.CSiShared.HostApp.Helpers; +using Speckle.Connectors.CSiShared.Operations.Send.Settings; +using Speckle.Connectors.CSiShared.Utils; using Speckle.Connectors.DUI; using Speckle.Connectors.DUI.Bindings; using Speckle.Connectors.DUI.Bridge; @@ -44,13 +46,18 @@ public static class ServiceRegistration services.AddScoped>(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); // add converter caches services.AddScoped(); + // add settings manager + services.AddScoped(); + return services; } } diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/LoadCaseCombinationSetting.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/LoadCaseCombinationSetting.cs new file mode 100644 index 000000000..96601f099 --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/LoadCaseCombinationSetting.cs @@ -0,0 +1,13 @@ +using Speckle.Connectors.CSiShared.Utils; +using Speckle.Connectors.DUI.Settings; + +namespace Speckle.Connectors.CSiShared.Settings; + +public class LoadCaseCombinationSetting(List values, cSapModel sapModel) : ICardSetting +{ + public string? Id { get; set; } = "loadCasesAndCombinations"; + public string? Title { get; set; } = "Load Cases & Combinations"; + public string? Type { get; set; } = "array"; + public object? Value { get; set; } = values; + public List? Enum { get; set; } = LoadCaseHelper.GetLoadCasesAndCombinations(sapModel); +} diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/ResultTypeSetting.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/ResultTypeSetting.cs new file mode 100644 index 000000000..826324a3b --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Settings/ResultTypeSetting.cs @@ -0,0 +1,13 @@ +using Speckle.Connectors.DUI.Settings; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Connectors.CSiShared.Settings; + +public class ResultTypeSetting(List values) : ICardSetting +{ + public string? Id { get; set; } = "resultTypes"; + public string? Title { get; set; } = "Result Type"; + public string? Type { get; set; } = "array"; + public object? Value { get; set; } = values; + public List? Enum { get; set; } = ResultsKey.All.OrderBy(x => x).ToList(); +} diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.projitems b/Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.projitems index ebb05f5e1..f2edc1683 100644 --- a/Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.projitems +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Speckle.Connectors.CSiShared.projitems @@ -18,6 +18,7 @@ + @@ -27,12 +28,17 @@ + + + + + diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/AnalysisResultsExtractor.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/AnalysisResultsExtractor.cs new file mode 100644 index 000000000..56493de7a --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/AnalysisResultsExtractor.cs @@ -0,0 +1,184 @@ +using Speckle.Connectors.CSiShared.HostApp.Helpers; +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared; +using Speckle.Converters.CSiShared.Utils; +using Speckle.Sdk; +using Speckle.Sdk.Models; + +namespace Speckle.Connectors.CSiShared.Utils; + +public class AnalysisResultsExtractor +{ + private readonly IConverterSettingsStore _converterSettingsStore; + private readonly CsiResultsExtractorFactory _resultsExtractorFactory; + + public AnalysisResultsExtractor( + IConverterSettingsStore converterSettingsStore, + CsiResultsExtractorFactory resultsExtractorFactory + ) + { + _converterSettingsStore = converterSettingsStore; + _resultsExtractorFactory = resultsExtractorFactory; + } + + /// + /// Extracts complete analysis results including units retrieval, load case configuration, and results extraction. + /// Assumes inputs have been validated by caller. + /// + public Base ExtractAnalysisResults( + List selectedCasesAndCombinations, + List requestedResultTypes, + Dictionary> objectSelectionSummary + ) + { + // Step 1: get analysis units + var analysisResults = CreateAnalysisResultsWithUnits(); + + // Step 2: configure and validate load cases + ConfigureAndValidateSelectedLoadCases(selectedCasesAndCombinations); + + // Step 3: extract results using clean factory pattern + ExtractResults(requestedResultTypes, objectSelectionSummary, analysisResults); + + return analysisResults; + } + + /// + /// Instantiates a Base object and pre-populates it with the models defined force units. + /// + /// + /// + private Base CreateAnalysisResultsWithUnits() + { + var forceUnit = eForce.NotApplicable; + var lengthUnit = eLength.NotApplicable; + var temperatureUnit = eTemperature.NotApplicable; + + int success = _converterSettingsStore.Current.SapModel.GetDatabaseUnits_2( + ref forceUnit, + ref lengthUnit, + ref temperatureUnit + ); + + if (success != 0) + { + throw new SpeckleException("Failed to retrieve units for analysis results"); + } + + return new Base + { + ["forceUnit"] = forceUnit.ToString(), + ["lengthUnit"] = lengthUnit.ToString(), + ["temperatureUnit"] = temperatureUnit.ToString() + }; + } + + private void ExtractResults( + List requestedResultTypes, + Dictionary> objectSelectionSummary, + Base analysisResults + ) + { + foreach (var resultType in requestedResultTypes) + { + var extractor = _resultsExtractorFactory.GetExtractor(resultType); + objectSelectionSummary.TryGetValue(extractor.TargetObjectType, out var objectNames); + analysisResults[extractor.ResultsKey] = extractor.GetResults(objectNames); + } + } + + /// + /// Responsible for two things. Firstly, we need to setup the results so that only the requested cases and combinations + /// are published. Secondly, we need to ensure that the requested cases and combinations are actually run. + /// + private void ConfigureAndValidateSelectedLoadCases(List selectedLoadCases) + { + // step 1: configure load cases for output + ConfigureSelectedLoadCases(selectedLoadCases); + + // step 2: validate they are complete (throws on failure) + ValidateSelectedCasesAreComplete(selectedLoadCases); + } + + private void ConfigureSelectedLoadCases(List selectedLoadCases) + { + // deselect all load cases and combos + _converterSettingsStore.Current.SapModel.Results.Setup.DeselectAllCasesAndCombosForOutput(); + + // ui presents cases and combinations as a flat list. we need to distinguish if the string is a case or combo + // do this by seeing if the string is within the list of defined cases + // typically defined load cases << defined load combinations, so this approach should be more efficient + int numberOfLoadCases = 0; + string[] loadCaseNames = []; + _converterSettingsStore.Current.SapModel.LoadCases.GetNameList(ref numberOfLoadCases, ref loadCaseNames); + + // set user selected combos to true (i.e. to export) + foreach (var selectedLoadCase in selectedLoadCases) + { + int success = loadCaseNames.Contains(selectedLoadCase) + ? _converterSettingsStore.Current.SapModel.Results.Setup.SetCaseSelectedForOutput(selectedLoadCase) + : _converterSettingsStore.Current.SapModel.Results.Setup.SetComboSelectedForOutput(selectedLoadCase); + + // ui should only present valid options + // `AnalysisResultsExtractor` only fetches load cases and load combinations (not patterns), so this should never throw + if (success != 0) + { + throw new InvalidOperationException($"Failed to set {selectedLoadCase} for output."); + } + } + } + + private void ValidateSelectedCasesAreComplete(List selectedCasesAndCombinations) + { + // get status for all load cases (combinations not included in this API call) + int numberItems = 0; + string[] caseNames = []; + int[] statuses = []; + + int result = _converterSettingsStore.Current.SapModel.Analyze.GetCaseStatus( + ref numberItems, + ref caseNames, + ref statuses + ); + + if (result != 0) + { + throw new SpeckleException("Failed to retrieve load case status from model."); + } + + // build lookup dictionary for load cases only + var caseStatusLookup = caseNames + .Zip(statuses, (name, status) => new { name, status }) + .ToDictionary(x => x.name, x => x.status); + + // separate selected items into cases and combinations + var selectedCases = selectedCasesAndCombinations.Where(item => caseStatusLookup.ContainsKey(item)).ToList(); + var selectedCombinations = selectedCasesAndCombinations.Except(selectedCases).ToList(); + + // validate load cases status + var notFinishedCases = new List(); + foreach (var caseName in selectedCases) + { + int status = caseStatusLookup[caseName]; + if (status != 4) // 1 = Not run, 2 = Could not start, 3 = Not finished, 4 = Finished + { + notFinishedCases.Add($"{caseName}"); + } + } + + // TODO: Validate load combinations status + // for now, assume combinations are valid if we can't validate them + if (selectedCombinations.Count != 0) + { + // combinations validation not implemented - assuming they're valid for now + // it'll get complicated, we can't get the status of a combination, so we need to check the constituent cases + } + + if (notFinishedCases.Count != 0) + { + string errorMessage = + $"Analysis not complete for load cases: {string.Join(", ", notFinishedCases)}. Run analysis first."; + throw new SpeckleException(errorMessage); + } + } +} diff --git a/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/LoadCaseHelper.cs b/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/LoadCaseHelper.cs new file mode 100644 index 000000000..40d893a72 --- /dev/null +++ b/Connectors/CSi/Speckle.Connectors.CSiShared/Utils/LoadCaseHelper.cs @@ -0,0 +1,56 @@ +namespace Speckle.Connectors.CSiShared.Utils; + +public static class LoadCaseHelper +{ + public static List GetLoadCasesAndCombinations(cSapModel sapModel) + { + var loadCasesAndCombos = new List(); + + try + { + // Check if model is loaded to prevent crashes + var modelFilename = sapModel.GetModelFilename(); + if (string.IsNullOrEmpty(modelFilename)) + { + return loadCasesAndCombos; // Return empty list if no model + } + + // Get Load Cases + int numberItems = 0; + string[]? names = null; + + int ret = sapModel.LoadCases.GetNameList(ref numberItems, ref names); + if (ret == 0 && names != null) + { + for (int i = 0; i < numberItems; i++) + { + loadCasesAndCombos.Add(names[i]); + } + } + + // Get Load Combinations + numberItems = 0; + names = null; + ret = sapModel.RespCombo.GetNameList(ref numberItems, ref names); + if (ret == 0 && names != null) + { + for (int i = 0; i < numberItems; i++) + { + loadCasesAndCombos.Add(names[i]); + } + } + } + catch (System.Runtime.InteropServices.COMException) + { + // Return empty list on COM errors to prevent crashes + return new List(); + } + catch (System.InvalidOperationException) + { + // Return empty list on invalid operations to prevent crashes + return new List(); + } + + return loadCasesAndCombos.Distinct().OrderBy(x => x).ToList(); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettings.cs b/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettings.cs index 313c12637..ba1f5ff31 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettings.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettings.cs @@ -1,3 +1,8 @@ namespace Speckle.Converters.CSiShared; -public record CsiConversionSettings(cSapModel SapModel, string SpeckleUnits); +public record CsiConversionSettings( + cSapModel SapModel, + string SpeckleUnits, + List? SelectedLoadCasesAndCombinations = null, + List? SelectedResultTypes = null +); diff --git a/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettingsFactory.cs b/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettingsFactory.cs index bc6b13e3d..e93354e21 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettingsFactory.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/CsiConversionSettingsFactory.cs @@ -11,6 +11,15 @@ public class CsiConversionSettingsFactory( { public CsiConversionSettings Current => settingsStore.Current; - public CsiConversionSettings Create(cSapModel document) => - new(document, unitsConverter.ConvertOrThrow(document.GetPresentUnits())); + public CsiConversionSettings Create( + cSapModel document, + List? selectedLoadCasesAndCombinations = null, + List? selectedResultTypes = null + ) => + new( + document, + unitsConverter.ConvertOrThrow(document.GetPresentUnits()), + selectedLoadCasesAndCombinations ?? [], + selectedResultTypes ?? [] + ); } diff --git a/Converters/CSi/Speckle.Converters.CSiShared/CsiRootToSpeckleConverter.cs b/Converters/CSi/Speckle.Converters.CSiShared/CsiRootToSpeckleConverter.cs index a44a9d863..ca1b8afff 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/CsiRootToSpeckleConverter.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/CsiRootToSpeckleConverter.cs @@ -1,4 +1,3 @@ -using Microsoft.Extensions.Logging; using Speckle.Converters.Common; using Speckle.Converters.Common.Objects; using Speckle.Converters.Common.Registration; @@ -10,18 +9,10 @@ namespace Speckle.Converters.CSiShared; public class CsiRootToSpeckleConverter : IRootToSpeckleConverter { private readonly IConverterManager _toSpeckle; - private readonly IConverterSettingsStore _settingsStore; - private readonly ILogger _logger; - public CsiRootToSpeckleConverter( - IConverterManager toSpeckle, - IConverterSettingsStore settingsStore, - ILogger logger - ) + public CsiRootToSpeckleConverter(IConverterManager toSpeckle) { _toSpeckle = toSpeckle; - _settingsStore = settingsStore; - _logger = logger; } public Base Convert(object target) diff --git a/Converters/CSi/Speckle.Converters.CSiShared/Extensions/DatabaseTableExtensions.cs b/Converters/CSi/Speckle.Converters.CSiShared/Extensions/DatabaseTableExtensions.cs index 3b1569064..9a26e4660 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/Extensions/DatabaseTableExtensions.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/Extensions/DatabaseTableExtensions.cs @@ -22,23 +22,39 @@ namespace Speckle.Converters.CSiShared.Extensions; public record TableData { private readonly string[] _columnNames; // "fieldKeys" in api docs - private readonly string[] _rawTableData; // indicating raw, one-dimensional array of table data (before processing) - private readonly int _rowCount; // Number of rows - private IReadOnlyDictionary>? _processedRows; // Cached data structure + private readonly string[] _rawTableData; // raw, one-dimensional array of table data (before processing) + private readonly int _rowCount; // number of rows private readonly string _indexColumn; // column used to index/identify rows (typically, "UniqueName") + private readonly string[]? _additionalKeyColumns; // optional additional columns for compound keys (e.g. repeating "UniqueName") - public TableData(string[] columnNames, string[] rawTableData, int rowCount, string indexColumn) + private IReadOnlyDictionary>? _processedRows; // cached data structure + + /// + /// Creates a new TableData instance for processing CSI database table data. + /// + /// Array of column names in the table + /// Raw 1D array of table data from CSI API + /// Number of rows in the table + /// Primary column to use as row identifier + /// Optional additional columns to form compound keys for tables with non-unique primary keys + public TableData( + string[] columnNames, + string[] rawTableData, + int rowCount, + string indexColumn, + string[]? additionalKeyColumns = null + ) { _columnNames = columnNames; _rawTableData = rawTableData; _rowCount = rowCount; _indexColumn = indexColumn; + _additionalKeyColumns = additionalKeyColumns; } /// /// Gets table data as a dictionary mapping indexColumn (typically "UniqueName" to _processedRows). - /// Each row is itself a dictionary mapping column names to their values. - /// Computed once on first access and cached. + /// Each row is itself a dictionary mapping column names to their values. Computed once on first access and cached. /// /// /// Motivation: @@ -47,6 +63,11 @@ public record TableData /// Each row keyed by its "UniqueName" value /// Each row value is itself a dictionary of field keys to values /// + /// When additionalKeyColumns are provided, keys are formed by combining values from all key columns + /// using a pipe separator (|). + /// + /// If additionalKeyColumns are not provided and the table has multiple rows with the same primary key, + /// only the last row for each key will be preserved, and a warning will be logged. /// public IReadOnlyDictionary> Rows { @@ -67,8 +88,26 @@ public record TableData ); } + // Get indices for additional key columns if provided + int[] additionalKeyIndices = []; + if (_additionalKeyColumns != null && _additionalKeyColumns.Length > 0) + { + additionalKeyIndices = new int[_additionalKeyColumns.Length]; + for (int i = 0; i < _additionalKeyColumns.Length; i++) + { + additionalKeyIndices[i] = Array.IndexOf(_columnNames, _additionalKeyColumns[i]); + if (additionalKeyIndices[i] == -1) + { + throw new InvalidOperationException( + $"Additional key column '{_additionalKeyColumns[i]}' not found in the database." + ); + } + } + } + // Pre-size dictionary with known capacity var rows = new Dictionary>(_rowCount); + var keysSeen = new HashSet(); // Track keys to detect duplicates // Create a field index lookup to avoid repeated Array.IndexOf calls var fieldIndexLookup = new Dictionary(columnsPerRow); @@ -78,20 +117,56 @@ public record TableData } // Process each row + bool hasMultipleRowsPerKey = false; for (int rowStart = 0; rowStart < _rawTableData.Length; rowStart += columnsPerRow) { - var keyValue = _rawTableData[rowStart + indexColumnIndex]; + // Get the primary key value + var primaryKeyValue = _rawTableData[rowStart + indexColumnIndex]; - // Pre-size the row dictionary + // Construct the full key (either just primary key or compound key) + string fullKey; + if (additionalKeyIndices.Length > 0) + { + // Build compound key with additional columns + var keyParts = new string[1 + additionalKeyIndices.Length]; + keyParts[0] = primaryKeyValue; + + for (int i = 0; i < additionalKeyIndices.Length; i++) + { + keyParts[i + 1] = _rawTableData[rowStart + additionalKeyIndices[i]]; + } + + fullKey = string.Join("|", keyParts); + } + else + { + fullKey = primaryKeyValue; + } + + // Check if this key has been seen before (only matters if no additionalKeyColumns) + if (additionalKeyIndices.Length == 0 && keysSeen.Contains(primaryKeyValue)) + { + hasMultipleRowsPerKey = true; + } + keysSeen.Add(primaryKeyValue); + + // Create row dictionary var row = new Dictionary(columnsPerRow, StringComparer.Ordinal); - - // Use index lookup instead of repeated string comparisons foreach (var kvp in fieldIndexLookup) { row[kvp.Key] = _rawTableData[rowStart + kvp.Value]; } - rows[keyValue] = row; + rows[fullKey] = row; + } + + if (hasMultipleRowsPerKey && additionalKeyIndices.Length == 0) + { + System.Diagnostics.Debug.WriteLine( + $"WARNING: Table has multiple rows with the same primary key '{_indexColumn}'. " + + "Only the last row for each key is preserved. Consider specifying additionalKeyColumns " + + "when calling GetTableData to create compound keys." + ); } _processedRows = rows; @@ -126,4 +201,9 @@ public record TableData value = string.Empty; return false; } + + /// + /// Indicates whether this TableData was created with compound keys (additionalKeyColumns). + /// + public bool HasCompoundKeys => _additionalKeyColumns != null && _additionalKeyColumns.Length > 0; } diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ServiceRegistration.cs b/Converters/CSi/Speckle.Converters.CSiShared/ServiceRegistration.cs index b9a07b34c..53366cabd 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/ServiceRegistration.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/ServiceRegistration.cs @@ -24,6 +24,15 @@ public static class ServiceRegistration serviceCollection.AddScoped(); serviceCollection.AddScoped(); + // Register results extractors + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + serviceCollection.AddScoped(); + // Register connector caches serviceCollection.AddScoped(); diff --git a/Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.projitems b/Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.projitems index c8804b8fa..d420e0049 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.projitems +++ b/Converters/CSi/Speckle.Converters.CSiShared/Speckle.Converters.CSiShared.projitems @@ -18,11 +18,19 @@ + + + + + + + + @@ -33,5 +41,6 @@ + \ No newline at end of file diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiBaseReactResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiBaseReactResultsExtractor.cs new file mode 100644 index 000000000..edaadb521 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiBaseReactResultsExtractor.cs @@ -0,0 +1,89 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public class CsiBaseReactResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + + public string ResultsKey => "baseReact"; + public ModelObjectType TargetObjectType => ModelObjectType.JOINT; + public ResultsConfiguration Configuration { get; } = + new(["LoadCase", "Wrap:StepNum"], ["FX", "FY", "FZ", "MX", "ParamMy", "MZ"]); + + public CsiBaseReactResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + // NOTE: since these are global reactions, they're independent of the user selection, therefore discarded + public Dictionary GetResults(IEnumerable? _) + { + // Step 1: define api variables + int numberResults = 0; + string[] loadCase = [], + stepType = []; + double[] stepNum = [], + fx = [], + fy = [], + fz = [], + mx = [], + paramMy = [], + mz = []; + double gx = 0, + gy = 0, + gz = 0; + + // Step 2: api call + int success = _settingsStore.Current.SapModel.Results.BaseReact( + ref numberResults, + ref loadCase, + ref stepType, + ref stepNum, + ref fx, + ref fy, + ref fz, + ref mx, + ref paramMy, + ref mz, + ref gx, + ref gy, + ref gz + ); + + if (success != 0 || numberResults == 0) + { + throw new InvalidOperationException("Base reaction extraction failed."); // shouldn't fail silently + } + + // Step 3: organise arrays for dictionary processor + var rawArrays = new Dictionary + { + ["LoadCase"] = loadCase, + ["StepNum"] = stepNum, + ["FX"] = fx, + ["FY"] = fy, + ["FZ"] = fz, + ["MX"] = mx, + ["ParamMy"] = paramMy, + ["MZ"] = mz + }; + + // Step 4: return sorted and processed dictionary + var resultsDictionary = _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + + // Step 5: add the extra centroid information + resultsDictionary["GX"] = gx; + resultsDictionary["GY"] = gy; + resultsDictionary["GZ"] = gz; + + // Step 6: return + return resultsDictionary; + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFrameForceResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFrameForceResultsExtractor.cs new file mode 100644 index 000000000..31233fcc6 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFrameForceResultsExtractor.cs @@ -0,0 +1,112 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public sealed class CsiFrameForceResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + + public string ResultsKey => "frameForces"; + public ModelObjectType TargetObjectType => ModelObjectType.FRAME; + + public ResultsConfiguration Configuration { get; } = + new(["Elm", "LoadCase", "Wrap:ElmSta", "Wrap:StepNum"], ["P", "V2", "V3", "T", "M2", "M3"]); + + public CsiFrameForceResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + public Dictionary GetResults(IEnumerable? objectNames = null) + { + // Step 1: validate input + var frameNames = objectNames?.ToList(); + if (frameNames is null || frameNames.Count == 0) + { + throw new InvalidOperationException("Frame(s) are required in the selection for results extraction"); + } + + // Step 2: single dictionary to accumulate all results + var allArrays = new Dictionary> + { + ["Elm"] = [], + ["ElmSta"] = [], + ["LoadCase"] = [], + ["StepNum"] = [], + ["P"] = [], + ["V2"] = [], + ["V3"] = [], + ["T"] = [], + ["M2"] = [], + ["M3"] = [] + }; + + // Step 3: define api variables + int numberResults = 0; + string[] obj = [], + elm = [], + loadCase = [], + stepType = []; + double[] objSta = [], + elmSta = [], + stepNum = [], + p = [], + v2 = [], + v3 = [], + t = [], + m2 = [], + m3 = []; + + // Step 4: iterate through objectNames and get frame results for those + foreach (string frameName in frameNames) + { + int success = _settingsStore.Current.SapModel.Results.FrameForce( + frameName, + eItemTypeElm.ObjectElm, + ref numberResults, + ref obj, + ref objSta, + ref elm, + ref elmSta, + ref loadCase, + ref stepType, + ref stepNum, + ref p, + ref v2, + ref v3, + ref t, + ref m2, + ref m3 + ); + + if (success != 0) + { + throw new InvalidOperationException($"Frame force extraction failed for frame {frameName}."); // shouldn't fail silently + } + + // accumulate results + allArrays["Elm"].AddRange(elm.Cast()); + allArrays["ElmSta"].AddRange(elmSta.Cast()); + allArrays["LoadCase"].AddRange(loadCase.Cast()); + allArrays["StepNum"].AddRange(stepNum.Cast()); + allArrays["P"].AddRange(p.Cast()); + allArrays["V2"].AddRange(v2.Cast()); + allArrays["V3"].AddRange(v3.Cast()); + allArrays["T"].AddRange(t.Cast()); + allArrays["M2"].AddRange(m2.Cast()); + allArrays["M3"].AddRange(m3.Cast()); + } + + // Step 5: organise arrays for dictionary processor + var rawArrays = allArrays.ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value.ToArray()); + + // Step 6: return sorted and processed dictionary + return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFramePropertiesExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFramePropertiesExtractor.cs index ba3093b69..48378e9d5 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFramePropertiesExtractor.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiFramePropertiesExtractor.cs @@ -26,7 +26,6 @@ namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; public sealed class CsiFramePropertiesExtractor { private readonly IConverterSettingsStore _settingsStore; - private readonly CsiToSpeckleCacheSingleton _csiToSpeckleCacheSingleton; private static readonly string[] s_releaseKeys = diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiJointReactResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiJointReactResultsExtractor.cs new file mode 100644 index 000000000..89fe84d9f --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiJointReactResultsExtractor.cs @@ -0,0 +1,115 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public class CsiJointReactResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + + public string ResultsKey => "jointReact"; + public ModelObjectType TargetObjectType => ModelObjectType.JOINT; + public ResultsConfiguration Configuration { get; } = + new(["Elm", "LoadCase", "Wrap:StepNum"], ["F1", "F2", "F3", "M1", "M2", "M3"]); + + public CsiJointReactResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + public Dictionary GetResults(IEnumerable? objectNames = null) + { + // Step 1: validate input + var jointNames = objectNames?.ToList(); + if (jointNames is null || jointNames.Count == 0) + { + throw new InvalidOperationException("Joint(s) are required in the selection for results extraction"); + } + + // Step 2: single dictionary to accumulate all results + var allArrays = new Dictionary> + { + ["Elm"] = [], + ["LoadCase"] = [], + ["StepNum"] = [], + ["F1"] = [], + ["F2"] = [], + ["F3"] = [], + ["M1"] = [], + ["M2"] = [], + ["M3"] = [] + }; + + // Step 3: define api variables + int numberResults = 0; + string[] obj = [], + elm = [], + loadCase = [], + stepType = []; + double[] stepNum = [], + f1 = [], + f2 = [], + f3 = [], + m1 = [], + m2 = [], + m3 = []; + + // Step 4: iterate through objectNames and get joint reaction results for those that are assigned restraints / springs and grounded + foreach (string jointName in jointNames) + { + // this only works if the joint has restraints or springs assignments, so check if it's a valid query first + bool[] restraints = []; + string springAssignment = string.Empty; + _settingsStore.Current.SapModel.PointObj.GetRestraint(jointName, ref restraints); + _settingsStore.Current.SapModel.PointObj.GetSpringAssignment(jointName, ref springAssignment); + if (restraints.All(r => !r) && string.IsNullOrEmpty(springAssignment)) + { + continue; // skip this joint - it has neither restraints nor springs + } + + int success = _settingsStore.Current.SapModel.Results.JointReact( + jointName, + eItemTypeElm.ObjectElm, + ref numberResults, + ref obj, + ref elm, + ref loadCase, + ref stepType, + ref stepNum, + ref f1, + ref f2, + ref f3, + ref m1, + ref m2, + ref m3 + ); + + if (success != 0) + { + throw new InvalidOperationException($"Joint force extraction failed for frame {jointName}."); // shouldn't fail silently + } + + // accumulate results + allArrays["Elm"].AddRange(elm.Cast()); + allArrays["LoadCase"].AddRange(loadCase.Cast()); + allArrays["StepNum"].AddRange(stepNum.Cast()); + allArrays["F1"].AddRange(f1.Cast()); + allArrays["F2"].AddRange(f2.Cast()); + allArrays["F3"].AddRange(f3.Cast()); + allArrays["M1"].AddRange(m1.Cast()); + allArrays["M2"].AddRange(m2.Cast()); + allArrays["M3"].AddRange(m3.Cast()); + } + + // Step 5: organise arrays for dictionary processor + var rawArrays = allArrays.ToDictionary(kvp => kvp.Key, kvp => (object)kvp.Value.ToArray()); + + // Step 6: return sorted and processed dictionary + return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiPierForceResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiPierForceResultsExtractor.cs new file mode 100644 index 000000000..99b77cd7b --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiPierForceResultsExtractor.cs @@ -0,0 +1,78 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public class CsiPierForceResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + public string ResultsKey => "pierForces"; + public ModelObjectType TargetObjectType => ModelObjectType.NONE; + public ResultsConfiguration Configuration { get; } = + new(["PierName", "StoryName", "LoadCase", "Wrap:Location"], ["P", "V2", "V3", "T", "M2", "M3"]); + + public CsiPierForceResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + // NOTE: since these pier assignments aren't object specific, they're independent of the user selection, therefore discarded + public Dictionary GetResults(IEnumerable? _) + { + // Step 1: define api variables + int numberResults = 0; + string[] storyName = [], + pierName = [], + loadCase = [], + location = []; + double[] p = [], + v2 = [], + v3 = [], + t = [], + m2 = [], + m3 = []; + + // Step 2: api call + int success = _settingsStore.Current.SapModel.Results.PierForce( + ref numberResults, + ref storyName, + ref pierName, + ref loadCase, + ref location, + ref p, + ref v2, + ref v3, + ref t, + ref m2, + ref m3 + ); + + if (success != 0 || numberResults == 0) + { + throw new InvalidOperationException("Pier force extraction failed."); + } + + // Step 3: organise arrays for dictionary processor + var rawArrays = new Dictionary + { + ["StoryName"] = storyName, + ["PierName"] = pierName, + ["LoadCase"] = loadCase, + ["Location"] = location, + ["P"] = p, + ["V2"] = v2, + ["V3"] = v3, + ["T"] = t, + ["M2"] = m2, + ["M3"] = m3 + }; + + // Step 4: return sorted and processed dictionary + return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiSpandrelForceResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiSpandrelForceResultsExtractor.cs new file mode 100644 index 000000000..5fa41d804 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiSpandrelForceResultsExtractor.cs @@ -0,0 +1,79 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public class CsiSpandrelForceResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + public string ResultsKey => "spandrelForces"; + public ModelObjectType TargetObjectType => ModelObjectType.NONE; + + public ResultsConfiguration Configuration { get; } = + new(["SpandrelName", "StoryName", "LoadCase", "Wrap:Location"], ["P", "V2", "V3", "T", "M2", "M3"]); + + public CsiSpandrelForceResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + // NOTE: since these spandrel assignments aren't object specific, they're independent of the user selection, therefore discarded + public Dictionary GetResults(IEnumerable? _) + { + // Step 1: define api variables + int numberResults = 0; + string[] storyName = [], + spandrelName = [], + loadCase = [], + location = []; + double[] p = [], + v2 = [], + v3 = [], + t = [], + m2 = [], + m3 = []; + + // Step 2: api call + int success = _settingsStore.Current.SapModel.Results.SpandrelForce( + ref numberResults, + ref storyName, + ref spandrelName, + ref loadCase, + ref location, + ref p, + ref v2, + ref v3, + ref t, + ref m2, + ref m3 + ); + + if (success != 0 || numberResults == 0) + { + throw new InvalidOperationException("Spandrel force extraction failed."); // shouldn't fail silently + } + + // Step 3: organise arrays for dictionary processor + var rawArrays = new Dictionary + { + ["StoryName"] = storyName, + ["SpandrelName"] = spandrelName, + ["LoadCase"] = loadCase, + ["Location"] = location, + ["P"] = p, + ["V2"] = v2, + ["V3"] = v3, + ["T"] = t, + ["M2"] = m2, + ["M3"] = m3 + }; + + // Step 4: return sorted and processed dictionary + return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiStoryDriftsResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiStoryDriftsResultsExtractor.cs new file mode 100644 index 000000000..28096c97f --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/CsiStoryDriftsResultsExtractor.cs @@ -0,0 +1,78 @@ +using Speckle.Converters.Common; +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +public class CsiStoryDriftsResultsExtractor : IApplicationResultsExtractor +{ + private readonly IConverterSettingsStore _settingsStore; + private readonly ResultsArrayProcessor _resultsArrayProcessor; + public string ResultsKey => "storyDrifts"; + public ModelObjectType TargetObjectType => ModelObjectType.NONE; + + public ResultsConfiguration Configuration { get; } = + new(["Story", "LoadCase", "Wrap:StepNum"], ["Direction", "Drift", "Label", "X", "Y", "Z"]); + + public CsiStoryDriftsResultsExtractor( + IConverterSettingsStore settingsStore, + ResultsArrayProcessor resultsArrayProcessor + ) + { + _settingsStore = settingsStore; + _resultsArrayProcessor = resultsArrayProcessor; + } + + // NOTE: these aren't object specific, they're independent of the user selection, therefore discarded + public Dictionary GetResults(IEnumerable? objectNames = null) + { + // Step 1: define api variables + int numberResults = 0; + string[] story = [], + loadCase = [], + stepType = [], + direction = [], + label = []; + double[] stepNum = [], + drift = [], + x = [], + y = [], + z = []; + + // Step 2: api call + int success = _settingsStore.Current.SapModel.Results.StoryDrifts( + ref numberResults, + ref story, + ref loadCase, + ref stepType, + ref stepNum, + ref direction, + ref drift, + ref label, + ref x, + ref y, + ref z + ); + + if (success != 0 || numberResults == 0) + { + throw new InvalidOperationException("Story drifts extraction failed."); // shouldn't fail silently + } + + // Step 3: organise arrays for dictionary processor + var rawArrays = new Dictionary + { + ["Story"] = story, + ["LoadCase"] = loadCase, + ["StepNum"] = stepNum, + ["Direction"] = direction, + ["Drift"] = drift, + ["Label"] = label, + ["X"] = x, + ["Y"] = y, + ["Z"] = z + }; + + // Step 4: return sorted and processed dictionary + return _resultsArrayProcessor.ProcessArrays(rawArrays, Configuration); + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/DatabaseTableExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/DatabaseTableExtractor.cs index b3580943a..42b2958c8 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/DatabaseTableExtractor.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/DatabaseTableExtractor.cs @@ -24,42 +24,48 @@ public class DatabaseTableExtractor /// /// Uses the cDatabaseTables.GetTableForDisplayArray() to request data for a specified table name. - /// Processes the one-dimensional array return with the - /// extension for improved workability/reliability. /// - /// String identifying the table to fetch. This typically matches the UI. - /// Key used to organize and (later) lookup specific rows of data. Optional argument, default is "UniqueName" - /// Optional list of specific fields to fetch. If null or empty, all fields will be returned. Ask Björn about how to determine these strings. + /// String identifying the table to fetch + /// Primary column to use as row identifier (default "UniqueName") + /// Optional specific fields to fetch + /// Optional additional columns to form compound keys for tables with non-unique primary keys /// TableData containing the requested fields and records - public TableData GetTableData(string tableName, string? indexingColumn = null, string[]? requestedColumns = null) + public TableData GetTableData( + string tableName, + string? indexingColumn = null, + string[]? requestedColumns = null, + string[]? additionalKeyColumns = null + ) { + // Create a cache key that includes additionalKeyColumns if provided string tableKeyField = indexingColumn ?? DEFAULT_KEY_FIELD; // most queries will use "UniqueName" - string cacheKey = $"{tableName}_{tableKeyField}"; + string additionalKeysString = additionalKeyColumns != null ? string.Join(",", additionalKeyColumns) : ""; + string cacheKey = $"{tableName}_{tableKeyField}_{additionalKeysString}"; + if (_tableCache.TryGetValue(cacheKey, out var cachedData)) { return cachedData; } - var tableData = FetchTableData(tableName, tableKeyField, requestedColumns); + var tableData = FetchTableData(tableName, tableKeyField, requestedColumns, additionalKeyColumns); _tableCache[cacheKey] = tableData; return tableData; } - public void RefreshTable(string tableKey, string? keyField = null) => - _tableCache.Remove($"{tableKey}_{keyField ?? DEFAULT_KEY_FIELD}"); - - public void ClearCache() => _tableCache.Clear(); - - private TableData FetchTableData(string tableName, string indexingColumn, string[]? requestedColumns = null) + private TableData FetchTableData( + string tableName, + string indexingColumn, + string[]? requestedColumns = null, + string[]? additionalKeyColumns = null + ) { - string[] requestedFields = requestedColumns ?? []; // only fetch the keys needed (memory reduction potential) + string[] requestedFields = requestedColumns ?? []; // only fetch the keys needed string[] fieldsKeysIncluded = []; - string[] tableData = []; // one-dimensional gross mess + string[] tableData = []; // one-dimensional array int tableVersion = 0; int numberOfRecords = 0; - // ensure indexingColumn is included in the requested fields - // if user forgets to include indexingColumn in requestedColumns => problem when it comes to creating dictionaries! + // Ensure indexingColumn is included if (requestedFields != Array.Empty() && !requestedFields.Contains(indexingColumn)) { requestedFields = [.. requestedFields, indexingColumn]; @@ -68,7 +74,7 @@ public class DatabaseTableExtractor var result = _settingsStore.Current.SapModel.DatabaseTables.GetTableForDisplayArray( tableName, ref requestedFields, - string.Empty, // empty means all objects (not group-specific) + string.Empty, // empty means all objects ref tableVersion, ref fieldsKeysIncluded, ref numberOfRecords, @@ -82,6 +88,6 @@ public class DatabaseTableExtractor ); } - return new TableData(fieldsKeysIncluded, tableData, numberOfRecords, indexingColumn); + return new TableData(fieldsKeysIncluded, tableData, numberOfRecords, indexingColumn, additionalKeyColumns); } } diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/IApplicationResultsExtractor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/IApplicationResultsExtractor.cs new file mode 100644 index 000000000..e1f2be577 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/IApplicationResultsExtractor.cs @@ -0,0 +1,36 @@ +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +/// +/// Implementations handle specific result types (frame forces, joint reactions, etc.) and +/// transform raw API data into hierarchical dictionary structures. +/// +public interface IApplicationResultsExtractor +{ + /// + /// Gets the key name used to store these results in the root commit object. + /// + /// "FrameForces", "JointReactions", "BaseReactions" + string ResultsKey { get; } + + /// + /// Gets the type of CSI model objects that this extractor operates on. + /// Used to automatically resolve the correct object names from the selection summary. + /// + ModelObjectType TargetObjectType { get; } + + /// + /// Gets the configuration defining how to process raw API arrays into hierarchical structure. + /// Specifies grouping hierarchy and result value keys. + /// + ResultsConfiguration Configuration { get; } + + /// + /// Extracts analysis results for the specified objects and processes them into hierarchical format. + /// + /// + /// Names of objects to extract results for. Some extractors don't extract object specific results, hence null. + /// + Dictionary GetResults(IEnumerable? objectNames = null); +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/ResultsArrayProcessor.cs b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/ResultsArrayProcessor.cs new file mode 100644 index 000000000..9817be4f5 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/ToSpeckle/Helpers/ResultsArrayProcessor.cs @@ -0,0 +1,98 @@ +using Speckle.Converters.CSiShared.Utils; + +namespace Speckle.Converters.CSiShared.ToSpeckle.Helpers; + +/// +/// Processes parallel arrays from analysis results into hierarchical dictionary structures. +/// Uses configuration to determine grouping hierarchy and result values. +/// +public class ResultsArrayProcessor +{ + /// + /// Transforms parallel arrays into nested dictionary hierarchy based on configuration. + /// + /// Dictionary of array names to their values (all arrays must have same length) + /// Configuration defining grouping keys and result keys + /// Nested dictionary following GroupingKeys hierarchy with ResultKeys as leaf values + public Dictionary ProcessArrays(Dictionary rawArrays, ResultsConfiguration config) + { + // get array length from first array (all should be same length) + var firstArray = rawArrays.Values.FirstOrDefault(); + if (firstArray is not Array array || array.Length == 0) + { + return new Dictionary(); + } + + int arrayLength = array.Length; + + // create indices for all rows + var indices = Enumerable.Range(0, arrayLength); + + // build the hierarchy recursively + return BuildHierarchy(indices, rawArrays, config.GroupingKeys, config.ResultKeys, 0); + } + + private Dictionary BuildHierarchy( + IEnumerable indices, + Dictionary rawArrays, + IReadOnlyList groupingKeys, + IReadOnlyList resultKeys, + int level + ) + { + // Base case: we've processed all grouping levels, create result values + if (level >= groupingKeys.Count) + { + var results = new Dictionary(); + var firstIndex = indices.First(); + + foreach (var resultKey in resultKeys) + { + if (rawArrays.TryGetValue(resultKey, out var array) && array is Array resultArray) + { + var value = resultArray.GetValue(firstIndex); + if (value != null) + { + results[resultKey] = value; + } + } + } + + return results; + } + + // Get current grouping key + var currentKey = groupingKeys[level]; + string actualKey; + string? wrapperName = null; + + // Check for "Wrap:" prefix + if (currentKey.StartsWith("Wrap:")) + { + actualKey = currentKey["Wrap:".Length..]; + wrapperName = actualKey; // Use the actual key name as wrapper + } + else + { + actualKey = currentKey; + } + + if (!rawArrays.TryGetValue(actualKey, out var groupingArray) || groupingArray is not Array currentArray) + { + throw new ArgumentException($"Grouping key '{actualKey}' not found in raw arrays"); + } + + // Group indices by the current key's values + var grouped = indices + .GroupBy(i => currentArray.GetValue(i)?.ToString() ?? string.Empty) + .ToDictionary(g => g.Key, g => (object)BuildHierarchy(g, rawArrays, groupingKeys, resultKeys, level + 1)); + + // Wrap if needed + if (wrapperName != null) + { + return new Dictionary { [wrapperName] = grouped }; + } + + return grouped; + } +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/Utils/Constants.cs b/Converters/CSi/Speckle.Converters.CSiShared/Utils/Constants.cs index 49995873a..87a916ae7 100644 --- a/Converters/CSi/Speckle.Converters.CSiShared/Utils/Constants.cs +++ b/Converters/CSi/Speckle.Converters.CSiShared/Utils/Constants.cs @@ -52,3 +52,27 @@ public static class CommonObjectProperty public const string ADVANCED = "Advanced"; public const string DESIGN_ORIENTATION = "Design Orientation"; } + +/// +/// These strings are repeated when defining UI dropdown list `ResultTypeSetting.cs` as well as `CsiResultsExtractorFactory.cs`/> +/// +public static class ResultsKey +{ + public const string BASE_REACT = "Base Reactions"; + public const string FRAME_FORCES = "Frame Forces"; + public const string JOINT_REACT = "Joint Reactions"; + public const string PIER_FORCES = "Pier Forces"; + public const string SPANDREL_FORCES = "Spandrel Forces"; + public const string STORY_DRIFTS = "Story Drifts"; + + // Used by ResultTypeSetting to get all defined result keys + public static readonly string[] All = + [ + BASE_REACT, + FRAME_FORCES, + JOINT_REACT, + PIER_FORCES, + SPANDREL_FORCES, + STORY_DRIFTS + ]; +} diff --git a/Converters/CSi/Speckle.Converters.CSiShared/Utils/ResultsConfiguration.cs b/Converters/CSi/Speckle.Converters.CSiShared/Utils/ResultsConfiguration.cs new file mode 100644 index 000000000..22201f5f0 --- /dev/null +++ b/Converters/CSi/Speckle.Converters.CSiShared/Utils/ResultsConfiguration.cs @@ -0,0 +1,8 @@ +namespace Speckle.Converters.CSiShared.Utils; + +/// +/// Configuration used by all IResultsExtractor to sort results arrays into a hierarchical structure. +/// +/// Keys defining the hierarchy levels for grouping results, in order from top-level to bottom-level +/// Keys for the final result values stored at the leaf level of the hierarchy +public record ResultsConfiguration(IReadOnlyList GroupingKeys, IReadOnlyList ResultKeys); From fe3d4e554440d38015d3c510e28fb4e2dd708bb9 Mon Sep 17 00:00:00 2001 From: Claire Kuang Date: Tue, 2 Sep 2025 15:56:56 +0100 Subject: [PATCH 14/19] feat(rhino): adds user dictionary to object props (#1046) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * adds user dicts to rhino * defaults to string value --------- Co-authored-by: Björn --- .../HostApp/Properties/PropertiesExtractor.cs | 73 +++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) diff --git a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs index e5d07080a..9d86dc161 100644 --- a/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs +++ b/Connectors/Rhino/Speckle.Connectors.RhinoShared/HostApp/Properties/PropertiesExtractor.cs @@ -1,4 +1,5 @@ using Rhino; +using Rhino.Collections; using Rhino.DocObjects; using Speckle.Connectors.Rhino.Mapper.Revit; using Speckle.Sdk; @@ -19,7 +20,67 @@ public class PropertiesExtractor public Dictionary GetProperties(RhinoObject rhObject) { - Dictionary properties = new(); + Dictionary properties = GetUserStrings(rhObject); + + Dictionary userDict = GetUserDict(rhObject); + if (userDict.Count > 0) + { + properties["User Dictionary"] = userDict; + } + + return properties; + } + + private Dictionary GetUserDict(RhinoObject rhObject) + { + Dictionary userDict = new(); + if (rhObject.Attributes.UserDictionary != null && rhObject.Attributes.UserDictionary.Count > 0) + { + ParseArchivableToDictionary(userDict, rhObject.Attributes.UserDictionary); + } + + return userDict; + } + + /// + /// Copies an ArchivableDictionary to a Dictionary + /// + /// + /// + private void ParseArchivableToDictionary(Dictionary target, ArchivableDictionary dict) + { + foreach (var key in dict.Keys) + { + var obj = dict[key]; + switch (obj) + { + case ArchivableDictionary o: + Dictionary nested = new(); + ParseArchivableToDictionary(nested, o); + target[key] = nested; + continue; + + case double: + case bool: + case int: + case string: + case IEnumerable: + case IEnumerable: + case IEnumerable: + case IEnumerable: + target[key] = obj; + continue; + + default: + target[key] = obj.ToString(); + continue; + } + } + } + + private Dictionary GetUserStrings(RhinoObject rhObject) + { + Dictionary userStringDict = new(); var userStrings = rhObject.Attributes.GetUserStrings(); foreach (string? key in userStrings.AllKeys) { @@ -38,7 +99,7 @@ public class PropertiesExtractor if (userStrings[key]?.StartsWith("%<") ?? false) { var value = RhinoApp.ParseTextField(userStrings[key], rhObject, null); - properties[key] = value; + userStringDict[key] = value; continue; } } @@ -47,19 +108,19 @@ public class PropertiesExtractor // Shh. We can fail silently here - it's not even worth logging. I expect users will complain properties are missing. } - properties[key] = userStrings[key]; + userStringDict[key] = userStrings[key]; } // NOTE: if no mapping was found on the object, check layer(s) recursively - if (!properties.ContainsKey(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) + if (!userStringDict.ContainsKey(RevitMappingConstants.CATEGORY_USER_STRING_KEY)) { var layerMapping = _revitMappingResolver.SearchLayerHierarchyForMapping(rhObject); if (!string.IsNullOrEmpty(layerMapping)) { - properties[RevitMappingConstants.CATEGORY_USER_STRING_KEY] = layerMapping; + userStringDict[RevitMappingConstants.CATEGORY_USER_STRING_KEY] = layerMapping; } } - return properties; + return userStringDict; } } From 20bc675ad2ec1428dbf834650993eb5fb7d66792 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Tue, 2 Sep 2025 16:54:33 +0100 Subject: [PATCH 15/19] Disable 3dm config due to bug in OpenHeadless (#1062) --- .../Internal/FileTypeConfig/Rhino3dmConfig.cs | 6 ++++++ .../Speckle.Importers.Rhino/Internal/ImporterInstance.cs | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs index c5189936b..54e78b756 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/Rhino3dmConfig.cs @@ -8,8 +8,14 @@ namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; /// public sealed class Rhino3dmConfig : IFileTypeConfig { + [Obsolete("Bugged, don't use until fixed")] public RhinoDoc OpenInHeadlessDocument(string filePath) { + // There is a bug in `OpenHeadless` + // that creates UI dismissable popups about missing font warnings + // see https://discourse.mcneel.com/t/rhino-inside-headless-displays-popup-about-missing-fonts/209173/4 + // For this reason, this function should not be used until it's fixed + RhinoDoc? doc = RhinoDoc.OpenHeadless(filePath); if (doc is null) { diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs index f2ae6388b..da8f33634 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs @@ -74,7 +74,7 @@ internal sealed class ImporterInstance(Sender sender, ILogger { ".skp" => new SketchupConfig(), ".obj" => new ObjConfig(), - ".3dm" => new Rhino3dmConfig(), + // ".3dm" => new Rhino3dmConfig(), ".fbx" => new FbxConfig(), _ => new DefaultConfig(), }; From 083548b33cad9c0f98b12d834d2105f0d3d15446 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:31:28 +0100 Subject: [PATCH 16/19] Add metrics to rhino Importer (#1063) --- .../Domain/FileimportPayload.cs | 2 ++ .../JobHandlers/IPCModels.cs | 7 +++-- .../JobHandlers/RhinoJobHandler.cs | 7 ++++- .../Internal/IPCModels.cs | 7 +++-- .../Internal/ImporterInstance.cs | 28 ++++++++----------- .../Internal/Sender.cs | 26 ++++++++++------- .../Internal/ServiceRegistration.cs | 6 ++-- .../Rhino/Speckle.Importers.Rhino/Program.cs | 15 ++++++++-- .../HostApplications.cs | 5 ++-- 9 files changed, 63 insertions(+), 40 deletions(-) diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs index 05536617e..3c5db2434 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/Domain/FileimportPayload.cs @@ -11,6 +11,8 @@ internal sealed class FileimportPayload public required string JobType { get; init; } public required string ModelId { get; init; } public required string FileName { get; init; } + + /// File extension, no dot public required string FileType { get; init; } public required string ProjectId { get; init; } public required Uri ServerUrl { get; init; } diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs index 6d812e9b8..846f9ce3a 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/IPCModels.cs @@ -1,4 +1,6 @@ -using Speckle.Sdk.Credentials; +using Speckle.Sdk; +using Speckle.Sdk.Api.GraphQL.Models; +using Speckle.Sdk.Credentials; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Importers.JobProcessor.JobHandlers; @@ -11,9 +13,10 @@ internal readonly struct ImporterArgs public required string BlobId { get; init; } public required int Attempt { get; init; } public required string ResultsPath { get; init; } - public required string ProjectId { get; init; } + public required Project Project { get; init; } public required string ModelId { get; init; } public required Account Account { get; init; } + public required Application HostApplication { get; init; } } public readonly struct ImporterResponse diff --git a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs index a657fe62e..8ab03f82b 100644 --- a/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs +++ b/Importers/Rhino/Speckle.Importers.JobProcessor/JobHandlers/RhinoJobHandler.cs @@ -7,6 +7,7 @@ using Speckle.Importers.JobProcessor.Domain; using Speckle.Newtonsoft.Json; using Speckle.Sdk; using Speckle.Sdk.Api; +using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Common; using JsonSerializer = System.Text.Json.JsonSerializer; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; @@ -22,16 +23,20 @@ internal sealed class RhinoJobHandler(ILogger logger, ImportJob public async Task ProcessJob(FileimportJob job, IClient client, CancellationToken cancellationToken) { using var file = await fileDownloader.DownloadFile(job, client, cancellationToken); + + Project project = await client.Project.Get(job.Payload.ProjectId, cancellationToken); + string fileType = file.FileInfo.Extension.TrimStart('.'); var importerArgs = new ImporterArgs { FilePath = file.FileInfo.FullName, ResultsPath = $"{file.FileInfo.DirectoryName}/results.json", Account = client.Account, + Project = project, ModelId = job.Payload.ModelId, - ProjectId = job.Payload.ProjectId, JobId = job.Id, BlobId = job.Payload.BlobId, Attempt = job.Attempt, + HostApplication = new Application($"Rhino .{fileType} File Import ", $"{fileType}-rhino-importer") }; await RunSubProcess(importerArgs, cancellationToken); var response = await DeserializeResponse(importerArgs.ResultsPath, cancellationToken); diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs index 477a48c5a..a45b3d741 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/IPCModels.cs @@ -1,4 +1,6 @@ -using Speckle.Sdk.Credentials; +using Speckle.Sdk; +using Speckle.Sdk.Api.GraphQL.Models; +using Speckle.Sdk.Credentials; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; namespace Speckle.Importers.Rhino.Internal; @@ -11,9 +13,10 @@ internal readonly struct ImporterArgs public required string BlobId { get; init; } public required int Attempt { get; init; } public required string ResultsPath { get; init; } - public required string ProjectId { get; init; } + public required Project Project { get; init; } public required string ModelId { get; init; } public required Account Account { get; init; } + public required Application HostApplication { get; init; } } public readonly struct ImporterResponse diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs index da8f33634..0530339f0 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ImporterInstance.cs @@ -1,6 +1,4 @@ using System.Diagnostics.CodeAnalysis; -using System.Text.Json; -using System.Text.Json.Serialization; using Microsoft.Extensions.Logging; using Rhino; using Rhino.Runtime.InProcess; @@ -15,26 +13,22 @@ internal sealed class ImporterInstance(Sender sender, ILogger { private readonly ILogger _logger = logger; private readonly RhinoCore _rhinoInstance = new(["/netcore-8"], WindowStyle.NoWindow); - private static readonly JsonSerializerOptions s_serializerOptions = - new() { UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow, }; private RhinoDoc? _rhinoDoc; - public async Task Run(string[] args, CancellationToken cancellationToken) + public async Task Run(ImporterArgs args, CancellationToken cancellationToken) { - var a = JsonSerializer.Deserialize(args[0], s_serializerOptions); - using var scopeJobId = ActivityScope.SetTag("jobId", a.JobId); + using var scopeJobId = ActivityScope.SetTag("jobId", args.JobId); // using var scopeJobType = ActivityScope.SetTag("jobType", a.JobType); - using var scopeAttempt = ActivityScope.SetTag("job.attempt", a.Attempt.ToString()); - using var scopeServerUrl = ActivityScope.SetTag("serverUrl", a.Account.serverInfo.url); - using var scopeProjectId = ActivityScope.SetTag("projectId", a.ProjectId); - using var scopeModelId = ActivityScope.SetTag("modelId", a.ModelId); - using var scopeBlobId = ActivityScope.SetTag("blobId", a.BlobId); - UserActivityScope.AddUserScope(a.Account); + using var scopeAttempt = ActivityScope.SetTag("job.attempt", args.Attempt.ToString()); + using var scopeServerUrl = ActivityScope.SetTag("serverUrl", args.Account.serverInfo.url); + using var scopeProjectId = ActivityScope.SetTag("projectId", args.Project.id); + using var scopeModelId = ActivityScope.SetTag("modelId", args.ModelId); + using var scopeBlobId = ActivityScope.SetTag("blobId", args.BlobId); + UserActivityScope.AddUserScope(args.Account); - var result = await TryImport(a, cancellationToken); - var serializedResult = JsonSerializer.Serialize(result, s_serializerOptions); - File.WriteAllLines(a.ResultsPath, [serializedResult]); + var result = await TryImport(args, cancellationToken); + return result; } [SuppressMessage("Design", "CA1031:Do not catch general exception types", Justification = "IPC")] @@ -60,7 +54,7 @@ internal sealed class ImporterInstance(Sender sender, ILogger _rhinoDoc = config.OpenInHeadlessDocument(args.FilePath); RhinoDoc.ActiveDoc = _rhinoDoc; - var version = await sender.Send(args.ProjectId, args.ModelId, args.Account, cancellationToken); + var version = await sender.Send(args.Project, args.ModelId, args.Account, cancellationToken); return version; } finally diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs index 88a0f5389..3d55a430a 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/Sender.cs @@ -2,11 +2,12 @@ using Microsoft.Extensions.Logging; using Rhino; using Rhino.DocObjects; -using Speckle.Connectors.Common; +using Speckle.Connectors.Common.Analytics; using Speckle.Connectors.Common.Operations; using Speckle.Converters.Common; using Speckle.Converters.Rhino; using Speckle.Sdk; +using Speckle.Sdk.Api.GraphQL.Models; using Speckle.Sdk.Credentials; using Speckle.Sdk.Logging; using Version = Speckle.Sdk.Api.GraphQL.Models.Version; @@ -17,16 +18,13 @@ internal sealed class Sender( ISdkActivityFactory activityFactory, IServiceProvider serviceProvider, IRhinoConversionSettingsFactory rhinoConversionSettingsFactory, + IMixPanelManager mixpanel, Progress progress, + Application applicationInfo, ILogger logger ) { - public async Task Send( - string projectId, - string modelId, - Account account, - CancellationToken cancellationToken - ) + public async Task Send(Project project, string modelId, Account account, CancellationToken cancellationToken) { // NOTE: introduction of AddVisualizationProperties setting not accounted for, hence hardcoded as true (i.e. "as before") using var activity = activityFactory.Start(); @@ -46,18 +44,26 @@ internal sealed class Sender( } var operation = scope.ServiceProvider.GetRequiredService>(); - var buildResults = await operation.Build(rhinoObjects, projectId, progress, cancellationToken); + var buildResults = await operation.Build(rhinoObjects, project.id, progress, cancellationToken); var (results, version) = await operation.Send( buildResults.RootObject, - projectId, + project.id, modelId, - HostApplications.RhinoImporter.Name, + applicationInfo.Slug, null, account, progress, cancellationToken ); + Dictionary customProperties = []; + customProperties.Add("actionSource", "import"); + if (project.workspaceId != null) + { + customProperties.Add("workspace_id", project.workspaceId); + } + + await mixpanel.TrackEvent(MixPanelEvents.Send, account, customProperties); logger.LogInformation($"Root: {results.RootId}"); return version; diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs index 395cb755b..bf40db501 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/ServiceRegistration.cs @@ -3,15 +3,17 @@ using Speckle.Connectors.Common; using Speckle.Connectors.Common.Threading; using Speckle.Connectors.Rhino.DependencyInjection; using Speckle.Converters.Rhino; +using Speckle.Sdk; using Speckle.Sdk.SQLite; namespace Speckle.Importers.Rhino.Internal; internal static class ServiceRegistration { - public static IServiceCollection AddRhinoImporter(this IServiceCollection services) + public static IServiceCollection AddRhinoImporter(this IServiceCollection services, Application applicationInfo) { - services.Initialize(HostApplications.RhinoImporter, HostAppVersion.v8); + services.Initialize(applicationInfo, HostAppVersion.v8); + services.AddSingleton(applicationInfo); services.AddRhino(false); services.AddRhinoConverters(); diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Program.cs b/Importers/Rhino/Speckle.Importers.Rhino/Program.cs index 68353948a..c4aa6cdb8 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Program.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Program.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using System.Text.Json; +using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using RhinoInside; using Speckle.Importers.Rhino.Internal; @@ -7,6 +9,9 @@ namespace Speckle.Importers.Rhino; public static class Program { + private static readonly JsonSerializerOptions s_serializerOptions = + new() { UnmappedMemberHandling = JsonUnmappedMemberHandling.Disallow, }; + static Program() { Resolver.Initialize(); @@ -18,8 +23,10 @@ public static class Program ILogger? logger = null; try { + var importerArgs = JsonSerializer.Deserialize(args[0], s_serializerOptions); + var serviceCollection = new ServiceCollection(); - serviceCollection.AddRhinoImporter(); + serviceCollection.AddRhinoImporter(importerArgs.HostApplication); using var serviceProvider = serviceCollection.BuildServiceProvider(); logger = serviceProvider.GetRequiredService>(); TaskScheduler.UnobservedTaskException += (_, eventArgs) => @@ -29,7 +36,9 @@ public static class Program await Task.Run(async () => { - await importer.Run(args, CancellationToken.None); + var result = await importer.Run(importerArgs, CancellationToken.None); + var serializedResult = JsonSerializer.Serialize(result, s_serializerOptions); + File.WriteAllLines(importerArgs.ResultsPath, [serializedResult]); }) .ConfigureAwait(false); } diff --git a/Sdk/Speckle.Connectors.Common/HostApplications.cs b/Sdk/Speckle.Connectors.Common/HostApplications.cs index d2d06fd86..e5a97e2d3 100644 --- a/Sdk/Speckle.Connectors.Common/HostApplications.cs +++ b/Sdk/Speckle.Connectors.Common/HostApplications.cs @@ -39,14 +39,13 @@ public static class HostApplications NET = new(".NET", "net"), Navisworks = new("Navisworks", "navisworks"), AdvanceSteel = new("Advance Steel", "advancesteel"), - Other = new("Other", "other"), - RhinoImporter = new("File Import", "fileImport"); + Other = new("Other", "other"); /// /// Gets a slug from a host application name and version. /// /// Application name with its version, e.g., "Rhino 7", "Revit 2024". - /// I hate that this function needs to exist + /// This function is soon to be needed only for backwards compatibility /// Slug string. public static string GetSlugFromHostAppNameAndVersion(string appName) { From 6f88da92bb368aa48f717830cdd14f85a9e70578 Mon Sep 17 00:00:00 2001 From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com> Date: Tue, 2 Sep 2025 17:31:53 +0100 Subject: [PATCH 17/19] Skp import config (#1061) --- .../Internal/FileTypeConfig/SketchupConfig.cs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs index ca4aa1ca2..4fc590e6d 100644 --- a/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs +++ b/Importers/Rhino/Speckle.Importers.Rhino/Internal/FileTypeConfig/SketchupConfig.cs @@ -1,5 +1,6 @@ using Rhino; using Rhino.DocObjects; +using Rhino.FileIO; using Rhino.Geometry; using Speckle.Sdk; @@ -7,14 +8,23 @@ namespace Speckle.Importers.Rhino.Internal.FileTypeConfig; public sealed class SketchupConfig : IFileTypeConfig { - private readonly DefaultConfig _defaultConfig = new(); + private readonly FileSkpReadOptions _options = + new() + { + JoinEdges = true, + JoinFaces = true, + Weld = false, + AddObjectsToGroups = true, + ImportCurves = true, + ImportFacesAsMeshes = true, + }; public RhinoDoc OpenInHeadlessDocument(string filePath) { var doc = RhinoDoc.CreateHeadless(null); try { - if (!doc.Import(filePath, null)) + if (!doc.Import(filePath, _options.ToDictionary())) { throw new SpeckleException("Rhino could not import this file"); } @@ -64,5 +74,5 @@ public sealed class SketchupConfig : IFileTypeConfig //TODO: same for meshes inside blocks } - public void Dispose() => _defaultConfig.Dispose(); + public void Dispose() { } } From 62835613e6ef214be5c975eed390eeca800a1792 Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 3 Sep 2025 15:32:15 +0100 Subject: [PATCH 18/19] Never use First() as it can be missing (#1065) --- .../Operations/Receive/ToHostSettingsManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/ToHostSettingsManager.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/ToHostSettingsManager.cs index 5b23f74c0..04720225f 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/ToHostSettingsManager.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Operations/Receive/ToHostSettingsManager.cs @@ -19,7 +19,7 @@ public class ToHostSettingsManager : IToHostSettingsManager public Transform? GetReferencePointSetting(ModelCard modelCard) { - var referencePointString = modelCard.Settings?.First(s => s.Id == "referencePoint").Value as string; + var referencePointString = modelCard.Settings?.FirstOrDefault(s => s.Id == "referencePoint")?.Value as string; if ( referencePointString is not null && ReferencePointSetting.ReferencePointMap.TryGetValue( From dc94724800cc6241a4ee7e788a0ebe31bc16b4ac Mon Sep 17 00:00:00 2001 From: Adam Hathcock Date: Wed, 3 Sep 2025 16:13:39 +0100 Subject: [PATCH 19/19] fix(Revit) - Getting a key on exception could result in null reference exceptions (#1064) * Getting a key on exception could result in null reference exceptions * Unique id does not exist? * Use CreationGUID which isn't null * add comment * Generate keys differently * more robust solution that doesn't use hashcode --- .../Bindings/BasicConnectorBindingRevit.cs | 1 + .../HostApp/RevitDocumentStore.cs | 28 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs index baaa2b748..b34e2d3f2 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/Bindings/BasicConnectorBindingRevit.cs @@ -72,6 +72,7 @@ internal sealed class BasicConnectorBindingRevit : IBasicConnectorBinding return new DocumentInfo("", "", "") { Message = "Family environment files not supported by Speckle." }; } + //should this use the Hashcode of the document instead of something like CreationGUID? var info = new DocumentInfo(doc.PathName, doc.Title, doc.GetHashCode().ToString()); return info; diff --git a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs index 3dd6d0405..8fef29774 100644 --- a/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs +++ b/Connectors/Revit/Speckle.Connectors.RevitShared/HostApp/RevitDocumentStore.cs @@ -100,16 +100,28 @@ internal sealed class RevitDocumentStore : DocumentModelStore try { - var key = document.ProjectInformation.UniqueId.NotNull(); - _jsonCacheManager.UpdateObject(key, modelCardState); + var key = GetKeyForDocument(document); + if (key != null) + { + _jsonCacheManager.UpdateObject(key, modelCardState); + } } catch (Exception ex) when (!ex.IsFatal()) { - var key = document.ProjectInformation.UniqueId.NotNull(); + var key = GetKeyForDocument(document); _logger.LogError(ex, "Failed to save model card state for document {DocumentId}", key); } } + private string? GetKeyForDocument(Document doc) + { + string? id = doc?.ProjectInformation?.UniqueId; //ProjectInformation Should only be null for family docs +#if REVIT_2024_OR_GREATER + id ??= doc.CreationGUID.ToString(); //fallback for family docs +#endif + return id; + } + protected override void LoadState() { var document = _revitContext.UIApplication?.ActiveUIDocument?.Document; @@ -125,9 +137,13 @@ internal sealed class RevitDocumentStore : DocumentModelStore ClearAndSave(); return; } - var key = document.ProjectInformation.UniqueId.NotNull(); - var state = _jsonCacheManager.GetObject(key); - LoadFromString(state); + + var key = GetKeyForDocument(document); + if (key != null) + { + var state = _jsonCacheManager.GetObject(key); + LoadFromString(state); + } } private Entity? GetSpeckleEntity(Document? doc)