From e6397c301d3bdce13e9b60b582bf0940e759a736 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 1 Apr 2026 12:37:56 +0100
Subject: [PATCH 01/42] experimental switch to STJ
---
.../Speckle.Automate.Sdk.csproj | 2 +-
src/Speckle.Automate.Sdk/packages.lock.json | 362 ------------------
src/Speckle.Objects/Speckle.Objects.csproj | 2 +-
src/Speckle.Objects/packages.lock.json | 309 ---------------
.../Speckle.Sdk.Dependencies.csproj | 1 +
.../packages.lock.json | 24 ++
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 237 ++++++------
src/Speckle.Sdk/Serialisation/IdGenerator.cs | 17 +
src/Speckle.Sdk/Speckle.Sdk.csproj | 2 +-
src/Speckle.Sdk/packages.lock.json | 296 --------------
10 files changed, 165 insertions(+), 1087 deletions(-)
diff --git a/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj b/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
index bb03d9c8..bc9379c0 100644
--- a/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
+++ b/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
@@ -1,6 +1,6 @@
- netstandard2.0;net8.0
+ net8.0
Speckle.Automate.Sdk
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index f7174f7c..0182b054 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -1,368 +1,6 @@
{
"version": 2,
"dependencies": {
- ".NETStandard,Version=v2.0": {
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "NETStandard.Library": {
- "type": "Direct",
- "requested": "[2.0.3, )",
- "resolved": "2.0.3",
- "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0"
- }
- },
- "Newtonsoft.Json.Schema": {
- "type": "Direct",
- "requested": "[4.0.1, )",
- "resolved": "4.0.1",
- "contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
- "dependencies": {
- "Newtonsoft.Json": "13.0.3"
- }
- },
- "PolySharp": {
- "type": "Direct",
- "requested": "[1.15.0, )",
- "resolved": "1.15.0",
- "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
- },
- "Speckle.InterfaceGenerator": {
- "type": "Direct",
- "requested": "[0.9.6, )",
- "resolved": "0.9.6",
- "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
- },
- "System.CommandLine": {
- "type": "Direct",
- "requested": "[2.0.0-beta4.22272.1, )",
- "resolved": "2.0.0-beta4.22272.1",
- "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==",
- "dependencies": {
- "System.Memory": "4.5.4"
- }
- },
- "System.Text.Json": {
- "type": "Direct",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "GraphQL.Client.Abstractions": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
- "dependencies": {
- "GraphQL.Primitives": "6.0.0"
- }
- },
- "GraphQL.Client.Abstractions.Websocket": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0"
- }
- },
- "GraphQL.Primitives": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.Data.Sqlite.Core": {
- "type": "Transitive",
- "resolved": "7.0.5",
- "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "Microsoft.Extensions.Configuration": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Binder": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "2.2.0"
- }
- },
- "Microsoft.Extensions.Logging.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
- },
- "Microsoft.Extensions.Options": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Primitives": "2.2.0",
- "System.ComponentModel.Annotations": "4.5.0"
- }
- },
- "Microsoft.Extensions.Primitives": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
- "dependencies": {
- "System.Memory": "4.5.1",
- "System.Runtime.CompilerServices.Unsafe": "4.5.1"
- }
- },
- "Microsoft.NETCore.Platforms": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
- },
- "Microsoft.NETCore.Targets": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "Newtonsoft.Json": {
- "type": "Transitive",
- "resolved": "13.0.3",
- "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
- },
- "SQLitePCLRaw.bundle_e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
- "dependencies": {
- "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
- "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
- }
- },
- "SQLitePCLRaw.core": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
- "dependencies": {
- "System.Memory": "4.5.3"
- }
- },
- "SQLitePCLRaw.lib.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
- },
- "SQLitePCLRaw.provider.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.5.1",
- "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
- },
- "System.ComponentModel.Annotations": {
- "type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
- },
- "System.Reactive": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
- "dependencies": {
- "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Runtime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0"
- }
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
- },
- "System.Runtime.InteropServices.WindowsRuntime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
- "dependencies": {
- "System.Runtime": "4.3.0"
- }
- },
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "speckle.objects": {
- "type": "Project",
- "dependencies": {
- "Speckle.Sdk": "[1.0.0, )"
- }
- },
- "speckle.sdk": {
- "type": "Project",
- "dependencies": {
- "GraphQL.Client": "[6.0.0, )",
- "Microsoft.CSharp": "[4.7.0, )",
- "Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
- "Microsoft.Extensions.Logging": "[2.2.0, )",
- "Speckle.DoubleNumerics": "[4.1.0, )",
- "Speckle.Newtonsoft.Json": "[13.0.2, )",
- "Speckle.Sdk.Dependencies": "[1.0.0, )"
- }
- },
- "speckle.sdk.dependencies": {
- "type": "Project",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
- }
- },
- "GraphQL.Client": {
- "type": "CentralTransitive",
- "requested": "[6.0.0, )",
- "resolved": "6.0.0",
- "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0",
- "GraphQL.Client.Abstractions.Websocket": "6.0.0",
- "System.Reactive": "5.0.0"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "CentralTransitive",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Microsoft.CSharp": {
- "type": "CentralTransitive",
- "requested": "[4.7.0, )",
- "resolved": "4.7.0",
- "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
- },
- "Microsoft.Data.Sqlite": {
- "type": "CentralTransitive",
- "requested": "[7.0.5, )",
- "resolved": "7.0.5",
- "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
- "dependencies": {
- "Microsoft.Data.Sqlite.Core": "7.0.5",
- "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions": {
- "type": "CentralTransitive",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
- },
- "Microsoft.Extensions.Logging": {
- "type": "CentralTransitive",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Binder": "2.2.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
- "Microsoft.Extensions.Options": "2.2.0"
- }
- },
- "Speckle.DoubleNumerics": {
- "type": "CentralTransitive",
- "requested": "[4.1.0, )",
- "resolved": "4.1.0",
- "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
- },
- "Speckle.Newtonsoft.Json": {
- "type": "CentralTransitive",
- "requested": "[13.0.2, )",
- "resolved": "13.0.2",
- "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
- }
- },
"net8.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
diff --git a/src/Speckle.Objects/Speckle.Objects.csproj b/src/Speckle.Objects/Speckle.Objects.csproj
index 1d7e3ad3..0ff23cf3 100644
--- a/src/Speckle.Objects/Speckle.Objects.csproj
+++ b/src/Speckle.Objects/Speckle.Objects.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net8.0
+ net8.0
System.Runtime.CompilerServices.RequiresLocationAttribute
Debug;Release;Local
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index 1fe1cf2d..8a73f4e4 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -1,315 +1,6 @@
{
"version": 2,
"dependencies": {
- ".NETStandard,Version=v2.0": {
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "NETStandard.Library": {
- "type": "Direct",
- "requested": "[2.0.3, )",
- "resolved": "2.0.3",
- "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0"
- }
- },
- "PolySharp": {
- "type": "Direct",
- "requested": "[1.15.0, )",
- "resolved": "1.15.0",
- "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
- },
- "Speckle.InterfaceGenerator": {
- "type": "Direct",
- "requested": "[0.9.6, )",
- "resolved": "0.9.6",
- "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
- },
- "GraphQL.Client.Abstractions": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
- "dependencies": {
- "GraphQL.Primitives": "6.0.0"
- }
- },
- "GraphQL.Client.Abstractions.Websocket": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0"
- }
- },
- "GraphQL.Primitives": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.Data.Sqlite.Core": {
- "type": "Transitive",
- "resolved": "7.0.5",
- "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "Microsoft.Extensions.Configuration": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Binder": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "2.2.0"
- }
- },
- "Microsoft.Extensions.Logging.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
- },
- "Microsoft.Extensions.Options": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Primitives": "2.2.0",
- "System.ComponentModel.Annotations": "4.5.0"
- }
- },
- "Microsoft.Extensions.Primitives": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
- "dependencies": {
- "System.Memory": "4.5.1",
- "System.Runtime.CompilerServices.Unsafe": "4.5.1"
- }
- },
- "Microsoft.NETCore.Platforms": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
- },
- "Microsoft.NETCore.Targets": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "SQLitePCLRaw.bundle_e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
- "dependencies": {
- "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
- "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
- }
- },
- "SQLitePCLRaw.core": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
- "dependencies": {
- "System.Memory": "4.5.3"
- }
- },
- "SQLitePCLRaw.lib.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
- },
- "SQLitePCLRaw.provider.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw=="
- },
- "System.ComponentModel.Annotations": {
- "type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.3",
- "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
- "dependencies": {
- "System.Buffers": "4.4.0",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.2"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
- },
- "System.Reactive": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
- "dependencies": {
- "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Runtime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0"
- }
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "4.5.3",
- "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
- },
- "System.Runtime.InteropServices.WindowsRuntime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
- "dependencies": {
- "System.Runtime": "4.3.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "speckle.sdk": {
- "type": "Project",
- "dependencies": {
- "GraphQL.Client": "[6.0.0, )",
- "Microsoft.CSharp": "[4.7.0, )",
- "Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "[2.2.0, )",
- "Microsoft.Extensions.Logging": "[2.2.0, )",
- "Speckle.DoubleNumerics": "[4.1.0, )",
- "Speckle.Newtonsoft.Json": "[13.0.2, )",
- "Speckle.Sdk.Dependencies": "[1.0.0, )"
- }
- },
- "speckle.sdk.dependencies": {
- "type": "Project",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
- }
- },
- "GraphQL.Client": {
- "type": "CentralTransitive",
- "requested": "[6.0.0, )",
- "resolved": "6.0.0",
- "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0",
- "GraphQL.Client.Abstractions.Websocket": "6.0.0",
- "System.Reactive": "5.0.0"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "CentralTransitive",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Microsoft.CSharp": {
- "type": "CentralTransitive",
- "requested": "[4.7.0, )",
- "resolved": "4.7.0",
- "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
- },
- "Microsoft.Data.Sqlite": {
- "type": "CentralTransitive",
- "requested": "[7.0.5, )",
- "resolved": "7.0.5",
- "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
- "dependencies": {
- "Microsoft.Data.Sqlite.Core": "7.0.5",
- "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions": {
- "type": "CentralTransitive",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
- },
- "Microsoft.Extensions.Logging": {
- "type": "CentralTransitive",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Binder": "2.2.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
- "Microsoft.Extensions.Options": "2.2.0"
- }
- },
- "Speckle.DoubleNumerics": {
- "type": "CentralTransitive",
- "requested": "[4.1.0, )",
- "resolved": "4.1.0",
- "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
- },
- "Speckle.Newtonsoft.Json": {
- "type": "CentralTransitive",
- "requested": "[13.0.2, )",
- "resolved": "13.0.2",
- "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
- }
- },
"net8.0": {
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index fe91aa91..22a46a58 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -30,6 +30,7 @@
+
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index ad39f5df..8d2cefa0 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -89,6 +89,20 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
+ "System.Text.Json": {
+ "type": "Direct",
+ "requested": "[8.0.5, )",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
@@ -153,6 +167,16 @@
"resolved": "6.0.0",
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
},
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.5.4",
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index ed78ce73..07eb7d35 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -1,13 +1,12 @@
+using System.Buffers;
using System.Collections;
using System.Drawing;
-using System.Globalization;
using System.Reflection;
-using Speckle.DoubleNumerics;
-using Speckle.Newtonsoft.Json;
-using Speckle.Sdk.Dependencies;
-using Speckle.Sdk.Helpers;
+using System.Text;
+using System.Text.Json;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
+using Matrix4x4 = Speckle.DoubleNumerics.Matrix4x4;
namespace Speckle.Sdk.Pipelines.Send;
@@ -68,7 +67,7 @@ private IEnumerable ExtractProperties(Base baseObj)
continue;
}
- if (prop.IsDefined(typeof(JsonIgnoreAttribute), false))
+ if (prop.IsDefined(typeof(Speckle.Newtonsoft.Json.JsonIgnoreAttribute), false))
{
continue;
}
@@ -105,61 +104,50 @@ private IEnumerable ExtractProperties(Base baseObj)
{
var childClosures = new Dictionary();
- var sb = Pools.StringBuilders.Get();
- try
- {
- using var stringWriter = new StringWriter(sb);
- using var jsonWriter = new JsonTextWriter(stringWriter);
- using var idWriter = new SerializerIdWriter(jsonWriter);
+ var arrayBuffer = new ArrayBufferWriter();
+ using var jsonWriter = new Utf8JsonWriter(arrayBuffer);
- idWriter.WriteStartObject();
+ jsonWriter.WriteStartObject();
- foreach (var prop in ExtractProperties(baseObj))
- {
- idWriter.WritePropertyName(prop.Name);
- SerializeValue(prop.Value, idWriter, prop.IsDetachable, childClosures, detachedObjects);
- }
+ foreach (var prop in ExtractProperties(baseObj))
+ {
+ jsonWriter.WritePropertyName(prop.Name);
+ SerializeValue(prop.Value, jsonWriter, prop.IsDetachable, childClosures, detachedObjects);
+ }
- var (jsonForId, finalWriter) = idWriter.FinishIdWriter();
- var id = IdGenerator.ComputeId(jsonForId);
+ jsonWriter.Flush();
+ var span = arrayBuffer.WrittenSpan;
+ string id = IdGenerator.ComputeId(span);
- finalWriter.WritePropertyName("id");
- finalWriter.WriteValue(id.Value);
+ jsonWriter.WriteString("id", id);
- baseObj.id = id.Value;
+ baseObj.id = id;
- if ((forceDetach || childClosures.Count > 0) && childClosures.Count > 0)
+ if ((forceDetach || childClosures.Count > 0) && childClosures.Count > 0)
+ {
+ jsonWriter.WritePropertyName("__closure");
+ jsonWriter.WriteStartObject();
+ foreach (var kvp in childClosures)
{
- finalWriter.WritePropertyName("__closure");
- finalWriter.WriteStartObject();
- foreach (var kvp in childClosures)
- {
- finalWriter.WritePropertyName(kvp.Key);
- finalWriter.WriteValue(kvp.Value);
- }
- finalWriter.WriteEndObject();
-
- foreach (var kvp in childClosures)
- {
- closures[kvp.Key] = closures.TryGetValue(kvp.Key, out var existing) ? existing + kvp.Value : kvp.Value;
- }
+ jsonWriter.WriteNumber(kvp.Key, kvp.Value);
}
+ jsonWriter.WriteEndObject();
- finalWriter.WriteEndObject();
- finalWriter.Flush();
-
- var json = new Json(stringWriter.ToString());
- return (id, json);
- }
- finally
- {
- Pools.StringBuilders.Return(sb);
+ foreach (var kvp in childClosures)
+ {
+ closures[kvp.Key] = closures.TryGetValue(kvp.Key, out var existing) ? existing + kvp.Value : kvp.Value;
+ }
}
+
+ jsonWriter.WriteEndObject();
+ jsonWriter.Flush();
+ var json = Encoding.UTF8.GetString(arrayBuffer.WrittenSpan);
+ return (new(id), new(json));
}
private void SerializeValue(
object? value,
- JsonWriter writer,
+ Utf8JsonWriter writer,
bool isDetachable,
Dictionary closures,
List<(Id, Json, Dictionary, Base, string)> detachedObjects
@@ -167,36 +155,66 @@ private void SerializeValue(
{
switch (value)
{
- case Enum:
- writer.WriteValue((int)value);
+ case null:
+ writer.WriteNullValue();
return;
- case Guid g:
- writer.WriteValue(g.ToString());
+ case string v:
+ writer.WriteStringValue(v);
return;
- case Color c:
- writer.WriteValue(c.ToArgb());
+ case short i:
+ writer.WriteNumberValue(i);
+ return;
+ case ushort i:
+ writer.WriteNumberValue(i);
+ return;
+ case int i:
+ writer.WriteNumberValue(i);
+ return;
+ case uint i:
+ writer.WriteNumberValue(i);
return;
- case DateTime dt:
- writer.WriteValue(dt.ToString("o", CultureInfo.InvariantCulture));
+ case long i:
+ writer.WriteNumberValue(i);
+ return;
+ case ulong i:
+ writer.WriteNumberValue(i);
+ return;
+ case bool b:
+ writer.WriteBooleanValue(b);
+ return;
+ case float f:
+ writer.WriteNumberValue(f);
+ return;
+ case double f:
+ writer.WriteNumberValue(f);
+ return;
+ case decimal d:
+ writer.WriteNumberValue(d);
+ return;
+ case Enum:
+ writer.WriteNumberValue((int)value);
+ return;
+ case Color c:
+ writer.WriteNumberValue(c.ToArgb());
return;
case Matrix4x4 md:
writer.WriteStartArray();
- writer.WriteValue(md.M11);
- writer.WriteValue(md.M12);
- writer.WriteValue(md.M13);
- writer.WriteValue(md.M14);
- writer.WriteValue(md.M21);
- writer.WriteValue(md.M22);
- writer.WriteValue(md.M23);
- writer.WriteValue(md.M24);
- writer.WriteValue(md.M31);
- writer.WriteValue(md.M32);
- writer.WriteValue(md.M33);
- writer.WriteValue(md.M34);
- writer.WriteValue(md.M41);
- writer.WriteValue(md.M42);
- writer.WriteValue(md.M43);
- writer.WriteValue(md.M44);
+ writer.WriteNumberValue(md.M11);
+ writer.WriteNumberValue(md.M12);
+ writer.WriteNumberValue(md.M13);
+ writer.WriteNumberValue(md.M14);
+ writer.WriteNumberValue(md.M21);
+ writer.WriteNumberValue(md.M22);
+ writer.WriteNumberValue(md.M23);
+ writer.WriteNumberValue(md.M24);
+ writer.WriteNumberValue(md.M31);
+ writer.WriteNumberValue(md.M32);
+ writer.WriteNumberValue(md.M33);
+ writer.WriteNumberValue(md.M34);
+ writer.WriteNumberValue(md.M41);
+ writer.WriteNumberValue(md.M42);
+ writer.WriteNumberValue(md.M43);
+ writer.WriteNumberValue(md.M44);
writer.WriteEndArray();
return;
// Handle ObjectReference before Base (since ObjectReference extends Base)
@@ -204,10 +222,8 @@ private void SerializeValue(
case ObjectReference objRef:
{
writer.WriteStartObject();
- writer.WritePropertyName("speckle_type");
- writer.WriteValue("reference");
- writer.WritePropertyName("referencedId");
- writer.WriteValue(objRef.referencedId);
+ writer.WriteString("speckle_type", "reference");
+ writer.WriteString("referencedId", objRef.referencedId);
writer.WriteEndObject();
// Propagate closure: add the referenced ID
@@ -236,10 +252,8 @@ private void SerializeValue(
detachedObjects.Add((childId, childJson, childClosures, baseObj, baseObj.speckle_type));
writer.WriteStartObject();
- writer.WritePropertyName("speckle_type");
- writer.WriteValue("reference");
- writer.WritePropertyName("referencedId");
- writer.WriteValue(childId.Value);
+ writer.WriteString("speckle_type", "reference");
+ writer.WriteString("referencedId", childId.Value);
writer.WriteEndObject();
closures[childId.Value] = closures.TryGetValue(childId.Value, out var existing) ? existing + 1 : 1;
@@ -296,56 +310,45 @@ private void SerializeValue(
default:
// This case will handle primitives and `null`
// Will throw JsonWriterException if not supported
- writer.WriteValue(value);
- return;
+ throw new ArgumentOutOfRangeException(nameof(value), $"Unsupported type {value.GetType()}");
}
}
private UploadItem ReferenceToUploadItem(ObjectReference existingRef)
{
- var sb = Pools.StringBuilders.Get();
- try
- {
- using var stringWriter = new StringWriter(sb);
- using var jsonWriter = new JsonTextWriter(stringWriter);
+ var m = new ArrayBufferWriter();
+ using var jsonWriter = new Utf8JsonWriter(m);
- jsonWriter.WriteStartObject();
- jsonWriter.WritePropertyName("speckle_type");
- jsonWriter.WriteValue("reference");
- jsonWriter.WritePropertyName("referencedId");
- jsonWriter.WriteValue(existingRef.referencedId);
- jsonWriter.WritePropertyName("__closure");
+ jsonWriter.WriteStartObject();
+ jsonWriter.WriteString("speckle_type", "reference");
+ jsonWriter.WriteString("referencedId", existingRef.referencedId);
+ jsonWriter.WritePropertyName("__closure");
- if (existingRef.closure != null && existingRef.closure.Count > 0)
- {
- jsonWriter.WriteStartObject();
- foreach (var kvp in existingRef.closure)
- {
- jsonWriter.WritePropertyName(kvp.Key);
- jsonWriter.WriteValue(kvp.Value);
- }
- jsonWriter.WriteEndObject();
- }
- else
+ if (existingRef.closure != null && existingRef.closure.Count > 0)
+ {
+ jsonWriter.WriteStartObject();
+ foreach (var kvp in existingRef.closure)
{
- jsonWriter.WriteNull();
+ jsonWriter.WritePropertyName(kvp.Key);
+ jsonWriter.WriteNumberValue(kvp.Value);
}
-
jsonWriter.WriteEndObject();
- jsonWriter.Flush();
-
- var refJson = new Json(stringWriter.ToString());
-
- return new UploadItem(
- existingRef.referencedId,
- refJson,
- existingRef.speckle_type,
- existingRef // Pass through the original ObjectReference
- );
}
- finally
+ else
{
- Pools.StringBuilders.Return(sb);
+ jsonWriter.WriteNullValue();
}
+
+ jsonWriter.WriteEndObject();
+ jsonWriter.Flush();
+
+ var refJson = new Json(Encoding.UTF8.GetString(m.WrittenSpan));
+
+ return new UploadItem(
+ existingRef.referencedId,
+ refJson,
+ existingRef.speckle_type,
+ existingRef // Pass through the original ObjectReference
+ );
}
}
diff --git a/src/Speckle.Sdk/Serialisation/IdGenerator.cs b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
index 0d33482e..a85e3153 100644
--- a/src/Speckle.Sdk/Serialisation/IdGenerator.cs
+++ b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
@@ -1,4 +1,5 @@
using System.Diagnostics.Contracts;
+using System.Security.Cryptography;
using Speckle.Sdk.Common;
using Speckle.Sdk.Models;
@@ -16,4 +17,20 @@ public static Id ComputeId(Json serialized)
#endif
return new Id(hash);
}
+
+ [Pure]
+ public static string ComputeId(ReadOnlySpan input)
+ {
+ Span hash = stackalloc byte[SHA256.HashSizeInBytes];
+ SHA256.HashData(input, hash);
+
+ Span output = stackalloc char[32];
+
+ for (int i = 0, j = 0; j < 32; i += sizeof(byte), j += sizeof(char))
+ {
+ hash[i].TryFormat(output[j..], out _, "x2");
+ }
+
+ return new string(output);
+ }
}
diff --git a/src/Speckle.Sdk/Speckle.Sdk.csproj b/src/Speckle.Sdk/Speckle.Sdk.csproj
index 000ee2bf..2bde42d8 100644
--- a/src/Speckle.Sdk/Speckle.Sdk.csproj
+++ b/src/Speckle.Sdk/Speckle.Sdk.csproj
@@ -1,7 +1,7 @@
- netstandard2.0;net8.0
+ net8.0
Debug;Release;Local
true
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index 1426afb3..fc841e19 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -1,302 +1,6 @@
{
"version": 2,
"dependencies": {
- ".NETStandard,Version=v2.0": {
- "GraphQL.Client": {
- "type": "Direct",
- "requested": "[6.0.0, )",
- "resolved": "6.0.0",
- "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0",
- "GraphQL.Client.Abstractions.Websocket": "6.0.0",
- "System.Reactive": "5.0.0"
- }
- },
- "Microsoft.CSharp": {
- "type": "Direct",
- "requested": "[4.7.0, )",
- "resolved": "4.7.0",
- "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
- },
- "Microsoft.Data.Sqlite": {
- "type": "Direct",
- "requested": "[7.0.5, )",
- "resolved": "7.0.5",
- "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
- "dependencies": {
- "Microsoft.Data.Sqlite.Core": "7.0.5",
- "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
- }
- },
- "Microsoft.Extensions.DependencyInjection.Abstractions": {
- "type": "Direct",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
- },
- "Microsoft.Extensions.Logging": {
- "type": "Direct",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Binder": "2.2.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
- "Microsoft.Extensions.Options": "2.2.0"
- }
- },
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "NETStandard.Library": {
- "type": "Direct",
- "requested": "[2.0.3, )",
- "resolved": "2.0.3",
- "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0"
- }
- },
- "PolySharp": {
- "type": "Direct",
- "requested": "[1.15.0, )",
- "resolved": "1.15.0",
- "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
- },
- "Speckle.DoubleNumerics": {
- "type": "Direct",
- "requested": "[4.1.0, )",
- "resolved": "4.1.0",
- "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
- },
- "Speckle.InterfaceGenerator": {
- "type": "Direct",
- "requested": "[0.9.6, )",
- "resolved": "0.9.6",
- "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
- },
- "Speckle.Newtonsoft.Json": {
- "type": "Direct",
- "requested": "[13.0.2, )",
- "resolved": "13.0.2",
- "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
- },
- "GraphQL.Client.Abstractions": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
- "dependencies": {
- "GraphQL.Primitives": "6.0.0"
- }
- },
- "GraphQL.Client.Abstractions.Websocket": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
- "dependencies": {
- "GraphQL.Client.Abstractions": "6.0.0"
- }
- },
- "GraphQL.Primitives": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.Data.Sqlite.Core": {
- "type": "Transitive",
- "resolved": "7.0.5",
- "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "Microsoft.Extensions.Configuration": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
- "dependencies": {
- "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
- "dependencies": {
- "Microsoft.Extensions.Primitives": "2.2.0"
- }
- },
- "Microsoft.Extensions.Configuration.Binder": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
- "dependencies": {
- "Microsoft.Extensions.Configuration": "2.2.0"
- }
- },
- "Microsoft.Extensions.Logging.Abstractions": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
- },
- "Microsoft.Extensions.Options": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
- "Microsoft.Extensions.Primitives": "2.2.0",
- "System.ComponentModel.Annotations": "4.5.0"
- }
- },
- "Microsoft.Extensions.Primitives": {
- "type": "Transitive",
- "resolved": "2.2.0",
- "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
- "dependencies": {
- "System.Memory": "4.5.1",
- "System.Runtime.CompilerServices.Unsafe": "4.5.1"
- }
- },
- "Microsoft.NETCore.Platforms": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
- },
- "Microsoft.NETCore.Targets": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "aOZA3BWfz9RXjpzt0sRJJMjAscAUm3Hoa4UWAfceV9UTYxgwZ1lZt5nO2myFf+/jetYQo4uTP7zS8sJY67BBxg=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "SQLitePCLRaw.bundle_e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
- "dependencies": {
- "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
- "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
- }
- },
- "SQLitePCLRaw.core": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
- "dependencies": {
- "System.Memory": "4.5.3"
- }
- },
- "SQLitePCLRaw.lib.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
- },
- "SQLitePCLRaw.provider.e_sqlite3": {
- "type": "Transitive",
- "resolved": "2.1.4",
- "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
- "dependencies": {
- "SQLitePCLRaw.core": "2.1.4"
- }
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "AwarXzzoDwX6BgrhjoJsk6tUezZEozOT5Y9QKF94Gl4JK91I4PIIBkBco9068Y9/Dra8Dkbie99kXB8+1BaYKw=="
- },
- "System.ComponentModel.Annotations": {
- "type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.3",
- "contentHash": "3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
- "dependencies": {
- "System.Buffers": "4.4.0",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.2"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
- },
- "System.Reactive": {
- "type": "Transitive",
- "resolved": "5.0.0",
- "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
- "dependencies": {
- "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Runtime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "JufQi0vPQ0xGnAczR13AUFglDyVYt4Kqnz1AZaiKZ5+GICq0/1MH/mO/eAJHt/mHW1zjKBJd7kV26SrxddAhiw==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0",
- "Microsoft.NETCore.Targets": "1.1.0"
- }
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "4.5.3",
- "contentHash": "3TIsJhD1EiiT0w2CcDMN/iSSwnNnsrnbzeVHSKkaEgV85txMprmuO+Yq2AdSbeVGcg28pdNDTPK87tJhX7VFHw=="
- },
- "System.Runtime.InteropServices.WindowsRuntime": {
- "type": "Transitive",
- "resolved": "4.3.0",
- "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA==",
- "dependencies": {
- "System.Runtime": "4.3.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "speckle.sdk.dependencies": {
- "type": "Project",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "CentralTransitive",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- }
- },
"net8.0": {
"GraphQL.Client": {
"type": "Direct",
From 55bc54c0b8160804f822c0415e3af215a78966f7 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 2 Apr 2026 12:21:10 +0100
Subject: [PATCH 02/42] pool array buffer
---
.../ArrayBufferWriterPooledObjectPolicy.cs | 40 ++++
src/Speckle.Sdk.Dependencies/Pools.cs | 4 +
.../Speckle.Sdk.Dependencies.csproj | 2 +-
.../packages.lock.json | 185 ------------------
src/Speckle.Sdk/Models/Attributes.cs | 4 +-
src/Speckle.Sdk/Pipelines/Send/DiskStore.cs | 24 ++-
.../Pipelines/Send/SendPipeline.cs | 13 +-
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 36 ++--
src/Speckle.Sdk/Pipelines/Send/Uploader.cs | 95 +++++----
.../Pipelines/Send/UploaderDTOs.cs | 6 +-
.../Serialisation/SerializationResult.cs | 25 ++-
11 files changed, 174 insertions(+), 260 deletions(-)
create mode 100644 src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
new file mode 100644
index 00000000..5aa857a8
--- /dev/null
+++ b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
@@ -0,0 +1,40 @@
+using System.Buffers;
+using System.Text;
+using Microsoft.Extensions.ObjectPool;
+
+namespace Speckle.Sdk.Dependencies;
+
+public sealed class ArrayBufferWriterPooledObjectPolicy : PooledObjectPolicy>
+{
+ ///
+ /// Gets or sets the initial capacity of pooled instances.
+ ///
+ /// Defaults to 100.
+ public int InitialCapacity { get; set; } = 100;
+
+ ///
+ /// Gets or sets the maximum value for that is allowed to be
+ /// retained, when is invoked.
+ ///
+ /// Defaults to 4096.
+ public int MaximumRetainedCapacity { get; set; } = 4 * 1024;
+
+ ///
+ public override ArrayBufferWriter Create()
+ {
+ return new ArrayBufferWriter(InitialCapacity);
+ }
+
+ ///
+ public override bool Return(ArrayBufferWriter obj)
+ {
+ if (obj.Capacity > MaximumRetainedCapacity)
+ {
+ // Too big. Discard this one.
+ return false;
+ }
+
+ obj.Clear();
+ return true;
+ }
+}
diff --git a/src/Speckle.Sdk.Dependencies/Pools.cs b/src/Speckle.Sdk.Dependencies/Pools.cs
index 734b7432..a94fbbd4 100644
--- a/src/Speckle.Sdk.Dependencies/Pools.cs
+++ b/src/Speckle.Sdk.Dependencies/Pools.cs
@@ -1,3 +1,4 @@
+using System.Buffers;
using System.Collections.Concurrent;
using System.Text;
using Microsoft.Extensions.ObjectPool;
@@ -24,6 +25,9 @@ public bool Return(Dictionary obj)
public static Pool StringBuilders { get; } =
new(new StringBuilderPooledObjectPolicy() { MaximumRetainedCapacity = 100 * 1024 * 1024 });
+ public static Pool> ArrayBufferWriter { get; } =
+ new(new ArrayBufferWriterPooledObjectPolicy() { MaximumRetainedCapacity = 100 * 1024 * 1024 });
+
private sealed class ObjectDictionaryPolicy : IPooledObjectPolicy>
where TKey : notnull
{
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index 22a46a58..8400e64f 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -1,6 +1,6 @@
- netstandard2.0;net8.0
+ net8.0
Debug;Release;Local
Debug;Release;Local
true
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index 8d2cefa0..decb06e0 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -1,191 +1,6 @@
{
"version": 2,
"dependencies": {
- ".NETStandard,Version=v2.0": {
- "ILRepack.FullAuto": {
- "type": "Direct",
- "requested": "[1.6.0, )",
- "resolved": "1.6.0",
- "contentHash": "34qp/HQ0XRIWCjtNGUOslJ6p9eNWqHXZQ+xx1iBCvXy3mj8tEiqIwRG+LubFyKCJITqMh5cpFvFl20/6+Dmy+g==",
- "dependencies": {
- "ILRepack": "2.0.33"
- }
- },
- "Microsoft.Bcl.AsyncInterfaces": {
- "type": "Direct",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
- "dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "Microsoft.Extensions.ObjectPool": {
- "type": "Direct",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "G7p1k2xVZ+2aVANz0JdSiafr+AHDHeS1kF8+Y0ABbIsByd0erOL59IDXBs9vcdJf3pPV/murO0mbtr4k40QxWw=="
- },
- "Microsoft.SourceLink.GitHub": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
- "dependencies": {
- "Microsoft.Build.Tasks.Git": "8.0.0",
- "Microsoft.SourceLink.Common": "8.0.0"
- }
- },
- "NETStandard.Library": {
- "type": "Direct",
- "requested": "[2.0.3, )",
- "resolved": "2.0.3",
- "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
- "dependencies": {
- "Microsoft.NETCore.Platforms": "1.1.0"
- }
- },
- "Open.ChannelExtensions": {
- "type": "Direct",
- "requested": "[9.1.0, )",
- "resolved": "9.1.0",
- "contentHash": "D6c24vMGy1oZ06vmkD2/FNzWHK7ZIihuv2spDgYEeaUp+eobrILQnrNQKRoASFXD4JGfZ7nfvTM0e+AX79dt8Q==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "9.0.4",
- "System.Collections.Immutable": "9.0.4",
- "System.Threading.Channels": "9.0.4"
- }
- },
- "Polly": {
- "type": "Direct",
- "requested": "[7.2.3, )",
- "resolved": "7.2.3",
- "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
- },
- "Polly.Contrib.WaitAndRetry": {
- "type": "Direct",
- "requested": "[1.1.1, )",
- "resolved": "1.1.1",
- "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
- },
- "Polly.Extensions.Http": {
- "type": "Direct",
- "requested": "[3.0.0, )",
- "resolved": "3.0.0",
- "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
- "dependencies": {
- "Polly": "7.1.0"
- }
- },
- "PolySharp": {
- "type": "Direct",
- "requested": "[1.15.0, )",
- "resolved": "1.15.0",
- "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
- },
- "Speckle.InterfaceGenerator": {
- "type": "Direct",
- "requested": "[0.9.6, )",
- "resolved": "0.9.6",
- "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
- },
- "System.Text.Json": {
- "type": "Direct",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "System.Threading.Channels": {
- "type": "Direct",
- "requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "4qBn2H6/aXBpE/Pm3wY5yusY/pEvQz99NlWHrTUji0qCmOdbhhjaALcpmbfW2ksxlPM6i6S+QFLkpOQdyfeKYQ==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "9.0.4",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
- "ILRepack": {
- "type": "Transitive",
- "resolved": "2.0.33",
- "contentHash": "xb2h1CsOepoYwdXEPui9VcQglwABQwNf9cccZbf+acarEzF5PUp8Xx71nFXIhOgEdm6wrxAoF6xAxK4m/XFRUQ=="
- },
- "Microsoft.Build.Tasks.Git": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
- },
- "Microsoft.NETCore.Platforms": {
- "type": "Transitive",
- "resolved": "1.1.0",
- "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
- },
- "Microsoft.SourceLink.Common": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
- },
- "System.Buffers": {
- "type": "Transitive",
- "resolved": "4.5.1",
- "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
- },
- "System.Collections.Immutable": {
- "type": "Transitive",
- "resolved": "9.0.4",
- "contentHash": "wfm2NgK22MmBe5qJjp52qzpkeDZKb4l9LbdubhZSehY1z4LS+lld6R+B+UQNb2AZRHu/QJlHxEUcRst5hIEejg==",
- "dependencies": {
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "System.Numerics.Vectors": {
- "type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
- },
- "System.Runtime.CompilerServices.Unsafe": {
- "type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
- },
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
- }
- },
- "System.Threading.Tasks.Extensions": {
- "type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
- "dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- }
- },
"net8.0": {
"ILRepack.FullAuto": {
"type": "Direct",
diff --git a/src/Speckle.Sdk/Models/Attributes.cs b/src/Speckle.Sdk/Models/Attributes.cs
index 808c24b8..bdcd9476 100644
--- a/src/Speckle.Sdk/Models/Attributes.cs
+++ b/src/Speckle.Sdk/Models/Attributes.cs
@@ -13,7 +13,9 @@ public sealed class DetachPropertyAttribute : Attribute
/// If set to true the default serialiser will persist it separately, and add a reference to the property's value in the original object.
/// Only applies to properties of types derived from the Base class.
///
- /// Whether to detach the property or not.
+ public DetachPropertyAttribute() { }
+
+ [Obsolete("detachable = false is no longer supported")]
public DetachPropertyAttribute(bool detachable = true)
{
Detachable = detachable;
diff --git a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
index 172de132..cd2ee575 100644
--- a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
@@ -1,4 +1,5 @@
using System.IO.Compression;
+using System.Text;
using Microsoft.Extensions.Logging;
using Speckle.InterfaceGenerator;
using Speckle.Sdk.Dependencies;
@@ -46,6 +47,9 @@ public async Task CompleteAsync()
return await _writeToDiskTask.ConfigureAwait(false);
}
+ private readonly byte[] _newLineChar = [(byte)'\n'];
+ private readonly byte[] _tabLineChar = [(byte)'\t'];
+
///
/// Reads from the Channel and streams the s to a temporary file on disk.
/// Will keep reading until is called.
@@ -61,21 +65,23 @@ private async Task WriteFile()
{
using var fileStream = new FileStream(tempFilePath, FileMode.Create, FileAccess.Write, FileShare.None);
using var gzip = new GZipStream(fileStream, CompressionLevel.Optimal);
- using var writer = new StreamWriter(gzip);
await foreach (var item in _channel.ReadAllAsync(_cancellationToken).ConfigureAwait(false))
{
- await writer.WriteAsync(item.Id).ConfigureAwait(false);
- await writer.WriteAsync('\t').ConfigureAwait(false);
- await writer.WriteAsync(item.SpeckleType).ConfigureAwait(false);
- await writer.WriteAsync('\t').ConfigureAwait(false);
- await writer.WriteAsync(item.Json.Value).ConfigureAwait(false);
- await writer.WriteLineAsync().ConfigureAwait(false);
+ await gzip.WriteAsync(Encoding.UTF8.GetBytes(item.Id), _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(_tabLineChar, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(Encoding.UTF8.GetBytes(item.SpeckleType), _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(_tabLineChar, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(item.Json.WrittenMemory, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(_newLineChar, _cancellationToken).ConfigureAwait(false);
+
+ item.Dispose();
}
+
#if NET8_0_OR_GREATER
- await writer.FlushAsync(_cancellationToken).ConfigureAwait(false);
+ await gzip.FlushAsync(_cancellationToken).ConfigureAwait(false);
#else
- await writer.FlushAsync().ConfigureAwait(false);
+ await gzip.FlushAsync().ConfigureAwait(false);
#endif
tempFile.FileInfo.Refresh();
diff --git a/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs b/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
index 3ddd4249..9d1390c4 100644
--- a/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
@@ -36,28 +36,21 @@ internal SendPipeline(Uploader uploader, DiskStore diskStore)
_diskStore = diskStore;
}
- private UploadItem _lastItem;
-
public async Task Process(Base @base)
{
var results = _serializer.Serialize(@base).ToArray();
- var first = results.First();
- foreach (var item in results)
+ foreach (var item in results.Reverse())
{
// we're not doing fire and forget here so that we get the backpressure from the uploader
await _diskStore.PushAsync(item).ConfigureAwait(false);
}
- // NOTE: this is important to keep track of. When we serialze an object, we get back a list of objects, with the first one being the original root.
- // In the case of the commit root object, this means the last object is not necessarily the root; we therefore need to manually track its existance here
- // and ensure it's the last one through in the uploader's stream. See WaitForUpload down below.
- _lastItem = first;
- return first.Reference;
+ return results.First().Reference;
}
public async Task WaitForUpload()
{
- await _diskStore.PushAsync(_lastItem).ConfigureAwait(false);
+ //await _diskStore.PushAsync(_lastItem).ConfigureAwait(false);
using DisposableFile tempFile = await _diskStore.CompleteAsync().ConfigureAwait(false);
using Stream fileStreamUpload = new FileStream(
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 07eb7d35..42492831 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -1,8 +1,6 @@
-using System.Buffers;
using System.Collections;
+using System.Diagnostics.CodeAnalysis;
using System.Drawing;
-using System.Reflection;
-using System.Text;
using System.Text.Json;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
@@ -30,7 +28,7 @@ public IEnumerable Serialize(Base root)
yield break;
}
- var detachedObjects = new List<(Id, Json, Dictionary, Base, string)>();
+ var detachedObjects = new List<(Id, EfficientJson, Dictionary, Base, string)>();
var rootClosures = new Dictionary();
var (rootId, rootJson) = SerializeBase(root, false, rootClosures, detachedObjects);
@@ -73,7 +71,7 @@ private IEnumerable ExtractProperties(Base baseObj)
}
var value = prop.GetValue(baseObj);
- var isDetachable = prop.GetCustomAttribute(true)?.Detachable ?? false;
+ var isDetachable = prop.IsDefined(typeof(DetachPropertyAttribute), true);
yield return new PropertyInfo(prop.Name, value, isDetachable);
}
@@ -95,17 +93,17 @@ private IEnumerable ExtractProperties(Base baseObj)
}
}
- private (Id, Json) SerializeBase(
+ private (Id, EfficientJson) SerializeBase(
Base baseObj,
bool forceDetach,
Dictionary closures,
- List<(Id, Json, Dictionary, Base, string)> detachedObjects
+ List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
)
{
var childClosures = new Dictionary();
- var arrayBuffer = new ArrayBufferWriter();
- using var jsonWriter = new Utf8JsonWriter(arrayBuffer);
+ var efficientJson = new EfficientJson();
+ using var jsonWriter = new Utf8JsonWriter(efficientJson.Buffer);
jsonWriter.WriteStartObject();
@@ -116,7 +114,7 @@ private IEnumerable ExtractProperties(Base baseObj)
}
jsonWriter.Flush();
- var span = arrayBuffer.WrittenSpan;
+ var span = efficientJson.WrittenSpan;
string id = IdGenerator.ComputeId(span);
jsonWriter.WriteString("id", id);
@@ -141,8 +139,7 @@ private IEnumerable ExtractProperties(Base baseObj)
jsonWriter.WriteEndObject();
jsonWriter.Flush();
- var json = Encoding.UTF8.GetString(arrayBuffer.WrittenSpan);
- return (new(id), new(json));
+ return (new(id), efficientJson);
}
private void SerializeValue(
@@ -150,7 +147,7 @@ private void SerializeValue(
Utf8JsonWriter writer,
bool isDetachable,
Dictionary closures,
- List<(Id, Json, Dictionary, Base, string)> detachedObjects
+ List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
)
{
switch (value)
@@ -270,7 +267,7 @@ private void SerializeValue(
var inlineClosures = new Dictionary();
var (_, inlineJson) = SerializeBase(baseObj, false, inlineClosures, detachedObjects);
- writer.WriteRawValue(inlineJson.Value);
+ writer.WriteRawValue(inlineJson.WrittenSpan);
foreach (var kvp in inlineClosures)
{
@@ -314,10 +311,15 @@ private void SerializeValue(
}
}
+ [SuppressMessage(
+ "Reliability",
+ "CA2000:Dispose objects before losing scope",
+ Justification = "EfficientJson IDisposable is returned via UploadItem"
+ )]
private UploadItem ReferenceToUploadItem(ObjectReference existingRef)
{
- var m = new ArrayBufferWriter();
- using var jsonWriter = new Utf8JsonWriter(m);
+ var refJson = new EfficientJson();
+ using var jsonWriter = new Utf8JsonWriter(refJson.Buffer);
jsonWriter.WriteStartObject();
jsonWriter.WriteString("speckle_type", "reference");
@@ -342,8 +344,6 @@ private UploadItem ReferenceToUploadItem(ObjectReference existingRef)
jsonWriter.WriteEndObject();
jsonWriter.Flush();
- var refJson = new Json(Encoding.UTF8.GetString(m.WrittenSpan));
-
return new UploadItem(
existingRef.referencedId,
refJson,
diff --git a/src/Speckle.Sdk/Pipelines/Send/Uploader.cs b/src/Speckle.Sdk/Pipelines/Send/Uploader.cs
index 0b7f2126..133b3d8e 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Uploader.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Uploader.cs
@@ -65,63 +65,90 @@ private async Task GetPresignedUrl()
{
using var a = _activity.Start("Get Presigned Url");
- var signUri = new Uri($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/sign", UriKind.Relative);
+ try
+ {
+ var signUri = new Uri($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/sign", UriKind.Relative);
- using var signResponse = await _speckleClient.PostAsync(signUri, null, _cancellationToken).ConfigureAwait(false);
- signResponse.EnsureSuccessStatusCode();
+ using var signResponse = await _speckleClient.PostAsync(signUri, null, _cancellationToken).ConfigureAwait(false);
+ signResponse.EnsureSuccessStatusCode();
#if NET5_0_OR_GREATER
- string signResponseString = await signResponse.Content.ReadAsStringAsync(_cancellationToken).ConfigureAwait(false);
+ string signResponseString = await signResponse
+ .Content.ReadAsStringAsync(_cancellationToken)
+ .ConfigureAwait(false);
#else
- string signResponseString = await signResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ string signResponseString = await signResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
#endif
- PresignedUploadResponse presignedUpload =
- JsonConvert.DeserializeObject(signResponseString)
- ?? throw new InvalidOperationException("Failed to get presigned upload URL");
- return presignedUpload;
+ PresignedUploadResponse presignedUpload =
+ JsonConvert.DeserializeObject(signResponseString)
+ ?? throw new InvalidOperationException("Failed to get presigned upload URL");
+ return presignedUpload;
+ }
+ catch (Exception ex)
+ {
+ a?.SetStatus(SdkActivityStatusCode.Error);
+ a?.RecordException(ex);
+ throw;
+ }
}
private async Task UploadToS3(Stream fileStream, PresignedUploadResponse presignedUploadResponse)
{
using var a = _activity.Start("Uploading file to pre-signed url");
+ try
+ {
+ Stream progressStream = new ProgressStream(fileStream, _progress);
- Stream progressStream = new ProgressStream(fileStream, _progress);
-
- using var streamContent = new StreamContent(progressStream);
- streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
- streamContent.Headers.ContentLength = fileStream.Length;
+ using var streamContent = new StreamContent(progressStream);
+ streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
+ streamContent.Headers.ContentLength = fileStream.Length;
- using var uploadRequest = new HttpRequestMessage(HttpMethod.Put, presignedUploadResponse.Url);
- foreach (var kvp in presignedUploadResponse.AdditionalRequestHeaders)
- {
- uploadRequest.Headers.Add(kvp.Key, kvp.Value);
- }
+ using var uploadRequest = new HttpRequestMessage(HttpMethod.Put, presignedUploadResponse.Url);
+ foreach (var kvp in presignedUploadResponse.AdditionalRequestHeaders)
+ {
+ uploadRequest.Headers.Add(kvp.Key, kvp.Value);
+ }
- uploadRequest.Content = streamContent;
+ uploadRequest.Content = streamContent;
- using var uploadResponse = await _s3Client
- .SendAsync(uploadRequest, HttpCompletionOption.ResponseHeadersRead, _cancellationToken)
- .ConfigureAwait(false);
+ using var uploadResponse = await _s3Client
+ .SendAsync(uploadRequest, HttpCompletionOption.ResponseHeadersRead, _cancellationToken)
+ .ConfigureAwait(false);
- uploadResponse.EnsureSuccessStatusCode();
+ uploadResponse.EnsureSuccessStatusCode();
- return BlobApiHelpers.ParseEtagHeader(uploadResponse.Headers);
+ return BlobApiHelpers.ParseEtagHeader(uploadResponse.Headers);
+ }
+ catch (Exception ex)
+ {
+ a?.SetStatus(SdkActivityStatusCode.Error);
+ a?.RecordException(ex);
+ throw;
+ }
}
private async Task TriggerProcessing(TriggerUploadRequest request)
{
using var a = _activity.Start("Triggering Processing");
+ try
+ {
+ Uri processUri = new($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/process", UriKind.Relative);
+ string requestBody = JsonConvert.SerializeObject(request);
+ using var content = new StringContent(requestBody, Encoding.UTF8, "application/json");
- Uri processUri = new($"projects/{_projectId}/modelingestion/{_ingestionId}/uploads/process", UriKind.Relative);
- string requestBody = JsonConvert.SerializeObject(request);
- using var content = new StringContent(requestBody, Encoding.UTF8, "application/json");
-
- using HttpResponseMessage processResponse = await _speckleClient
- .PostAsync(processUri, content, _cancellationToken)
- .ConfigureAwait(false);
+ using HttpResponseMessage processResponse = await _speckleClient
+ .PostAsync(processUri, content, _cancellationToken)
+ .ConfigureAwait(false);
- string body = await processResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
- processResponse.EnsureSuccessStatusCode();
+ string body = await processResponse.Content.ReadAsStringAsync().ConfigureAwait(false);
+ processResponse.EnsureSuccessStatusCode();
+ }
+ catch (Exception ex)
+ {
+ a?.SetStatus(SdkActivityStatusCode.Error);
+ a?.RecordException(ex);
+ throw;
+ }
}
public void Dispose()
diff --git a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
index 11df1420..d69704f2 100644
--- a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
@@ -4,7 +4,11 @@
namespace Speckle.Sdk.Pipelines.Send;
-public record UploadItem(string Id, Json Json, string SpeckleType, ObjectReference Reference);
+public sealed record UploadItem(string Id, EfficientJson Json, string SpeckleType, ObjectReference Reference)
+ : IDisposable
+{
+ public void Dispose() => Json.Dispose();
+}
internal record PresignedUploadResponse
{
diff --git a/src/Speckle.Sdk/Serialisation/SerializationResult.cs b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
index 5add758e..c0b87ee8 100644
--- a/src/Speckle.Sdk/Serialisation/SerializationResult.cs
+++ b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
@@ -1,4 +1,7 @@
-namespace Speckle.Sdk.Serialisation;
+using System.Buffers;
+using Speckle.Sdk.Dependencies;
+
+namespace Speckle.Sdk.Serialisation;
public readonly record struct SerializationResult(Json Json, Id? Id);
@@ -14,6 +17,26 @@ public Json(string json)
public string Value { get; }
}
+public sealed class EfficientJson : IDisposable
+{
+ private readonly ArrayBufferWriter _value;
+
+ public EfficientJson()
+ {
+ _value = Pools.ArrayBufferWriter.Get();
+ }
+
+ internal IBufferWriter Buffer => _value;
+
+ public ReadOnlySpan WrittenSpan => _value.WrittenSpan;
+
+ public ReadOnlyMemory WrittenMemory => _value.WrittenMemory;
+
+ public int WrittenCount => _value.WrittenCount;
+
+ public void Dispose() => Pools.ArrayBufferWriter.Return(_value);
+}
+
public readonly record struct Id
{
public Id(string id)
From 980342d5660d95b4f4d411df815514f136603c94 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 9 Apr 2026 13:30:34 +0100
Subject: [PATCH 03/42] temp remove test requirement
---
build/Program.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/build/Program.cs b/build/Program.cs
index 485f92c4..c120b2fb 100644
--- a/build/Program.cs
+++ b/build/Program.cs
@@ -168,7 +168,7 @@ void CheckBuildDirectory(string dir, string build)
Target(
PACK,
- dependsOn: [TEST],
+ dependsOn: [BUILD],
async () =>
{
{
From 6c0975ce44d865115c26dd398225008b730ec7b0 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 16 Apr 2026 23:09:30 +0100
Subject: [PATCH 04/42] relock
---
build/packages.lock.json | 57 ++
src/Speckle.Automate.Sdk/packages.lock.json | 792 ++++++++++++++++++
src/Speckle.Objects/packages.lock.json | 711 ++++++++++++++++
.../packages.lock.json | 364 ++++++++
src/Speckle.Sdk/packages.lock.json | 674 +++++++++++++++
.../packages.lock.json | 443 ++++++++++
.../packages.lock.json | 758 +++++++++++++++++
.../packages.lock.json | 397 +++++++++
.../packages.lock.json | 402 +++++++++
tests/Speckle.Sdk.Testing/packages.lock.json | 612 ++++++++++++++
.../packages.lock.json | 401 +++++++++
.../packages.lock.json | 390 +++++++++
.../Speckle.Sdk.Tests.Unit/packages.lock.json | 758 +++++++++++++++++
13 files changed, 6759 insertions(+)
create mode 100644 build/packages.lock.json
create mode 100644 src/Speckle.Automate.Sdk/packages.lock.json
create mode 100644 src/Speckle.Objects/packages.lock.json
create mode 100644 src/Speckle.Sdk.Dependencies/packages.lock.json
create mode 100644 src/Speckle.Sdk/packages.lock.json
create mode 100644 tests/Speckle.Automate.Sdk.Integration/packages.lock.json
create mode 100644 tests/Speckle.Objects.Tests.Unit/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Testing/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Tests.Integration/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Tests.Performance/packages.lock.json
create mode 100644 tests/Speckle.Sdk.Tests.Unit/packages.lock.json
diff --git a/build/packages.lock.json b/build/packages.lock.json
new file mode 100644
index 00000000..e2eee671
--- /dev/null
+++ b/build/packages.lock.json
@@ -0,0 +1,57 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net8.0": {
+ "Bullseye": {
+ "type": "Direct",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "fltnAJDe0BEX5eymXGUq+il2rSUA0pHqUonNDRH2TrvRu8SkU17mYG0IVpdmG2ibtfhdjNrv4CuTCxHOwcozCA=="
+ },
+ "Glob": {
+ "type": "Direct",
+ "requested": "[1.1.9, )",
+ "resolved": "1.1.9",
+ "contentHash": "AfK5+ECWYTP7G3AAdnU8IfVj+QpGjrh9GC2mpdcJzCvtQ4pnerAGwHsxJ9D4/RnhDUz2DSzd951O/lQjQby2Sw=="
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "SimpleExec": {
+ "type": "Direct",
+ "requested": "[13.0.0, )",
+ "resolved": "13.0.0",
+ "contentHash": "zcCR1pupa1wI1VqBULRiQKeHKKZOuJhi/K+4V5oO+rHJZlaOD53ViFo1c3PavDoMAfSn/FAXGAWpPoF57rwhYg=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
new file mode 100644
index 00000000..98562244
--- /dev/null
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -0,0 +1,792 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETStandard,Version=v2.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "NETStandard.Library": {
+ "type": "Direct",
+ "requested": "[2.0.3, )",
+ "resolved": "2.0.3",
+ "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Newtonsoft.Json.Schema": {
+ "type": "Direct",
+ "requested": "[4.0.1, )",
+ "resolved": "4.0.1",
+ "contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.CommandLine": {
+ "type": "Direct",
+ "requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]",
+ "resolved": "2.0.0-beta4.22272.1",
+ "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg==",
+ "dependencies": {
+ "System.Memory": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "Direct",
+ "requested": "[8.0.5, )",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.ComponentModel.Annotations": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
+ "dependencies": {
+ "System.Memory": "4.5.1",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.1"
+ }
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.ComponentModel.Annotations": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.WindowsRuntime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
+ "Microsoft.Extensions.Logging": "[2.2.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
+ "System.Text.Json": "[8.0.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "CentralTransitive",
+ "requested": "[4.7.0, )",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "2.2.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ },
+ "net10.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Newtonsoft.Json.Schema": {
+ "type": "Direct",
+ "requested": "[4.0.1, )",
+ "resolved": "4.0.1",
+ "contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.CommandLine": {
+ "type": "Direct",
+ "requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]",
+ "resolved": "2.0.0-beta4.22272.1",
+ "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ },
+ "net8.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Newtonsoft.Json.Schema": {
+ "type": "Direct",
+ "requested": "[4.0.1, )",
+ "resolved": "4.0.1",
+ "contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.CommandLine": {
+ "type": "Direct",
+ "requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]",
+ "resolved": "2.0.0-beta4.22272.1",
+ "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
new file mode 100644
index 00000000..1739ecd5
--- /dev/null
+++ b/src/Speckle.Objects/packages.lock.json
@@ -0,0 +1,711 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETStandard,Version=v2.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "NETStandard.Library": {
+ "type": "Direct",
+ "requested": "[2.0.3, )",
+ "resolved": "2.0.3",
+ "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.ComponentModel.Annotations": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
+ "dependencies": {
+ "System.Memory": "4.5.1",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.1"
+ }
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.ComponentModel.Annotations": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.WindowsRuntime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.CSharp": "[4.7.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
+ "Microsoft.Extensions.Logging": "[2.2.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
+ "System.Text.Json": "[8.0.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "CentralTransitive",
+ "requested": "[4.7.0, )",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "2.2.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "System.Text.Json": {
+ "type": "CentralTransitive",
+ "requested": "[8.0.5, )",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ }
+ },
+ "net10.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ },
+ "net8.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
new file mode 100644
index 00000000..ce1e4e40
--- /dev/null
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -0,0 +1,364 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETStandard,Version=v2.0": {
+ "ILRepack.FullAuto": {
+ "type": "Direct",
+ "requested": "[1.6.0, )",
+ "resolved": "1.6.0",
+ "contentHash": "34qp/HQ0XRIWCjtNGUOslJ6p9eNWqHXZQ+xx1iBCvXy3mj8tEiqIwRG+LubFyKCJITqMh5cpFvFl20/6+Dmy+g==",
+ "dependencies": {
+ "ILRepack": "2.0.33"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "G7p1k2xVZ+2aVANz0JdSiafr+AHDHeS1kF8+Y0ABbIsByd0erOL59IDXBs9vcdJf3pPV/murO0mbtr4k40QxWw=="
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "NETStandard.Library": {
+ "type": "Direct",
+ "requested": "[2.0.3, )",
+ "resolved": "2.0.3",
+ "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "Open.ChannelExtensions": {
+ "type": "Direct",
+ "requested": "[9.1.0, )",
+ "resolved": "9.1.0",
+ "contentHash": "D6c24vMGy1oZ06vmkD2/FNzWHK7ZIihuv2spDgYEeaUp+eobrILQnrNQKRoASFXD4JGfZ7nfvTM0e+AX79dt8Q==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "9.0.4",
+ "System.Collections.Immutable": "9.0.4",
+ "System.Threading.Channels": "9.0.4"
+ }
+ },
+ "Polly": {
+ "type": "Direct",
+ "requested": "[7.2.3, 8.0.0]",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Direct",
+ "requested": "[1.1.1, )",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Direct",
+ "requested": "[3.0.0, )",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.Text.Json": {
+ "type": "Direct",
+ "requested": "[8.0.5, )",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Threading.Channels": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "4qBn2H6/aXBpE/Pm3wY5yusY/pEvQz99NlWHrTUji0qCmOdbhhjaALcpmbfW2ksxlPM6i6S+QFLkpOQdyfeKYQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "9.0.4",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "ILRepack": {
+ "type": "Transitive",
+ "resolved": "2.0.33",
+ "contentHash": "xb2h1CsOepoYwdXEPui9VcQglwABQwNf9cccZbf+acarEzF5PUp8Xx71nFXIhOgEdm6wrxAoF6xAxK4m/XFRUQ=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "9.0.4",
+ "contentHash": "wfm2NgK22MmBe5qJjp52qzpkeDZKb4l9LbdubhZSehY1z4LS+lld6R+B+UQNb2AZRHu/QJlHxEUcRst5hIEejg==",
+ "dependencies": {
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ }
+ },
+ "net10.0": {
+ "ILRepack.FullAuto": {
+ "type": "Direct",
+ "requested": "[1.6.0, )",
+ "resolved": "1.6.0",
+ "contentHash": "34qp/HQ0XRIWCjtNGUOslJ6p9eNWqHXZQ+xx1iBCvXy3mj8tEiqIwRG+LubFyKCJITqMh5cpFvFl20/6+Dmy+g==",
+ "dependencies": {
+ "ILRepack": "2.0.33"
+ }
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "G7p1k2xVZ+2aVANz0JdSiafr+AHDHeS1kF8+Y0ABbIsByd0erOL59IDXBs9vcdJf3pPV/murO0mbtr4k40QxWw=="
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Open.ChannelExtensions": {
+ "type": "Direct",
+ "requested": "[9.1.0, )",
+ "resolved": "9.1.0",
+ "contentHash": "D6c24vMGy1oZ06vmkD2/FNzWHK7ZIihuv2spDgYEeaUp+eobrILQnrNQKRoASFXD4JGfZ7nfvTM0e+AX79dt8Q=="
+ },
+ "Polly": {
+ "type": "Direct",
+ "requested": "[7.2.3, 8.0.0]",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Direct",
+ "requested": "[1.1.1, )",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Direct",
+ "requested": "[3.0.0, )",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.Threading.Channels": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "4qBn2H6/aXBpE/Pm3wY5yusY/pEvQz99NlWHrTUji0qCmOdbhhjaALcpmbfW2ksxlPM6i6S+QFLkpOQdyfeKYQ=="
+ },
+ "ILRepack": {
+ "type": "Transitive",
+ "resolved": "2.0.33",
+ "contentHash": "xb2h1CsOepoYwdXEPui9VcQglwABQwNf9cccZbf+acarEzF5PUp8Xx71nFXIhOgEdm6wrxAoF6xAxK4m/XFRUQ=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ }
+ },
+ "net8.0": {
+ "ILRepack.FullAuto": {
+ "type": "Direct",
+ "requested": "[1.6.0, )",
+ "resolved": "1.6.0",
+ "contentHash": "34qp/HQ0XRIWCjtNGUOslJ6p9eNWqHXZQ+xx1iBCvXy3mj8tEiqIwRG+LubFyKCJITqMh5cpFvFl20/6+Dmy+g==",
+ "dependencies": {
+ "ILRepack": "2.0.33"
+ }
+ },
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "G7p1k2xVZ+2aVANz0JdSiafr+AHDHeS1kF8+Y0ABbIsByd0erOL59IDXBs9vcdJf3pPV/murO0mbtr4k40QxWw=="
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Open.ChannelExtensions": {
+ "type": "Direct",
+ "requested": "[9.1.0, )",
+ "resolved": "9.1.0",
+ "contentHash": "D6c24vMGy1oZ06vmkD2/FNzWHK7ZIihuv2spDgYEeaUp+eobrILQnrNQKRoASFXD4JGfZ7nfvTM0e+AX79dt8Q=="
+ },
+ "Polly": {
+ "type": "Direct",
+ "requested": "[7.2.3, 8.0.0]",
+ "resolved": "7.2.3",
+ "contentHash": "DeCY0OFbNdNxsjntr1gTXHJ5pKUwYzp04Er2LLeN3g6pWhffsGuKVfMBLe1lw7x76HrPkLxKEFxBlpRxS2nDEQ=="
+ },
+ "Polly.Contrib.WaitAndRetry": {
+ "type": "Direct",
+ "requested": "[1.1.1, )",
+ "resolved": "1.1.1",
+ "contentHash": "1MUQLiSo4KDkQe6nzQRhIU05lm9jlexX5BVsbuw0SL82ynZ+GzAHQxJVDPVBboxV37Po3SG077aX8DuSy8TkaA=="
+ },
+ "Polly.Extensions.Http": {
+ "type": "Direct",
+ "requested": "[3.0.0, )",
+ "resolved": "3.0.0",
+ "contentHash": "drrG+hB3pYFY7w1c3BD+lSGYvH2oIclH8GRSehgfyP5kjnFnHKQuuBhuHLv+PWyFuaTDyk/vfRpnxOzd11+J8g==",
+ "dependencies": {
+ "Polly": "7.1.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "System.Threading.Channels": {
+ "type": "Direct",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "4qBn2H6/aXBpE/Pm3wY5yusY/pEvQz99NlWHrTUji0qCmOdbhhjaALcpmbfW2ksxlPM6i6S+QFLkpOQdyfeKYQ=="
+ },
+ "ILRepack": {
+ "type": "Transitive",
+ "resolved": "2.0.33",
+ "contentHash": "xb2h1CsOepoYwdXEPui9VcQglwABQwNf9cccZbf+acarEzF5PUp8Xx71nFXIhOgEdm6wrxAoF6xAxK4m/XFRUQ=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
new file mode 100644
index 00000000..1b9fa3a0
--- /dev/null
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -0,0 +1,674 @@
+{
+ "version": 2,
+ "dependencies": {
+ ".NETStandard,Version=v2.0": {
+ "GraphQL.Client": {
+ "type": "Direct",
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.CSharp": {
+ "type": "Direct",
+ "requested": "[4.7.0, )",
+ "resolved": "4.7.0",
+ "contentHash": "pTj+D3uJWyN3My70i2Hqo+OXixq3Os2D1nJ2x92FFo6sk8fYS1m1WLNTs0Dc1uPaViH0YvEEwvzddQ7y4rhXmA=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Direct",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[2.2.0, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Direct",
+ "requested": "[2.2.0, )",
+ "resolved": "2.2.0",
+ "contentHash": "Nxqhadc9FCmFHzU+fz3oc8sFlE6IadViYg8dfUdGzJZ2JUxnCsRghBhhOWdM4B2zSZqEc+0BjliBh/oNdRZuig==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Binder": "2.2.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Logging.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Options": "2.2.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "NETStandard.Library": {
+ "type": "Direct",
+ "requested": "[2.0.3, )",
+ "resolved": "2.0.3",
+ "contentHash": "st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "1.1.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.Configuration": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "nOP8R1mVb/6mZtm2qgAJXn/LFm/2kMjHDAg/QJLFG6CuWYJtaD3p1BwQhufBVvRzL9ceJ/xF0SQ0qsI2GkDQAA==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "65MrmXCziWaQFrI0UHkQbesrX5wTwf9XPjY5yFm/VkgJKFJ5gqvXRoXjIZcf2wLi5ZlwGz/oMYfyURVCWbM5iw==",
+ "dependencies": {
+ "Microsoft.Extensions.Primitives": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.Configuration.Binder": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "vJ9xvOZCnUAIHcGC3SU35r3HKmHTVIeHzo6u/qzlHAqD8m6xv92MLin4oJntTvkpKxVX3vI1GFFkIQtU3AdlsQ==",
+ "dependencies": {
+ "Microsoft.Extensions.Configuration": "2.2.0"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "f9hstgjVmr6rmrfGSpfsVOl2irKAgr1QjrSi3FgnS7kulxband50f2brRLwySAQTADPZeTdow0mpSMcoAdadCw=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "B2WqEox8o+4KUOpL7rZPyh6qYjik8tHi2tN8Z9jZkHzED8ElYgZa/h6K+xliB435SqUcWT290Fr2aa8BtZjn8A=="
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "UpZLNLBpIZ0GTebShui7xXYh6DmBHjWM8NxGxZbdQh/bPZ5e6YswqI+bru6BnEL5eWiOdodsXtEz3FROcgi/qg==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0",
+ "Microsoft.Extensions.Primitives": "2.2.0",
+ "System.ComponentModel.Annotations": "4.5.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "2.2.0",
+ "contentHash": "azyQtqbm4fSaDzZHD/J+V6oWMFaf2tWP4WEGIYePLCMw3+b2RQdj9ybgbQyjCshcitQKQ4lEDOZjmSlTTrHxUg==",
+ "dependencies": {
+ "System.Memory": "4.5.1",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.1"
+ }
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "1.1.0",
+ "contentHash": "kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Buffers": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ },
+ "System.ComponentModel.Annotations": {
+ "type": "Transitive",
+ "resolved": "4.5.0",
+ "contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "System.Numerics.Vectors": {
+ "type": "Transitive",
+ "resolved": "4.4.0",
+ "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ==",
+ "dependencies": {
+ "System.Runtime.InteropServices.WindowsRuntime": "4.3.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ },
+ "System.Runtime.InteropServices.WindowsRuntime": {
+ "type": "Transitive",
+ "resolved": "4.3.0",
+ "contentHash": "J4GUi3xZQLUBasNwZnjrffN8i5wpHrBtZoLG+OhRyGo/+YunMRWWtwoMDlUAIdmX0uRfpHIBDSV6zyr3yf00TA=="
+ },
+ "System.Text.Encodings.Web": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "dependencies": {
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
+ "System.Text.Json": "[8.0.5, )"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "9.0.4",
+ "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
+ "dependencies": {
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "System.Text.Json": {
+ "type": "CentralTransitive",
+ "requested": "[8.0.5, )",
+ "resolved": "8.0.5",
+ "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.5",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "8.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ }
+ },
+ "net10.0": {
+ "GraphQL.Client": {
+ "type": "Direct",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Direct",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Direct",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ }
+ },
+ "net8.0": {
+ "GraphQL.Client": {
+ "type": "Direct",
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "Direct",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "Direct",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
new file mode 100644
index 00000000..ea487e10
--- /dev/null
+++ b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
@@ -0,0 +1,443 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.6",
+ "contentHash": "w+dX4SIr1X9yegX2yX2dU1XtP4JAUVNdvOG/Evn+H+ndn96YzfIPX52FALXChrRNWFR9l77FQyg1mB7WQo6iOA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.analyzers": {
+ "type": "Transitive",
+ "resolved": "1.18.0",
+ "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ=="
+ },
+ "xunit.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]",
+ "xunit.extensibility.execution": "[2.9.3]"
+ }
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.automate.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "Newtonsoft.Json.Schema": "[4.0.1, )",
+ "Speckle.Objects": "[1.0.0, )",
+ "System.CommandLine": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]"
+ }
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "speckle.sdk.tests.integration": {
+ "type": "Project",
+ "dependencies": {
+ "AwesomeAssertions": "[9.4.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.6, )",
+ "Microsoft.NET.Test.Sdk": "[18.3.0, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Speckle.Sdk.Testing": "[1.0.0, )",
+ "altcover": "[9.0.102, )",
+ "xunit": "[2.9.3, )",
+ "xunit.runner.visualstudio": "[3.1.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.6",
+ "contentHash": "poUvwtf92bEs8uBH3aRRs/ZgiAw+Z485EU7TtVPBt//MmD0uMPERe7+v3Ur7lpD8XgIEDL9sDoTBcW1LMG97CQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.6"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Newtonsoft.Json.Schema": {
+ "type": "CentralTransitive",
+ "requested": "[4.0.1, )",
+ "resolved": "4.0.1",
+ "contentHash": "rbHUKp5WTIbqmLEeJ21nTTDGcfR0LA7bVMzm0bYc3yx6NFKiCIHzzvYbwA4Sqgs7+wNldc5nBlkbithWj8IZig==",
+ "dependencies": {
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "System.CommandLine": {
+ "type": "CentralTransitive",
+ "requested": "[2.0.0-beta4.22272.1, 2.0.0-beta4.22272.1]",
+ "resolved": "2.0.0-beta4.22272.1",
+ "contentHash": "1uqED/q2H0kKoLJ4+hI2iPSBSEdTuhfCYADeJrAqERmiGQ2NNacYKRNEQ+gFbU4glgVyK8rxI+ZOe1onEtr/Pg=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ },
+ "xunit": {
+ "type": "CentralTransitive",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==",
+ "dependencies": {
+ "xunit.analyzers": "1.18.0",
+ "xunit.assert": "2.9.3",
+ "xunit.core": "[2.9.3]"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Objects.Tests.Unit/packages.lock.json b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
new file mode 100644
index 00000000..26da497d
--- /dev/null
+++ b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
@@ -0,0 +1,758 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ }
+ },
+ "net8.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
new file mode 100644
index 00000000..01de9cb8
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
@@ -0,0 +1,397 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net8.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "BenchmarkDotNet.Annotations": {
+ "type": "Transitive",
+ "resolved": "0.14.0",
+ "contentHash": "CUDCg6bgHrDzhjnA+IOBl5gAo8Y5hZ2YSs7MBXrYMlMKpBZqrD5ez0537uDveOkcf+YWAoK+S4sMcuWPbIz8bw=="
+ },
+ "CommandLineParser": {
+ "type": "Transitive",
+ "resolved": "2.9.1",
+ "contentHash": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA=="
+ },
+ "Gee.External.Capstone": {
+ "type": "Transitive",
+ "resolved": "2.3.0",
+ "contentHash": "2ap/rYmjtzCOT8hxrnEW/QeiOt+paD8iRrIcdKX0cxVwWLFa1e+JDBNeECakmccXrSFeBQuu5AV8SNkipFMMMw=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Iced": {
+ "type": "Transitive",
+ "resolved": "1.17.0",
+ "contentHash": "8x+HCVTl/HHTGpscH3vMBhV8sknN/muZFw9s3TsI8SA6+c43cOTCi2+jE4KsU8pNLbJ++iF2ZFcpcXHXtDglnw=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeAnalysis.Analyzers": {
+ "type": "Transitive",
+ "resolved": "3.3.3",
+ "contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ=="
+ },
+ "Microsoft.CodeAnalysis.Common": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "bNzTyxP3iD5FPFHfVDl15Y6/wSoI7e3MeV0lOaj9igbIKTjgrmuw6LoVJ06jUNFA7+KaDC/OIsStWl/FQJz6sQ==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "3.3.3",
+ "System.Collections.Immutable": "5.0.0",
+ "System.Memory": "4.5.4",
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encoding.CodePages": "4.5.1",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "sbu6kDGzo9bfQxuqWpeEE7I9P30bSuZEnpDz9/qz20OU6pm79Z63+/BsAzO2e/R/Q97kBrpj647wokZnEVr97w==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[4.1.0]"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Diagnostics.NETCore.Client": {
+ "type": "Transitive",
+ "resolved": "0.2.251802",
+ "contentHash": "bqnYl6AdSeboeN4v25hSukK6Odm6/54E3Y2B8rBvgqvAW0mF8fo7XNRVE2DMOG7Rk0fiuA079QIH28+V+W1Zdg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.0",
+ "Microsoft.Extensions.Logging": "2.1.1"
+ }
+ },
+ "Microsoft.Diagnostics.Runtime": {
+ "type": "Transitive",
+ "resolved": "2.2.332302",
+ "contentHash": "Hp84ivxSKIMTBzYSATxmUsm3YSXHWivcwiRRbsydGmqujMUK8BAueLN0ssAVEOkOBmh0vjUBhrq7YcroT7VCug==",
+ "dependencies": {
+ "Microsoft.Diagnostics.NETCore.Client": "0.2.251802",
+ "System.Collections.Immutable": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "Microsoft.Diagnostics.Tracing.TraceEvent": {
+ "type": "Transitive",
+ "resolved": "3.1.8",
+ "contentHash": "kl3UMrZKSeSEYZ8rt/GjLUQToREjgQABqfg6PzQBmSlYHTZOKE9ePEOS2xptROQ9SVvngg3QGX51TIT11iZ0wA==",
+ "dependencies": {
+ "Microsoft.Win32.Registry": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "Microsoft.DotNet.PlatformAbstractions": {
+ "type": "Transitive",
+ "resolved": "3.1.6",
+ "contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg=="
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.Win32.Registry": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "Perfolizer": {
+ "type": "Transitive",
+ "resolved": "0.3.17",
+ "contentHash": "FQgtCoF2HFwvzKWulAwBS5BGLlh8pgbrJtOp47jyBwh2CW16juVtacN1azOA2BqdrJXkXTNLNRMo7ZlHHiuAnA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "JPJArwA1kdj8qDAkY2XGjSWoYnqiM7q/3yRNkt6n28Mnn95MuEGkZXUbPBf7qc3IjwrGY5ttQon7yqHZyQJmOQ=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g=="
+ },
+ "System.Management": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MF1CHaRcC+MLFdnDthv4/bKWBZnlnSpkGqa87pKukQefgEdwtb9zFW6zs0GjPp73qtpYYg4q6PEKbzJbxCpKfw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "Microsoft.Win32.Registry": "5.0.0",
+ "System.CodeDom": "5.0.0"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "System.Security.AccessControl": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.Security.Principal.Windows": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
+ },
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "2.1.2",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.tests.performance": {
+ "type": "Project",
+ "dependencies": {
+ "BenchmarkDotNet": "[0.14.0, )",
+ "Speckle.Objects": "[1.0.0, )"
+ }
+ },
+ "BenchmarkDotNet": {
+ "type": "CentralTransitive",
+ "requested": "[0.14.0, )",
+ "resolved": "0.14.0",
+ "contentHash": "eIPSDKi3oni734M1rt/XJAwGQQOIf9gLjRRKKJ0HuVy3vYd7gnmAIX1bTjzI9ZbAY/nPddgqqgM/TeBYitMCIg==",
+ "dependencies": {
+ "BenchmarkDotNet.Annotations": "0.14.0",
+ "CommandLineParser": "2.9.1",
+ "Gee.External.Capstone": "2.3.0",
+ "Iced": "1.17.0",
+ "Microsoft.CodeAnalysis.CSharp": "4.1.0",
+ "Microsoft.Diagnostics.Runtime": "2.2.332302",
+ "Microsoft.Diagnostics.Tracing.TraceEvent": "3.1.8",
+ "Microsoft.DotNet.PlatformAbstractions": "3.1.6",
+ "Perfolizer": "[0.3.17]",
+ "System.Management": "5.0.0"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "1.1.0",
+ "contentHash": "1Am6l4Vpn3/K32daEqZI+FFr96OlZkgwK2LcT3pZ2zWubR5zTPW3/FkO1Rat9kb7oQOa4rxgl9LJHc5tspCWfg=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
new file mode 100644
index 00000000..5391cfa7
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
@@ -0,0 +1,402 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "HttpMultipartParser": {
+ "type": "Direct",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "/1hHkZSQs/JJuGcpNNS9aVodce6H8/iEGoHA/1ua7kJAo46XA9DbbCoI//JDB03qprvT00AaV/4VwfMFO7lcAg==",
+ "dependencies": {
+ "Microsoft.IO.RecyclableMemoryStream": "3.0.1"
+ }
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Moq": {
+ "type": "Direct",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "RichardSzalay.MockHttp": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.IO.RecyclableMemoryStream": {
+ "type": "Transitive",
+ "resolved": "3.0.1",
+ "contentHash": "s/s20YTVY9r9TPfTrN5g8zPF1YhwxyqO6PxUkrYTGI2B+OGPe9AdajWZrLhFqXIvqIW23fnUE4+ztrUWNU1+9g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Testing/packages.lock.json b/tests/Speckle.Sdk.Testing/packages.lock.json
new file mode 100644
index 00000000..764913b1
--- /dev/null
+++ b/tests/Speckle.Sdk.Testing/packages.lock.json
@@ -0,0 +1,612 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Moq": {
+ "type": "Direct",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Verify.Quibble": {
+ "type": "Direct",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "Direct",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ },
+ "net8.0": {
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "Moq": {
+ "type": "Direct",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "Verify.Quibble": {
+ "type": "Direct",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "Direct",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
new file mode 100644
index 00000000..573fe4c8
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
@@ -0,0 +1,401 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.6",
+ "contentHash": "poUvwtf92bEs8uBH3aRRs/ZgiAw+Z485EU7TtVPBt//MmD0uMPERe7+v3Ur7lpD8XgIEDL9sDoTBcW1LMG97CQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.6"
+ }
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "TlXQBinK35LpOPKHAqbLY4xlEen9TBafjs0V5KnA4wZsoQLQJiirCR4CbIXvOH8NzkW4YeJKP5P/Bnrodm0h9Q==",
+ "dependencies": {
+ "xunit.analyzers": "1.18.0",
+ "xunit.assert": "2.9.3",
+ "xunit.core": "[2.9.3]"
+ }
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.6",
+ "contentHash": "w+dX4SIr1X9yegX2yX2dU1XtP4JAUVNdvOG/Evn+H+ndn96YzfIPX52FALXChrRNWFR9l77FQyg1mB7WQo6iOA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.analyzers": {
+ "type": "Transitive",
+ "resolved": "1.18.0",
+ "contentHash": "OtFMHN8yqIcYP9wcVIgJrq01AfTxijjAqVDy/WeQVSyrDC1RzBWeQPztL49DN2syXRah8TYnfvk035s7L95EZQ=="
+ },
+ "xunit.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "BiAEvqGvyme19wE0wTKdADH+NloYqikiU0mcnmiNyXaF9HyHmE6sr/3DC5vnBkgsWaE6yPyWszKSPSApWdRVeQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]",
+ "xunit.extensibility.execution": "[2.9.3]"
+ }
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ },
+ "xunit.assert": {
+ "type": "CentralTransitive",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
new file mode 100644
index 00000000..0eb1c685
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
@@ -0,0 +1,390 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net8.0": {
+ "BenchmarkDotNet": {
+ "type": "Direct",
+ "requested": "[0.14.0, )",
+ "resolved": "0.14.0",
+ "contentHash": "eIPSDKi3oni734M1rt/XJAwGQQOIf9gLjRRKKJ0HuVy3vYd7gnmAIX1bTjzI9ZbAY/nPddgqqgM/TeBYitMCIg==",
+ "dependencies": {
+ "BenchmarkDotNet.Annotations": "0.14.0",
+ "CommandLineParser": "2.9.1",
+ "Gee.External.Capstone": "2.3.0",
+ "Iced": "1.17.0",
+ "Microsoft.CodeAnalysis.CSharp": "4.1.0",
+ "Microsoft.Diagnostics.Runtime": "2.2.332302",
+ "Microsoft.Diagnostics.Tracing.TraceEvent": "3.1.8",
+ "Microsoft.DotNet.PlatformAbstractions": "3.1.6",
+ "Perfolizer": "[0.3.17]",
+ "System.Management": "5.0.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "BenchmarkDotNet.Annotations": {
+ "type": "Transitive",
+ "resolved": "0.14.0",
+ "contentHash": "CUDCg6bgHrDzhjnA+IOBl5gAo8Y5hZ2YSs7MBXrYMlMKpBZqrD5ez0537uDveOkcf+YWAoK+S4sMcuWPbIz8bw=="
+ },
+ "CommandLineParser": {
+ "type": "Transitive",
+ "resolved": "2.9.1",
+ "contentHash": "OE0sl1/sQ37bjVsPKKtwQlWDgqaxWgtme3xZz7JssWUzg5JpMIyHgCTY9MVMxOg48fJ1AgGT3tgdH5m/kQ5xhA=="
+ },
+ "Gee.External.Capstone": {
+ "type": "Transitive",
+ "resolved": "2.3.0",
+ "contentHash": "2ap/rYmjtzCOT8hxrnEW/QeiOt+paD8iRrIcdKX0cxVwWLFa1e+JDBNeECakmccXrSFeBQuu5AV8SNkipFMMMw=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Iced": {
+ "type": "Transitive",
+ "resolved": "1.17.0",
+ "contentHash": "8x+HCVTl/HHTGpscH3vMBhV8sknN/muZFw9s3TsI8SA6+c43cOTCi2+jE4KsU8pNLbJ++iF2ZFcpcXHXtDglnw=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeAnalysis.Analyzers": {
+ "type": "Transitive",
+ "resolved": "3.3.3",
+ "contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ=="
+ },
+ "Microsoft.CodeAnalysis.Common": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "bNzTyxP3iD5FPFHfVDl15Y6/wSoI7e3MeV0lOaj9igbIKTjgrmuw6LoVJ06jUNFA7+KaDC/OIsStWl/FQJz6sQ==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Analyzers": "3.3.3",
+ "System.Collections.Immutable": "5.0.0",
+ "System.Memory": "4.5.4",
+ "System.Reflection.Metadata": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encoding.CodePages": "4.5.1",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
+ "Microsoft.CodeAnalysis.CSharp": {
+ "type": "Transitive",
+ "resolved": "4.1.0",
+ "contentHash": "sbu6kDGzo9bfQxuqWpeEE7I9P30bSuZEnpDz9/qz20OU6pm79Z63+/BsAzO2e/R/Q97kBrpj647wokZnEVr97w==",
+ "dependencies": {
+ "Microsoft.CodeAnalysis.Common": "[4.1.0]"
+ }
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Diagnostics.NETCore.Client": {
+ "type": "Transitive",
+ "resolved": "0.2.251802",
+ "contentHash": "bqnYl6AdSeboeN4v25hSukK6Odm6/54E3Y2B8rBvgqvAW0mF8fo7XNRVE2DMOG7Rk0fiuA079QIH28+V+W1Zdg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "1.1.0",
+ "Microsoft.Extensions.Logging": "2.1.1"
+ }
+ },
+ "Microsoft.Diagnostics.Runtime": {
+ "type": "Transitive",
+ "resolved": "2.2.332302",
+ "contentHash": "Hp84ivxSKIMTBzYSATxmUsm3YSXHWivcwiRRbsydGmqujMUK8BAueLN0ssAVEOkOBmh0vjUBhrq7YcroT7VCug==",
+ "dependencies": {
+ "Microsoft.Diagnostics.NETCore.Client": "0.2.251802",
+ "System.Collections.Immutable": "5.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "Microsoft.Diagnostics.Tracing.TraceEvent": {
+ "type": "Transitive",
+ "resolved": "3.1.8",
+ "contentHash": "kl3UMrZKSeSEYZ8rt/GjLUQToREjgQABqfg6PzQBmSlYHTZOKE9ePEOS2xptROQ9SVvngg3QGX51TIT11iZ0wA==",
+ "dependencies": {
+ "Microsoft.Win32.Registry": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0"
+ }
+ },
+ "Microsoft.DotNet.PlatformAbstractions": {
+ "type": "Transitive",
+ "resolved": "3.1.6",
+ "contentHash": "jek4XYaQ/PGUwDKKhwR8K47Uh1189PFzMeLqO83mXrXQVIpARZCcfuDedH50YDTepBkfijCZN5U/vZi++erxtg=="
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.NETCore.Platforms": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "VyPlqzH2wavqquTcYpkIIAQ6WdenuKoFN0BdYBbCWsclXacSOHNQn66Gt4z5NBqEYW0FAPm5rlvki9ZiCij5xQ=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.Win32.Registry": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dDoKi0PnDz31yAyETfRntsLArTlVAVzUzCIvvEDsDsucrl33Dl8pIJG06ePTJTI3tGpeyHS9Cq7Foc/s4EeKcg==",
+ "dependencies": {
+ "System.Security.AccessControl": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "Perfolizer": {
+ "type": "Transitive",
+ "resolved": "0.3.17",
+ "contentHash": "FQgtCoF2HFwvzKWulAwBS5BGLlh8pgbrJtOp47jyBwh2CW16juVtacN1azOA2BqdrJXkXTNLNRMo7ZlHHiuAnA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA==",
+ "dependencies": {
+ "System.Memory": "4.5.3"
+ }
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.CodeDom": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "JPJArwA1kdj8qDAkY2XGjSWoYnqiM7q/3yRNkt6n28Mnn95MuEGkZXUbPBf7qc3IjwrGY5ttQon7yqHZyQJmOQ=="
+ },
+ "System.Collections.Immutable": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "FXkLXiK0sVVewcso0imKQoOxjoPAj42R8HtjjbSjVPAzwDfzoyoznWxgA3c38LDbN9SJux1xXoXYAhz98j7r2g=="
+ },
+ "System.Management": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "MF1CHaRcC+MLFdnDthv4/bKWBZnlnSpkGqa87pKukQefgEdwtb9zFW6zs0GjPp73qtpYYg4q6PEKbzJbxCpKfw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "Microsoft.Win32.Registry": "5.0.0",
+ "System.CodeDom": "5.0.0"
+ }
+ },
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "System.Reflection.Metadata": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "5NecZgXktdGg34rh1OenY1rFNDCI8xSjFr+Z4OU4cU06AQHUdRnIIEeWENu3Wl4YowbzkymAIMvi3WyK9U53pQ=="
+ },
+ "System.Runtime.CompilerServices.Unsafe": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
+ },
+ "System.Security.AccessControl": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "dagJ1mHZO3Ani8GH0PHpPEe/oYO+rVdbQjvjJkBRNQkX4t0r1iaeGn8+/ybkSLEan3/slM0t59SVdHzuHf2jmw==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "5.0.0",
+ "System.Security.Principal.Windows": "5.0.0"
+ }
+ },
+ "System.Security.Principal.Windows": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "t0MGLukB5WAVU9bO3MGzvlGnyJPgUlcwerXn1kzBRjwLKixT96XV0Uza41W49gVd8zEMFu9vQEFlv0IOrytICA=="
+ },
+ "System.Text.Encoding.CodePages": {
+ "type": "Transitive",
+ "resolved": "4.5.1",
+ "contentHash": "4J2JQXbftjPMppIHJ7IC+VXQ9XfEagN92vZZNoG12i+zReYlim5dMoXFC1Zzg7tsnKDM7JPo5bYfFK4Jheq44w==",
+ "dependencies": {
+ "Microsoft.NETCore.Platforms": "2.1.2",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.2"
+ }
+ },
+ "System.Threading.Tasks.Extensions": {
+ "type": "Transitive",
+ "resolved": "4.5.4",
+ "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg=="
+ },
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Bcl.AsyncInterfaces": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "1.1.0",
+ "contentHash": "1Am6l4Vpn3/K32daEqZI+FFr96OlZkgwK2LcT3pZ2zWubR5zTPW3/FkO1Rat9kb7oQOa4rxgl9LJHc5tspCWfg=="
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "CentralTransitive",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
new file mode 100644
index 00000000..c975129e
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
@@ -0,0 +1,758 @@
+{
+ "version": 2,
+ "dependencies": {
+ "net10.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "RichardSzalay.MockHttp": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg=="
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "Za31wjKLEeROZYJmp0Lmj/TLQ1Yw6x6QM0JHABcuyMC3OSopr34ufayrtdxtbL1a3129FTVFKOFC0hcooSQoJQ==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.1.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "PjdG3q4MzPsa5NiBOBhuIRMRTo59der5bFmX2r1gSS3RIjytwpooxF2RffFCBh16sqbwuH1/dllDcNG+EJt1qA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.1.0",
+ "contentHash": "L8yQ70Wd9p8hMJvnmpgyZfr2R6Q7S0/lPyEBI1tacJa5XzsoJSVtHdmfsMaHyufwk03hlUsBXgNerAs66kxHdA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "wPKG/Ym6tSMCo06UOZXzVfeFGzawnOZrTba/R3PfK+RhNuNELZ9I7nFns4WGTtv2kKlrlmmErgJ+kgTXHaNdHg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "DC4nA7yWnf4UZdgJDF+9Mus4/cb0Y3Sfgi3gDnAoKNAIBwzkskNAbNbyu+u4atT0ruVlZNJfwZmwiEwE5oz9LQ==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.11"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "PK0GLFkfhZzLQeR3PJf71FmhtHox+U3vcY6ZtswoMjrefkB9k6ErNJEnwXqc5KgXDSjige2XXrezqS39gkpQKA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Ev2ytaXiOlWZ4b3R67GZBsemTINslLD1DCJr2xiacpn4tbapu0Q4dHEzSvZSMnVWeE5nlObU3VZN2p81q3XOYQ=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.11",
+ "contentHash": "Y/0ZkR+r0Cg3DQFuCl1RBnv/tmxpIZRU3HUvelPw6MVaKHwYYR8YNvgs0vuNuXCMvlyJ+Fh88U1D4tah1tt6qw==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "31kfaW4ZupZzPsI5PVe77VhnvFF55qgma7KZr/E0iFTs6fmdhhG8j0mgEx620iLTey1EynOkEfnyTjtNEpJzGw=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.1.0",
+ "contentHash": "oKliAxtNuZDMxO9079mjSbwA0YwhjXBzVnVPuNZ3HI4OllO++CcOLT30l90mM/fxCAMaa8GU4ZYMwD9YjLkyiw==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.1.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.1.0",
+ "System.Reactive": "6.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "10.0.0",
+ "contentHash": "I/azQ5WjwoLvSlTyDydkhARPSjYJN8jkXRjR5D92OeyTLbTrQ1K93rgf6XU+HYWHZA6lBI9SUOfl69OqEHb4ow==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "10.0.0",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.11",
+ "SQLitePCLRaw.core": "2.1.11"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ }
+ },
+ "net8.0": {
+ "altcover": {
+ "type": "Direct",
+ "requested": "[9.0.102, )",
+ "resolved": "9.0.102",
+ "contentHash": "q3Rf5t0M9kXlcO5qhsaAe6NrFSNd5enrhKmF/Ezgmomqw34PbUTbRSYjSDNhS3YGDyUrPTkyPn14EfLDJWztcA=="
+ },
+ "AwesomeAssertions": {
+ "type": "Direct",
+ "requested": "[9.4.0, )",
+ "resolved": "9.4.0",
+ "contentHash": "dJxkWiQ8D+xT6Gr2sSL83+Mar+Vpy2JTcUPxFcckpPJ8VYBfSgnk+zqpS6t7kcGnjz8NLyF14qfuoL4bKzzoew=="
+ },
+ "Microsoft.NET.Test.Sdk": {
+ "type": "Direct",
+ "requested": "[18.3.0, )",
+ "resolved": "18.3.0",
+ "contentHash": "xW3kXuWRQtgoxJp4J+gdhHSQyK+6Wb/AZDSd7lMvuMRYlZ1tnpkojyfZlWilB5G4dmZ0Y0ZxU/M23TlubndNkw==",
+ "dependencies": {
+ "Microsoft.CodeCoverage": "18.3.0",
+ "Microsoft.TestPlatform.TestHost": "18.3.0"
+ }
+ },
+ "Microsoft.SourceLink.GitHub": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
+ "dependencies": {
+ "Microsoft.Build.Tasks.Git": "8.0.0",
+ "Microsoft.SourceLink.Common": "8.0.0"
+ }
+ },
+ "PolySharp": {
+ "type": "Direct",
+ "requested": "[1.15.0, )",
+ "resolved": "1.15.0",
+ "contentHash": "FbU0El+EEjdpuIX4iDbeS7ki1uzpJPx8vbqOzEtqnl1GZeAGJfq+jCbxeJL2y0EPnUNk8dRnnqR2xnYXg9Tf+g=="
+ },
+ "RichardSzalay.MockHttp": {
+ "type": "Direct",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "QwnauYiaywp65QKFnP+wvgiQ2D8Pv888qB2dyfd7MSVDF06sIvxqASenk+RxsWybyyt+Hu1Y251wQxpHTv3UYg=="
+ },
+ "Speckle.DoubleNumerics": {
+ "type": "Direct",
+ "requested": "[4.1.0, )",
+ "resolved": "4.1.0",
+ "contentHash": "20DtS+FsDRsOD9+AU3TwNFZ0qrKo5f6f7B5ZR9wStsIHHHC9k7DpjbCvuNtmnSjx54MD+TJC7wV2f5iyGVPj1A=="
+ },
+ "Speckle.InterfaceGenerator": {
+ "type": "Direct",
+ "requested": "[0.9.6, )",
+ "resolved": "0.9.6",
+ "contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
+ },
+ "xunit.assert": {
+ "type": "Direct",
+ "requested": "[2.9.3, )",
+ "resolved": "2.9.3",
+ "contentHash": "/Kq28fCE7MjOV42YLVRAJzRF0WmEqsmflm0cfpMjGtzQ2lR5mYVj1/i0Y8uDAOLczkL3/jArrwehfMD0YogMAA=="
+ },
+ "xunit.runner.visualstudio": {
+ "type": "Direct",
+ "requested": "[3.1.5, )",
+ "resolved": "3.1.5",
+ "contentHash": "tKi7dSTwP4m5m9eXPM2Ime4Kn7xNf4x4zT9sdLO/G4hZVnQCRiMTWoSZqI/pYTVeI27oPPqHBKYI/DjJ9GsYgA=="
+ },
+ "Argon": {
+ "type": "Transitive",
+ "resolved": "0.33.5",
+ "contentHash": "J6821zxO+EqMzO9C/V5uiWc2eBGyzN7Z8Z0xq3Q1/e6IxYcHDA32OgiZX5/7/f8rVPQQa7aYtm6f0UfnrgKNBg=="
+ },
+ "Castle.Core": {
+ "type": "Transitive",
+ "resolved": "5.1.1",
+ "contentHash": "rpYtIczkzGpf+EkZgDr9CClTdemhsrwA/W5hMoPjLkRFnXzH44zDLoovXeKtmxb1ykXK9aJVODSpiJml8CTw2g==",
+ "dependencies": {
+ "System.Diagnostics.EventLog": "6.0.0"
+ }
+ },
+ "DiffEngine": {
+ "type": "Transitive",
+ "resolved": "18.4.1",
+ "contentHash": "9/E4N4auQW4iOKPxP6MpGihpuw0uaxfiLLJfraKrqv02cG2LzVx3ocFwIss70mQFwAolrq58zv5NHwMaqT3+3A==",
+ "dependencies": {
+ "EmptyFiles": "8.17.2"
+ }
+ },
+ "EmptyFiles": {
+ "type": "Transitive",
+ "resolved": "8.17.2",
+ "contentHash": "2oyDVmM/DU3g0h2kqcV05zjOUfo9AdwPoduIGh0LZL6nXqSN4qhZna2M/aJoYiQrmIznJ52wxYCmxDnWaRZ1JQ=="
+ },
+ "FSharp.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.300",
+ "contentHash": "8vvItREJ1l5lcp3vBCSJ1mFevVAhR48I34DuF/EoUa7o1KlFpQpagyuZkVYMAsHPIjdp47ZxM9sI4eqeXaeWkA=="
+ },
+ "GraphQL.Client.Abstractions": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "h7uzWFORHZ+CCjwr/ThAyXMr0DPpzEANDa4Uo54wqCQ+j7qUKwqYTgOrb1W40sqbvNaZm9v/X7It31SUw0maHA==",
+ "dependencies": {
+ "GraphQL.Primitives": "6.0.0"
+ }
+ },
+ "GraphQL.Client.Abstractions.Websocket": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "Nr9bPf8gIOvLuXpqEpqr9z9jslYFJOvd0feHth3/kPqeR3uMbjF5pjiwh4jxyMcxHdr8Pb6QiXkV3hsSyt0v7A==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0"
+ }
+ },
+ "GraphQL.Primitives": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "yg72rrYDapfsIUrul7aF6wwNnTJBOFvuA9VdDTQpPa8AlAriHbufeXYLBcodKjfUdkCnaiggX1U/nEP08Zb5GA=="
+ },
+ "Microsoft.Build.Tasks.Git": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
+ },
+ "Microsoft.CodeCoverage": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "23BNy/vziREC20Wwhb50K7+kZe0m07KlLWDQv4qjJ9tt3QjpDpDIqJFrhYHmMEo9xDkuSp55U/8h4bMF7MiB+g=="
+ },
+ "Microsoft.Data.Sqlite.Core": {
+ "type": "Transitive",
+ "resolved": "7.0.5",
+ "contentHash": "FTerRmQPqHrCrnoUzhBu+E+1DNGwyrAMLqHkAqOOOu5pGfyMOj8qQUBxI/gDtWtG11p49UxSfWmBzRNlwZqfUg==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ },
+ "Microsoft.Extensions.Logging.Abstractions": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Options": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Primitives": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ },
+ "Microsoft.SourceLink.Common": {
+ "type": "Transitive",
+ "resolved": "8.0.0",
+ "contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
+ },
+ "Microsoft.TestPlatform.ObjectModel": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "AEIEX2aWdPO9XbtR96eBaJxmXRD9vaI9uQ1T/JbPEKlTAZwYx0ZrMzKyULMdh/HH9Sg03kXCoN7LszQ90o6nPQ=="
+ },
+ "Microsoft.TestPlatform.TestHost": {
+ "type": "Transitive",
+ "resolved": "18.3.0",
+ "contentHash": "twmsoelXnp1uWMU3VGip9f0Jr1mZ0PZqgJdF35CIrdYgYrkHIJMV1m8uKyhcdjLdsQDESHAgkR7KhS9i1qpJag==",
+ "dependencies": {
+ "Microsoft.TestPlatform.ObjectModel": "18.3.0",
+ "Newtonsoft.Json": "13.0.3"
+ }
+ },
+ "Newtonsoft.Json": {
+ "type": "Transitive",
+ "resolved": "13.0.3",
+ "contentHash": "HrC5BXdl00IP9zeV+0Z848QWPAoCr9P3bDEZguI+gkLcBKAOxix/tLEAAHC+UvDNPv4a2d18lOReHMOagPa+zQ=="
+ },
+ "Quibble": {
+ "type": "Transitive",
+ "resolved": "0.3.1",
+ "contentHash": "LD6bz2p+4O/BQnmD4mqFZrmdN/IjsPo1wUvfmcH46Q05ng+dyMLl3d2ylj0x412F4fpJEtm0Z3EaCAx4FqgNuQ==",
+ "dependencies": {
+ "FSharp.Core": "7.0.300"
+ }
+ },
+ "SimpleInfoName": {
+ "type": "Transitive",
+ "resolved": "3.2.0",
+ "contentHash": "K8ivHRbPWfncijk62Dan/r/z55gwq3aFzqB6yFlD9X0bbpIaacHyHH2cpcIdz0FECUpERUZTwxts0z4gRWpQpA=="
+ },
+ "SQLitePCLRaw.bundle_e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "EWI1olKDjFEBMJu0+3wuxwziIAdWDVMYLhuZ3Qs84rrz+DHwD00RzWPZCa+bLnHCf3oJwuFZIRsHT5p236QXww==",
+ "dependencies": {
+ "SQLitePCLRaw.lib.e_sqlite3": "2.1.4",
+ "SQLitePCLRaw.provider.e_sqlite3": "2.1.4"
+ }
+ },
+ "SQLitePCLRaw.core": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "inBjvSHo9UDKneGNzfUfDjK08JzlcIhn1+SP5Y3m6cgXpCxXKCJDy6Mka7LpgSV+UZmKSnC8rTwB0SQ0xKu5pA=="
+ },
+ "SQLitePCLRaw.lib.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "2C9Q9eX7CPLveJA0rIhf9RXAvu+7nWZu1A2MdG6SD/NOu26TakGgL1nsbc0JAspGijFOo3HoN79xrx8a368fBg=="
+ },
+ "SQLitePCLRaw.provider.e_sqlite3": {
+ "type": "Transitive",
+ "resolved": "2.1.4",
+ "contentHash": "CSlb5dUp1FMIkez9Iv5EXzpeq7rHryVNqwJMWnpq87j9zWZexaEMdisDktMsnnrzKM6ahNrsTkjqNodTBPBxtQ==",
+ "dependencies": {
+ "SQLitePCLRaw.core": "2.1.4"
+ }
+ },
+ "System.Diagnostics.EventLog": {
+ "type": "Transitive",
+ "resolved": "6.0.0",
+ "contentHash": "lcyUiXTsETK2ALsZrX+nWuHSIQeazhqPphLfaRxzdGaG93+0kELqpgEHtwWOlQe7+jSFnKwaCAgL4kjeZCQJnw=="
+ },
+ "System.Reactive": {
+ "type": "Transitive",
+ "resolved": "5.0.0",
+ "contentHash": "erBZjkQHWL9jpasCE/0qKAryzVBJFxGHVBAvgRN1bzM0q2s1S4oYREEEL0Vb+1kA/6BKb5FjUZMp5VXmy+gzkQ=="
+ },
+ "Verify": {
+ "type": "Transitive",
+ "resolved": "31.12.5",
+ "contentHash": "Luht+42xCM969Scwl7XQ1teZb/7w9XbQg/4eqVQ2WGTWc7mfheENb8PnaX9yJCNROyb1POjQIrQogO+wtf34mg==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0"
+ }
+ },
+ "xunit.abstractions": {
+ "type": "Transitive",
+ "resolved": "2.0.3",
+ "contentHash": "pot1I4YOxlWjIb5jmwvvQNbTrZ3lJQ+jUGkGjWE3hEFM0l5gOnBWS+H3qsex68s5cO52g+44vpGzhAt+42vwKg=="
+ },
+ "xunit.extensibility.core": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "kf3si0YTn2a8J8eZNb+zFpwfoyvIrQ7ivNk5ZYA5yuYk1bEtMe4DxJ2CF/qsRgmEnDr7MnW1mxylBaHTZ4qErA==",
+ "dependencies": {
+ "xunit.abstractions": "2.0.3"
+ }
+ },
+ "xunit.extensibility.execution": {
+ "type": "Transitive",
+ "resolved": "2.9.3",
+ "contentHash": "yMb6vMESlSrE3Wfj7V6cjQ3S4TXdXpRqYeNEI3zsX31uTsGMJjEw6oD5F5u1cHnMptjhEECnmZSsPxB6ChZHDQ==",
+ "dependencies": {
+ "xunit.extensibility.core": "[2.9.3]"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.0.0, )",
+ "Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
+ "speckle.sdk.testing": {
+ "type": "Project",
+ "dependencies": {
+ "Moq": "[4.20.72, )",
+ "Speckle.Sdk": "[1.0.0, )",
+ "Verify.Quibble": "[2.1.1, )",
+ "Verify.Xunit": "[31.12.5, )"
+ }
+ },
+ "GraphQL.Client": {
+ "type": "CentralTransitive",
+ "requested": "[6.1.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "8yPNBbuVBpTptivyAlak4GZvbwbUcjeQTL4vN1HKHRuOykZ4r7l5fcLS6vpyPyLn0x8FsL31xbOIKyxbmR9rbA==",
+ "dependencies": {
+ "GraphQL.Client.Abstractions": "6.0.0",
+ "GraphQL.Client.Abstractions.Websocket": "6.0.0",
+ "System.Reactive": "5.0.0"
+ }
+ },
+ "Microsoft.Data.Sqlite": {
+ "type": "CentralTransitive",
+ "requested": "[7.0.5, )",
+ "resolved": "7.0.5",
+ "contentHash": "KGxbPeWsQMnmQy43DSBxAFtHz3l2JX8EWBSGUCvT3CuZ8KsuzbkqMIJMDOxWtG8eZSoCDI04aiVQjWuuV8HmSw==",
+ "dependencies": {
+ "Microsoft.Data.Sqlite.Core": "7.0.5",
+ "SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
+ }
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
+ },
+ "Microsoft.Extensions.Logging": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
+ }
+ },
+ "Moq": {
+ "type": "CentralTransitive",
+ "requested": "[4.20.72, )",
+ "resolved": "4.20.72",
+ "contentHash": "EA55cjyNn8eTNWrgrdZJH5QLFp2L43oxl1tlkoYUKIE9pRwL784OWiTXeCV5ApS+AMYEAlt7Fo03A2XfouvHmQ==",
+ "dependencies": {
+ "Castle.Core": "5.1.1"
+ }
+ },
+ "Speckle.Newtonsoft.Json": {
+ "type": "CentralTransitive",
+ "requested": "[13.0.2, )",
+ "resolved": "13.0.2",
+ "contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "Verify.Quibble": {
+ "type": "CentralTransitive",
+ "requested": "[2.1.1, )",
+ "resolved": "2.1.1",
+ "contentHash": "Z8bVwFICa3Dog6Mcnx0wlrn4Y+CFpQXx1f+ijfLn6/v4q00q+jLm9Gu/nVyUFuc75cjn6ieI08UrqXKcR9fTYw==",
+ "dependencies": {
+ "Quibble": "0.3.1",
+ "Verify": "26.1.1"
+ }
+ },
+ "Verify.Xunit": {
+ "type": "CentralTransitive",
+ "requested": "[31.12.5, )",
+ "resolved": "31.12.5",
+ "contentHash": "i1d2bPonW/3ZzzEZYTWgv8mjPyRWpKaPsIxxp/kYK7Nq8ZeSEmkLA5BkGwInDlybHkxsviFu+s8iF20y+yUcZw==",
+ "dependencies": {
+ "Argon": "0.33.5",
+ "DiffEngine": "18.4.1",
+ "SimpleInfoName": "3.2.0",
+ "Verify": "31.12.5",
+ "xunit.abstractions": "2.0.3",
+ "xunit.extensibility.execution": "2.9.3"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
From 6d36528fc57b143bee541b0b93536c71cb036a09 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 16 Apr 2026 23:56:45 +0100
Subject: [PATCH 05/42] Potential fix for netstandard 2.0
---
.../ArrayBufferWriterPolyfill.cs | 255 ++++++++++++++++++
.../Speckle.Sdk.Dependencies.csproj | 2 +-
.../Models/DynamicBaseMemberType.cs | 6 +-
src/Speckle.Sdk/Pipelines/Send/DiskStore.cs | 22 +-
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 7 +-
src/Speckle.Sdk/Serialisation/IdGenerator.cs | 31 ++-
.../Serialisation/SerializationResult.cs | 12 +-
7 files changed, 313 insertions(+), 22 deletions(-)
create mode 100644 src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
new file mode 100644
index 00000000..82f66568
--- /dev/null
+++ b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
@@ -0,0 +1,255 @@
+#if !NET5_0_OR_GREATER
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// ReSharper disable InconsistentNaming
+#pragma warning disable
+
+using System.Diagnostics;
+
+namespace System.Buffers
+{
+ ///
+ /// Represents a heap-based, array-backed output sink into which data can be written.
+ ///
+ public sealed class ArrayBufferWriter : IBufferWriter
+ {
+ // Copy of Array.MaxLength.
+ // Used by projects targeting .NET Framework.
+ private const int ArrayMaxLength = 0x7FFFFFC7;
+
+ private const int DefaultInitialBufferSize = 256;
+
+ private T[] _buffer;
+ private int _index;
+
+ ///
+ /// Creates an instance of an , in which data can be written to,
+ /// with the default initial capacity.
+ ///
+ public ArrayBufferWriter()
+ {
+ _buffer = Array.Empty();
+ _index = 0;
+ }
+
+ ///
+ /// Creates an instance of an , in which data can be written to,
+ /// with an initial capacity specified.
+ ///
+ /// The minimum capacity with which to initialize the underlying buffer.
+ ///
+ /// Thrown when is not positive (i.e. less than or equal to 0).
+ ///
+ public ArrayBufferWriter(int initialCapacity)
+ {
+ if (initialCapacity <= 0)
+ throw new ArgumentException(null, nameof(initialCapacity));
+
+ _buffer = new T[initialCapacity];
+ _index = 0;
+ }
+
+ ///
+ /// Returns the data written to the underlying buffer so far, as a .
+ ///
+ public ReadOnlyMemory WrittenMemory => _buffer.AsMemory(0, _index);
+
+ public T[] InternalBuffer => _buffer;
+
+ ///
+ /// Returns the data written to the underlying buffer so far, as a .
+ ///
+ public ReadOnlySpan WrittenSpan => _buffer.AsSpan(0, _index);
+
+ ///
+ /// Returns the amount of data written to the underlying buffer so far.
+ ///
+ public int WrittenCount => _index;
+
+ ///
+ /// Returns the total amount of space within the underlying buffer.
+ ///
+ public int Capacity => _buffer.Length;
+
+ ///
+ /// Returns the amount of space available that can still be written into without forcing the underlying buffer to grow.
+ ///
+ public int FreeCapacity => _buffer.Length - _index;
+
+ ///
+ /// Clears the data written to the underlying buffer.
+ ///
+ ///
+ ///
+ /// You must reset or clear the before trying to re-use it.
+ ///
+ ///
+ /// The method is faster since it only sets to zero the writer's index
+ /// while the method additionally zeroes the content of the underlying buffer.
+ ///
+ ///
+ ///
+ public void Clear()
+ {
+ Debug.Assert(_buffer.Length >= _index);
+ _buffer.AsSpan(0, _index).Clear();
+ _index = 0;
+ }
+
+ ///
+ /// Resets the data written to the underlying buffer without zeroing its content.
+ ///
+ ///
+ ///
+ /// You must reset or clear the before trying to re-use it.
+ ///
+ ///
+ /// If you reset the writer using the method, the underlying buffer will not be cleared.
+ ///
+ ///
+ ///
+ public void ResetWrittenCount() => _index = 0;
+
+ ///
+ /// Notifies that amount of data was written to the output /
+ ///
+ ///
+ /// Thrown when is negative.
+ ///
+ ///
+ /// Thrown when attempting to advance past the end of the underlying buffer.
+ ///
+ ///
+ /// You must request a new buffer after calling Advance to continue writing more data and cannot write to a previously acquired buffer.
+ ///
+ public void Advance(int count)
+ {
+ if (count < 0)
+ throw new ArgumentException(null, nameof(count));
+
+ if (_index > _buffer.Length - count)
+ ThrowInvalidOperationException_AdvancedTooFar(_buffer.Length);
+
+ _index += count;
+ }
+
+ ///
+ /// Returns a to write to that is at least the requested length (specified by ).
+ /// If no is provided (or it's equal to 0), some non-empty buffer is returned.
+ ///
+ ///
+ /// Thrown when is negative.
+ ///
+ ///
+ ///
+ /// This will never return an empty .
+ ///
+ ///
+ /// There is no guarantee that successive calls will return the same buffer or the same-sized buffer.
+ ///
+ ///
+ /// You must request a new buffer after calling Advance to continue writing more data and cannot write to a previously acquired buffer.
+ ///
+ ///
+ /// If you reset the writer using the method, this method may return a non-cleared .
+ ///
+ ///
+ /// If you clear the writer using the method, this method will return a with its content zeroed.
+ ///
+ ///
+ public Memory GetMemory(int sizeHint = 0)
+ {
+ CheckAndResizeBuffer(sizeHint);
+ Debug.Assert(_buffer.Length > _index);
+ return _buffer.AsMemory(_index);
+ }
+
+ ///
+ /// Returns a to write to that is at least the requested length (specified by ).
+ /// If no is provided (or it's equal to 0), some non-empty buffer is returned.
+ ///
+ ///
+ /// Thrown when is negative.
+ ///
+ ///
+ ///
+ /// This will never return an empty .
+ ///
+ ///
+ /// There is no guarantee that successive calls will return the same buffer or the same-sized buffer.
+ ///
+ ///
+ /// You must request a new buffer after calling Advance to continue writing more data and cannot write to a previously acquired buffer.
+ ///
+ ///
+ /// If you reset the writer using the method, this method may return a non-cleared .
+ ///
+ ///
+ /// If you clear the writer using the method, this method will return a with its content zeroed.
+ ///
+ ///
+ public Span GetSpan(int sizeHint = 0)
+ {
+ CheckAndResizeBuffer(sizeHint);
+ Debug.Assert(_buffer.Length > _index);
+ return _buffer.AsSpan(_index);
+ }
+
+ private void CheckAndResizeBuffer(int sizeHint)
+ {
+ if (sizeHint < 0)
+ throw new ArgumentException(nameof(sizeHint));
+
+ if (sizeHint == 0)
+ {
+ sizeHint = 1;
+ }
+
+ if (sizeHint > FreeCapacity)
+ {
+ int currentLength = _buffer.Length;
+
+ // Attempt to grow by the larger of the sizeHint and double the current size.
+ int growBy = Math.Max(sizeHint, currentLength);
+
+ if (currentLength == 0)
+ {
+ growBy = Math.Max(growBy, DefaultInitialBufferSize);
+ }
+
+ int newSize = currentLength + growBy;
+
+ if ((uint)newSize > int.MaxValue)
+ {
+ // Attempt to grow to ArrayMaxLength.
+ uint needed = (uint)(currentLength - FreeCapacity + sizeHint);
+ Debug.Assert(needed > currentLength);
+
+ if (needed > ArrayMaxLength)
+ {
+ ThrowOutOfMemoryException(needed);
+ }
+
+ newSize = ArrayMaxLength;
+ }
+
+ Array.Resize(ref _buffer, newSize);
+ }
+
+ Debug.Assert(FreeCapacity > 0 && FreeCapacity >= sizeHint);
+ }
+
+ private static void ThrowInvalidOperationException_AdvancedTooFar(int capacity)
+ {
+ throw new InvalidOperationException(
+ $"Cannot advance past the end of the buffer, which has a size of {capacity}."
+ );
+ }
+
+ private static void ThrowOutOfMemoryException(uint capacity)
+ {
+ throw new OutOfMemoryException($"The buffer cannot be grown beyond the maximum size of {capacity}.");
+ }
+ }
+}
+#endif
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index 44a274d8..23f5125f 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -43,7 +43,7 @@
-->
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Numerics.Vectors.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Runtime.CompilerServices.Unsafe.dll" />
- <_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Memory.dll" />
+
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)Open.ChannelExtensions.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Threading.Channels.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Collections.Immutable.dll" />
diff --git a/src/Speckle.Sdk/Models/DynamicBaseMemberType.cs b/src/Speckle.Sdk/Models/DynamicBaseMemberType.cs
index 4522b61e..c7e84478 100644
--- a/src/Speckle.Sdk/Models/DynamicBaseMemberType.cs
+++ b/src/Speckle.Sdk/Models/DynamicBaseMemberType.cs
@@ -17,7 +17,7 @@ public enum DynamicBaseMemberType
Dynamic = 2,
///
- /// The typed members flagged with attribute.
+ /// The typed members flagged with ObsoleteAttribute> attribute.
///
Obsolete = 4,
@@ -28,12 +28,12 @@ public enum DynamicBaseMemberType
SchemaComputed = 16,
///
- /// All the typed members, including ones with attributes.
+ /// All the typed members, including ones with ObsoleteAttribute attributes.
///
InstanceAll = Instance + Obsolete,
///
- /// All the members, including dynamic and instance members flagged with attributes
+ /// All the members, including dynamic and instance members flagged with ObsoleteAttribute attributes
///
All = InstanceAll + Dynamic,
}
diff --git a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
index cd2ee575..5c893d14 100644
--- a/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/DiskStore.cs
@@ -68,21 +68,29 @@ private async Task WriteFile()
await foreach (var item in _channel.ReadAllAsync(_cancellationToken).ConfigureAwait(false))
{
- await gzip.WriteAsync(Encoding.UTF8.GetBytes(item.Id), _cancellationToken).ConfigureAwait(false);
+ byte[] id = Encoding.UTF8.GetBytes(item.Id);
+ byte[] speckleType = Encoding.UTF8.GetBytes(item.SpeckleType);
+#if NET5_0_OR_GREATER
+ await gzip.WriteAsync(id, _cancellationToken).ConfigureAwait(false);
await gzip.WriteAsync(_tabLineChar, _cancellationToken).ConfigureAwait(false);
- await gzip.WriteAsync(Encoding.UTF8.GetBytes(item.SpeckleType), _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(speckleType, _cancellationToken).ConfigureAwait(false);
await gzip.WriteAsync(_tabLineChar, _cancellationToken).ConfigureAwait(false);
await gzip.WriteAsync(item.Json.WrittenMemory, _cancellationToken).ConfigureAwait(false);
await gzip.WriteAsync(_newLineChar, _cancellationToken).ConfigureAwait(false);
-
+#else
+ await gzip.WriteAsync(id, 0, id.Length, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(_tabLineChar, 0, _tabLineChar.Length, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(speckleType, 0, speckleType.Length, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(_tabLineChar, 0, _tabLineChar.Length, _cancellationToken).ConfigureAwait(false);
+ await gzip.WriteAsync(item.Json.GetInternalBuffer(), 0, item.Json.WrittenCount, _cancellationToken)
+ .ConfigureAwait(false);
+ await gzip.WriteAsync(_newLineChar, 0, _newLineChar.Length, _cancellationToken).ConfigureAwait(false);
+#endif
item.Dispose();
}
-#if NET8_0_OR_GREATER
await gzip.FlushAsync(_cancellationToken).ConfigureAwait(false);
-#else
- await gzip.FlushAsync().ConfigureAwait(false);
-#endif
+
tempFile.FileInfo.Refresh();
return tempFile;
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 42492831..d2722da3 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -114,9 +114,14 @@ private IEnumerable ExtractProperties(Base baseObj)
}
jsonWriter.Flush();
+
+#if NET6_0_OR_GREATER
var span = efficientJson.WrittenSpan;
string id = IdGenerator.ComputeId(span);
-
+#else
+ var bytes = efficientJson.GetInternalBuffer();
+ string id = IdGenerator.ComputeId(bytes, 0, efficientJson.WrittenCount);
+#endif
jsonWriter.WriteString("id", id);
baseObj.id = id;
diff --git a/src/Speckle.Sdk/Serialisation/IdGenerator.cs b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
index a85e3153..02676390 100644
--- a/src/Speckle.Sdk/Serialisation/IdGenerator.cs
+++ b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
@@ -1,5 +1,7 @@
-using System.Diagnostics.Contracts;
+using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.Contracts;
using System.Security.Cryptography;
+using System.Text;
using Speckle.Sdk.Common;
using Speckle.Sdk.Models;
@@ -8,6 +10,7 @@ namespace Speckle.Sdk.Serialisation;
public static class IdGenerator
{
[Pure]
+ //Obsolete (serializer v2)
public static Id ComputeId(Json serialized)
{
#if NET6_0_OR_GREATER
@@ -18,19 +21,41 @@ public static Id ComputeId(Json serialized)
return new Id(hash);
}
+#if NET6_0_OR_GREATER
[Pure]
public static string ComputeId(ReadOnlySpan input)
{
Span hash = stackalloc byte[SHA256.HashSizeInBytes];
SHA256.HashData(input, hash);
- Span output = stackalloc char[32];
+ Span output = stackalloc char[HashUtility.HASH_LENGTH];
- for (int i = 0, j = 0; j < 32; i += sizeof(byte), j += sizeof(char))
+ for (int i = 0, j = 0; j < HashUtility.HASH_LENGTH; i += sizeof(byte), j += sizeof(char))
{
hash[i].TryFormat(output[j..], out _, "x2");
}
return new string(output);
}
+#endif
+
+ [Pure]
+ [SuppressMessage(
+ "Performance",
+ "CA1850:Prefer static \'HashData\' method over \'ComputeHash\'",
+ Justification = "We expose another overload with higher performance spans"
+ )]
+ public static string ComputeId(byte[] input, int offset, int count)
+ {
+ using var sha256 = SHA256.Create();
+ byte[] hash = sha256.ComputeHash(input, offset, count);
+
+ StringBuilder sb = new(64);
+ foreach (byte b in hash)
+ {
+ sb.Append(b.ToString("x2"));
+ }
+
+ return sb.ToString(0, HashUtility.HASH_LENGTH);
+ }
}
diff --git a/src/Speckle.Sdk/Serialisation/SerializationResult.cs b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
index c0b87ee8..8055db7a 100644
--- a/src/Speckle.Sdk/Serialisation/SerializationResult.cs
+++ b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
@@ -19,21 +19,19 @@ public Json(string json)
public sealed class EfficientJson : IDisposable
{
- private readonly ArrayBufferWriter _value;
-
- public EfficientJson()
- {
- _value = Pools.ArrayBufferWriter.Get();
- }
-
internal IBufferWriter Buffer => _value;
public ReadOnlySpan WrittenSpan => _value.WrittenSpan;
public ReadOnlyMemory WrittenMemory => _value.WrittenMemory;
+#if !NET5_0_OR_GREATER
+ public byte[] GetInternalBuffer() => _value.InternalBuffer;
+#endif
public int WrittenCount => _value.WrittenCount;
+ private readonly ArrayBufferWriter _value = Pools.ArrayBufferWriter.Get();
+
public void Dispose() => Pools.ArrayBufferWriter.Return(_value);
}
From ca71eac8178f714242a62a28d82ba856440c898f Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 17 Apr 2026 00:00:39 +0100
Subject: [PATCH 06/42] format
---
src/Speckle.Sdk/Serialisation/SerializationResult.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Speckle.Sdk/Serialisation/SerializationResult.cs b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
index 8055db7a..5c758a7d 100644
--- a/src/Speckle.Sdk/Serialisation/SerializationResult.cs
+++ b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
@@ -28,6 +28,7 @@ public sealed class EfficientJson : IDisposable
#if !NET5_0_OR_GREATER
public byte[] GetInternalBuffer() => _value.InternalBuffer;
#endif
+
public int WrittenCount => _value.WrittenCount;
private readonly ArrayBufferWriter _value = Pools.ArrayBufferWriter.Get();
From 72f6898ce7970988aa9503cefe17f130216ee10a Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 17 Apr 2026 09:56:41 +0100
Subject: [PATCH 07/42] Keep old serializer separate
---
.../ArrayBufferWriterPolyfill.cs | 2 +-
.../ArrayBufferWriterPooledObjectPolicy.cs | 3 +-
.../Pipelines/Send/EfficientJson.cs | 25 ++++++++++
src/Speckle.Sdk/Pipelines/Send/IdGenerator.cs | 48 +++++++++++++++++++
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 14 +++++-
.../Pipelines/Send/UploaderDTOs.cs | 1 -
src/Speckle.Sdk/Serialisation/IdGenerator.cs | 43 +----------------
.../Serialisation/SerializationResult.cs | 24 +---------
8 files changed, 89 insertions(+), 71 deletions(-)
create mode 100644 src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
create mode 100644 src/Speckle.Sdk/Pipelines/Send/IdGenerator.cs
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
index 82f66568..0ea8aac7 100644
--- a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
+++ b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
@@ -195,7 +195,7 @@ public Span GetSpan(int sizeHint = 0)
return _buffer.AsSpan(_index);
}
- private void CheckAndResizeBuffer(int sizeHint)
+ public void CheckAndResizeBuffer(int sizeHint)
{
if (sizeHint < 0)
throw new ArgumentException(nameof(sizeHint));
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
index 5aa857a8..bd76542d 100644
--- a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
+++ b/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
@@ -1,5 +1,4 @@
using System.Buffers;
-using System.Text;
using Microsoft.Extensions.ObjectPool;
namespace Speckle.Sdk.Dependencies;
@@ -13,7 +12,7 @@ public sealed class ArrayBufferWriterPooledObjectPolicy : PooledObjectPolicy<
public int InitialCapacity { get; set; } = 100;
///
- /// Gets or sets the maximum value for that is allowed to be
+ /// Gets or sets the maximum value for that is allowed to be
/// retained, when is invoked.
///
/// Defaults to 4096.
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
new file mode 100644
index 00000000..80a1261d
--- /dev/null
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -0,0 +1,25 @@
+using System.Buffers;
+using Speckle.Sdk.Dependencies;
+
+namespace Speckle.Sdk.Pipelines.Send;
+
+public sealed class EfficientJson : IDisposable
+{
+ internal IBufferWriter Buffer => _value;
+
+ public ReadOnlySpan WrittenSpan => _value.WrittenSpan;
+
+ public ReadOnlyMemory WrittenMemory => _value.WrittenMemory;
+
+#if !NET5_0_OR_GREATER
+ public byte[] GetInternalBuffer() => _value.InternalBuffer;
+
+ public void CheckAndResizeBuffer(int sizeHint) => _value.CheckAndResizeBuffer(sizeHint);
+#endif
+
+ public int WrittenCount => _value.WrittenCount;
+
+ private readonly ArrayBufferWriter _value = Pools.ArrayBufferWriter.Get();
+
+ public void Dispose() => Pools.ArrayBufferWriter.Return(_value);
+}
diff --git a/src/Speckle.Sdk/Pipelines/Send/IdGenerator.cs b/src/Speckle.Sdk/Pipelines/Send/IdGenerator.cs
new file mode 100644
index 00000000..1c5bd466
--- /dev/null
+++ b/src/Speckle.Sdk/Pipelines/Send/IdGenerator.cs
@@ -0,0 +1,48 @@
+using System.Diagnostics.CodeAnalysis;
+using System.Diagnostics.Contracts;
+using System.Security.Cryptography;
+using System.Text;
+using Speckle.Sdk.Models;
+
+namespace Speckle.Sdk.Pipelines.Send;
+
+public static class IdGenerator
+{
+#if NET6_0_OR_GREATER
+ [Pure]
+ public static string ComputeId(ReadOnlySpan input)
+ {
+ Span hash = stackalloc byte[SHA256.HashSizeInBytes];
+ SHA256.HashData(input, hash);
+
+ Span output = stackalloc char[HashUtility.HASH_LENGTH];
+
+ for (int i = 0, j = 0; j < HashUtility.HASH_LENGTH; i += sizeof(byte), j += sizeof(char))
+ {
+ hash[i].TryFormat(output[j..], out _, "x2");
+ }
+
+ return new string(output);
+ }
+#endif
+
+ [Pure]
+ [SuppressMessage(
+ "Performance",
+ "CA1850:Prefer static \'HashData\' method over \'ComputeHash\'",
+ Justification = "We expose another overload with higher performance spans"
+ )]
+ public static string ComputeId(byte[] input, int offset, int count)
+ {
+ using var sha256 = SHA256.Create();
+ byte[] hash = sha256.ComputeHash(input, offset, count);
+
+ StringBuilder sb = new(64);
+ foreach (byte b in hash)
+ {
+ sb.Append(b.ToString("x2"));
+ }
+
+ return sb.ToString(0, HashUtility.HASH_LENGTH);
+ }
+}
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index d2722da3..bf66bf34 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -1,6 +1,7 @@
using System.Collections;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
+using System.Text;
using System.Text.Json;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
@@ -116,12 +117,21 @@ private IEnumerable ExtractProperties(Base baseObj)
jsonWriter.Flush();
#if NET6_0_OR_GREATER
- var span = efficientJson.WrittenSpan;
- string id = IdGenerator.ComputeId(span);
+ // We want to hash the json string now to calculate the id
+ // We don't want to allocate a separate buffer for it, as this wouldn't be memory efficient
+ // It's also (debatably) important that the bytes we hash are the full json object (minus id and closures obviously)
+ // For this, we are manually writing the closing } bracket without calling Buffer.Advance
+ // Such that, the buffer can continue to write the id, and closures later in this function.
+ var bytes = efficientJson.Buffer.GetSpan(efficientJson.WrittenCount + 1);
+ bytes[^1] = (byte)'}';
+ string id = IdGenerator.ComputeId(bytes);
#else
+ efficientJson.CheckAndResizeBuffer(efficientJson.WrittenCount + 1);
var bytes = efficientJson.GetInternalBuffer();
+ bytes[efficientJson.WrittenCount] = (byte)'}';
string id = IdGenerator.ComputeId(bytes, 0, efficientJson.WrittenCount);
#endif
+ string str = Encoding.UTF8.GetString(bytes);
jsonWriter.WriteString("id", id);
baseObj.id = id;
diff --git a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
index d69704f2..7b4d0065 100644
--- a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
@@ -1,6 +1,5 @@
using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Models;
-using Speckle.Sdk.Serialisation;
namespace Speckle.Sdk.Pipelines.Send;
diff --git a/src/Speckle.Sdk/Serialisation/IdGenerator.cs b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
index 02676390..4d34bb45 100644
--- a/src/Speckle.Sdk/Serialisation/IdGenerator.cs
+++ b/src/Speckle.Sdk/Serialisation/IdGenerator.cs
@@ -1,7 +1,4 @@
-using System.Diagnostics.CodeAnalysis;
-using System.Diagnostics.Contracts;
-using System.Security.Cryptography;
-using System.Text;
+using System.Diagnostics.Contracts;
using Speckle.Sdk.Common;
using Speckle.Sdk.Models;
@@ -20,42 +17,4 @@ public static Id ComputeId(Json serialized)
#endif
return new Id(hash);
}
-
-#if NET6_0_OR_GREATER
- [Pure]
- public static string ComputeId(ReadOnlySpan input)
- {
- Span hash = stackalloc byte[SHA256.HashSizeInBytes];
- SHA256.HashData(input, hash);
-
- Span output = stackalloc char[HashUtility.HASH_LENGTH];
-
- for (int i = 0, j = 0; j < HashUtility.HASH_LENGTH; i += sizeof(byte), j += sizeof(char))
- {
- hash[i].TryFormat(output[j..], out _, "x2");
- }
-
- return new string(output);
- }
-#endif
-
- [Pure]
- [SuppressMessage(
- "Performance",
- "CA1850:Prefer static \'HashData\' method over \'ComputeHash\'",
- Justification = "We expose another overload with higher performance spans"
- )]
- public static string ComputeId(byte[] input, int offset, int count)
- {
- using var sha256 = SHA256.Create();
- byte[] hash = sha256.ComputeHash(input, offset, count);
-
- StringBuilder sb = new(64);
- foreach (byte b in hash)
- {
- sb.Append(b.ToString("x2"));
- }
-
- return sb.ToString(0, HashUtility.HASH_LENGTH);
- }
}
diff --git a/src/Speckle.Sdk/Serialisation/SerializationResult.cs b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
index 5c758a7d..5add758e 100644
--- a/src/Speckle.Sdk/Serialisation/SerializationResult.cs
+++ b/src/Speckle.Sdk/Serialisation/SerializationResult.cs
@@ -1,7 +1,4 @@
-using System.Buffers;
-using Speckle.Sdk.Dependencies;
-
-namespace Speckle.Sdk.Serialisation;
+namespace Speckle.Sdk.Serialisation;
public readonly record struct SerializationResult(Json Json, Id? Id);
@@ -17,25 +14,6 @@ public Json(string json)
public string Value { get; }
}
-public sealed class EfficientJson : IDisposable
-{
- internal IBufferWriter Buffer => _value;
-
- public ReadOnlySpan WrittenSpan => _value.WrittenSpan;
-
- public ReadOnlyMemory WrittenMemory => _value.WrittenMemory;
-
-#if !NET5_0_OR_GREATER
- public byte[] GetInternalBuffer() => _value.InternalBuffer;
-#endif
-
- public int WrittenCount => _value.WrittenCount;
-
- private readonly ArrayBufferWriter _value = Pools.ArrayBufferWriter.Get();
-
- public void Dispose() => Pools.ArrayBufferWriter.Return(_value);
-}
-
public readonly record struct Id
{
public Id(string id)
From a83b74ab2731ced3ddbd4bcdf2f537f5a63f4222 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 17 Apr 2026 10:15:41 +0100
Subject: [PATCH 08/42] Fixed broken detaching
---
src/Speckle.Sdk/Models/Attributes.cs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/src/Speckle.Sdk/Models/Attributes.cs b/src/Speckle.Sdk/Models/Attributes.cs
index bdcd9476..0a3627df 100644
--- a/src/Speckle.Sdk/Models/Attributes.cs
+++ b/src/Speckle.Sdk/Models/Attributes.cs
@@ -13,7 +13,10 @@ public sealed class DetachPropertyAttribute : Attribute
/// If set to true the default serialiser will persist it separately, and add a reference to the property's value in the original object.
/// Only applies to properties of types derived from the Base class.
///
- public DetachPropertyAttribute() { }
+ public DetachPropertyAttribute()
+ {
+ Detachable = true;
+ }
[Obsolete("detachable = false is no longer supported")]
public DetachPropertyAttribute(bool detachable = true)
From 411a89c8a89e06f3e7db2415092dc4eb16318f11 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 17 Apr 2026 11:34:27 +0100
Subject: [PATCH 09/42] Add tests
---
src/Speckle.Sdk/Models/Attributes.cs | 2 +-
.../Pipelines/Send/EfficientJson.cs | 7 +-
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 16 +--
.../Serialization/JsonIgnoreAttributeTests.cs | 122 ++++++++++++++++++
.../ObjectModelDeprecationTests.cs | 48 +++++++
5 files changed, 185 insertions(+), 10 deletions(-)
create mode 100644 tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
create mode 100644 tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/ObjectModelDeprecationTests.cs
diff --git a/src/Speckle.Sdk/Models/Attributes.cs b/src/Speckle.Sdk/Models/Attributes.cs
index 0a3627df..0fec5d27 100644
--- a/src/Speckle.Sdk/Models/Attributes.cs
+++ b/src/Speckle.Sdk/Models/Attributes.cs
@@ -19,7 +19,7 @@ public DetachPropertyAttribute()
}
[Obsolete("detachable = false is no longer supported")]
- public DetachPropertyAttribute(bool detachable = true)
+ public DetachPropertyAttribute(bool detachable)
{
Detachable = detachable;
}
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
index 80a1261d..1719d71b 100644
--- a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -1,4 +1,5 @@
using System.Buffers;
+using System.Text;
using Speckle.Sdk.Dependencies;
namespace Speckle.Sdk.Pipelines.Send;
@@ -11,10 +12,14 @@ public sealed class EfficientJson : IDisposable
public ReadOnlyMemory WrittenMemory => _value.WrittenMemory;
-#if !NET5_0_OR_GREATER
+#if NET5_0_OR_GREATER
+ public string ToJsonString() => Encoding.UTF8.GetString(WrittenSpan);
+#else
public byte[] GetInternalBuffer() => _value.InternalBuffer;
public void CheckAndResizeBuffer(int sizeHint) => _value.CheckAndResizeBuffer(sizeHint);
+
+ public string ToJsonString() => Encoding.UTF8.GetString(_value.InternalBuffer, 0, _value.WrittenCount);
#endif
public int WrittenCount => _value.WrittenCount;
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index bf66bf34..f1a296a0 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -29,6 +29,7 @@ public IEnumerable Serialize(Base root)
yield break;
}
+ //TODO: can we remove the EfficientJson from here?
var detachedObjects = new List<(Id, EfficientJson, Dictionary, Base, string)>();
var rootClosures = new Dictionary();
@@ -122,16 +123,15 @@ private IEnumerable ExtractProperties(Base baseObj)
// It's also (debatably) important that the bytes we hash are the full json object (minus id and closures obviously)
// For this, we are manually writing the closing } bracket without calling Buffer.Advance
// Such that, the buffer can continue to write the id, and closures later in this function.
- var bytes = efficientJson.Buffer.GetSpan(efficientJson.WrittenCount + 1);
- bytes[^1] = (byte)'}';
- string id = IdGenerator.ComputeId(bytes);
+ // var bytes = efficientJson.Buffer.GetSpan(1);
+ // bytes[0] = (byte)'}';
+ string id = IdGenerator.ComputeId(efficientJson.WrittenSpan);
+ string str = Encoding.UTF8.GetString(efficientJson.WrittenSpan);
#else
- efficientJson.CheckAndResizeBuffer(efficientJson.WrittenCount + 1);
- var bytes = efficientJson.GetInternalBuffer();
- bytes[efficientJson.WrittenCount] = (byte)'}';
- string id = IdGenerator.ComputeId(bytes, 0, efficientJson.WrittenCount);
+
+ string id = IdGenerator.ComputeId(efficientJson.GetInternalBuffer(), 0, efficientJson.WrittenCount);
+ string str = Encoding.UTF8.GetString(efficientJson.GetInternalBuffer());
#endif
- string str = Encoding.UTF8.GetString(bytes);
jsonWriter.WriteString("id", id);
baseObj.id = id;
diff --git a/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs b/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
new file mode 100644
index 00000000..23514ec4
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
@@ -0,0 +1,122 @@
+using AwesomeAssertions;
+using Speckle.Newtonsoft.Json;
+using Speckle.Sdk.Host;
+using Speckle.Sdk.Models;
+using Speckle.Sdk.Pipelines.Send;
+
+namespace Speckle.Sdk.Tests.Unit.Pipelines.Send.Serialization;
+
+///
+/// Tests that the leads to properties being ignored both from the final JSON output,
+/// But also from the id calculation
+///
+[Collection(nameof(RequiresTypeLoaderCollection))]
+public sealed class JsonIgnoreRespected
+{
+ private readonly Serializer _sut = new();
+
+ public JsonIgnoreRespected()
+ {
+ TypeLoader.ReInitialize(typeof(Base).Assembly, typeof(IgnoreTest).Assembly);
+ }
+
+ public static IEnumerable
-
-
-
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index 98562244..2379da2b 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -51,20 +51,6 @@
"System.Memory": "4.5.4"
}
},
- "System.Text.Json": {
- "type": "Direct",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.0.0",
@@ -209,8 +195,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -219,8 +205,8 @@
},
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Reactive": {
"type": "Transitive",
@@ -243,11 +229,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -282,7 +268,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[8.0.5, )"
+ "System.Text.Json": "[6.0.0, )"
}
},
"GraphQL.Client": {
@@ -353,6 +339,21 @@
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
+ },
+ "System.Text.Json": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.7, )",
+ "resolved": "6.0.0",
+ "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "6.0.0",
+ "System.Text.Encodings.Web": "6.0.0",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
}
},
"net10.0": {
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index 1739ecd5..6362cd9f 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -172,8 +172,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -182,8 +182,8 @@
},
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Reactive": {
"type": "Transitive",
@@ -206,11 +206,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -239,7 +239,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[8.0.5, )"
+ "System.Text.Json": "[6.0.0, )"
}
},
"GraphQL.Client": {
@@ -313,15 +313,16 @@
},
"System.Text.Json": {
"type": "CentralTransitive",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "requested": "[10.0.7, )",
+ "resolved": "6.0.0",
+ "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
+ "System.Text.Encodings.Web": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index 23f5125f..b684d2c1 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -30,7 +30,11 @@
-
+
+
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index ce1e4e40..1f0ab4f0 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -91,15 +91,16 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
+ "System.Text.Encodings.Web": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
@@ -159,8 +160,8 @@
},
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
@@ -169,11 +170,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index 1b9fa3a0..fe500268 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -232,8 +232,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -242,8 +242,8 @@
},
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.4.0",
- "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
+ "resolved": "4.5.0",
+ "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
},
"System.Reactive": {
"type": "Transitive",
@@ -266,11 +266,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "yev/k9GHAEGx2Rg3/tU6MQh4HGBXJs70y7j1LaM1i/ER9po+6nnQ6RRqTJn1E7Xu0fbIFK80Nh5EoODxrbxwBQ==",
+ "resolved": "6.0.0",
+ "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -286,7 +286,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[8.0.5, )"
+ "System.Text.Json": "[6.0.0, )"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
@@ -300,15 +300,16 @@
},
"System.Text.Json": {
"type": "CentralTransitive",
- "requested": "[8.0.5, )",
- "resolved": "8.0.5",
- "contentHash": "0f1B50Ss7rqxXiaBJyzUu9bWFOO2/zSlifZ/UNMdiIpDYe4cY4LQQicP4nirK1OS31I43rn062UIJ1Q9bpmHpg==",
+ "requested": "[10.0.7, )",
+ "resolved": "6.0.0",
+ "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "8.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "8.0.0",
+ "System.Text.Encodings.Web": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
From 0917e97b639413100b1bfa0b858d5220c1a0a2ca Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 29 Apr 2026 14:18:35 +0100
Subject: [PATCH 19/42] lock to 7
---
src/Speckle.Automate.Sdk/packages.lock.json | 22 +++++++++----------
src/Speckle.Objects/packages.lock.json | 22 +++++++++----------
.../Speckle.Sdk.Dependencies.csproj | 2 +-
.../packages.lock.json | 18 +++++++--------
src/Speckle.Sdk/packages.lock.json | 22 +++++++++----------
5 files changed, 43 insertions(+), 43 deletions(-)
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index 2379da2b..000b2187 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -195,8 +195,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -229,11 +229,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -268,7 +268,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[6.0.0, )"
+ "System.Text.Json": "[7.0.0, )"
}
},
"GraphQL.Client": {
@@ -343,15 +343,15 @@
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.7, )",
- "resolved": "6.0.0",
- "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "6.0.0",
+ "System.Text.Encodings.Web": "7.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index 6362cd9f..f201be97 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -172,8 +172,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -206,11 +206,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -239,7 +239,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[6.0.0, )"
+ "System.Text.Json": "[7.0.0, )"
}
},
"GraphQL.Client": {
@@ -314,15 +314,15 @@
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.7, )",
- "resolved": "6.0.0",
- "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "6.0.0",
+ "System.Text.Encodings.Web": "7.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index b684d2c1..c6e76702 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -34,7 +34,7 @@
We build for apps that come with 7.0.0, so this is our minimum
Consuming apps should override this to 8.x.x or greater
-->
-
+
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index 1f0ab4f0..7f1b0c5c 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -91,16 +91,16 @@
},
"System.Text.Json": {
"type": "Direct",
- "requested": "[6.0.0, )",
- "resolved": "6.0.0",
- "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "6.0.0",
+ "System.Text.Encodings.Web": "7.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
@@ -170,11 +170,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index fe500268..af6db173 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -232,8 +232,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -266,11 +266,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "Vg8eB5Tawm1IFqj4TVK1czJX89rhFxJo9ELqc/Eiq0eXy13RK00eubyU6TJE6y+GQXjyV5gSfiewDUZjQgSE0w==",
+ "resolved": "7.0.0",
+ "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
@@ -286,7 +286,7 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[6.0.0, )"
+ "System.Text.Json": "[7.0.0, )"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
@@ -301,15 +301,15 @@
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.7, )",
- "resolved": "6.0.0",
- "contentHash": "zaJsHfESQvJ11vbXnNlkrR46IaMULk/gHxYsJphzSF+07kTjPHv+Oc14w6QEOfo3Q4hqLJgStUaYB9DBl0TmWg==",
+ "resolved": "7.0.0",
+ "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "6.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
+ "System.Memory": "4.5.5",
"System.Numerics.Vectors": "4.5.0",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "6.0.0",
+ "System.Text.Encodings.Web": "7.0.0",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
From 54af0e8d143a28729b0333dba9f8a5f37aa30e34 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 29 Apr 2026 21:45:49 +0100
Subject: [PATCH 20/42] Drop all the way down to 5.x.x
---
.../Speckle.Automate.Sdk.csproj | 6 ++
src/Speckle.Automate.Sdk/packages.lock.json | 87 +++++++++++--------
src/Speckle.Objects/packages.lock.json | 26 +++---
.../Speckle.Sdk.Dependencies.csproj | 5 +-
.../packages.lock.json | 54 +++++++-----
.../Pipelines/Send/EfficientJson.cs | 12 ++-
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 37 ++++----
src/Speckle.Sdk/packages.lock.json | 26 +++---
.../Serialization/JsonIgnoreAttributeTests.cs | 2 +
9 files changed, 150 insertions(+), 105 deletions(-)
diff --git a/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj b/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
index d89999c3..533b2983 100644
--- a/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
+++ b/src/Speckle.Automate.Sdk/Speckle.Automate.Sdk.csproj
@@ -18,6 +18,12 @@
+
+
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index 000b2187..dc1522bc 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -51,6 +51,21 @@
"System.Memory": "4.5.4"
}
},
+ "System.Text.Json": {
+ "type": "Direct",
+ "requested": "[10.0.7, )",
+ "resolved": "10.0.7",
+ "contentHash": "F8Pu2QLUMeniVbtiyk7n7LCfFYxlcJ8ASaSwglJyq6dxa34iCQrikQszsgJClIJWuSWjcyhKkV7daAzYJqeVwA==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "10.0.7",
+ "System.Buffers": "4.6.1",
+ "System.IO.Pipelines": "10.0.7",
+ "System.Memory": "4.6.3",
+ "System.Runtime.CompilerServices.Unsafe": "6.1.2",
+ "System.Text.Encodings.Web": "10.0.7",
+ "System.Threading.Tasks.Extensions": "4.6.3"
+ }
+ },
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.0.0",
@@ -185,28 +200,38 @@
},
"System.Buffers": {
"type": "Transitive",
- "resolved": "4.5.1",
- "contentHash": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg=="
+ "resolved": "4.6.1",
+ "contentHash": "N8GXpmiLMtljq7gwvyS+1QvKT/W2J8sNAvx+HVg4NGmsG/H+2k/y9QI23auLJRterrzCiDH+IWAw4V/GPwsMlw=="
},
"System.ComponentModel.Annotations": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "UxYQ3FGUOtzJ7LfSdnYSFd7+oEv6M8NgUatatIN2HxNtDdlcvFAf+VIq4Of9cDMJEJC0aSRv/x898RYhB4Yppg=="
},
+ "System.IO.Pipelines": {
+ "type": "Transitive",
+ "resolved": "10.0.7",
+ "contentHash": "LTxXYYKmRhPKWveYmfzuRTUnzsfY7CN+WOq6aTRgYE9vJ8BUvIWPCaSx4HxqBwXViTPSjR9cHDOVuVPuZGRR/Q==",
+ "dependencies": {
+ "System.Buffers": "4.6.1",
+ "System.Memory": "4.6.3",
+ "System.Threading.Tasks.Extensions": "4.6.3"
+ }
+ },
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.6.3",
+ "contentHash": "qdcDOgnFZY40+Q9876JUHnlHu7bosOHX8XISRoH94fwk6hgaeQGSgfZd8srWRZNt5bV9ZW2TljcegDNxsf+96A==",
"dependencies": {
- "System.Buffers": "4.5.1",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ "System.Buffers": "4.6.1",
+ "System.Numerics.Vectors": "4.6.1",
+ "System.Runtime.CompilerServices.Unsafe": "6.1.2"
}
},
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ "resolved": "4.6.1",
+ "contentHash": "sQxefTnhagrhoq2ReR0D/6K0zJcr9Hrd6kikeXsA1I8kOCboTavcUC4r7TSfpKFeE163uMuxZcyfO1mGO3EN8Q=="
},
"System.Reactive": {
"type": "Transitive",
@@ -219,8 +244,8 @@
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ "resolved": "6.1.2",
+ "contentHash": "2hBr6zdbIBTDE3EhK7NSVNdX58uTK6iHW/P/Axmm9sl1xoGSLqDvMtpecn226TNwHByFokYwJmt/aQQNlO5CRw=="
},
"System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive",
@@ -229,20 +254,20 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
+ "resolved": "10.0.7",
+ "contentHash": "WUH+viO8VDG8NpFKvOBwpeyKUiPOMz3kQpA6AKCD4b2NG1pBhyC4AwTb357iZmTxZDnkM4IsFnvzN8W8OKmsHg==",
"dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ "System.Buffers": "4.6.1",
+ "System.Memory": "4.6.3",
+ "System.Runtime.CompilerServices.Unsafe": "6.1.2"
}
},
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
- "resolved": "4.5.4",
- "contentHash": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==",
+ "resolved": "4.6.3",
+ "contentHash": "7sCiwilJLYbTZELaKnc7RecBBXWXA+xMLQWZKWawBxYjp6DBlSE3v9/UcvKBvr1vv2tTOhipiogM8rRmxlhrVA==",
"dependencies": {
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ "System.Runtime.CompilerServices.Unsafe": "6.1.2"
}
},
"speckle.objects": {
@@ -268,7 +293,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[7.0.0, )"
+ "System.Memory": "[4.5.5, )",
+ "System.Text.Json": "[5.0.2, )"
}
},
"GraphQL.Client": {
@@ -285,10 +311,10 @@
"Microsoft.Bcl.AsyncInterfaces": {
"type": "CentralTransitive",
"requested": "[9.0.4, )",
- "resolved": "9.0.4",
- "contentHash": "9VGI5kxIvrNG2mqLQZnUR6y/3fcnygD8eNpHR+CqfbnIXvea6nehnYknDKQTxZVPMpzpNca+7DxLBmpdB3q0Bw==",
+ "resolved": "10.0.7",
+ "contentHash": "g0Xp9A+B8jCf5pNIIhFOQXPJkte3D87shfTLY+ylwfSh22U5oQH6tvvmcUuqJvt/wtwKk0WdNp2OGEczHJlJdg==",
"dependencies": {
- "System.Threading.Tasks.Extensions": "4.5.4"
+ "System.Threading.Tasks.Extensions": "4.6.3"
}
},
"Microsoft.CSharp": {
@@ -339,21 +365,6 @@
"requested": "[13.0.2, )",
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
- },
- "System.Text.Json": {
- "type": "CentralTransitive",
- "requested": "[10.0.7, )",
- "resolved": "7.0.0",
- "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "7.0.0",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
}
},
"net10.0": {
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index f201be97..a75f2e33 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -196,8 +196,8 @@
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
},
"System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive",
@@ -206,12 +206,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ "System.Memory": "4.5.4"
}
},
"System.Threading.Tasks.Extensions": {
@@ -239,7 +238,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[7.0.0, )"
+ "System.Memory": "[4.5.5, )",
+ "System.Text.Json": "[5.0.2, )"
}
},
"GraphQL.Client": {
@@ -314,15 +314,15 @@
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.7, )",
- "resolved": "7.0.0",
- "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "7.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index c6e76702..91c12471 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -27,14 +27,15 @@
+
-
+
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index 7f1b0c5c..6761e527 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -89,18 +89,29 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
+ "System.Memory": {
+ "type": "Direct",
+ "requested": "[4.5.5, )",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
"System.Text.Json": {
"type": "Direct",
- "requested": "[7.0.0, )",
- "resolved": "7.0.0",
- "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "requested": "[5.0.2, )",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "7.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
"System.Threading.Tasks.Extensions": "4.5.4"
}
},
@@ -148,16 +159,6 @@
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
- "System.Memory": {
- "type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
"System.Numerics.Vectors": {
"type": "Transitive",
"resolved": "4.5.0",
@@ -170,12 +171,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ "System.Memory": "4.5.4"
}
},
"System.Threading.Tasks.Extensions": {
@@ -252,6 +252,12 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
+ "System.Memory": {
+ "type": "Direct",
+ "requested": "[4.5.5, )",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
+ },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
@@ -339,6 +345,12 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
+ "System.Memory": {
+ "type": "Direct",
+ "requested": "[4.5.5, )",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
+ },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
index 1719d71b..b7079e6c 100644
--- a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -1,11 +1,21 @@
using System.Buffers;
using System.Text;
+using System.Text.Json;
using Speckle.Sdk.Dependencies;
namespace Speckle.Sdk.Pipelines.Send;
public sealed class EfficientJson : IDisposable
{
+ private readonly ArrayBufferWriter _value;
+ internal Utf8JsonWriter Writer { get; }
+
+ public EfficientJson()
+ {
+ _value = Pools.ArrayBufferWriter.Get();
+ Writer = new(_value);
+ }
+
internal IBufferWriter Buffer => _value;
public ReadOnlySpan WrittenSpan => _value.WrittenSpan;
@@ -24,7 +34,5 @@ public sealed class EfficientJson : IDisposable
public int WrittenCount => _value.WrittenCount;
- private readonly ArrayBufferWriter _value = Pools.ArrayBufferWriter.Get();
-
public void Dispose() => Pools.ArrayBufferWriter.Return(_value);
}
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index ec8e581f..5bc8dbb8 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -31,7 +31,9 @@ public IEnumerable Serialize(Base root)
var detachedObjects = new List<(Id, EfficientJson, Dictionary, Base, string)>();
var rootClosures = new Dictionary();
- var (rootId, rootJson) = SerializeBase(root, false, rootClosures, detachedObjects);
+ var rootJson = new EfficientJson();
+ using Utf8JsonWriter writer = rootJson.Writer;
+ Id rootId = SerializeBase(root, rootJson, false, rootClosures, detachedObjects);
var rootReference = new ObjectReference
{
@@ -93,8 +95,9 @@ private IEnumerable ExtractProperties(Base baseObj)
}
}
- private (Id, EfficientJson) SerializeBase(
+ private Id SerializeBase(
Base baseObj,
+ EfficientJson efficientJson,
bool forceDetach,
Dictionary closures,
List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
@@ -102,15 +105,15 @@ private IEnumerable ExtractProperties(Base baseObj)
{
var childClosures = new Dictionary();
- var efficientJson = new EfficientJson();
- using var jsonWriter = new Utf8JsonWriter(efficientJson.Buffer);
+ var jsonWriter = efficientJson.Writer;
+ int byteOffset = (int)jsonWriter.BytesCommitted + jsonWriter.BytesPending;
jsonWriter.WriteStartObject();
foreach (var prop in ExtractProperties(baseObj))
{
jsonWriter.WritePropertyName(prop.Name);
- SerializeValue(prop.Value, jsonWriter, prop.IsDetachable, childClosures, detachedObjects);
+ SerializeValue(prop.Value, efficientJson, prop.IsDetachable, childClosures, detachedObjects);
}
// We want to hash the json string now to calculate the id
@@ -118,9 +121,9 @@ private IEnumerable ExtractProperties(Base baseObj)
jsonWriter.Flush();
#if NET6_0_OR_GREATER
- string id = IdGenerator.ComputeId(efficientJson.WrittenSpan);
+ string id = IdGenerator.ComputeId(efficientJson.WrittenSpan[byteOffset..]);
#else
- string id = IdGenerator.ComputeId(efficientJson.GetInternalBuffer(), 0, efficientJson.WrittenCount);
+ string id = IdGenerator.ComputeId(efficientJson.GetInternalBuffer(), byteOffset, efficientJson.WrittenCount);
#endif
jsonWriter.WriteString("id", id);
@@ -144,17 +147,18 @@ private IEnumerable ExtractProperties(Base baseObj)
jsonWriter.WriteEndObject();
jsonWriter.Flush();
- return (new(id), efficientJson);
+ return new(id);
}
private void SerializeValue(
object? value,
- Utf8JsonWriter writer,
+ EfficientJson json,
bool isDetachable,
Dictionary closures,
List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
)
{
+ var writer = json.Writer;
switch (value)
{
case null:
@@ -249,7 +253,10 @@ private void SerializeValue(
if (isDetachable)
{
var childClosures = new Dictionary();
- var (childId, childJson) = SerializeBase(baseObj, true, childClosures, detachedObjects);
+
+ var childJson = new EfficientJson();
+ using var innerWriter = childJson.Writer;
+ var childId = SerializeBase(baseObj, childJson, true, childClosures, detachedObjects);
detachedObjects.Add((childId, childJson, childClosures, baseObj, baseObj.speckle_type));
@@ -270,9 +277,7 @@ private void SerializeValue(
else
{
var inlineClosures = new Dictionary();
- var (_, inlineJson) = SerializeBase(baseObj, false, inlineClosures, detachedObjects);
-
- writer.WriteRawValue(inlineJson.WrittenSpan);
+ _ = SerializeBase(baseObj, json, false, inlineClosures, detachedObjects);
foreach (var kvp in inlineClosures)
{
@@ -294,7 +299,7 @@ private void SerializeValue(
}
writer.WritePropertyName(key);
- SerializeValue(kvp.Value, writer, false, closures, detachedObjects);
+ SerializeValue(kvp.Value, json, false, closures, detachedObjects);
}
writer.WriteEndObject();
return;
@@ -304,7 +309,7 @@ private void SerializeValue(
writer.WriteStartArray();
foreach (var item in collection)
{
- SerializeValue(item, writer, isDetachable, closures, detachedObjects);
+ SerializeValue(item, json, isDetachable, closures, detachedObjects);
}
writer.WriteEndArray();
return;
@@ -324,7 +329,7 @@ private void SerializeValue(
private UploadItem ReferenceToUploadItem(ObjectReference existingRef)
{
var refJson = new EfficientJson();
- using var jsonWriter = new Utf8JsonWriter(refJson.Buffer);
+ using var jsonWriter = refJson.Writer;
jsonWriter.WriteStartObject();
jsonWriter.WriteString("speckle_type", "reference");
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index af6db173..478e9068 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -256,8 +256,8 @@
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
- "resolved": "6.0.0",
- "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
+ "resolved": "5.0.0",
+ "contentHash": "ZD9TMpsmYJLrxbbmdvhwt9YEgG5WntEnZ/d1eH8JBX9LBp+Ju8BSBhUGbZMNVHHomWo2KVImJhTDl2hIgw/6MA=="
},
"System.Runtime.InteropServices.WindowsRuntime": {
"type": "Transitive",
@@ -266,12 +266,11 @@
},
"System.Text.Encodings.Web": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
+ "resolved": "5.0.1",
+ "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
"dependencies": {
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+ "System.Memory": "4.5.4"
}
},
"System.Threading.Tasks.Extensions": {
@@ -286,7 +285,8 @@
"type": "Project",
"dependencies": {
"Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Text.Json": "[7.0.0, )"
+ "System.Memory": "[4.5.5, )",
+ "System.Text.Json": "[5.0.2, )"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
@@ -301,15 +301,15 @@
"System.Text.Json": {
"type": "CentralTransitive",
"requested": "[10.0.7, )",
- "resolved": "7.0.0",
- "contentHash": "DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "7.0.0",
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
"System.Buffers": "4.5.1",
- "System.Memory": "4.5.5",
+ "System.Memory": "4.5.4",
"System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "6.0.0",
- "System.Text.Encodings.Web": "7.0.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
"System.Threading.Tasks.Extensions": "4.5.4"
}
}
diff --git a/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs b/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
index 23514ec4..d9049081 100644
--- a/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
+++ b/tests/Speckle.Sdk.Tests.Unit/Pipelines/Send/Serialization/JsonIgnoreAttributeTests.cs
@@ -72,6 +72,8 @@ string expectedHash
result.SpeckleType.Should().Be(testData.speckle_type);
result.Reference.closure.Should().NotBeNull();
+ var a = result.Json.ToJsonString();
+ Console.WriteLine(a);
foreach (UploadItem child in results)
{
string jsonString = child.Json.ToJsonString();
From 04c8c210f9f0d2971641df467e672f0cc91d5f94 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 10:49:18 +0100
Subject: [PATCH 21/42] tiny optimisation
---
src/Speckle.Sdk.Dependencies/Pools.cs | 8 ++-
.../packages.lock.json | 16 +++---
.../Benchmarks/CryptSha256Hash.cs | 2 +
.../Speckle.Sdk.Tests.Performance.csproj | 4 +-
.../packages.lock.json | 49 ++++++++-----------
5 files changed, 39 insertions(+), 40 deletions(-)
diff --git a/src/Speckle.Sdk.Dependencies/Pools.cs b/src/Speckle.Sdk.Dependencies/Pools.cs
index a94fbbd4..91d8c737 100644
--- a/src/Speckle.Sdk.Dependencies/Pools.cs
+++ b/src/Speckle.Sdk.Dependencies/Pools.cs
@@ -26,7 +26,13 @@ public bool Return(Dictionary obj)
new(new StringBuilderPooledObjectPolicy() { MaximumRetainedCapacity = 100 * 1024 * 1024 });
public static Pool> ArrayBufferWriter { get; } =
- new(new ArrayBufferWriterPooledObjectPolicy() { MaximumRetainedCapacity = 100 * 1024 * 1024 });
+ new(
+ new ArrayBufferWriterPooledObjectPolicy()
+ {
+ InitialCapacity = 512,
+ MaximumRetainedCapacity = 100 * 1024 * 1024,
+ }
+ );
private sealed class ObjectDictionaryPolicy : IPooledObjectPolicy>
where TKey : notnull
diff --git a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
index 40c29db8..851bafa4 100644
--- a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
@@ -175,14 +175,6 @@
"resolved": "3.2.4",
"contentHash": "I5qFifWw/gaTQT52MhzjZpkm/JPlfjSeO/DTZJjO7+hTKI+0aGRgOgZ3NN6D96dDuuqbIAZSeA5RimtHjqrA2A=="
},
- "Speckle.Objects": {
- "type": "Transitive",
- "resolved": "3.16.0",
- "contentHash": "rejNd2qSqvl5Z12EkkfLVmME0OCssAYDB3Pv0MR6qSQk1HiKtY6FAZ0cCQrNAW/0my2U9BhAxuuijYVwZ/2kuw==",
- "dependencies": {
- "Speckle.Sdk": "3.16.0"
- }
- },
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
@@ -233,6 +225,12 @@
"resolved": "4.7.0",
"contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA=="
},
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
"speckle.sdk": {
"type": "Project",
"dependencies": {
@@ -252,7 +250,7 @@
"type": "Project",
"dependencies": {
"BenchmarkDotNet": "[0.15.8, )",
- "Speckle.Objects": "[3.16.0, )"
+ "Speckle.Objects": "[1.0.0, )"
}
},
"BenchmarkDotNet": {
diff --git a/tests/Speckle.Sdk.Tests.Performance/Benchmarks/CryptSha256Hash.cs b/tests/Speckle.Sdk.Tests.Performance/Benchmarks/CryptSha256Hash.cs
index 645ce4c9..95fd432b 100644
--- a/tests/Speckle.Sdk.Tests.Performance/Benchmarks/CryptSha256Hash.cs
+++ b/tests/Speckle.Sdk.Tests.Performance/Benchmarks/CryptSha256Hash.cs
@@ -22,9 +22,11 @@ public string Sha256()
return Speckle.Sdk.Common.Sha256.GetString(testData);
}
+#if NET6_0_OR_GREATER
[Benchmark]
public string Sha256_Span()
{
return Speckle.Sdk.Common.Sha256.GetString(testData.AsSpan());
}
+#endif
}
diff --git a/tests/Speckle.Sdk.Tests.Performance/Speckle.Sdk.Tests.Performance.csproj b/tests/Speckle.Sdk.Tests.Performance/Speckle.Sdk.Tests.Performance.csproj
index df448e88..ccb6f8b2 100644
--- a/tests/Speckle.Sdk.Tests.Performance/Speckle.Sdk.Tests.Performance.csproj
+++ b/tests/Speckle.Sdk.Tests.Performance/Speckle.Sdk.Tests.Performance.csproj
@@ -9,8 +9,8 @@
-
-
+
+
diff --git a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
index 8d256514..59654bb5 100644
--- a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
@@ -42,15 +42,6 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
- "Speckle.Objects": {
- "type": "Direct",
- "requested": "[3.16.0, )",
- "resolved": "3.16.0",
- "contentHash": "rejNd2qSqvl5Z12EkkfLVmME0OCssAYDB3Pv0MR6qSQk1HiKtY6FAZ0cCQrNAW/0my2U9BhAxuuijYVwZ/2kuw==",
- "dependencies": {
- "Speckle.Sdk": "3.16.0"
- }
- },
"BenchmarkDotNet.Annotations": {
"type": "Transitive",
"resolved": "0.15.8",
@@ -202,25 +193,6 @@
"resolved": "3.2.4",
"contentHash": "I5qFifWw/gaTQT52MhzjZpkm/JPlfjSeO/DTZJjO7+hTKI+0aGRgOgZ3NN6D96dDuuqbIAZSeA5RimtHjqrA2A=="
},
- "Speckle.Sdk": {
- "type": "Transitive",
- "resolved": "3.16.0",
- "contentHash": "iFKc+8xrKvy4cnc0jDtICiU4KKtl/D9Y4JUFNjln+XDVlDFr4+CFSo5/L1yZ49Z7I7Btva15jHIt0f7kC2eCDw==",
- "dependencies": {
- "GraphQL.Client": "6.1.0",
- "Microsoft.Data.Sqlite": "10.0.0",
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging": "10.0.0",
- "Speckle.DoubleNumerics": "4.1.0",
- "Speckle.Newtonsoft.Json": "13.0.2",
- "Speckle.Sdk.Dependencies": "3.16.0"
- }
- },
- "Speckle.Sdk.Dependencies": {
- "type": "Transitive",
- "resolved": "3.16.0",
- "contentHash": "yOThCiw4lZOepAt/5e/DNnyj5wkdpgYv26Tp7Wvmiq9SI/4P01l/JcveqeynvaH1tfuWa9QyrVFGgiQtNFIbow=="
- },
"SQLitePCLRaw.bundle_e_sqlite3": {
"type": "Transitive",
"resolved": "2.1.11",
@@ -271,6 +243,27 @@
"resolved": "4.7.0",
"contentHash": "VybpaOQQhqE6siHppMktjfGBw1GCwvCqiufqmP8F1nj7fTUNtW35LOEt3UZTEsECfo+ELAl/9o9nJx3U91i7vA=="
},
+ "speckle.objects": {
+ "type": "Project",
+ "dependencies": {
+ "Speckle.Sdk": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk": {
+ "type": "Project",
+ "dependencies": {
+ "GraphQL.Client": "[6.1.0, )",
+ "Microsoft.Data.Sqlite": "[10.0.0, )",
+ "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Speckle.DoubleNumerics": "[4.1.0, )",
+ "Speckle.Newtonsoft.Json": "[13.0.2, )",
+ "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ }
+ },
+ "speckle.sdk.dependencies": {
+ "type": "Project"
+ },
"GraphQL.Client": {
"type": "CentralTransitive",
"requested": "[6.1.0, )",
From 0ddb631931a6146596955108b531b2ed9310e6d0 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 11:53:53 +0100
Subject: [PATCH 22/42] fix bug with netstandard serializer
---
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 5bc8dbb8..63331b41 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -123,7 +123,8 @@ private Id SerializeBase(
#if NET6_0_OR_GREATER
string id = IdGenerator.ComputeId(efficientJson.WrittenSpan[byteOffset..]);
#else
- string id = IdGenerator.ComputeId(efficientJson.GetInternalBuffer(), byteOffset, efficientJson.WrittenCount);
+ byte[] buffer = efficientJson.GetInternalBuffer();
+ string id = IdGenerator.ComputeId(buffer, byteOffset, efficientJson.WrittenCount - byteOffset);
#endif
jsonWriter.WriteString("id", id);
From 55a4e70a7c2539d6248bfb86c77aa8011404e17f Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 14:47:07 +0100
Subject: [PATCH 23/42] Extra tests
---
docker-compose-internal.yml | 12 +-
src/Speckle.Sdk/Models/Base.cs | 4 +
.../Pipelines/Send/SendPipeline.cs | 35 +++-
...le.Objects.Data.ArcgisObject.verified.json | 10 +
....Objects.Data.ArchicadObject.verified.json | 11 ++
...e.Objects.Data.Civil3dObject.verified.json | 12 ++
...ckle.Objects.Data.DataObject.verified.json | 8 +
...kle.Objects.Data.EtabsObject.verified.json | 11 ++
...bjects.Data.NavisworksObject.verified.json | 9 +
...kle.Objects.Data.RevitObject.verified.json | 15 ++
...kle.Objects.Data.TeklaObject.verified.json | 11 ++
.../Pipelines/DataObjectTests.cs | 40 ++++
...dTests.CanSerialize_Attached.verified.json | 51 +++++
...ests.CanSerialize_Attached_2.verified.json | 21 ++
...ts.CanSerialize_New_Detached.verified.json | 30 +++
...s.CanSerialize_New_Detached2.verified.json | 129 +++++++++++++
...New_Detached_With_DataChunks.verified.json | 29 +++
...ew_Detached_With_DataChunks2.verified.json | 32 +++
...ts.GetPropertiesExpected_All.verified.json | 31 +++
...tPropertiesExpected_Detached.verified.json | 31 +++
.../Pipelines/DetachedTests.cs | 182 ++++++++++++++++++
...Tests.Cancellation_Traversal.verified.json | 0
.../AdditionalCancellationTests.cs | 0
.../CancellationSqLiteJsonCacheManager.cs | 0
...s.Cancellation_Receive_Cache.verified.json | 0
...ellation_Receive_Deserialize.verified.json | 0
....Cancellation_Receive_Server.verified.json | 0
...sts.Cancellation_Save_Server.verified.json | 0
...sts.Cancellation_Save_Sqlite.verified.json | 0
...Tests.Cancellation_Serialize.verified.json | 0
.../{ => Send2}/CancellationTests.cs | 0
.../{ => Send2}/ClosureParserTests.cs | 0
...le.Objects.Data.ArcgisObject.verified.json | 0
....Objects.Data.ArchicadObject.verified.json | 0
...e.Objects.Data.Civil3dObject.verified.json | 0
...ckle.Objects.Data.DataObject.verified.json | 0
...kle.Objects.Data.EtabsObject.verified.json | 0
...bjects.Data.NavisworksObject.verified.json | 0
...kle.Objects.Data.RevitObject.verified.json | 0
...kle.Objects.Data.TeklaObject.verified.json | 0
.../{ => Send2}/DataObjectTests.cs | 0
...dTests.CanSerialize_Attached.verified.json | 0
...ests.CanSerialize_Attached_2.verified.json | 0
...ts.CanSerialize_New_Detached.verified.json | 0
...s.CanSerialize_New_Detached2.verified.json | 0
...ew_Detached_With_DataChunks2.verified.json | 0
...ts.CanSerialize_Old_Detached.verified.json | 0
...ts.GetPropertiesExpected_All.verified.json | 0
...tPropertiesExpected_Detached.verified.json | 0
.../{ => Send2}/DetachedTests.cs | 0
.../DummyCancellationSqLiteSendManager.cs | 0
...nTests.Test_Exceptions_Cache.verified.json | 0
...ons_Cache_ExceptionsAfter_10.verified.json | 0
...Receive_Cache_fileName=False.verified.json | 0
..._Receive_Cache_fileName=True.verified.json | 0
...st_Exceptions_Receive_Server.verified.json | 0
...ons_Receive_Server_Skip_Both.verified.json | 0
...Tests.Test_Exceptions_Upload.verified.json | 0
.../{ => Send2}/ExceptionTests.cs | 0
...ts.Test_ExtractAllProperties.verified.json | 0
...icitInterfaceTests.Test_Json.verified.json | 0
.../{ => Send2}/ExplicitInterfaceTests.cs | 0
...ests.ExternalIdTest_Detached.verified.json | 0
...ternalIdTest_Detached_Nested.verified.json | 0
...lIdTest_Detached_Nested_More.verified.json | 0
...est_Detached_Nested_More_Too.verified.json | 0
.../{ => Send2}/ExternalIdTests.cs | 0
.../Framework/ExceptionSendCacheManager.cs | 0
.../Framework/ExceptionServerObjectManager.cs | 0
.../{ => Send2}/Framework/TestFileManager.cs | 0
.../{ => Send2}/Framework/TestTransport.cs | 0
.../{ => Send2}/Framework/TestTransport2.cs | 0
.../{ => Send2}/Global.cs | 0
.../{ => Send2}/Module.cs | 0
.../{ => Send2}/RevitObject.json.gz | Bin
.../{ => Send2}/SerializationTests.cs | 0
.../{ => Send2}/SerializationTypeTests.cs | 0
...ManagerTests.DownloadObjects.verified.json | 0
...erTests.DownloadSingleObject.verified.json | 0
...bjectManagerTests.HasObjects.verified.json | 0
.../{ => Send2}/ServerObjectManagerTests.cs | 0
.../Speckle.Sdk.Serialization.Tests.csproj | 2 +-
...PipelineTests.SendConsistency.verified.txt | 2 +
.../SendPipelineTests.SendNdjson.verified.txt | 2 +
.../Pipelines/Send/SendPipelineTests.cs | 155 +++++++++++++++
.../Speckle.Sdk.Tests.Integration.csproj | 3 -
86 files changed, 861 insertions(+), 17 deletions(-)
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached_2.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached2.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_All.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_Detached.verified.json
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/AdditionalCancellationTests.Cancellation_Traversal.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/AdditionalCancellationTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationSqLiteJsonCacheManager.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Receive_Cache.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Receive_Deserialize.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Receive_Server.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Save_Server.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Save_Sqlite.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.Cancellation_Serialize.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/CancellationTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ClosureParserTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DataObjectTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_Attached.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_Attached_2.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_New_Detached.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_New_Detached2.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.CanSerialize_Old_Detached.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.GetPropertiesExpected_All.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.GetPropertiesExpected_Detached.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DetachedTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/DummyCancellationSqLiteSendManager.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Cache.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Cache_ExceptionsAfter_10.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=False.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=True.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Receive_Server.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Receive_Server_Skip_Both.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.Test_Exceptions_Upload.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExceptionTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExplicitInterfaceTests.Test_Json.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExplicitInterfaceTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExternalIdTests.ExternalIdTest_Detached.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ExternalIdTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Framework/ExceptionSendCacheManager.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Framework/ExceptionServerObjectManager.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Framework/TestFileManager.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Framework/TestTransport.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Framework/TestTransport2.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Global.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/Module.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/RevitObject.json.gz (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/SerializationTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/SerializationTypeTests.cs (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ServerObjectManagerTests.DownloadObjects.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ServerObjectManagerTests.DownloadSingleObject.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ServerObjectManagerTests.HasObjects.verified.json (100%)
rename tests/Speckle.Sdk.Serialization.Tests/{ => Send2}/ServerObjectManagerTests.cs (100%)
create mode 100644 tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendConsistency.verified.txt
create mode 100644 tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendNdjson.verified.txt
create mode 100644 tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
diff --git a/docker-compose-internal.yml b/docker-compose-internal.yml
index 11d2d9b6..570082bc 100644
--- a/docker-compose-internal.yml
+++ b/docker-compose-internal.yml
@@ -5,14 +5,17 @@ services:
# Speckle Server dependencies
#######
postgres:
- image: "postgres:16.4-alpine3.20@sha256:d898b0b78a2627cb4ee63464a14efc9d296884f1b28c841b0ab7d7c42f1fffdf"
+ image: 'postgres:18.3-alpine3.23@sha256:54451ecb8ab38c24c3ec123f2fd501303a3a1856a5c66e98cecf2460d5e1e9d7'
restart: always
environment:
POSTGRES_DB: speckle
POSTGRES_USER: speckle
POSTGRES_PASSWORD: speckle
volumes:
- - ./.volumes/postgres-data:/var/lib/postgresql/data/
+ - ./.volumes/postgres-data:/var/lib/postgresql
+ - ./setup/db/10-docker_postgres_init.sql:/docker-entrypoint-initdb.d/10-docker_postgres_init.sql
+ - ./setup/db/11-docker_postgres_authentik_init.sql:/docker-entrypoint-initdb.d/11-docker_postgres_authentik_init.sql
+ command: postgres -c max_prepared_transactions=150
healthcheck:
# the -U user has to match the POSTGRES_USER value
test: ["CMD-SHELL", "pg_isready -U speckle"]
@@ -32,7 +35,7 @@ services:
retries: 30
minio:
- image: "minio/minio:RELEASE.2023-10-25T06-33-25Z"
+ image: "minio/minio:RELEASE.2025-09-07T16-13-09Z"
command: server /data --console-address ":9001"
restart: always
volumes:
@@ -102,8 +105,7 @@ services:
LOG_PRETTY: "true"
- FF_NEXT_GEN_FILE_IMPORTER_ENABLED: "true"
- FF_LARGE_FILE_IMPORTS_ENABLED: "true"
+ FF_DATA_MODULE_ENABLED: 'true'
networks:
default:
diff --git a/src/Speckle.Sdk/Models/Base.cs b/src/Speckle.Sdk/Models/Base.cs
index 1065e6b0..198d1189 100644
--- a/src/Speckle.Sdk/Models/Base.cs
+++ b/src/Speckle.Sdk/Models/Base.cs
@@ -57,9 +57,13 @@ public virtual string speckle_type
/// This method fully serialize the object and any referenced objects. This has a tangible cost and should be avoided.
/// Objects retrieved from a already have a property populated
/// The hash of a decomposed object differs from the hash of a non-decomposed object.
+ ///
///
/// If , will decompose the object in the process of hashing.
/// the resulting id (hash)
+ [Obsolete(
+ "The ID returned here matches the sends... It does not match the ids generated by the new serializer"
+ )]
public string GetId(bool decompose = false)
{
//TODO remove me
diff --git a/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs b/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
index 20c70fbc..a55cbaff 100644
--- a/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/SendPipeline.cs
@@ -1,4 +1,5 @@
using Speckle.InterfaceGenerator;
+using Speckle.Sdk.Api.GraphQL.Models;
using Speckle.Sdk.Credentials;
using Speckle.Sdk.Helpers;
using Speckle.Sdk.Models;
@@ -10,6 +11,24 @@ namespace Speckle.Sdk.Pipelines.Send;
public sealed class SendPipelineFactory(IUploaderFactory uploaderFactory, IDiskStoreFactory diskStoreFactory)
: ISendPipelineFactory
{
+ public SendPipeline CreateInstance(
+ ModelIngestion ingestion,
+ Account account,
+ IProgress uploadProgress,
+ CancellationToken cancellationToken
+ )
+ {
+ var uploader = uploaderFactory.CreateInstance(
+ ingestion.projectId,
+ ingestion.id,
+ account,
+ uploadProgress,
+ cancellationToken
+ );
+ var diskStore = diskStoreFactory.CreateInstance(cancellationToken);
+ return new SendPipeline(uploader, diskStore);
+ }
+
public SendPipeline CreateInstance(
string projectId,
string ingestionId,
@@ -27,13 +46,13 @@ CancellationToken cancellationToken
public sealed class SendPipeline : IDisposable
{
private readonly Serializer _serializer = new();
- private readonly Uploader _uploader;
- private readonly DiskStore _diskStore;
+ internal Uploader Uploader { get; }
+ internal DiskStore DiskStore { get; }
internal SendPipeline(Uploader uploader, DiskStore diskStore)
{
- _uploader = uploader;
- _diskStore = diskStore;
+ Uploader = uploader;
+ DiskStore = diskStore;
}
public async Task Process(Base @base)
@@ -42,7 +61,7 @@ public async Task Process(Base @base)
foreach (var item in results.Reverse())
{
// we're not doing fire and forget here so that we get the backpressure from the uploader
- await _diskStore.PushAsync(item).ConfigureAwait(false);
+ await DiskStore.PushAsync(item).ConfigureAwait(false);
}
return results.First().Reference;
@@ -50,7 +69,7 @@ public async Task Process(Base @base)
public async Task WaitForUpload()
{
- using DisposableFile tempFile = await _diskStore.CompleteAsync().ConfigureAwait(false);
+ using DisposableFile tempFile = await DiskStore.CompleteAsync().ConfigureAwait(false);
using Stream fileStreamUpload = new FileStream(
tempFile.FileInfo.FullName,
@@ -59,8 +78,8 @@ public async Task WaitForUpload()
FileShare.Read
);
- await _uploader.Send(fileStreamUpload).ConfigureAwait(false);
+ await Uploader.Send(fileStreamUpload).ConfigureAwait(false);
}
- public void Dispose() => _uploader.Dispose();
+ public void Dispose() => Uploader.Dispose();
}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
new file mode 100644
index 00000000..83bf3b9c
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
@@ -0,0 +1,10 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "id": "84fd08f2480334d155b64a4cea455ed4",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.ArcgisObject",
+ "type": null,
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
new file mode 100644
index 00000000..73607522
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
@@ -0,0 +1,11 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "elements": null,
+ "id": "5445efeab75ef29d8792fdb6588bedf9",
+ "level": null,
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.ArchicadObject",
+ "type": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
new file mode 100644
index 00000000..1a9bd46f
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
@@ -0,0 +1,12 @@
+{
+ "applicationId": null,
+ "baseCurves": null,
+ "displayValue": null,
+ "elements": null,
+ "id": "cd3224e98a0a994a944301f784c7b66f",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.Civil3dObject",
+ "type": null,
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
new file mode 100644
index 00000000..642a60c7
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
@@ -0,0 +1,8 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "id": "ad1089e775e31c7da3bf915e76ce53de",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject"
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
new file mode 100644
index 00000000..9cf062f8
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
@@ -0,0 +1,11 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "elements": null,
+ "id": "ba6c6436f2bf9171de67a21161323ccd",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.EtabsObject",
+ "type": null,
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
new file mode 100644
index 00000000..6638484c
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
@@ -0,0 +1,9 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "id": "a8c00df968e0685b075d045fa0070d79",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.NavisworksObject",
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
new file mode 100644
index 00000000..0d37ba20
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
@@ -0,0 +1,15 @@
+{
+ "applicationId": null,
+ "category": null,
+ "displayValue": null,
+ "elements": null,
+ "family": null,
+ "id": "db87304ee2d291bcb9270aa38c083c11",
+ "level": null,
+ "location": null,
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.RevitObject",
+ "type": null,
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
new file mode 100644
index 00000000..cd86a3bb
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
@@ -0,0 +1,11 @@
+{
+ "applicationId": null,
+ "displayValue": null,
+ "elements": null,
+ "id": "5b2c676d86fce8b4f95f0020e4a8cfa1",
+ "name": null,
+ "properties": null,
+ "speckle_type": "Objects.Data.DataObject:Objects.Data.TeklaObject",
+ "type": null,
+ "units": null
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
new file mode 100644
index 00000000..884fb4d8
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
@@ -0,0 +1,40 @@
+using Speckle.Objects.Data;
+using Speckle.Objects.Geometry;
+using Speckle.Sdk.Host;
+using Speckle.Sdk.Models;
+using Speckle.Sdk.Pipelines.Send;
+
+namespace Speckle.Sdk.Serialization.Tests.Pipelines;
+
+public class DataObjectTests
+{
+ private readonly Serializer _sut;
+
+ public DataObjectTests()
+ {
+ TypeLoader.Initialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
+
+ _sut = new();
+ }
+
+ [Theory]
+ [InlineData(typeof(ArcgisObject))]
+ [InlineData(typeof(ArchicadObject))]
+ [InlineData(typeof(Civil3dObject))]
+ [InlineData(typeof(DataObject))]
+ [InlineData(typeof(EtabsObject))]
+ [InlineData(typeof(NavisworksObject))]
+ [InlineData(typeof(RevitObject))]
+ [InlineData(typeof(TeklaObject))]
+ public async Task ValidateDataObject(Type type)
+ {
+ Base myBase = (Base)(
+ Activator.CreateInstance(type) ?? throw new Exception("Could not create instance of " + type.Name)
+ );
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var json = result.Last().Json.ToJsonString();
+
+ await VerifyJson(json).UseParameters(type);
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached.verified.json
new file mode 100644
index 00000000..ce2c3252
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached.verified.json
@@ -0,0 +1,51 @@
+{
+ "a9a10a300a32d8ce7bf87e478162377c": {
+ "applicationId": null,
+ "area": 0,
+ "bbox": null,
+ "closed": false,
+ "domain": {
+ "applicationId": null,
+ "end": 1,
+ "id": "85660a9f276d3f43500aedac0e4f7062",
+ "speckle_type": "Objects.Primitive.Interval",
+ "start": 0
+ },
+ "id": "a9a10a300a32d8ce7bf87e478162377c",
+ "length": 0,
+ "speckle_type": "Objects.Geometry.Polyline",
+ "units": "test",
+ "value": [
+ 3,
+ 4
+ ]
+ },
+ "ee7561f0adde3a349f99238b4aeab164": {
+ "__closure": {
+ "a9a10a300a32d8ce7bf87e478162377c": 1
+ },
+ "applicationId": "1",
+ "arr": null,
+ "attachedProp": {
+ "__closure": {
+ "a9a10a300a32d8ce7bf87e478162377c": 1
+ },
+ "applicationId": "4",
+ "id": "06b9162b0a85b85b498a92ef4e95492c",
+ "line": {
+ "referencedId": "a9a10a300a32d8ce7bf87e478162377c",
+ "speckle_type": "reference"
+ },
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2"
+ },
+ "crazyProp": null,
+ "detachedProp": null,
+ "detachedProp2": null,
+ "dynamicProp": 123,
+ "id": "ee7561f0adde3a349f99238b4aeab164",
+ "list": [],
+ "list2": null,
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached_2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached_2.verified.json
new file mode 100644
index 00000000..2ee5f727
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_Attached_2.verified.json
@@ -0,0 +1,21 @@
+{
+ "1c8c3f02283a215451092973eccbd4db": {
+ "applicationId": "1",
+ "arr": null,
+ "attachedProp": {
+ "applicationId": "4",
+ "id": "fa1e5165dc1458a44e4684ce714f0d2b",
+ "line": null,
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2"
+ },
+ "crazyProp": null,
+ "detachedProp": null,
+ "detachedProp2": null,
+ "dynamicProp": 123,
+ "id": "1c8c3f02283a215451092973eccbd4db",
+ "list": [],
+ "list2": null,
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached.verified.json
new file mode 100644
index 00000000..f69a42a2
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached.verified.json
@@ -0,0 +1,30 @@
+{
+ "5053b39434bf2f35a388fe8e419ca181": {
+ "applicationId": null,
+ "id": "5053b39434bf2f35a388fe8e419ca181",
+ "name": "detachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "a8ec0370e21dd89402803fd450d2f58c": {
+ "__closure": {
+ "5053b39434bf2f35a388fe8e419ca181": 1
+ },
+ "applicationId": null,
+ "arr": null,
+ "attachedProp": {
+ "applicationId": null,
+ "id": "6e5c34adf929602ce78d559d71f53c01",
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "crazyProp": null,
+ "detachedProp": {
+ "referencedId": "5053b39434bf2f35a388fe8e419ca181",
+ "speckle_type": "reference"
+ },
+ "dynamicProp": 123,
+ "id": "a8ec0370e21dd89402803fd450d2f58c",
+ "list": [],
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached2.verified.json
new file mode 100644
index 00000000..4f9ff534
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached2.verified.json
@@ -0,0 +1,129 @@
+{
+ "0bd92b9bb0a61dfe13f2bd40ba918b4e": {
+ "__closure": {
+ "d601958e33a1473d1c068e0082afa630": 1
+ },
+ "applicationId": "2",
+ "id": "0bd92b9bb0a61dfe13f2bd40ba918b4e",
+ "line": {
+ "referencedId": "d601958e33a1473d1c068e0082afa630",
+ "speckle_type": "reference"
+ },
+ "name": "detachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2"
+ },
+ "54156930111d678f0228f957605fb95b": {
+ "applicationId": null,
+ "area": 0,
+ "bbox": null,
+ "closed": false,
+ "domain": {
+ "applicationId": null,
+ "end": 1,
+ "id": "85660a9f276d3f43500aedac0e4f7062",
+ "speckle_type": "Objects.Primitive.Interval",
+ "start": 0
+ },
+ "id": "54156930111d678f0228f957605fb95b",
+ "length": 0,
+ "speckle_type": "Objects.Geometry.Polyline",
+ "units": "test",
+ "value": [
+ 3,
+ 2
+ ]
+ },
+ "60e31bdb9c14fef6684746201dd42928": {
+ "__closure": {
+ "0bd92b9bb0a61dfe13f2bd40ba918b4e": 1,
+ "54156930111d678f0228f957605fb95b": 1,
+ "a9a10a300a32d8ce7bf87e478162377c": 1,
+ "d601958e33a1473d1c068e0082afa630": 1,
+ "db01a206aa71f203904ee8b7b3a52bd9": 1
+ },
+ "applicationId": "1",
+ "arr": null,
+ "attachedProp": {
+ "__closure": {
+ "a9a10a300a32d8ce7bf87e478162377c": 1
+ },
+ "applicationId": "4",
+ "id": "06b9162b0a85b85b498a92ef4e95492c",
+ "line": {
+ "referencedId": "a9a10a300a32d8ce7bf87e478162377c",
+ "speckle_type": "reference"
+ },
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2"
+ },
+ "crazyProp": null,
+ "detachedProp": {
+ "referencedId": "0bd92b9bb0a61dfe13f2bd40ba918b4e",
+ "speckle_type": "reference"
+ },
+ "detachedProp2": {
+ "referencedId": "db01a206aa71f203904ee8b7b3a52bd9",
+ "speckle_type": "reference"
+ },
+ "dynamicProp": 123,
+ "id": "60e31bdb9c14fef6684746201dd42928",
+ "list": [],
+ "list2": null,
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2"
+ },
+ "a9a10a300a32d8ce7bf87e478162377c": {
+ "applicationId": null,
+ "area": 0,
+ "bbox": null,
+ "closed": false,
+ "domain": {
+ "applicationId": null,
+ "end": 1,
+ "id": "85660a9f276d3f43500aedac0e4f7062",
+ "speckle_type": "Objects.Primitive.Interval",
+ "start": 0
+ },
+ "id": "a9a10a300a32d8ce7bf87e478162377c",
+ "length": 0,
+ "speckle_type": "Objects.Geometry.Polyline",
+ "units": "test",
+ "value": [
+ 3,
+ 4
+ ]
+ },
+ "d601958e33a1473d1c068e0082afa630": {
+ "applicationId": null,
+ "area": 0,
+ "bbox": null,
+ "closed": false,
+ "domain": {
+ "applicationId": null,
+ "end": 1,
+ "id": "85660a9f276d3f43500aedac0e4f7062",
+ "speckle_type": "Objects.Primitive.Interval",
+ "start": 0
+ },
+ "id": "d601958e33a1473d1c068e0082afa630",
+ "length": 0,
+ "speckle_type": "Objects.Geometry.Polyline",
+ "units": "test",
+ "value": [
+ 1,
+ 2
+ ]
+ },
+ "db01a206aa71f203904ee8b7b3a52bd9": {
+ "__closure": {
+ "54156930111d678f0228f957605fb95b": 1
+ },
+ "applicationId": "3",
+ "id": "db01a206aa71f203904ee8b7b3a52bd9",
+ "line": {
+ "referencedId": "54156930111d678f0228f957605fb95b",
+ "speckle_type": "reference"
+ },
+ "name": "detachedProp2",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase2"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks.verified.json
new file mode 100644
index 00000000..0b2c66be
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks.verified.json
@@ -0,0 +1,29 @@
+{
+ "a7e5385b37c09008c969d79c5f94fb6e": {
+ "applicationId": "1",
+ "arr": null,
+ "attachedProp": null,
+ "crazyProp": null,
+ "detachedProp": null,
+ "detachedProp2": null,
+ "dynamicProp": 123,
+ "id": "a7e5385b37c09008c969d79c5f94fb6e",
+ "list": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10
+ ],
+ "list2": [
+ 1,
+ 10
+ ],
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
new file mode 100644
index 00000000..77b8c0cf
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
@@ -0,0 +1,32 @@
+{
+ "566c5fcf4a7d4aae446a53725703532f": {
+ "applicationId": "1",
+ "arr": [
+ 1,
+ 10
+ ],
+ "attachedProp": null,
+ "crazyProp": null,
+ "detachedProp": null,
+ "detachedProp2": null,
+ "dynamicProp": 123,
+ "id": "566c5fcf4a7d4aae446a53725703532f",
+ "list": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10
+ ],
+ "list2": [
+ 1,
+ 10
+ ],
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase2"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_All.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_All.verified.json
new file mode 100644
index 00000000..d6a3a342
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_All.verified.json
@@ -0,0 +1,31 @@
+{
+ "5053b39434bf2f35a388fe8e419ca181": {
+ "applicationId": null,
+ "id": "5053b39434bf2f35a388fe8e419ca181",
+ "name": "detachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "54488dc6efa222136302db51c12be359": {
+ "__closure": {
+ "5053b39434bf2f35a388fe8e419ca181": 1
+ },
+ "@prop2": 2,
+ "applicationId": null,
+ "arr": null,
+ "attachedProp": {
+ "applicationId": null,
+ "id": "6e5c34adf929602ce78d559d71f53c01",
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "crazyProp": null,
+ "detachedProp": {
+ "referencedId": "5053b39434bf2f35a388fe8e419ca181",
+ "speckle_type": "reference"
+ },
+ "dynamicProp": 123,
+ "id": "54488dc6efa222136302db51c12be359",
+ "list": [],
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_Detached.verified.json
new file mode 100644
index 00000000..d6a3a342
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.GetPropertiesExpected_Detached.verified.json
@@ -0,0 +1,31 @@
+{
+ "5053b39434bf2f35a388fe8e419ca181": {
+ "applicationId": null,
+ "id": "5053b39434bf2f35a388fe8e419ca181",
+ "name": "detachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "54488dc6efa222136302db51c12be359": {
+ "__closure": {
+ "5053b39434bf2f35a388fe8e419ca181": 1
+ },
+ "@prop2": 2,
+ "applicationId": null,
+ "arr": null,
+ "attachedProp": {
+ "applicationId": null,
+ "id": "6e5c34adf929602ce78d559d71f53c01",
+ "name": "attachedProp",
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SamplePropBase"
+ },
+ "crazyProp": null,
+ "detachedProp": {
+ "referencedId": "5053b39434bf2f35a388fe8e419ca181",
+ "speckle_type": "reference"
+ },
+ "dynamicProp": 123,
+ "id": "54488dc6efa222136302db51c12be359",
+ "list": [],
+ "speckle_type": "Speckle.Core.Tests.Unit.Models.BaseTests+SampleObjectBase"
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
new file mode 100644
index 00000000..2c0123c1
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
@@ -0,0 +1,182 @@
+using Speckle.Objects.Geometry;
+using Speckle.Sdk.Host;
+using Speckle.Sdk.Pipelines.Send;
+
+namespace Speckle.Sdk.Serialization.Tests.Pipelines;
+
+public class DetachedTests
+{
+ private readonly Serializer _sut;
+
+ public DetachedTests()
+ {
+ TypeLoader.Initialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
+
+ _sut = new();
+ }
+
+ [Fact]
+ public async Task CanSerialize_New_Detached()
+ {
+ var myBase = new SampleObjectBase
+ {
+ ["dynamicProp"] = 123,
+ detachedProp = new SamplePropBase() { name = "detachedProp" },
+ attachedProp = new SamplePropBase() { name = "attachedProp" },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task GetPropertiesExpected_Detached()
+ {
+ var @myBase = new SampleObjectBase
+ {
+ ["dynamicProp"] = 123,
+ ["@prop2"] = 2,
+ ["__prop3"] = 3,
+ detachedProp = new SamplePropBase() { name = "detachedProp" },
+ attachedProp = new SamplePropBase() { name = "attachedProp" },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task GetPropertiesExpected_All()
+ {
+ var myBase = new SampleObjectBase
+ {
+ ["dynamicProp"] = 123,
+ ["@prop2"] = 2,
+ ["__prop3"] = 3,
+ detachedProp = new SamplePropBase() { name = "detachedProp" },
+ attachedProp = new SamplePropBase() { name = "attachedProp" },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task CanSerialize_New_Detached2()
+ {
+ var myBase = new SampleObjectBase2
+ {
+ ["dynamicProp"] = 123,
+ applicationId = "1",
+ detachedProp = new SamplePropBase2()
+ {
+ name = "detachedProp",
+ applicationId = "2",
+ line = new Polyline() { units = "test", value = [1.0, 2.0] },
+ },
+ detachedProp2 = new SamplePropBase2()
+ {
+ name = "detachedProp2",
+ applicationId = "3",
+ line = new Polyline() { units = "test", value = [3.0, 2.0] },
+ },
+ attachedProp = new SamplePropBase2()
+ {
+ name = "attachedProp",
+ applicationId = "4",
+ line = new Polyline() { units = "test", value = [3.0, 4.0] },
+ },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task CanSerialize_Attached()
+ {
+ var myBase = new SampleObjectBase2
+ {
+ ["dynamicProp"] = 123,
+ applicationId = "1",
+ attachedProp = new SamplePropBase2()
+ {
+ name = "attachedProp",
+ applicationId = "4",
+ line = new Polyline() { units = "test", value = [3.0, 4.0] },
+ },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task CanSerialize_Attached_2()
+ {
+ var myBase = new SampleObjectBase2
+ {
+ ["dynamicProp"] = 123,
+ applicationId = "1",
+ attachedProp = new SamplePropBase2() { name = "attachedProp", applicationId = "4" },
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task CanSerialize_New_Detached_With_DataChunks()
+ {
+ var myBase = new SampleObjectBase2
+ {
+ ["dynamicProp"] = 123,
+ applicationId = "1",
+ list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+ list2 = [1, 10],
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+
+ [Fact]
+ public async Task CanSerialize_New_Detached_With_DataChunks2()
+ {
+ var myBase = new SampleObjectBase2
+ {
+ ["dynamicProp"] = 123,
+ applicationId = "1",
+ list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
+ list2 = [1, 10],
+ arr = [1, 10],
+ };
+
+ IEnumerable result = _sut.Serialize(myBase);
+
+ var objects = result.ToDictionary(x => x.Id, x => x.Json.ToJsonString());
+
+ await VerifyJsonDictionary(objects);
+ }
+}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/AdditionalCancellationTests.Cancellation_Traversal.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/AdditionalCancellationTests.Cancellation_Traversal.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/AdditionalCancellationTests.Cancellation_Traversal.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/AdditionalCancellationTests.Cancellation_Traversal.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/AdditionalCancellationTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/AdditionalCancellationTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/AdditionalCancellationTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/AdditionalCancellationTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationSqLiteJsonCacheManager.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationSqLiteJsonCacheManager.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationSqLiteJsonCacheManager.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationSqLiteJsonCacheManager.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Cache.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Cache.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Cache.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Cache.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Deserialize.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Deserialize.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Deserialize.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Deserialize.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Server.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Server.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Receive_Server.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Receive_Server.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Save_Server.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Save_Server.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Save_Server.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Save_Server.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Save_Sqlite.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Save_Sqlite.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Save_Sqlite.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Save_Sqlite.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Serialize.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Serialize.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.Cancellation_Serialize.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.Cancellation_Serialize.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/CancellationTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/CancellationTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/CancellationTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ClosureParserTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/ClosureParserTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ClosureParserTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ClosureParserTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArcgisObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.ArchicadObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.Civil3dObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.DataObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.EtabsObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.NavisworksObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.RevitObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.ValidateDataObject_type=Speckle.Objects.Data.TeklaObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DataObjectTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DataObjectTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Attached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Attached.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Attached.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Attached.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Attached_2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Attached_2.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Attached_2.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Attached_2.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached2.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached2.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached2.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_New_Detached_With_DataChunks2.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Old_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Old_Detached.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.CanSerialize_Old_Detached.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.CanSerialize_Old_Detached.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_All.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.GetPropertiesExpected_All.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_All.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.GetPropertiesExpected_All.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.GetPropertiesExpected_Detached.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.GetPropertiesExpected_Detached.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.GetPropertiesExpected_Detached.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DetachedTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DetachedTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/DummyCancellationSqLiteSendManager.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/DummyCancellationSqLiteSendManager.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/DummyCancellationSqLiteSendManager.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/DummyCancellationSqLiteSendManager.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Cache.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Cache.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Cache.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Cache.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Cache_ExceptionsAfter_10.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Cache_ExceptionsAfter_10.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Cache_ExceptionsAfter_10.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Cache_ExceptionsAfter_10.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=False.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=False.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=False.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=False.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=True.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=True.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=True.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Cache_fileName=True.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Server.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Server.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Server.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Server.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Server_Skip_Both.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Server_Skip_Both.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Receive_Server_Skip_Both.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Receive_Server_Skip_Both.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Upload.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Upload.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.Test_Exceptions_Upload.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.Test_Exceptions_Upload.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExceptionTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExceptionTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.Test_ExtractAllProperties.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_Json.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.Test_Json.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.Test_Json.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.Test_Json.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExplicitInterfaceTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExplicitInterfaceTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested_More.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.ExternalIdTest_Detached_Nested_More_Too.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ExternalIdTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ExternalIdTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Framework/ExceptionSendCacheManager.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/ExceptionSendCacheManager.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Framework/ExceptionSendCacheManager.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/ExceptionSendCacheManager.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Framework/ExceptionServerObjectManager.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/ExceptionServerObjectManager.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Framework/ExceptionServerObjectManager.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/ExceptionServerObjectManager.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Framework/TestFileManager.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestFileManager.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Framework/TestFileManager.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestFileManager.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Framework/TestTransport.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestTransport.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Framework/TestTransport.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestTransport.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Framework/TestTransport2.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestTransport2.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Framework/TestTransport2.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Framework/TestTransport2.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Global.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Global.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Global.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Global.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Module.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/Module.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/Module.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/Module.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/RevitObject.json.gz b/tests/Speckle.Sdk.Serialization.Tests/Send2/RevitObject.json.gz
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/RevitObject.json.gz
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/RevitObject.json.gz
diff --git a/tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/SerializationTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/SerializationTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/SerializationTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/SerializationTypeTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/SerializationTypeTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/SerializationTypeTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/SerializationTypeTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.DownloadObjects.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.DownloadObjects.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.DownloadObjects.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.DownloadObjects.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.DownloadSingleObject.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.DownloadSingleObject.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.DownloadSingleObject.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.DownloadSingleObject.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.HasObjects.verified.json b/tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.HasObjects.verified.json
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.HasObjects.verified.json
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.HasObjects.verified.json
diff --git a/tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.cs
similarity index 100%
rename from tests/Speckle.Sdk.Serialization.Tests/ServerObjectManagerTests.cs
rename to tests/Speckle.Sdk.Serialization.Tests/Send2/ServerObjectManagerTests.cs
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj b/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj
index 3afc3ddd..62f7e907 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj
+++ b/tests/Speckle.Sdk.Serialization.Tests/Speckle.Sdk.Serialization.Tests.csproj
@@ -19,6 +19,6 @@
-
+
diff --git a/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendConsistency.verified.txt b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendConsistency.verified.txt
new file mode 100644
index 00000000..dd31cc9b
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendConsistency.verified.txt
@@ -0,0 +1,2 @@
+8efe64322221afddffb675932ae27345 Base {"applicationId":null,"speckle_type":"Base","mux":"mux","qux":"qux","id":"8efe64322221afddffb675932ae27345"}
+18c55d4b2f2853d43648607cabd4b298 Base {"applicationId":null,"speckle_type":"Base","foo":"foo","bar":"bar","@baz":{"speckle_type":"reference","referencedId":"8efe64322221afddffb675932ae27345"},"id":"18c55d4b2f2853d43648607cabd4b298","__closure":{"8efe64322221afddffb675932ae27345":1}}
diff --git a/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendNdjson.verified.txt b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendNdjson.verified.txt
new file mode 100644
index 00000000..dd31cc9b
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.SendNdjson.verified.txt
@@ -0,0 +1,2 @@
+8efe64322221afddffb675932ae27345 Base {"applicationId":null,"speckle_type":"Base","mux":"mux","qux":"qux","id":"8efe64322221afddffb675932ae27345"}
+18c55d4b2f2853d43648607cabd4b298 Base {"applicationId":null,"speckle_type":"Base","foo":"foo","bar":"bar","@baz":{"speckle_type":"reference","referencedId":"8efe64322221afddffb675932ae27345"},"id":"18c55d4b2f2853d43648607cabd4b298","__closure":{"8efe64322221afddffb675932ae27345":1}}
diff --git a/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
new file mode 100644
index 00000000..7c861045
--- /dev/null
+++ b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
@@ -0,0 +1,155 @@
+using System.IO.Compression;
+using System.Text;
+using Microsoft.Extensions.DependencyInjection;
+using Speckle.Sdk.Api;
+using Speckle.Sdk.Api.GraphQL.Enums;
+using Speckle.Sdk.Api.GraphQL.Models;
+using Speckle.Sdk.Models;
+using Speckle.Sdk.Pipelines.Progress;
+using Speckle.Sdk.Pipelines.Send;
+
+namespace Speckle.Sdk.Tests.Integration.Pipelines.Send;
+
+public sealed class SendPipelineTests : IAsyncLifetime
+{
+ private Project _project;
+ private Model _model;
+ private IClient _client;
+
+ private ISendPipelineFactory _factory;
+
+ public async Task InitializeAsync()
+ {
+ var serviceProvider = TestServiceSetup.GetServiceProvider();
+ _factory = serviceProvider.GetRequiredService();
+
+ _client = await Fixtures.SeedUserWithClient();
+ _project = await _client.Project.Create(new("Blobber", "Flobber", ProjectVisibility.Private));
+ _model = await _client.Model.Create(new("Llobber", "Clobber", _project.id));
+ }
+
+ private static string ReadNdJsonGz(FileInfo file)
+ {
+ using FileStream fileStream = file.OpenRead();
+ using GZipStream gzipStream = new GZipStream(fileStream, CompressionMode.Decompress);
+ using StreamReader reader = new StreamReader(gzipStream, Encoding.UTF8);
+ return reader.ReadToEnd();
+ }
+
+ [Fact]
+ public async Task SendNdjson()
+ {
+ Base myObject = Fixtures.GenerateNestedObject();
+
+ var ingestion = await _client.Ingestion.Create(
+ new(_model.id, _project.id, "Starting send test", new("IntegrationTests", "0", null, null))
+ );
+
+ using SendPipeline sender = _factory.CreateInstance(
+ ingestion,
+ _client.Account,
+ new NullProgress(),
+ CancellationToken.None
+ );
+ await sender.Process(myObject);
+ var file = await sender.DiskStore.CompleteAsync();
+
+ string ndjson = ReadNdJsonGz(file.FileInfo);
+
+ await Verify(ndjson);
+ }
+
+ [Fact]
+ public async Task SerializeConsistency()
+ {
+ Base myObject = Fixtures.GenerateNestedObject();
+
+ var ingestion = await _client.Ingestion.Create(
+ new(_model.id, _project.id, "Starting send test", new("IntegrationTests", "0", null, null))
+ );
+
+ //SEND
+ ObjectReference firstSend;
+ using (
+ SendPipeline sender = _factory.CreateInstance(
+ ingestion,
+ _client.Account,
+ new NullProgress(),
+ CancellationToken.None
+ )
+ )
+ {
+ firstSend = await sender.Process(myObject);
+ await sender.WaitForUpload();
+ }
+
+ var secondIngestion = await _client.Ingestion.Create(
+ new(_model.id, _project.id, "Starting again", new("IntegrationTests", "0", null, null))
+ );
+
+ //SEND AGAIN!
+ ObjectReference secondSend;
+ using (
+ SendPipeline sender = _factory.CreateInstance(
+ secondIngestion,
+ _client.Account,
+ new NullProgress(),
+ CancellationToken.None
+ )
+ )
+ {
+ secondSend = await sender.Process(myObject);
+ await sender.WaitForUpload();
+ }
+
+ Assert.Equal(firstSend.referencedId, secondSend.referencedId);
+ }
+
+ [Fact]
+ public async Task SerializeInvalidDataThrows()
+ {
+ Base myObject = Fixtures.GenerateNestedObject();
+ myObject["invalidProp"] = new StringBuilder(); //Serializer does not support serializing this type
+
+ var ingestion = await _client.Ingestion.Create(
+ new(_model.id, _project.id, "Starting send test", new("IntegrationTests", "0", null, null))
+ );
+
+ await Assert.ThrowsAsync(async () =>
+ {
+ using SendPipeline sender = _factory.CreateInstance(
+ ingestion,
+ _client.Account,
+ new NullProgress(),
+ CancellationToken.None
+ );
+ await sender.Process(myObject);
+ await sender.WaitForUpload();
+ });
+ }
+
+ [Fact]
+ public async Task SendNoIngestionThrows()
+ {
+ Base myObject = Fixtures.GenerateNestedObject();
+
+ await Assert.ThrowsAsync(async () =>
+ {
+ using var sender = _factory.CreateInstance(
+ _project.id,
+ "not-a-real-ingestion",
+ _client.Account,
+ new NullProgress(),
+ CancellationToken.None
+ );
+ await sender.Process(myObject);
+ await sender.WaitForUpload();
+ });
+ }
+
+ public Task DisposeAsync()
+ {
+ _client?.Dispose();
+ return Task.CompletedTask;
+ }
+}
diff --git a/tests/Speckle.Sdk.Tests.Integration/Speckle.Sdk.Tests.Integration.csproj b/tests/Speckle.Sdk.Tests.Integration/Speckle.Sdk.Tests.Integration.csproj
index 768cc1fc..3d8c88f4 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Speckle.Sdk.Tests.Integration.csproj
+++ b/tests/Speckle.Sdk.Tests.Integration/Speckle.Sdk.Tests.Integration.csproj
@@ -16,7 +16,4 @@
-
-
-
From d0bffdeacf8eb7911bc4099b0097c3eeacc05392 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 15:19:19 +0100
Subject: [PATCH 24/42] fix tests
---
.editorconfig | 2 +-
.gitattributes | 3 ++-
Speckle.Sdk.slnx | 1 +
.../Pipelines/DataObjectTests.cs | 2 +-
.../Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs | 2 +-
tests/Speckle.Sdk.Tests.Integration/Fixtures.cs | 2 +-
.../Pipelines/Send/SendPipelineTests.cs | 1 +
7 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/.editorconfig b/.editorconfig
index 5778aea1..594617a8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -318,7 +318,7 @@ indent_size = 2
tab_width = 2
# Verify settings
-[*.{received,verified}.{json}]
+[*.{received,verified}.{json,txt}]
charset = utf-8-bom
end_of_line = lf
indent_size = unset
diff --git a/.gitattributes b/.gitattributes
index d87a165f..a48dc2b0 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -5,4 +5,5 @@
*.txt text eol=crlf
# Verify
-*.verified.json text eol=lf working-tree-encoding=UTF-8
\ No newline at end of file
+*.verified.json text eol=lf working-tree-encoding=UTF-8
+*.verified.txt text eol=lf working-tree-encoding=UTF-8
diff --git a/Speckle.Sdk.slnx b/Speckle.Sdk.slnx
index 2461b2a0..19022179 100644
--- a/Speckle.Sdk.slnx
+++ b/Speckle.Sdk.slnx
@@ -14,6 +14,7 @@
+
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
index 884fb4d8..e729abc5 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DataObjectTests.cs
@@ -12,7 +12,7 @@ public class DataObjectTests
public DataObjectTests()
{
- TypeLoader.Initialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
+ TypeLoader.ReInitialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
_sut = new();
}
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
index 2c0123c1..b0d1e47a 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/DetachedTests.cs
@@ -10,7 +10,7 @@ public class DetachedTests
public DetachedTests()
{
- TypeLoader.Initialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
+ TypeLoader.ReInitialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
_sut = new();
}
diff --git a/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs b/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
index 8cab800b..45082b91 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
@@ -26,7 +26,7 @@ namespace Speckle.Sdk.Tests.Integration;
public static class Fixtures
{
- public static readonly ServerInfo Server = new() { url = "http://localhost:3000", name = "Docker Server" };
+ public static readonly ServerInfo Server = new() { url = "http://localhost", name = "Docker Server" };
public static readonly AuthApp TestAuthApp = new()
{
AppId = "spklwebapp",
diff --git a/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
index 7c861045..b00c6d9f 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Pipelines/Send/SendPipelineTests.cs
@@ -10,6 +10,7 @@
namespace Speckle.Sdk.Tests.Integration.Pipelines.Send;
+[Trait("Server", "Internal")]
public sealed class SendPipelineTests : IAsyncLifetime
{
private Project _project;
From 7e0d992a511bde3b6f34a283a96e61e36fda8432 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 15:39:15 +0100
Subject: [PATCH 25/42] revert local testurl
---
tests/Speckle.Sdk.Tests.Integration/Fixtures.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs b/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
index 45082b91..8cab800b 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Fixtures.cs
@@ -26,7 +26,7 @@ namespace Speckle.Sdk.Tests.Integration;
public static class Fixtures
{
- public static readonly ServerInfo Server = new() { url = "http://localhost", name = "Docker Server" };
+ public static readonly ServerInfo Server = new() { url = "http://localhost:3000", name = "Docker Server" };
public static readonly AuthApp TestAuthApp = new()
{
AppId = "spklwebapp",
From 736985e2304fb77b01406bded873a7740181b11e Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Thu, 30 Apr 2026 19:15:18 +0100
Subject: [PATCH 26/42] Temporary assertion
---
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 63331b41..41f4d695 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -106,7 +106,19 @@ private Id SerializeBase(
var childClosures = new Dictionary();
var jsonWriter = efficientJson.Writer;
- int byteOffset = (int)jsonWriter.BytesCommitted + jsonWriter.BytesPending;
+ int byteOffset1 = (int)jsonWriter.BytesCommitted + jsonWriter.BytesPending;
+
+ jsonWriter.Flush();
+
+ int byteOffset = efficientJson.WrittenCount;
+
+ if (byteOffset1 != byteOffset)
+ {
+ // Adding this temporarily, I was happy with the `BytesCommitted + jsonWriter.BytesPending` solution
+ // But AI suggested that it would be somehow unreliable.
+ // adding this just to test, will remove and settle on either option after testing is complete.
+ throw new ArgumentException("Offsets differed in an unexpected way");
+ }
jsonWriter.WriteStartObject();
From 9da0fb638be31cf22186477b225cf553f631a326 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Mon, 4 May 2026 20:23:21 +0100
Subject: [PATCH 27/42] More tests
---
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 4 ++
.../Pipelines/AttachedTests.cs | 38 +++++++++++++++++++
2 files changed, 42 insertions(+)
create mode 100644 tests/Speckle.Sdk.Serialization.Tests/Pipelines/AttachedTests.cs
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 41f4d695..12f5c304 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -1,6 +1,7 @@
using System.Collections;
using System.Diagnostics.CodeAnalysis;
using System.Drawing;
+using System.Globalization;
using System.Text.Json;
using Speckle.Sdk.Models;
using Speckle.Sdk.Serialisation;
@@ -210,6 +211,9 @@ private void SerializeValue(
case decimal d:
writer.WriteNumberValue(d);
return;
+ case Guid g:
+ writer.WriteStringValue(g.ToString("D", CultureInfo.InvariantCulture));
+ return;
case Enum:
writer.WriteNumberValue((int)value);
return;
diff --git a/tests/Speckle.Sdk.Serialization.Tests/Pipelines/AttachedTests.cs b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/AttachedTests.cs
new file mode 100644
index 00000000..d8a8af36
--- /dev/null
+++ b/tests/Speckle.Sdk.Serialization.Tests/Pipelines/AttachedTests.cs
@@ -0,0 +1,38 @@
+using Speckle.Objects.Geometry;
+using Speckle.Sdk.Host;
+using Speckle.Sdk.Models;
+using Speckle.Sdk.Pipelines.Send;
+
+namespace Speckle.Sdk.Serialization.Tests.Pipelines;
+
+public sealed class AttachedTests
+{
+ private readonly Serializer _sut;
+
+ public AttachedTests()
+ {
+ TypeLoader.ReInitialize(typeof(TestClass).Assembly, typeof(Polyline).Assembly);
+
+ _sut = new();
+ }
+
+ [Fact]
+ public void ExpectAttachedIdsToMatchBase()
+ {
+ string seed = Guid.NewGuid().ToString();
+ Base b0 = new() { ["data"] = seed };
+ UploadItem l0 = _sut.Serialize(b0).First();
+
+ Base b1 = new() { ["data"] = b0 };
+ UploadItem l1 = _sut.Serialize(b1).First();
+ string expectedLine1 = $"\"id\":\"{l0.Id}\"";
+ Assert.Contains(expectedLine1, l1.Json.ToJsonString());
+ Assert.Contains(seed, l1.Json.ToJsonString());
+
+ Base b2 = new() { ["data"] = b1 };
+ UploadItem l2 = _sut.Serialize(b2).First();
+ string expectedLine2 = $"\"id\":\"{l1.Id}\"";
+ Assert.Contains(expectedLine2, l2.Json.ToJsonString());
+ Assert.Contains(expectedLine2, l1.Json.ToJsonString());
+ }
+}
From ee5b5c40abf184b9cf83dd588898477c803da680 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Tue, 5 May 2026 14:26:41 +0100
Subject: [PATCH 28/42] Lower `System.Memory` requirement back to 4.5.4
---
src/Speckle.Automate.Sdk/packages.lock.json | 28 +++++++--
src/Speckle.Objects/packages.lock.json | 32 ++++++++--
src/Speckle.Sdk.Dependencies/Pools.cs | 10 ---
.../Speckle.Sdk.Dependencies.csproj | 4 +-
.../packages.lock.json | 61 ++++---------------
.../ArrayBufferWriterPooledObjectPolicy.cs | 2 +-
src/Speckle.Sdk/MemoryManagement/Pools.cs | 16 +++++
.../Pipelines/Send/EfficientJson.cs | 12 +++-
.../Polyfills}/ArrayBufferWriterPolyfill.cs | 0
src/Speckle.Sdk/Speckle.Sdk.csproj | 5 ++
src/Speckle.Sdk/packages.lock.json | 56 +++++++++++------
.../packages.lock.json | 7 +++
.../packages.lock.json | 14 +++++
.../packages.lock.json | 7 +++
.../packages.lock.json | 7 +++
tests/Speckle.Sdk.Testing/packages.lock.json | 14 +++++
.../packages.lock.json | 7 +++
.../packages.lock.json | 7 +++
.../Speckle.Sdk.Tests.Unit/packages.lock.json | 14 +++++
19 files changed, 209 insertions(+), 94 deletions(-)
rename src/{Speckle.Sdk.Dependencies => Speckle.Sdk/MemoryManagement}/ArrayBufferWriterPooledObjectPolicy.cs (96%)
create mode 100644 src/Speckle.Sdk/MemoryManagement/Pools.cs
rename src/{Speckle.Sdk.Dependencies => Speckle.Sdk/Polyfills}/ArrayBufferWriterPolyfill.cs (100%)
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index dc1522bc..c86c9254 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -284,17 +284,17 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
+ "Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
- "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ "Speckle.Sdk.Dependencies": "[1.0.0, )",
+ "System.Text.Json": "[5.0.2, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Memory": "[4.5.5, )",
- "System.Text.Json": "[5.0.2, )"
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
}
},
"GraphQL.Client": {
@@ -354,6 +354,12 @@
"Microsoft.Extensions.Options": "2.2.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "6.0.0",
+ "contentHash": "7hR9FU0JJHOCLmn/Ary31pLLAhlzoMptBKs5CJmNUzD87dXjl+/NqVkyCTl6cT2JAfTK0G39HpvCOv1fhsX3BQ=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
@@ -521,6 +527,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -571,6 +578,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
@@ -738,6 +751,7 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -787,6 +801,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index a75f2e33..05380bea 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -172,8 +172,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -229,17 +229,17 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
+ "Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
- "Speckle.Sdk.Dependencies": "[1.0.0, )"
+ "Speckle.Sdk.Dependencies": "[1.0.0, )",
+ "System.Text.Json": "[5.0.2, )"
}
},
"speckle.sdk.dependencies": {
"type": "Project",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Memory": "[4.5.5, )",
- "System.Text.Json": "[5.0.2, )"
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
}
},
"GraphQL.Client": {
@@ -299,6 +299,12 @@
"Microsoft.Extensions.Options": "2.2.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "6.0.0",
+ "contentHash": "7hR9FU0JJHOCLmn/Ary31pLLAhlzoMptBKs5CJmNUzD87dXjl+/NqVkyCTl6cT2JAfTK0G39HpvCOv1fhsX3BQ=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
@@ -455,6 +461,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -505,6 +512,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
@@ -646,6 +659,7 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -695,6 +709,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/src/Speckle.Sdk.Dependencies/Pools.cs b/src/Speckle.Sdk.Dependencies/Pools.cs
index 91d8c737..734b7432 100644
--- a/src/Speckle.Sdk.Dependencies/Pools.cs
+++ b/src/Speckle.Sdk.Dependencies/Pools.cs
@@ -1,4 +1,3 @@
-using System.Buffers;
using System.Collections.Concurrent;
using System.Text;
using Microsoft.Extensions.ObjectPool;
@@ -25,15 +24,6 @@ public bool Return(Dictionary obj)
public static Pool StringBuilders { get; } =
new(new StringBuilderPooledObjectPolicy() { MaximumRetainedCapacity = 100 * 1024 * 1024 });
- public static Pool> ArrayBufferWriter { get; } =
- new(
- new ArrayBufferWriterPooledObjectPolicy()
- {
- InitialCapacity = 512,
- MaximumRetainedCapacity = 100 * 1024 * 1024,
- }
- );
-
private sealed class ObjectDictionaryPolicy : IPooledObjectPolicy>
where TKey : notnull
{
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index 91c12471..2837affa 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -27,7 +27,6 @@
-
@@ -35,7 +34,6 @@
Dynamo plugins for revit use 5.x.x, so this is our minimum
Consuming apps should override this to 8.x.x or greater
-->
-
@@ -48,7 +46,7 @@
-->
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Numerics.Vectors.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Runtime.CompilerServices.Unsafe.dll" />
-
+ <_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Memory.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)Open.ChannelExtensions.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Threading.Channels.dll" />
<_ILRepackIncludeAssemblies_Items Include="$(OutputPath)System.Collections.Immutable.dll" />
diff --git a/src/Speckle.Sdk.Dependencies/packages.lock.json b/src/Speckle.Sdk.Dependencies/packages.lock.json
index 6761e527..9857b579 100644
--- a/src/Speckle.Sdk.Dependencies/packages.lock.json
+++ b/src/Speckle.Sdk.Dependencies/packages.lock.json
@@ -89,32 +89,6 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
- "System.Memory": {
- "type": "Direct",
- "requested": "[4.5.5, )",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Numerics.Vectors": "4.4.0",
- "System.Runtime.CompilerServices.Unsafe": "4.5.3"
- }
- },
- "System.Text.Json": {
- "type": "Direct",
- "requested": "[5.0.2, )",
- "resolved": "5.0.2",
- "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
- "System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "5.0.0",
- "System.Text.Encodings.Web": "5.0.1",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
- },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
@@ -159,25 +133,26 @@
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
}
},
+ "System.Memory": {
+ "type": "Transitive",
+ "resolved": "4.5.5",
+ "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "dependencies": {
+ "System.Buffers": "4.5.1",
+ "System.Numerics.Vectors": "4.4.0",
+ "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+ }
+ },
"System.Numerics.Vectors": {
"type": "Transitive",
- "resolved": "4.5.0",
- "contentHash": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ=="
+ "resolved": "4.4.0",
+ "contentHash": "UiLzLW+Lw6HLed1Hcg+8jSRttrbuXv7DANVj0DkL9g6EnnzbL75EB7EWsw5uRbhxd/4YdG8li5XizGWepmG3PQ=="
},
"System.Runtime.CompilerServices.Unsafe": {
"type": "Transitive",
"resolved": "6.0.0",
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
},
- "System.Text.Encodings.Web": {
- "type": "Transitive",
- "resolved": "5.0.1",
- "contentHash": "KmJ+CJXizDofbq6mpqDoRRLcxgOd2z9X3XoFNULSbvbqVRZkFX3istvr+MUjL6Zw1RT+RNdoI4GYidIINtgvqQ==",
- "dependencies": {
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.4"
- }
- },
"System.Threading.Tasks.Extensions": {
"type": "Transitive",
"resolved": "4.5.4",
@@ -252,12 +227,6 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
- "System.Memory": {
- "type": "Direct",
- "requested": "[4.5.5, )",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
- },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
@@ -345,12 +314,6 @@
"resolved": "0.9.6",
"contentHash": "HKH7tYrYYlCK1ct483hgxERAdVdMtl7gUKW9ijWXxA1UsYR4Z+TrRHYmzZ9qmpu1NnTycSrp005NYM78GDKV1w=="
},
- "System.Memory": {
- "type": "Direct",
- "requested": "[4.5.5, )",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
- },
"System.Threading.Channels": {
"type": "Direct",
"requested": "[9.0.4, )",
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs b/src/Speckle.Sdk/MemoryManagement/ArrayBufferWriterPooledObjectPolicy.cs
similarity index 96%
rename from src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
rename to src/Speckle.Sdk/MemoryManagement/ArrayBufferWriterPooledObjectPolicy.cs
index bd76542d..6b0b1f10 100644
--- a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPooledObjectPolicy.cs
+++ b/src/Speckle.Sdk/MemoryManagement/ArrayBufferWriterPooledObjectPolicy.cs
@@ -1,7 +1,7 @@
using System.Buffers;
using Microsoft.Extensions.ObjectPool;
-namespace Speckle.Sdk.Dependencies;
+namespace Speckle.Sdk.MemoryManagement;
public sealed class ArrayBufferWriterPooledObjectPolicy : PooledObjectPolicy>
{
diff --git a/src/Speckle.Sdk/MemoryManagement/Pools.cs b/src/Speckle.Sdk/MemoryManagement/Pools.cs
new file mode 100644
index 00000000..98beb433
--- /dev/null
+++ b/src/Speckle.Sdk/MemoryManagement/Pools.cs
@@ -0,0 +1,16 @@
+using System.Buffers;
+using Microsoft.Extensions.ObjectPool;
+
+namespace Speckle.Sdk.MemoryManagement;
+
+internal static class Pools
+{
+ public static ObjectPool> ArrayBufferWriter { get; } =
+ ObjectPool.Create(
+ new ArrayBufferWriterPooledObjectPolicy()
+ {
+ InitialCapacity = 512,
+ MaximumRetainedCapacity = 100 * 1024 * 1024,
+ }
+ );
+}
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
index b7079e6c..9eb39b37 100644
--- a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -1,7 +1,7 @@
using System.Buffers;
using System.Text;
using System.Text.Json;
-using Speckle.Sdk.Dependencies;
+using Speckle.Sdk.MemoryManagement;
namespace Speckle.Sdk.Pipelines.Send;
@@ -13,7 +13,17 @@ public sealed class EfficientJson : IDisposable
public EfficientJson()
{
_value = Pools.ArrayBufferWriter.Get();
+ // try
+ // {
Writer = new(_value);
+ // }
+ // catch (MissingMemberException)
+ // {
+ // Test for
+ // Console.WriteLine("Ctor failed, trying activator create instance");
+ // Writer = (Utf8JsonWriter)typeof(Utf8JsonWriter).GetConstructors()[0].Invoke([_value, new JsonWriterOptions()]);
+ // Activator.CreateInstance(typeof(Utf8JsonWriter), [_value, new JsonWriterOptions()]).NotNull();
+ // }
}
internal IBufferWriter Buffer => _value;
diff --git a/src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs b/src/Speckle.Sdk/Polyfills/ArrayBufferWriterPolyfill.cs
similarity index 100%
rename from src/Speckle.Sdk.Dependencies/ArrayBufferWriterPolyfill.cs
rename to src/Speckle.Sdk/Polyfills/ArrayBufferWriterPolyfill.cs
diff --git a/src/Speckle.Sdk/Speckle.Sdk.csproj b/src/Speckle.Sdk/Speckle.Sdk.csproj
index 3b84c8dd..29e2f846 100644
--- a/src/Speckle.Sdk/Speckle.Sdk.csproj
+++ b/src/Speckle.Sdk/Speckle.Sdk.csproj
@@ -26,12 +26,14 @@
+
+
@@ -43,10 +45,13 @@
+
+
+
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index 478e9068..c68be583 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -50,6 +50,12 @@
"Microsoft.Extensions.Options": "2.2.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[6.0.0, )",
+ "resolved": "6.0.0",
+ "contentHash": "7hR9FU0JJHOCLmn/Ary31pLLAhlzoMptBKs5CJmNUzD87dXjl+/NqVkyCTl6cT2JAfTK0G39HpvCOv1fhsX3BQ=="
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -93,6 +99,21 @@
"resolved": "13.0.2",
"contentHash": "g1BejUZwax5PRfL6xHgLEK23sqHWOgOj9hE7RvfRRlN00AGt8GnPYt8HedSK7UB3HiRW8zCA9Pn0iiYxCK24BA=="
},
+ "System.Text.Json": {
+ "type": "Direct",
+ "requested": "[5.0.2, )",
+ "resolved": "5.0.2",
+ "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
+ "dependencies": {
+ "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
+ "System.Buffers": "4.5.1",
+ "System.Memory": "4.5.4",
+ "System.Numerics.Vectors": "4.5.0",
+ "System.Runtime.CompilerServices.Unsafe": "5.0.0",
+ "System.Text.Encodings.Web": "5.0.1",
+ "System.Threading.Tasks.Extensions": "4.5.4"
+ }
+ },
"GraphQL.Client.Abstractions": {
"type": "Transitive",
"resolved": "6.0.0",
@@ -232,8 +253,8 @@
},
"System.Memory": {
"type": "Transitive",
- "resolved": "4.5.5",
- "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==",
+ "resolved": "4.5.4",
+ "contentHash": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
"dependencies": {
"System.Buffers": "4.5.1",
"System.Numerics.Vectors": "4.4.0",
@@ -284,9 +305,7 @@
"speckle.sdk.dependencies": {
"type": "Project",
"dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )",
- "System.Memory": "[4.5.5, )",
- "System.Text.Json": "[5.0.2, )"
+ "Microsoft.Bcl.AsyncInterfaces": "[9.0.4, )"
}
},
"Microsoft.Bcl.AsyncInterfaces": {
@@ -297,21 +316,6 @@
"dependencies": {
"System.Threading.Tasks.Extensions": "4.5.4"
}
- },
- "System.Text.Json": {
- "type": "CentralTransitive",
- "requested": "[10.0.7, )",
- "resolved": "5.0.2",
- "contentHash": "I47dVIGiV6SfAyppphxqupertT/5oZkYLDCX6vC3HpOI4ZLjyoKAreUoem2ie6G0RbRuFrlqz/PcTQjfb2DOfQ==",
- "dependencies": {
- "Microsoft.Bcl.AsyncInterfaces": "5.0.0",
- "System.Buffers": "4.5.1",
- "System.Memory": "4.5.4",
- "System.Numerics.Vectors": "4.5.0",
- "System.Runtime.CompilerServices.Unsafe": "5.0.0",
- "System.Text.Encodings.Web": "5.0.1",
- "System.Threading.Tasks.Extensions": "4.5.4"
- }
}
},
"net10.0": {
@@ -357,6 +361,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
@@ -535,6 +545,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "Direct",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Microsoft.SourceLink.GitHub": {
"type": "Direct",
"requested": "[8.0.0, )",
diff --git a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
index ea487e10..cc3f2872 100644
--- a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
+++ b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
@@ -295,6 +295,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -367,6 +368,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
diff --git a/tests/Speckle.Objects.Tests.Unit/packages.lock.json b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
index 26da497d..31e26ca9 100644
--- a/tests/Speckle.Objects.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
@@ -273,6 +273,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -332,6 +333,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
@@ -650,6 +657,7 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -708,6 +716,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
diff --git a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
index 851bafa4..89f3d948 100644
--- a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
@@ -238,6 +238,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -313,6 +314,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
index 5391cfa7..e7c835bb 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
@@ -302,6 +302,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -361,6 +362,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/tests/Speckle.Sdk.Testing/packages.lock.json b/tests/Speckle.Sdk.Testing/packages.lock.json
index 764913b1..c1adf586 100644
--- a/tests/Speckle.Sdk.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Testing/packages.lock.json
@@ -242,6 +242,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -292,6 +293,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
@@ -546,6 +553,7 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -595,6 +603,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
index 573fe4c8..3364124e 100644
--- a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
@@ -295,6 +295,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -345,6 +346,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
diff --git a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
index 59654bb5..d0142ce0 100644
--- a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
@@ -256,6 +256,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -306,6 +307,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Speckle.DoubleNumerics": {
"type": "CentralTransitive",
"requested": "[4.1.0, )",
diff --git a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
index c975129e..411ae40b 100644
--- a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
@@ -279,6 +279,7 @@
"Microsoft.Data.Sqlite": "[10.0.0, )",
"Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
"Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -338,6 +339,12 @@
"Microsoft.Extensions.Options": "10.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "10.0.0",
+ "contentHash": "bpeCq0IYmVLACyEUMzFIOQX+zZUElG1t+nu1lSxthe7B+1oNYking7b91305+jNB6iwojp9fqTY9O+Nh7ULQxg=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
@@ -656,6 +663,7 @@
"Microsoft.Data.Sqlite": "[7.0.5, )",
"Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
"Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
"Speckle.Sdk.Dependencies": "[1.0.0, )"
@@ -714,6 +722,12 @@
"Microsoft.Extensions.Options": "8.0.0"
}
},
+ "Microsoft.Extensions.ObjectPool": {
+ "type": "CentralTransitive",
+ "requested": "[9.0.4, )",
+ "resolved": "8.0.0",
+ "contentHash": "4pm+XgxSukskwjzDDfSjG4KNUIOdFF2VaqZZDtTzoyQMOVSnlV6ZM8a9aVu5dg9LVZTB//utzSc8fOi0b0Mb2Q=="
+ },
"Moq": {
"type": "CentralTransitive",
"requested": "[4.20.72, )",
From e01828b769107fbc357704d3f3081fba62dcd964 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Tue, 5 May 2026 14:58:01 +0100
Subject: [PATCH 29/42] go with the more explicit option for byte offsets
---
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 12 +-----------
1 file changed, 1 insertion(+), 11 deletions(-)
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 12f5c304..1cac1f02 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -105,22 +105,12 @@ private Id SerializeBase(
)
{
var childClosures = new Dictionary();
-
var jsonWriter = efficientJson.Writer;
- int byteOffset1 = (int)jsonWriter.BytesCommitted + jsonWriter.BytesPending;
jsonWriter.Flush();
-
+ //The "start" of this inner object
int byteOffset = efficientJson.WrittenCount;
- if (byteOffset1 != byteOffset)
- {
- // Adding this temporarily, I was happy with the `BytesCommitted + jsonWriter.BytesPending` solution
- // But AI suggested that it would be somehow unreliable.
- // adding this just to test, will remove and settle on either option after testing is complete.
- throw new ArgumentException("Offsets differed in an unexpected way");
- }
-
jsonWriter.WriteStartObject();
foreach (var prop in ExtractProperties(baseObj))
From 84efb75d6a8ac562b6fc26bcd3b8a179ab2c0d82 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Tue, 5 May 2026 21:49:26 +0100
Subject: [PATCH 30/42] Support NaN and Infinity doubles
---
.../Api/Operations/Operations.Serialize.cs | 12 +++++++
.../Pipelines/Send/EfficientJson.cs | 11 +-----
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 34 ++++++++++++++++---
.../SerializerNonBreakingChanges.cs | 2 +-
4 files changed, 44 insertions(+), 15 deletions(-)
diff --git a/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs b/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
index 075776f2..8dae5e06 100644
--- a/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
+++ b/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
@@ -2,6 +2,7 @@
using Speckle.Newtonsoft.Json;
using Speckle.Sdk.Logging;
using Speckle.Sdk.Models;
+using Speckle.Sdk.Pipelines.Send;
using Speckle.Sdk.Serialisation;
using Speckle.Sdk.Transports;
@@ -26,6 +27,17 @@ public string Serialize(Base value, CancellationToken cancellationToken = defaul
return serializer.Serialize(value);
}
+ ///
+ /// Serializes a given object using the new SendPipeline er
+ ///
+ /// The object to serializer
+ /// A json string representation of the object.
+ public string SerializeNew(Base value)
+ {
+ var serializer = new Serializer();
+ return serializer.Serialize(value).First().Json.ToJsonString();
+ }
+
///
/// Note: if you want to pull an object from a Speckle Transport or Server,
/// please use
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
index 9eb39b37..14bb6d58 100644
--- a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -13,17 +13,8 @@ public sealed class EfficientJson : IDisposable
public EfficientJson()
{
_value = Pools.ArrayBufferWriter.Get();
- // try
- // {
+
Writer = new(_value);
- // }
- // catch (MissingMemberException)
- // {
- // Test for
- // Console.WriteLine("Ctor failed, trying activator create instance");
- // Writer = (Utf8JsonWriter)typeof(Utf8JsonWriter).GetConstructors()[0].Invoke([_value, new JsonWriterOptions()]);
- // Activator.CreateInstance(typeof(Utf8JsonWriter), [_value, new JsonWriterOptions()]).NotNull();
- // }
}
internal IBufferWriter Buffer => _value;
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 1cac1f02..ad858dbb 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -193,10 +193,38 @@ private void SerializeValue(
writer.WriteBooleanValue(b);
return;
case float f:
- writer.WriteNumberValue(f);
+ switch (f)
+ {
+ case float.PositiveInfinity:
+ writer.WriteStringValue("Infinity");
+ break;
+ case float.NegativeInfinity:
+ writer.WriteStringValue("-Infinity");
+ break;
+ case float.NaN:
+ writer.WriteStringValue("NaN");
+ break;
+ default:
+ writer.WriteNumberValue(f);
+ break;
+ }
return;
case double f:
- writer.WriteNumberValue(f);
+ switch (f)
+ {
+ case double.PositiveInfinity:
+ writer.WriteStringValue("Infinity");
+ break;
+ case double.NegativeInfinity:
+ writer.WriteStringValue("-Infinity");
+ break;
+ case double.NaN:
+ writer.WriteStringValue("NaN");
+ break;
+ default:
+ writer.WriteNumberValue(f);
+ break;
+ }
return;
case decimal d:
writer.WriteNumberValue(d);
@@ -322,8 +350,6 @@ private void SerializeValue(
return;
}
default:
- // This case will handle primitives and `null`
- // Will throw JsonWriterException if not supported
throw new ArgumentOutOfRangeException(nameof(value), $"Unsupported type {value.GetType()}");
}
}
diff --git a/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerNonBreakingChanges.cs b/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerNonBreakingChanges.cs
index 8142fe04..2bedaf20 100644
--- a/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerNonBreakingChanges.cs
+++ b/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerNonBreakingChanges.cs
@@ -329,7 +329,7 @@ internal async Task SerializeAsTAndDeserialize(IOperations operations)
{
SerializeAs();
- var json = operations.Serialize(this);
+ var json = operations.SerializeNew(this);
Base result = await operations.DeserializeAsync(json);
result.Should().NotBeNull();
From 4688ef647c48d0db9ef7c51ffbf84b0c08089fa3 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 6 May 2026 15:43:24 +0100
Subject: [PATCH 31/42] correct tests for integer serialization
---
.../Serialisation/SerializerBreakingChanges.cs | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerBreakingChanges.cs b/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerBreakingChanges.cs
index c3940bbb..65799bd5 100644
--- a/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerBreakingChanges.cs
+++ b/tests/Speckle.Sdk.Tests.Unit/Serialisation/SerializerBreakingChanges.cs
@@ -57,9 +57,19 @@ public async Task DoubleToInt_ShouldThrow(double testCase)
{
var from = new DoubleValueMock { value = testCase };
- await FluentActions
- .Invoking(async () => await from.SerializeAsTAndDeserialize(_operations))
- .Should()
- .ThrowAsync();
+ // ReSharper disable once CompareOfFloatsByEqualityOperator
+ bool isInteger = testCase == unchecked((long)testCase);
+ if (isInteger)
+ {
+ var v = await from.SerializeAsTAndDeserialize(_operations);
+ Assert.Equal((long)from.value, v.value);
+ }
+ else
+ {
+ await FluentActions
+ .Invoking(async () => await from.SerializeAsTAndDeserialize(_operations))
+ .Should()
+ .ThrowAsync();
+ }
}
}
From 72eb9b9774ac233aefaa7a06debfe73d242c5c1e Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 6 May 2026 16:07:43 +0100
Subject: [PATCH 32/42] Fix test
---
.../Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
index 9bf8e835..68adc977 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
@@ -130,7 +130,10 @@ public async Task ProjectDelete_NonExistentProject()
await Sut.Delete(_testProject.id);
var ex = await Assert.ThrowsAsync(async () => _ = await Sut.Get(_testProject.id));
- ex.InnerExceptions.Single().Should().BeOfType();
+ Assert.Contains(
+ ex.GetType(),
+ new HashSet { typeof(SpeckleGraphQLStreamNotFoundException), typeof(SpeckleGraphQLForbiddenException) }
+ );
}
[Fact]
From 83c7ca5ab27ee2f88a9d424e86a6f5ca932e0a04 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 8 May 2026 17:36:27 +0100
Subject: [PATCH 33/42] maybe fix tests?
---
docker-compose-internal.yml | 6 ------
.../GraphQL/Resources/ProjectResourceExceptionalTests.cs | 2 +-
2 files changed, 1 insertion(+), 7 deletions(-)
diff --git a/docker-compose-internal.yml b/docker-compose-internal.yml
index 570082bc..72895c72 100644
--- a/docker-compose-internal.yml
+++ b/docker-compose-internal.yml
@@ -16,12 +16,6 @@ services:
- ./setup/db/10-docker_postgres_init.sql:/docker-entrypoint-initdb.d/10-docker_postgres_init.sql
- ./setup/db/11-docker_postgres_authentik_init.sql:/docker-entrypoint-initdb.d/11-docker_postgres_authentik_init.sql
command: postgres -c max_prepared_transactions=150
- healthcheck:
- # the -U user has to match the POSTGRES_USER value
- test: ["CMD-SHELL", "pg_isready -U speckle"]
- interval: 5s
- timeout: 5s
- retries: 30
redis:
image: "valkey/valkey:8.1-alpine@sha256:0d27f0bca0249f61d060029a6aaf2e16b2c417d68d02a508e1dfb763fa2948b4"
diff --git a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
index 68adc977..208d7574 100644
--- a/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
+++ b/tests/Speckle.Sdk.Tests.Integration/Api/GraphQL/Resources/ProjectResourceExceptionalTests.cs
@@ -131,7 +131,7 @@ public async Task ProjectDelete_NonExistentProject()
var ex = await Assert.ThrowsAsync(async () => _ = await Sut.Get(_testProject.id));
Assert.Contains(
- ex.GetType(),
+ ex.InnerExceptions[0].GetType(),
new HashSet { typeof(SpeckleGraphQLStreamNotFoundException), typeof(SpeckleGraphQLForbiddenException) }
);
}
From 40c178481cb1941f9ea9216e38edbff55c1306eb Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Fri, 8 May 2026 17:54:51 +0100
Subject: [PATCH 34/42] remove health check requirement
---
docker-compose-internal.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/docker-compose-internal.yml b/docker-compose-internal.yml
index 72895c72..c68da728 100644
--- a/docker-compose-internal.yml
+++ b/docker-compose-internal.yml
@@ -65,7 +65,7 @@ services:
- "0.0.0.0:3000:3000"
depends_on:
postgres:
- condition: service_healthy
+ condition: service_started
redis:
condition: service_healthy
minio:
From b66853ae54902ae803bb319e44a5113a80e8d591 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Mon, 11 May 2026 15:46:47 +0100
Subject: [PATCH 35/42] removed out of date comment
---
src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj | 4 ----
1 file changed, 4 deletions(-)
diff --git a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
index 2837affa..1023fd5d 100644
--- a/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
+++ b/src/Speckle.Sdk.Dependencies/Speckle.Sdk.Dependencies.csproj
@@ -30,10 +30,6 @@
-
From f9211b6573604184462221819c056d82297a1fe0 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Mon, 11 May 2026 16:31:24 +0100
Subject: [PATCH 36/42] Rename JSON class for clarity
---
.../Pipelines/Send/EfficientJson.cs | 12 ++++++--
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 28 +++++++++----------
.../Pipelines/Send/UploaderDTOs.cs | 3 +-
3 files changed, 25 insertions(+), 18 deletions(-)
diff --git a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
index 14bb6d58..e25d48fc 100644
--- a/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/EfficientJson.cs
@@ -5,12 +5,20 @@
namespace Speckle.Sdk.Pipelines.Send;
-public sealed class EfficientJson : IDisposable
+///
+/// Wrapper for a UTF8 Encoded array buffer
+/// More efficient to write JSON via than as s
+///
+///
+/// Mutability is exposed only internally via to
+/// For all other consumers this class is read-only.
+///
+public sealed class Utf8Json : IDisposable
{
private readonly ArrayBufferWriter _value;
internal Utf8JsonWriter Writer { get; }
- public EfficientJson()
+ public Utf8Json()
{
_value = Pools.ArrayBufferWriter.Get();
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index ad858dbb..50dc2ca9 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -29,10 +29,10 @@ public IEnumerable Serialize(Base root)
yield break;
}
- var detachedObjects = new List<(Id, EfficientJson, Dictionary, Base, string)>();
+ var detachedObjects = new List<(Id, Utf8Json, Dictionary, Base, string)>();
var rootClosures = new Dictionary();
- var rootJson = new EfficientJson();
+ var rootJson = new Utf8Json();
using Utf8JsonWriter writer = rootJson.Writer;
Id rootId = SerializeBase(root, rootJson, false, rootClosures, detachedObjects);
@@ -98,25 +98,25 @@ private IEnumerable ExtractProperties(Base baseObj)
private Id SerializeBase(
Base baseObj,
- EfficientJson efficientJson,
+ Utf8Json utf8Json,
bool forceDetach,
Dictionary closures,
- List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
+ List<(Id, Utf8Json, Dictionary, Base, string)> detachedObjects
)
{
var childClosures = new Dictionary();
- var jsonWriter = efficientJson.Writer;
+ var jsonWriter = utf8Json.Writer;
jsonWriter.Flush();
//The "start" of this inner object
- int byteOffset = efficientJson.WrittenCount;
+ int byteOffset = utf8Json.WrittenCount;
jsonWriter.WriteStartObject();
foreach (var prop in ExtractProperties(baseObj))
{
jsonWriter.WritePropertyName(prop.Name);
- SerializeValue(prop.Value, efficientJson, prop.IsDetachable, childClosures, detachedObjects);
+ SerializeValue(prop.Value, utf8Json, prop.IsDetachable, childClosures, detachedObjects);
}
// We want to hash the json string now to calculate the id
@@ -124,10 +124,10 @@ private Id SerializeBase(
jsonWriter.Flush();
#if NET6_0_OR_GREATER
- string id = IdGenerator.ComputeId(efficientJson.WrittenSpan[byteOffset..]);
+ string id = IdGenerator.ComputeId(utf8Json.WrittenSpan[byteOffset..]);
#else
- byte[] buffer = efficientJson.GetInternalBuffer();
- string id = IdGenerator.ComputeId(buffer, byteOffset, efficientJson.WrittenCount - byteOffset);
+ byte[] buffer = utf8Json.GetInternalBuffer();
+ string id = IdGenerator.ComputeId(buffer, byteOffset, utf8Json.WrittenCount - byteOffset);
#endif
jsonWriter.WriteString("id", id);
@@ -156,10 +156,10 @@ private Id SerializeBase(
private void SerializeValue(
object? value,
- EfficientJson json,
+ Utf8Json json,
bool isDetachable,
Dictionary closures,
- List<(Id, EfficientJson, Dictionary, Base, string)> detachedObjects
+ List<(Id, Utf8Json, Dictionary, Base, string)> detachedObjects
)
{
var writer = json.Writer;
@@ -289,7 +289,7 @@ private void SerializeValue(
{
var childClosures = new Dictionary();
- var childJson = new EfficientJson();
+ var childJson = new Utf8Json();
using var innerWriter = childJson.Writer;
var childId = SerializeBase(baseObj, childJson, true, childClosures, detachedObjects);
@@ -361,7 +361,7 @@ private void SerializeValue(
)]
private UploadItem ReferenceToUploadItem(ObjectReference existingRef)
{
- var refJson = new EfficientJson();
+ var refJson = new Utf8Json();
using var jsonWriter = refJson.Writer;
jsonWriter.WriteStartObject();
diff --git a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
index 7b4d0065..5e5bd023 100644
--- a/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/UploaderDTOs.cs
@@ -3,8 +3,7 @@
namespace Speckle.Sdk.Pipelines.Send;
-public sealed record UploadItem(string Id, EfficientJson Json, string SpeckleType, ObjectReference Reference)
- : IDisposable
+public sealed record UploadItem(string Id, Utf8Json Json, string SpeckleType, ObjectReference Reference) : IDisposable
{
public void Dispose() => Json.Dispose();
}
From 3a5718b53d49ed170fd3ba78eb1ab9cd515679b2 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Mon, 11 May 2026 16:39:40 +0100
Subject: [PATCH 37/42] More comments
---
src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs | 5 ++++-
src/Speckle.Sdk/Pipelines/Send/Serializer.cs | 3 +++
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs b/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
index 8dae5e06..187e1433 100644
--- a/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
+++ b/src/Speckle.Sdk/Api/Operations/Operations.Serialize.cs
@@ -28,10 +28,13 @@ public string Serialize(Base value, CancellationToken cancellationToken = defaul
}
///
- /// Serializes a given object using the new SendPipeline er
+ /// Serializes a given object using the new SendPipeline (System.Text.Json based) er
///
/// The object to serializer
/// A json string representation of the object.
+ ///
+ /// TODO: Once we strip out the old send2 functionality, we can make this this the normal implementation
+ ///
public string SerializeNew(Base value)
{
var serializer = new Serializer();
diff --git a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
index 50dc2ca9..eb960c64 100644
--- a/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
+++ b/src/Speckle.Sdk/Pipelines/Send/Serializer.cs
@@ -15,6 +15,9 @@ namespace Speckle.Sdk.Pipelines.Send;
/// into serialized JSON structures along with associated metadata, closures, and references.
/// Any reference objects coming through are being "passed through" serialized - they do not get double encoded.
///
+///
+/// Unlike previous SDK serializers, this one uses rather than
+///
internal sealed class Serializer
{
private readonly record struct PropertyInfo(string Name, object? Value, bool IsDetachable);
From 7e8354597bf31f60132433e2aaafceb26a13086d Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 13 May 2026 13:37:21 +0100
Subject: [PATCH 38/42] Downgrade m.e.logging
---
src/Speckle.Automate.Sdk/packages.lock.json | 94 ++++++--------
src/Speckle.Objects/packages.lock.json | 94 ++++++--------
src/Speckle.Sdk/Speckle.Sdk.csproj | 14 ++-
src/Speckle.Sdk/packages.lock.json | 115 ++++++++----------
.../packages.lock.json | 31 +++--
.../packages.lock.json | 84 ++++++-------
.../packages.lock.json | 41 +++----
.../packages.lock.json | 41 +++----
tests/Speckle.Sdk.Testing/packages.lock.json | 84 ++++++-------
.../packages.lock.json | 31 +++--
.../packages.lock.json | 41 +++----
.../Speckle.Sdk.Tests.Unit/packages.lock.json | 84 ++++++-------
12 files changed, 351 insertions(+), 403 deletions(-)
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index c86c9254..63b56477 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -282,7 +282,6 @@
"GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
"Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
@@ -333,15 +332,6 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
- "Microsoft.Extensions.DependencyInjection": {
- "type": "CentralTransitive",
- "requested": "[10.0.6, )",
- "resolved": "2.2.0",
- "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
- }
- },
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
@@ -447,30 +437,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -525,8 +515,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -561,21 +550,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -671,30 +660,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -749,8 +735,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[7.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -784,21 +769,22 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index 05380bea..7e83437f 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -227,7 +227,6 @@
"GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
"Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
@@ -278,15 +277,6 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
- "Microsoft.Extensions.DependencyInjection": {
- "type": "CentralTransitive",
- "requested": "[10.0.6, )",
- "resolved": "2.2.0",
- "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
- }
- },
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
@@ -392,30 +382,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -459,8 +449,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -495,21 +484,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -590,30 +579,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -657,8 +643,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[7.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -692,21 +677,22 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/src/Speckle.Sdk/Speckle.Sdk.csproj b/src/Speckle.Sdk/Speckle.Sdk.csproj
index 29e2f846..69c04af8 100644
--- a/src/Speckle.Sdk/Speckle.Sdk.csproj
+++ b/src/Speckle.Sdk/Speckle.Sdk.csproj
@@ -27,15 +27,18 @@
-
-
+
+
-
-
+
+
@@ -43,8 +46,9 @@
-
+
+
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index c68be583..2e39d835 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -29,15 +29,6 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
- "Microsoft.Extensions.DependencyInjection": {
- "type": "Direct",
- "requested": "[2.2.0, )",
- "resolved": "2.2.0",
- "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
- }
- },
"Microsoft.Extensions.Logging": {
"type": "Direct",
"requested": "[2.2.0, )",
@@ -341,24 +332,15 @@
"SQLitePCLRaw.core": "2.1.11"
}
},
- "Microsoft.Extensions.DependencyInjection": {
- "type": "Direct",
- "requested": "[10.0.0, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
- }
- },
"Microsoft.Extensions.Logging": {
"type": "Direct",
- "requested": "[10.0.0, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -437,30 +419,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -501,6 +483,15 @@
},
"speckle.sdk.dependencies": {
"type": "Project"
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
}
},
"net8.0": {
@@ -525,24 +516,16 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
- "Microsoft.Extensions.DependencyInjection": {
- "type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
- },
"Microsoft.Extensions.Logging": {
"type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "requested": "[7.0.0, )",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -621,30 +604,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -685,6 +665,15 @@
},
"speckle.sdk.dependencies": {
"type": "Project"
+ },
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ }
}
}
}
diff --git a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
index cc3f2872..4bdd4846 100644
--- a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
+++ b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
@@ -135,25 +135,25 @@
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -293,8 +293,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -360,12 +359,12 @@
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Objects.Tests.Unit/packages.lock.json b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
index 31e26ca9..64e86082 100644
--- a/tests/Speckle.Objects.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
@@ -130,30 +130,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -271,8 +271,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -316,21 +315,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -514,30 +513,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -655,8 +651,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[7.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -699,21 +694,22 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
index 89f3d948..abb4190e 100644
--- a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
@@ -132,30 +132,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -236,8 +236,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -297,21 +296,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
index e7c835bb..df2ff12d 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
@@ -154,30 +154,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.IO.RecyclableMemoryStream": {
"type": "Transitive",
@@ -300,8 +300,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -345,21 +344,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Testing/packages.lock.json b/tests/Speckle.Sdk.Testing/packages.lock.json
index c1adf586..af2a8503 100644
--- a/tests/Speckle.Sdk.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Testing/packages.lock.json
@@ -124,30 +124,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -240,8 +240,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -276,21 +275,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -435,30 +434,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -551,8 +547,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[7.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -586,21 +581,22 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
index 3364124e..9110e36a 100644
--- a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
@@ -149,25 +149,25 @@
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -293,8 +293,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -338,12 +337,12 @@
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
index d0142ce0..1f6ed000 100644
--- a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
@@ -150,30 +150,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -254,8 +254,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -290,21 +289,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
index 411ae40b..055d350b 100644
--- a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
@@ -142,30 +142,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
- "Microsoft.Extensions.Primitives": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "10.0.0",
- "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -277,8 +277,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.DependencyInjection": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[10.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -322,21 +321,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "10.0.0",
- "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "10.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
- "Microsoft.Extensions.Options": "10.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -526,30 +525,27 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "7.0.0",
+ "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
- "dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
- }
+ "resolved": "7.0.0",
+ "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "7.0.0",
+ "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Primitives": "7.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "7.0.0",
+ "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -661,8 +657,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.DependencyInjection": "[8.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[7.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -705,21 +700,22 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "7.0.0",
+ "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "7.0.0",
+ "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "7.0.0",
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
+ "Microsoft.Extensions.Options": "7.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
From 02b9e65a082663b68c45d580a6494ee40a22209b Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 13 May 2026 13:46:03 +0100
Subject: [PATCH 39/42] Pin dotnet sdk to 10.0.2xx
---
.../workflows/integration-test-callable-from-server-repo.yml | 2 +-
.github/workflows/integration-test.yml | 2 +-
.github/workflows/pr.yml | 2 +-
.github/workflows/release.yml | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/workflows/integration-test-callable-from-server-repo.yml b/.github/workflows/integration-test-callable-from-server-repo.yml
index a86da8e9..34c0f44d 100644
--- a/.github/workflows/integration-test-callable-from-server-repo.yml
+++ b/.github/workflows/integration-test-callable-from-server-repo.yml
@@ -34,7 +34,7 @@ jobs:
- name: Setup .NET SDK
uses: actions/setup-dotnet@v5
with:
- dotnet-version: 10.x.x
+ dotnet-version: 10.0.2xx
# cache: true
# cache-dependency-path: "**/packages.lock.json"
diff --git a/.github/workflows/integration-test.yml b/.github/workflows/integration-test.yml
index 79832f5f..b797076f 100644
--- a/.github/workflows/integration-test.yml
+++ b/.github/workflows/integration-test.yml
@@ -24,7 +24,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
- dotnet-version: 10.x.x
+ dotnet-version: 10.0.2xx
cache: true
cache-dependency-path: "**/packages.lock.json"
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index fac38efd..e9c2949c 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -19,7 +19,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
- dotnet-version: 10.x.x
+ dotnet-version: 10.0.2xx
cache: true
cache-dependency-path: "**/packages.lock.json"
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index c30c420d..9da85fad 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -19,7 +19,7 @@ jobs:
- name: Setup .NET
uses: actions/setup-dotnet@v5
with:
- dotnet-version: 10.x.x
+ dotnet-version: 10.0.2xx
cache: true
cache-dependency-path: "**/packages.lock.json"
From c3d1dbe284e5a90214d5048ade221aa0c65cf727 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 13 May 2026 14:04:03 +0100
Subject: [PATCH 40/42] ensure Microsoft.Dependency.Injection is include
---
src/Speckle.Automate.Sdk/packages.lock.json | 10 ++++++++++
src/Speckle.Objects/packages.lock.json | 10 ++++++++++
src/Speckle.Sdk/Speckle.Sdk.csproj | 2 ++
src/Speckle.Sdk/packages.lock.json | 9 +++++++++
4 files changed, 31 insertions(+)
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index 63b56477..0756de14 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -282,6 +282,7 @@
"GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
"Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
@@ -332,6 +333,15 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index 7e83437f..dd2077f1 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -227,6 +227,7 @@
"GraphQL.Client": "[6.0.0, )",
"Microsoft.CSharp": "[4.7.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
+ "Microsoft.Extensions.DependencyInjection": "[2.2.0, )",
"Microsoft.Extensions.Logging": "[2.2.0, )",
"Microsoft.Extensions.ObjectPool": "[6.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
@@ -277,6 +278,15 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "CentralTransitive",
+ "requested": "[10.0.6, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
diff --git a/src/Speckle.Sdk/Speckle.Sdk.csproj b/src/Speckle.Sdk/Speckle.Sdk.csproj
index 69c04af8..28732ae4 100644
--- a/src/Speckle.Sdk/Speckle.Sdk.csproj
+++ b/src/Speckle.Sdk/Speckle.Sdk.csproj
@@ -48,6 +48,8 @@
+
+
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index 2e39d835..62472d74 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -29,6 +29,15 @@
"SQLitePCLRaw.bundle_e_sqlite3": "2.1.4"
}
},
+ "Microsoft.Extensions.DependencyInjection": {
+ "type": "Direct",
+ "requested": "[2.2.0, )",
+ "resolved": "2.2.0",
+ "contentHash": "MZtBIwfDFork5vfjpJdG5g8wuJFt7d/y3LOSVVtDK/76wlbtz6cjltfKHqLx2TKVqTj5/c41t77m1+h20zqtPA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "2.2.0"
+ }
+ },
"Microsoft.Extensions.Logging": {
"type": "Direct",
"requested": "[2.2.0, )",
From e5fa39d44535d2eb89e37997355503a3a79c0ef6 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Wed, 13 May 2026 14:42:24 +0100
Subject: [PATCH 41/42] revert changes to me.logging
---
src/Speckle.Automate.Sdk/packages.lock.json | 82 ++++++++++---------
src/Speckle.Objects/packages.lock.json | 82 ++++++++++---------
src/Speckle.Sdk/Speckle.Sdk.csproj | 9 +-
src/Speckle.Sdk/packages.lock.json | 82 ++++++++++---------
.../packages.lock.json | 30 +++----
.../packages.lock.json | 82 ++++++++++---------
.../packages.lock.json | 40 ++++-----
.../packages.lock.json | 40 ++++-----
tests/Speckle.Sdk.Testing/packages.lock.json | 82 ++++++++++---------
.../packages.lock.json | 30 +++----
.../packages.lock.json | 40 ++++-----
.../Speckle.Sdk.Tests.Unit/packages.lock.json | 82 ++++++++++---------
12 files changed, 344 insertions(+), 337 deletions(-)
diff --git a/src/Speckle.Automate.Sdk/packages.lock.json b/src/Speckle.Automate.Sdk/packages.lock.json
index 0756de14..7f25b757 100644
--- a/src/Speckle.Automate.Sdk/packages.lock.json
+++ b/src/Speckle.Automate.Sdk/packages.lock.json
@@ -447,30 +447,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -525,7 +525,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -560,21 +560,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -670,27 +670,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -745,7 +748,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.Logging": "[7.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -779,22 +782,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/src/Speckle.Objects/packages.lock.json b/src/Speckle.Objects/packages.lock.json
index dd2077f1..3cdab5d0 100644
--- a/src/Speckle.Objects/packages.lock.json
+++ b/src/Speckle.Objects/packages.lock.json
@@ -392,30 +392,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -459,7 +459,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -494,21 +494,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -589,27 +589,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -653,7 +656,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.Logging": "[7.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -687,22 +690,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/src/Speckle.Sdk/Speckle.Sdk.csproj b/src/Speckle.Sdk/Speckle.Sdk.csproj
index 28732ae4..193699f6 100644
--- a/src/Speckle.Sdk/Speckle.Sdk.csproj
+++ b/src/Speckle.Sdk/Speckle.Sdk.csproj
@@ -27,18 +27,13 @@
-
-
+
-
-
+
diff --git a/src/Speckle.Sdk/packages.lock.json b/src/Speckle.Sdk/packages.lock.json
index 62472d74..58fb0eda 100644
--- a/src/Speckle.Sdk/packages.lock.json
+++ b/src/Speckle.Sdk/packages.lock.json
@@ -343,13 +343,13 @@
},
"Microsoft.Extensions.Logging": {
"type": "Direct",
- "requested": "[8.0.0, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "requested": "[10.0.0, )",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -428,30 +428,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -496,10 +496,10 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
}
},
@@ -527,14 +527,13 @@
},
"Microsoft.Extensions.Logging": {
"type": "Direct",
- "requested": "[7.0.0, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "requested": "[8.0.0, )",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -613,27 +612,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -678,10 +680,10 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
}
}
diff --git a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
index 4bdd4846..9b359310 100644
--- a/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
+++ b/tests/Speckle.Automate.Sdk.Integration/packages.lock.json
@@ -135,25 +135,25 @@
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -293,7 +293,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -359,12 +359,12 @@
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Objects.Tests.Unit/packages.lock.json b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
index 64e86082..ebb5a57b 100644
--- a/tests/Speckle.Objects.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Objects.Tests.Unit/packages.lock.json
@@ -130,30 +130,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -271,7 +271,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -315,21 +315,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -513,27 +513,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -651,7 +654,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.Logging": "[7.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -694,22 +697,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
index abb4190e..11a6ae77 100644
--- a/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Testing/packages.lock.json
@@ -132,30 +132,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -236,7 +236,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -296,21 +296,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
index df2ff12d..576bcdc9 100644
--- a/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
+++ b/tests/Speckle.Sdk.Serialization.Tests/packages.lock.json
@@ -154,30 +154,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.IO.RecyclableMemoryStream": {
"type": "Transitive",
@@ -300,7 +300,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -344,21 +344,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Testing/packages.lock.json b/tests/Speckle.Sdk.Testing/packages.lock.json
index af2a8503..07a369d1 100644
--- a/tests/Speckle.Sdk.Testing/packages.lock.json
+++ b/tests/Speckle.Sdk.Testing/packages.lock.json
@@ -124,30 +124,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -240,7 +240,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -275,21 +275,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -434,27 +434,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -547,7 +550,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.Logging": "[7.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -581,22 +584,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
index 9110e36a..5aa9b01c 100644
--- a/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Integration/packages.lock.json
@@ -149,25 +149,25 @@
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -293,7 +293,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -337,12 +337,12 @@
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
index 1f6ed000..639fd337 100644
--- a/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Performance/packages.lock.json
@@ -150,30 +150,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -254,7 +254,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -289,21 +289,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
diff --git a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
index 055d350b..0cdc313d 100644
--- a/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
+++ b/tests/Speckle.Sdk.Tests.Unit/packages.lock.json
@@ -142,30 +142,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
+ "resolved": "10.0.0",
+ "contentHash": "L3AdmZ1WOK4XXT5YFPEwyt0ep6l8lGIPs7F5OOBZc77Zqeo01Of7XXICy47628sdVl0v/owxYJTe86DTgFwKCA=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "resolved": "10.0.0",
+ "contentHash": "FU/IfjDfwaMuKr414SSQNTIti/69bHEMb+QKrskRb26oVqpx3lNFXMjs/RC9ZUuhBhcwDM2BwOgoMw+PZ+beqQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
+ "resolved": "10.0.0",
+ "contentHash": "8oCAgXOow5XDrY9HaXX1QmH3ORsyZO/ANVHBlhLyCeWTH5Sg4UuqZeOTWJi6484M+LqSx0RqQXDJtdYy2BNiLQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
- "Microsoft.Extensions.Primitives": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Primitives": "10.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "8.0.0",
- "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
+ "resolved": "10.0.0",
+ "contentHash": "inRnbpCS0nwO/RuoZIAqxQUuyjaknOOnCEZB55KSMMjRhl0RQDttSmLSGsUJN3RQ3ocf5NDLFd2mOQViHqMK5w=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -277,7 +277,7 @@
"dependencies": {
"GraphQL.Client": "[6.1.0, )",
"Microsoft.Data.Sqlite": "[10.0.0, )",
- "Microsoft.Extensions.Logging": "[8.0.0, )",
+ "Microsoft.Extensions.Logging": "[10.0.0, )",
"Microsoft.Extensions.ObjectPool": "[10.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -321,21 +321,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
+ "resolved": "10.0.0",
+ "contentHash": "f0RBabswJq+gRu5a+hWIobrLWiUYPKMhCD9WO3sYBAdSy3FFH14LMvLVFZc2kPSCimBLxSuitUhsd6tb0TAY6A==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "10.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "8.0.0",
- "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
+ "resolved": "10.0.0",
+ "contentHash": "BStFkd5CcnEtarlcgYDBcFzGYCuuNMzPs02wN3WBsOFoYIEmYoUdAiU+au6opzoqfTYJsMTW00AeqDdnXH2CvA==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "8.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
- "Microsoft.Extensions.Options": "8.0.0"
+ "Microsoft.Extensions.DependencyInjection": "10.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "10.0.0",
+ "Microsoft.Extensions.Options": "10.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
@@ -525,27 +525,30 @@
},
"Microsoft.Extensions.DependencyInjection.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw=="
+ "resolved": "8.0.0",
+ "contentHash": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg=="
},
"Microsoft.Extensions.Logging.Abstractions": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw=="
+ "resolved": "8.0.0",
+ "contentHash": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==",
+ "dependencies": {
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
+ }
},
"Microsoft.Extensions.Options": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
+ "resolved": "8.0.0",
+ "contentHash": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Primitives": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Primitives": "8.0.0"
}
},
"Microsoft.Extensions.Primitives": {
"type": "Transitive",
- "resolved": "7.0.0",
- "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
+ "resolved": "8.0.0",
+ "contentHash": "bXJEZrW9ny8vjMF1JV253WeLhpEVzFo1lyaZu1vQ4ZxWUlVvknZ/+ftFgVheLubb4eZPSwwxBeqS1JkCOjxd8g=="
},
"Microsoft.SourceLink.Common": {
"type": "Transitive",
@@ -657,7 +660,7 @@
"dependencies": {
"GraphQL.Client": "[6.0.0, )",
"Microsoft.Data.Sqlite": "[7.0.5, )",
- "Microsoft.Extensions.Logging": "[7.0.0, )",
+ "Microsoft.Extensions.Logging": "[8.0.0, )",
"Microsoft.Extensions.ObjectPool": "[8.0.0, )",
"Speckle.DoubleNumerics": "[4.1.0, )",
"Speckle.Newtonsoft.Json": "[13.0.2, )",
@@ -700,22 +703,21 @@
"Microsoft.Extensions.DependencyInjection": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
+ "resolved": "8.0.0",
+ "contentHash": "V8S3bsm50ig6JSyrbcJJ8bW2b9QLGouz+G1miK3UTaOWmMtFwNNNzUf4AleyDWUmTrWMLNnFSLEQtxmxgNQnNQ==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0"
}
},
"Microsoft.Extensions.Logging": {
"type": "CentralTransitive",
"requested": "[10.0.6, )",
- "resolved": "7.0.0",
- "contentHash": "Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
+ "resolved": "8.0.0",
+ "contentHash": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==",
"dependencies": {
- "Microsoft.Extensions.DependencyInjection": "7.0.0",
- "Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
- "Microsoft.Extensions.Logging.Abstractions": "7.0.0",
- "Microsoft.Extensions.Options": "7.0.0"
+ "Microsoft.Extensions.DependencyInjection": "8.0.0",
+ "Microsoft.Extensions.Logging.Abstractions": "8.0.0",
+ "Microsoft.Extensions.Options": "8.0.0"
}
},
"Microsoft.Extensions.ObjectPool": {
From fd1bfdc2f62b2219e131211b8ce8de3532c4cca4 Mon Sep 17 00:00:00 2001
From: Jedd Morgan <45512892+JR-Morgan@users.noreply.github.com>
Date: Tue, 26 May 2026 15:04:40 +0100
Subject: [PATCH 42/42] add health check
---
docker-compose-internal.yml | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/docker-compose-internal.yml b/docker-compose-internal.yml
index c68da728..34e1125b 100644
--- a/docker-compose-internal.yml
+++ b/docker-compose-internal.yml
@@ -16,7 +16,13 @@ services:
- ./setup/db/10-docker_postgres_init.sql:/docker-entrypoint-initdb.d/10-docker_postgres_init.sql
- ./setup/db/11-docker_postgres_authentik_init.sql:/docker-entrypoint-initdb.d/11-docker_postgres_authentik_init.sql
command: postgres -c max_prepared_transactions=150
-
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U speckle -d speckle"]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ start_period: 20s
+
redis:
image: "valkey/valkey:8.1-alpine@sha256:0d27f0bca0249f61d060029a6aaf2e16b2c417d68d02a508e1dfb763fa2948b4"
restart: always
@@ -65,7 +71,7 @@ services:
- "0.0.0.0:3000:3000"
depends_on:
postgres:
- condition: service_started
+ condition: service_healthy
redis:
condition: service_healthy
minio: