diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets index 0df24f9..818b4ec 100644 --- a/.paket/Paket.Restore.targets +++ b/.paket/Paket.Restore.targets @@ -252,7 +252,7 @@ - <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/> + <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion).nuspec"/> diff --git a/FSharp.Azure.StorageTypeProvider.sln b/FSharp.Azure.StorageTypeProvider.sln index c411626..1d6e73c 100644 --- a/FSharp.Azure.StorageTypeProvider.sln +++ b/FSharp.Azure.StorageTypeProvider.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28010.2046 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28917.182 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".paket", ".paket", "{94066CAA-4417-4C43-A286-40182E920E43}" ProjectSection(SolutionItems) = preProject @@ -14,9 +14,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution docs\tools\generate.fsx = docs\tools\generate.fsx README.md = README.md RELEASE_NOTES.md = RELEASE_NOTES.md + sample-blobs.json = sample-blobs.json + sample-tables.json = sample-tables.json EndProjectSection EndProject -Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Azure.StorageTypeProvider", "src\FSharp.Azure.StorageTypeProvider\FSharp.Azure.StorageTypeProvider.fsproj", "{FB7CA8F3-C158-49E9-B816-501741E2921F}" +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Azure.StorageTypeProvider.Common", "src\FSharp.Azure.StorageTypeProvider.Common\FSharp.Azure.StorageTypeProvider.Common.fsproj", "{FB7CA8F3-C158-49E9-B816-501741E2921F}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "docs", "docs", "{7CAF8D38-6250-41CB-A65B-ABD760B09281}" ProjectSection(SolutionItems) = preProject @@ -35,6 +37,19 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{1535 docs\content\tables.fsx = docs\content\tables.fsx EndProjectSection EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Azure.StorageTypeProvider.Blob", "src\FSharp.Azure.StorageTypeProvider.Blob\FSharp.Azure.StorageTypeProvider.Blob.fsproj", "{9D66D199-9BCA-41B3-B005-1381589B9A2F}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Azure.StorageTypeProvider.Queue", "src\FSharp.Azure.StorageTypeProvider.Queue\FSharp.Azure.StorageTypeProvider.Queue.fsproj", "{8B477649-8E69-499C-825B-992C4FA7A162}" +EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "FSharp.Azure.StorageTypeProvider.Table", "src\FSharp.Azure.StorageTypeProvider.Table\FSharp.Azure.StorageTypeProvider.Table.fsproj", "{6D7FEFAE-24AF-49C0-888C-68BC3EBEF123}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{08E5CE37-D346-49D6-810E-7E7AB8872E8B}" + ProjectSection(SolutionItems) = preProject + build\common.props = build\common.props + build\packages.props = build\packages.props + build\version.props = build\version.props + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -45,6 +60,18 @@ Global {FB7CA8F3-C158-49E9-B816-501741E2921F}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB7CA8F3-C158-49E9-B816-501741E2921F}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB7CA8F3-C158-49E9-B816-501741E2921F}.Release|Any CPU.Build.0 = Release|Any CPU + {9D66D199-9BCA-41B3-B005-1381589B9A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9D66D199-9BCA-41B3-B005-1381589B9A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9D66D199-9BCA-41B3-B005-1381589B9A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9D66D199-9BCA-41B3-B005-1381589B9A2F}.Release|Any CPU.Build.0 = Release|Any CPU + {8B477649-8E69-499C-825B-992C4FA7A162}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8B477649-8E69-499C-825B-992C4FA7A162}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8B477649-8E69-499C-825B-992C4FA7A162}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8B477649-8E69-499C-825B-992C4FA7A162}.Release|Any CPU.Build.0 = Release|Any CPU + {6D7FEFAE-24AF-49C0-888C-68BC3EBEF123}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6D7FEFAE-24AF-49C0-888C-68BC3EBEF123}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6D7FEFAE-24AF-49C0-888C-68BC3EBEF123}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6D7FEFAE-24AF-49C0-888C-68BC3EBEF123}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ca7b476..9b4d4b8 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -102,5 +102,8 @@ ### 2.0.0 - 28th December 2018 * Support for blob-only accounts -### 2.0.1 - 05th February 2018 -* Fix #119 (Even when JSON tableSchema parameter is used Emulator required to be running) \ No newline at end of file +### 2.0.1 - 05th February 2019 +* Fix #119 (Even when JSON tableSchema parameter is used Emulator required to be running) + +### 2.0.2 - 7th April 2019 +* Remove dependency on FSharp.Compiler.Tools. \ No newline at end of file diff --git a/build.fsx b/build.fsx index 9d3cf01..9412bbd 100644 --- a/build.fsx +++ b/build.fsx @@ -17,7 +17,6 @@ open System.IO open Fake.IO open Fake.Azure open Fake.DotNet.NuGet -open Fake.Tools.Git open Fake.IO.FileSystemOperators // The name of the project @@ -27,14 +26,6 @@ let project = "FSharp.Azure.StorageTypeProvider" // (used as description in AssemblyInfo and as a short summary for NuGet package) let summary = "Allows easy access to Azure Storage assets through F# scripts." -// Git configuration (used for publishing documentation in gh-pages branch) -// The profile where the project is posted -let gitOwner = "fsprojects" -let gitHome = "https://github.com/" + gitOwner - -// The name of the project on GitHub -let gitName = "AzureStorageTypeProvider" - // Read additional information from the release notes document Environment.CurrentDirectory <- __SOURCE_DIRECTORY__ @@ -46,10 +37,6 @@ let projectPath = Path.getFullName "./src/FSharp.Azure.StorageTypeProvider" // Test path let testPath = Path.getFullName "./tests/IntegrationTests" -// Read additional information from the release notes document - -// Test Output Dir -let testOutPutDir = "TestOutput" let release = @@ -68,10 +55,6 @@ Target.Create "AssemblyInfo" (fun _ -> let inline withWorkDir wd = DotNet.Options.withWorkingDirectory wd -let runDotNet cmd workingDir = - let result = - DotNet.exec (withWorkDir workingDir) cmd "" - if result.ExitCode <> 0 then failwithf "'dotnet %s' failed in %s" cmd workingDir // -------------------------------------------------------------------------------------- // Clean build results @@ -96,28 +79,22 @@ Target.Create "Build" (fun _ -> Target.Create "ResetTestData" (fun _ -> let script = Path.Combine(testPath, "ResetTestData.fsx") Emulators.startStorageEmulator() - Fsi.exec (fun p -> + Fsi.exec (fun p -> + printfn "%A" p { p with TargetProfile = Fsi.Profile.Netcore WorkingDirectory = testPath }) script [""] |> snd - |> Seq.iter(fun x -> printfn "%s" x)) ///ToBeFixed + |> Seq.iter (printfn "%s")) // Run integration tests let root = __SOURCE_DIRECTORY__ -let testNetCoreDir = root "tests" "IntegrationTests" "bin" "Release" "netcoreapp2.0" "win10-x64" "publish" Target.Create "RunTests" (fun _ -> - let result = DotNet.exec (withWorkDir testPath) "publish --self-contained -c Release -r win10-x64" "" - if not result.OK then failwith "Publish failed" - printfn "Dkr: %s" testNetCoreDir - let result = DotNet.exec (withWorkDir testNetCoreDir) "" "IntegrationTests.dll" - if result.OK then - printfn "Expecto for netcore finished without Errors" - else - printfn "Expecto for netcore finished with Errors" - ) + let testNetCoreDir = root "tests" "IntegrationTests" "bin" "Release" "netcoreapp2.0" "publish" "IntegrationTests.dll" + DotNet.publish (fun p -> { p with Configuration = DotNet.BuildConfiguration.Release }) testPath + DotNet.exec id testNetCoreDir "" |> ignore) // -------------------------------------------------------------------------------------- // Build a NuGet package @@ -132,14 +109,13 @@ Target.Create "NuGet" (fun _ -> Description = "The F# Azure Storage Type Provider allows simple access to Blob, Table and Queue assets, using Azure Storage metadata to intelligently infer schema where possible, whilst providing a simple API for common tasks." Version = release.NugetVersion ReleaseNotes = release.Notes |> String.concat Environment.NewLine - Tags = "azure, f#, fsharp, type provider, blob, table, queue, script" + Tags = "azure, f#, fsharp, type provider, blob, table, queue, cosmos, script" OutputPath = @"bin\package" - Dependencies = [ "WindowsAzure.Storage", "9.3.2" - "FSharp.Compiler.Tools", "10.2.1" ] + Dependencies = [ "WindowsAzure.Storage", "9.3.2" ] References = [ "FSharp.Azure.StorageTypeProvider.dll" ] Files = ([ "FSharp.Azure.StorageTypeProvider.xml"; "FSharp.Azure.StorageTypeProvider.dll" - "Microsoft.WindowsAzure.Storage.dll"; "Newtonsoft.Json.dll" ] + "Microsoft.Azure.Storage.dll"; "Newtonsoft.Json.dll" ] |> List.map (fun file -> "../bin/netstandard2.0/publish/" + file, Some "lib/netstandard2.0", None)) @ [ "StorageTypeProvider.fsx", None, None ] }) ("nuget/" + project + ".nuspec")) diff --git a/build.fsx.lock b/build.fsx.lock new file mode 100644 index 0000000..d7efe6e --- /dev/null +++ b/build.fsx.lock @@ -0,0 +1,5 @@ +STORAGE: NONE +RESTRICTION: == netstandard2.0 +NUGET + remote: https://api.nuget.org/v3/index.json + FSharp.Core (4.6.2) diff --git a/docs/content/blobs.fsx b/docs/content/blobs.fsx index 438b5a7..b508fd7 100644 --- a/docs/content/blobs.fsx +++ b/docs/content/blobs.fsx @@ -11,7 +11,7 @@ Working with Blobs ================== For more information on Blobs in general, please see some of the many articles on -[MSDN](https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.blob.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/). Some of the core features of the Blob provider are: - +[MSDN](https://msdn.microsoft.com/en-us/library/Microsoft.Azure.storage.blob.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-blobs/). Some of the core features of the Blob provider are: - ## Rapid navigation diff --git a/docs/content/queues.fsx b/docs/content/queues.fsx index a6557c1..755e4fa 100644 --- a/docs/content/queues.fsx +++ b/docs/content/queues.fsx @@ -10,7 +10,7 @@ Working with Queues =================== For more information on Queues in general, please see some of the many articles on -[MSDN](https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.queue.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/). Some of the core features of the Queue provider are: - +[MSDN](https://msdn.microsoft.com/en-us/library/Microsoft.Azure.storage.queue.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-queues/). Some of the core features of the Queue provider are: - ## Rapid navigation diff --git a/docs/content/tables.fsx b/docs/content/tables.fsx index b297f7c..f07a474 100644 --- a/docs/content/tables.fsx +++ b/docs/content/tables.fsx @@ -3,7 +3,7 @@ open Deedle open FSharp.Azure.StorageTypeProvider open FSharp.Azure.StorageTypeProvider.Table -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Cosmos.Table open System type Azure = AzureTypeProvider<"UseDevelopmentStorage=true"> @@ -21,7 +21,7 @@ Working with Tables =================== For more information on Tables in general, please see some of the many articles on -[MSDN](https://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/). Some of the core features of the Tables provider are: - +[MSDN](https://msdn.microsoft.com/en-us/library/Microsoft.Azure.Cosmos.Table.aspx) or the [Azure](http://azure.microsoft.com/en-us/documentation/services/storage/) [documentation](http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/). Some of the core features of the Tables provider are: - ##Rapid navigation diff --git a/docs/tools/references.fsx b/docs/tools/references.fsx index 4ff8b57..821bf44 100644 --- a/docs/tools/references.fsx +++ b/docs/tools/references.fsx @@ -2,7 +2,7 @@ #r @"..\..\bin\Microsoft.Data.OData.dll" #r @"..\..\bin\Microsoft.Data.Services.Client.dll" #r @"..\..\bin\Microsoft.Data.Edm.dll" -#r @"..\..\bin\Microsoft.WindowsAzure.Storage.dll" +#r @"..\..\bin\Microsoft.Azure.Storage.dll" #r @"..\..\bin\Newtonsoft.Json.dll" #r @"..\..\bin\System.Spatial.dll" #r @"System.Xml.Linq.dll" diff --git a/paket.dependencies b/paket.dependencies index ad1f111..03aded0 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -1,13 +1,16 @@ +storage: none redirects: force source https://www.nuget.org/api/v2/ framework: netstandard2.0, netcoreapp2.0 generate_load_scripts: true nuget FSharp.Core -nuget WindowsAzure.Storage 9.3.2 -nuget Newtonsoft.Json 10.0.2 +nuget Microsoft.Azure.Storage.Common +nuget Microsoft.Azure.Storage.Blob +nuget Microsoft.Azure.Storage.Queue +nuget Microsoft.Azure.Cosmos.Table +nuget Newtonsoft.Json nuget System.Net.Http -nuget FSharp.Compiler.Tools nuget FAKE nuget Nuget.CommandLine @@ -43,4 +46,4 @@ nuget Fake.DotNet.Fsi nuget Fake.DotNet.AssemblyInfoFile nuget Fake.DotNet.NuGet nuget Fake.IO.FileSystem -nuget Fake.Tools.Git \ No newline at end of file +nuget Fake.Tools.Git diff --git a/paket.lock b/paket.lock index d9e0427..ce6bd77 100644 --- a/paket.lock +++ b/paket.lock @@ -1,5 +1,6 @@ GENERATE-LOAD-SCRIPTS: ON REDIRECTS: FORCE +STORAGE: NONE RESTRICTION: || (== netcoreapp2.0) (== netstandard2.0) NUGET remote: https://www.nuget.org/api/v2 @@ -20,15 +21,46 @@ NUGET System.Reflection.TypeExtensions (>= 4.3) System.Runtime.Loader (>= 4.0) System.Security.Cryptography.Algorithms (>= 4.3) - FSharp.Compiler.Tools (10.2.3) FSharp.Core (4.6.2) FSharp.Formatting (3.1) FSharp.Compiler.Service (>= 27.0.1 < 28.0) Microsoft.AspNet.Razor (>= 3.2.7 < 4.0) System.ValueTuple (>= 4.5 < 5.0) Microsoft.AspNet.Razor (3.2.7) - Microsoft.CodeCoverage (16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) - Microsoft.CSharp (4.5) + Microsoft.Azure.Cosmos.Table (1.0.1) + Microsoft.Azure.DocumentDB.Core (>= 2.1.3) + Microsoft.OData.Core (>= 7.5) + Newtonsoft.Json (>= 10.0.2) + Microsoft.Azure.DocumentDB.Core (2.4) + NETStandard.Library (>= 1.6) + Newtonsoft.Json (>= 9.0.1) + System.Collections.Immutable (>= 1.3) + System.Collections.NonGeneric (>= 4.0.1) + System.Collections.Specialized (>= 4.0.1) + System.Diagnostics.TraceSource (>= 4.0) + System.Dynamic.Runtime (>= 4.0.11) + System.Linq.Queryable (>= 4.0.1) + System.Net.Http (>= 4.3.4) + System.Net.NameResolution (>= 4.0) + System.Net.NetworkInformation (>= 4.1) + System.Net.Requests (>= 4.0.11) + System.Net.Security (>= 4.3.2) + System.Net.WebHeaderCollection (>= 4.0.1) + System.Runtime.Serialization.Primitives (>= 4.1.1) + System.Security.SecureString (>= 4.0) + Microsoft.Azure.KeyVault.Core (3.0.3) + NETStandard.Library (>= 1.6.1) + Microsoft.Azure.Storage.Blob (10.0.3) + Microsoft.Azure.Storage.Common (>= 10.0.3) + NETStandard.Library (>= 2.0.1) + Microsoft.Azure.Storage.Common (10.0.3) + Microsoft.Azure.KeyVault.Core (>= 2.0.4) + NETStandard.Library (>= 2.0.1) + Newtonsoft.Json (>= 10.0.2) + Microsoft.Azure.Storage.Queue (10.0.3) + Microsoft.Azure.Storage.Common (>= 10.0.3) + NETStandard.Library (>= 2.0.1) + Microsoft.CodeCoverage (16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.AppContext (>= 4.1) System.Collections (>= 4.0.11) @@ -44,15 +76,20 @@ NUGET System.Diagnostics.Debug (>= 4.0.11) System.Dynamic.Runtime (>= 4.0.11) System.Linq (>= 4.1) - Microsoft.NET.Test.Sdk (16.1) - Microsoft.CodeCoverage (>= 16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) - Microsoft.TestPlatform.TestHost (>= 16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + Microsoft.NET.Test.Sdk (16.1.1) + Microsoft.CodeCoverage (>= 16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= net45)) (&& (== netstandard2.0) (>= netcoreapp1.0)) + Microsoft.TestPlatform.TestHost (>= 16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) Microsoft.NETCore.Jit (2.0.8) - Microsoft.NETCore.Platforms (2.1.1) + Microsoft.NETCore.Platforms (2.2.1) Microsoft.NETCore.Runtime.CoreCLR (2.0.8) Microsoft.NETCore.Jit (>= 2.0.8) Microsoft.NETCore.Targets (2.1) - Microsoft.TestPlatform.ObjectModel (16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + Microsoft.OData.Core (7.6) + Microsoft.OData.Edm (7.6) + Microsoft.Spatial (7.6) + Microsoft.OData.Edm (7.6) + Microsoft.Spatial (7.6) + Microsoft.TestPlatform.ObjectModel (16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) NETStandard.Library (>= 1.6) System.ComponentModel.EventBasedAsync (>= 4.0.11) System.ComponentModel.TypeConverter (>= 4.1) @@ -67,9 +104,9 @@ NUGET System.Runtime.Serialization.Primitives (>= 4.1.1) System.Threading.Thread (>= 4.0) System.Xml.XPath.XmlDocument (>= 4.0.1) - Microsoft.TestPlatform.TestHost (16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + Microsoft.TestPlatform.TestHost (16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) Microsoft.Extensions.DependencyModel (>= 1.0.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) - Microsoft.TestPlatform.ObjectModel (>= 16.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= uap10.0)) + Microsoft.TestPlatform.ObjectModel (>= 16.1.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= uap10.0)) Newtonsoft.Json (>= 9.0.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) (&& (== netstandard2.0) (>= uap10.0)) Microsoft.Win32.Primitives (4.3) Microsoft.NETCore.Platforms (>= 1.1) @@ -80,25 +117,19 @@ NUGET System.Memory (>= 4.5) System.Security.AccessControl (>= 4.5) System.Security.Principal.Windows (>= 4.5) - Mono.Cecil (0.10.3) - System.Collections (>= 4.0.11) - System.IO.FileSystem (>= 4.0.1) - System.IO.FileSystem.Primitives (>= 4.0.1) - System.Reflection (>= 4.1) - System.Runtime.Extensions (>= 4.1) - System.Security.Cryptography.Algorithms (>= 4.2) - System.Security.Cryptography.Csp (>= 4.0) - System.Threading (>= 4.0.11) + Mono.Cecil (0.10.4) + System.Collections (>= 4.3) + System.IO.FileSystem (>= 4.3) + System.IO.FileSystem.Primitives (>= 4.3) + System.Reflection (>= 4.3) + System.Runtime.Extensions (>= 4.3) + System.Security.Cryptography.Algorithms (>= 4.3) + System.Security.Cryptography.Csp (>= 4.3) + System.Threading (>= 4.3) NETStandard.Library (2.0.3) Microsoft.NETCore.Platforms (>= 1.1) - Newtonsoft.Json (10.0.2) - Microsoft.CSharp (>= 4.3) - NETStandard.Library (>= 1.6.1) - System.ComponentModel.TypeConverter (>= 4.3) - System.Runtime.Serialization.Formatters (>= 4.3) - System.Runtime.Serialization.Primitives (>= 4.3) - System.Xml.XmlDocument (>= 4.3) - NuGet.CommandLine (4.9.4) + Newtonsoft.Json (12.0.2) + NuGet.CommandLine (5.0.2) runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) @@ -111,6 +142,9 @@ NUGET runtime.native.System.Net.Http (4.3.1) Microsoft.NETCore.Platforms (>= 1.1.1) Microsoft.NETCore.Targets (>= 1.1.3) + runtime.native.System.Net.Security (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) runtime.native.System.Security.Cryptography.Apple (4.3.1) runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) @@ -173,18 +207,18 @@ NUGET System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) System.Threading (>= 4.3) - System.ComponentModel (4.3) + System.ComponentModel (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.Runtime (>= 4.3) System.ComponentModel.EventBasedAsync (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.Resources.ResourceManager (>= 4.3) System.Runtime (>= 4.3) System.Threading (>= 4.3) System.Threading.Tasks (>= 4.3) - System.ComponentModel.Primitives (4.3) + System.ComponentModel.Primitives (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.ComponentModel (>= 4.3) System.Resources.ResourceManager (>= 4.3) System.Runtime (>= 4.3) - System.ComponentModel.TypeConverter (4.3) + System.ComponentModel.TypeConverter (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.Collections (>= 4.3) System.Collections.NonGeneric (>= 4.3) System.Collections.Specialized (>= 4.3) @@ -255,7 +289,7 @@ NUGET Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) - System.Dynamic.Runtime (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.Dynamic.Runtime (4.3) System.Collections (>= 4.3) System.Diagnostics.Debug (>= 4.3) System.Linq (>= 4.3) @@ -309,7 +343,7 @@ NUGET System.Resources.ResourceManager (>= 4.3) System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) - System.Linq.Expressions (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.Linq.Expressions (4.3) System.Collections (>= 4.3) System.Diagnostics.Debug (>= 4.3) System.Globalization (>= 4.3) @@ -327,10 +361,19 @@ NUGET System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) System.Threading (>= 4.3) - System.Memory (4.5.1) + System.Linq.Queryable (4.3) + System.Collections (>= 4.3) + System.Diagnostics.Debug (>= 4.3) + System.Linq (>= 4.3) + System.Linq.Expressions (>= 4.3) + System.Reflection (>= 4.3) + System.Reflection.Extensions (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Memory (4.5.3) System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net461)) (&& (== netcoreapp2.0) (< netstandard1.1)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) - System.Runtime.CompilerServices.Unsafe (>= 4.5) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) System.Net.Http (4.3.4) Microsoft.NETCore.Platforms (>= 1.1.1) runtime.native.System (>= 4.3) @@ -358,13 +401,107 @@ NUGET System.Text.Encoding (>= 4.3) System.Threading (>= 4.3) System.Threading.Tasks (>= 4.3) - System.Net.Primitives (4.3) + System.Net.NameResolution (4.3) Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) + runtime.native.System (>= 4.3) + System.Collections (>= 4.3) + System.Diagnostics.Tracing (>= 4.3) + System.Globalization (>= 4.3) + System.Net.Primitives (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) + System.Runtime.Handles (>= 4.3) + System.Runtime.InteropServices (>= 4.3) + System.Security.Principal.Windows (>= 4.3) + System.Threading (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Net.NetworkInformation (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.Win32.Primitives (>= 4.3) + runtime.native.System (>= 4.3) + System.Collections (>= 4.3) + System.Diagnostics.Tracing (>= 4.3) + System.Globalization (>= 4.3) + System.IO (>= 4.3) + System.IO.FileSystem (>= 4.3) + System.IO.FileSystem.Primitives (>= 4.3) + System.Linq (>= 4.3) + System.Net.Primitives (>= 4.3) + System.Net.Sockets (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) + System.Runtime.Handles (>= 4.3) + System.Runtime.InteropServices (>= 4.3) + System.Security.Principal.Windows (>= 4.3) + System.Threading (>= 4.3) + System.Threading.Overlapped (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Threading.Thread (>= 4.3) + System.Threading.ThreadPool (>= 4.3) + System.Net.Primitives (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + System.Runtime (>= 4.3.1) + System.Runtime.Handles (>= 4.3) + System.Net.Requests (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + System.Collections (>= 4.3) + System.Diagnostics.Debug (>= 4.3) + System.Diagnostics.Tracing (>= 4.3) + System.Globalization (>= 4.3) + System.IO (>= 4.3) + System.Net.Http (>= 4.3) + System.Net.Primitives (>= 4.3) + System.Net.WebHeaderCollection (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Threading (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Net.Security (4.3.2) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.Win32.Primitives (>= 4.3) + runtime.native.System (>= 4.3) + runtime.native.System.Net.Security (>= 4.3) + runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) + System.Collections (>= 4.3) + System.Collections.Concurrent (>= 4.3) + System.Diagnostics.Tracing (>= 4.3) + System.Globalization (>= 4.3) + System.Globalization.Extensions (>= 4.3) + System.IO (>= 4.3) + System.Net.Primitives (>= 4.3) + System.Resources.ResourceManager (>= 4.3) System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) System.Runtime.Handles (>= 4.3) + System.Runtime.InteropServices (>= 4.3) + System.Security.Claims (>= 4.3) + System.Security.Cryptography.Algorithms (>= 4.3) + System.Security.Cryptography.Encoding (>= 4.3) + System.Security.Cryptography.OpenSsl (>= 4.3) + System.Security.Cryptography.Primitives (>= 4.3) + System.Security.Cryptography.X509Certificates (>= 4.3) + System.Security.Principal (>= 4.3) + System.Text.Encoding (>= 4.3) + System.Threading (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Threading.ThreadPool (>= 4.3) + System.Net.Sockets (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + Microsoft.NETCore.Targets (>= 1.1) + System.IO (>= 4.3) + System.Net.Primitives (>= 4.3) + System.Runtime (>= 4.3) + System.Threading.Tasks (>= 4.3) + System.Net.WebHeaderCollection (4.3) + System.Collections (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) System.Numerics.Vectors (4.5) - restriction: || (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) - System.ObjectModel (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.ObjectModel (4.3) System.Collections (>= 4.3) System.Diagnostics.Debug (>= 4.3) System.Resources.ResourceManager (>= 4.3) @@ -412,7 +549,7 @@ NUGET System.Reflection (>= 4.3) System.Reflection.Primitives (>= 4.3) System.Runtime (>= 4.3) - System.Reflection.Emit.Lightweight (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.Reflection.Emit.Lightweight (4.3) System.Reflection (>= 4.3) System.Reflection.Emit.ILGeneration (>= 4.3) System.Reflection.Primitives (>= 4.3) @@ -435,14 +572,14 @@ NUGET System.Globalization (>= 4.3) System.Reflection (>= 4.3) System.Runtime (>= 4.3) - System.Runtime (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) + System.Runtime (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) System.Runtime.CompilerServices.Unsafe (4.5.2) - System.Runtime.Extensions (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) + System.Runtime.Extensions (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + System.Runtime (>= 4.3.1) System.Runtime.Handles (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -471,12 +608,6 @@ NUGET System.Resources.ResourceManager (>= 4.3) System.Runtime (>= 4.3) System.Runtime.Extensions (>= 4.3) - System.Runtime.Serialization.Formatters (4.3) - System.Collections (>= 4.3) - System.Reflection (>= 4.3) - System.Resources.ResourceManager (>= 4.3) - System.Runtime (>= 4.3) - System.Runtime.Serialization.Primitives (>= 4.3) System.Runtime.Serialization.Json (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.IO (>= 4.3) System.Private.DataContractSerialization (>= 4.3) @@ -487,6 +618,14 @@ NUGET System.Security.AccessControl (4.5) Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.Security.Principal.Windows (>= 4.5) + System.Security.Claims (4.3) + System.Collections (>= 4.3) + System.Globalization (>= 4.3) + System.IO (>= 4.3) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) + System.Security.Principal (>= 4.3) System.Security.Cryptography.Algorithms (4.3.1) Microsoft.NETCore.Platforms (>= 1.1) runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) @@ -531,8 +670,8 @@ NUGET System.Runtime.InteropServices (>= 4.3) System.Security.Cryptography.Primitives (>= 4.3) System.Text.Encoding (>= 4.3) - System.Security.Cryptography.OpenSsl (4.5) - Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.OpenSsl (4.5.1) + Microsoft.NETCore.Platforms (>= 2.1.2) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.Security.Cryptography.Primitives (4.3) System.Diagnostics.Debug (>= 4.3) System.Globalization (>= 4.3) @@ -571,8 +710,19 @@ NUGET System.Threading (>= 4.3) System.Security.Permissions (4.5) System.Security.AccessControl (>= 4.5) + System.Security.Principal (4.3) + System.Runtime (>= 4.3) System.Security.Principal.Windows (4.5.1) Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.SecureString (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Handles (>= 4.3) + System.Runtime.InteropServices (>= 4.3) + System.Security.Cryptography.Primitives (>= 4.3) + System.Text.Encoding (>= 4.3) + System.Threading (>= 4.3) System.Text.Encoding (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) @@ -582,29 +732,29 @@ NUGET Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) System.Text.Encoding (>= 4.3) - System.Text.RegularExpressions (4.3) - System.Collections (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Text.RegularExpressions (4.3.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.Runtime (>= 4.3.1) System.Threading (4.3) System.Runtime (>= 4.3) System.Threading.Tasks (>= 4.3) + System.Threading.Overlapped (4.3) + Microsoft.NETCore.Platforms (>= 1.1) + System.Resources.ResourceManager (>= 4.3) + System.Runtime (>= 4.3) + System.Runtime.Handles (>= 4.3) System.Threading.Tasks (4.3) Microsoft.NETCore.Platforms (>= 1.1) Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) - System.Threading.Tasks.Extensions (4.5.1) - System.Runtime.CompilerServices.Unsafe (>= 4.5) + System.Threading.Tasks.Extensions (4.5.2) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) System.Threading.Thread (4.3) System.Runtime (>= 4.3) System.Threading.ThreadPool (4.3) System.Runtime (>= 4.3) System.Runtime.Handles (>= 4.3) System.ValueTuple (4.5) - System.Xml.ReaderWriter (4.3.1) + System.Xml.ReaderWriter (4.3.1) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.Collections (>= 4.3) System.Diagnostics.Debug (>= 4.3) System.Globalization (>= 4.3) @@ -633,7 +783,7 @@ NUGET System.Text.Encoding (>= 4.3) System.Threading (>= 4.3) System.Xml.ReaderWriter (>= 4.3) - System.Xml.XmlDocument (4.3) + System.Xml.XmlDocument (4.3) - restriction: || (== netcoreapp2.0) (&& (== netstandard2.0) (>= netcoreapp1.0)) System.Collections (>= 4.3) System.Diagnostics.Debug (>= 4.3) System.Globalization (>= 4.3) @@ -689,13 +839,10 @@ NUGET System.ValueTuple (>= 4.4) Unquote (4.0) FSharp.Core (>= 4.2.3) - WindowsAzure.Storage (9.3.2) - NETStandard.Library (>= 1.6.1) - Newtonsoft.Json (>= 10.0.2) GITHUB remote: fsprojects/FSharp.TypeProviders.SDK - src/ProvidedTypes.fs (f97f77ba03a8f91d927ab70259dc91eb8ba02e40) - src/ProvidedTypes.fsi (f97f77ba03a8f91d927ab70259dc91eb8ba02e40) + src/ProvidedTypes.fs (592d23a96db79b4248ed23a062db3a17433282ce) + src/ProvidedTypes.fsi (592d23a96db79b4248ed23a062db3a17433282ce) GROUP build STORAGE: NONE RESTRICTION: || (== netcoreapp2.0) (== netstandard2.0) @@ -703,21 +850,21 @@ NUGET remote: https://www.nuget.org/api/v2 BlackFox.VsWhere (1.0) FSharp.Core (>= 4.2.3) - Fake.Azure.Emulators (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.Azure.Emulators (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) System.Diagnostics.FileVersionInfo (>= 4.3) System.Diagnostics.Process (>= 4.3) System.IO.FileSystem.Watcher (>= 4.3) - Fake.BuildServer.AppVeyor (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) - Fake.Net.Http (>= 5.13.5) + Fake.BuildServer.AppVeyor (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.IO.FileSystem (>= 5.15) + Fake.Net.Http (>= 5.15) FSharp.Core (>= 4.3.4) System.Diagnostics.FileVersionInfo (>= 4.3) System.Diagnostics.Process (>= 4.3) @@ -735,29 +882,29 @@ NUGET Fake.Core.String (>= 5.0.0-alpha018) FSharp.Core (>= 4.1.18) NETStandard.Library (>= 1.6.1) - Fake.Core.Context (5.13.5) + Fake.Core.Context (5.15) FSharp.Core (>= 4.3.4) - Fake.Core.Environment (5.13.5) + Fake.Core.Environment (5.15) FSharp.Core (>= 4.3.4) - Fake.Core.FakeVar (5.13.5) - Fake.Core.Context (>= 5.13.5) + Fake.Core.FakeVar (5.15) + Fake.Core.Context (>= 5.15) FSharp.Core (>= 4.3.4) - Fake.Core.Process (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.FakeVar (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.Core.Process (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.FakeVar (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) System.Diagnostics.Process (>= 4.3) - Fake.Core.ReleaseNotes (5.13.5) - Fake.Core.SemVer (>= 5.13.5) - Fake.Core.String (>= 5.13.5) + Fake.Core.ReleaseNotes (5.15) + Fake.Core.SemVer (>= 5.15) + Fake.Core.String (>= 5.15) FSharp.Core (>= 4.3.4) - Fake.Core.SemVer (5.13.5) + Fake.Core.SemVer (5.15) FSharp.Core (>= 4.3.4) System.Runtime.Numerics (>= 4.3) - Fake.Core.String (5.13.5) + Fake.Core.String (5.15) FSharp.Core (>= 4.3.4) Fake.Core.Targets (5.0.0-alpha018) Fake.Core.BuildServer (>= 5.0.0-alpha018) @@ -767,12 +914,12 @@ NUGET Fake.Core.Tracing (>= 5.0.0-alpha018) FSharp.Core (>= 4.1.18) NETStandard.Library (>= 1.6.1) - Fake.Core.Tasks (5.13.5) - Fake.Core.Trace (>= 5.13.5) + Fake.Core.Tasks (5.15) + Fake.Core.Trace (>= 5.15) FSharp.Core (>= 4.3.4) - Fake.Core.Trace (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.FakeVar (>= 5.13.5) + Fake.Core.Trace (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.FakeVar (>= 5.15) FSharp.Core (>= 4.3.4) Fake.Core.Tracing (5.0.0-alpha018) Fake.Core.BuildServer (>= 5.0.0-alpha018) @@ -780,8 +927,8 @@ NUGET Fake.Core.String (>= 5.0.0-alpha018) FSharp.Core (>= 4.1.18) NETStandard.Library (>= 1.6.1) - Fake.Core.Xml (5.13.5) - Fake.Core.String (>= 5.13.5) + Fake.Core.Xml (5.15) + Fake.Core.String (>= 5.15) FSharp.Core (>= 4.3.4) System.Xml.ReaderWriter (>= 4.3.1) System.Xml.XDocument (>= 4.3) @@ -789,73 +936,73 @@ NUGET System.Xml.XPath.XDocument (>= 4.3) System.Xml.XPath.XmlDocument (>= 4.3) FAKE.Dotnet (2.0) - Fake.DotNet.AssemblyInfoFile (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.DotNet.AssemblyInfoFile (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) - Fake.DotNet.Cli (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.DotNet.MSBuild (>= 5.13.5) - Fake.DotNet.NuGet (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.DotNet.Cli (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.DotNet.MSBuild (>= 5.15) + Fake.DotNet.NuGet (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) Newtonsoft.Json (>= 12.0.2) - Fake.DotNet.Fsi (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.DotNet.MSBuild (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) - Fake.Tools.Git (>= 5.13.5) + Fake.DotNet.Fsi (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.DotNet.MSBuild (>= 5.15) + Fake.IO.FileSystem (>= 5.15) + Fake.Tools.Git (>= 5.15) FSharp.Compiler.Service (>= 25.0.1) FSharp.Core (>= 4.3.4) - Fake.DotNet.MSBuild (5.13.5) + Fake.DotNet.MSBuild (5.15) BlackFox.VsWhere (>= 1.0) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) - MSBuild.StructuredLogger (>= 2.0.88) - Fake.DotNet.NuGet (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.SemVer (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Tasks (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.Core.Xml (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) - Fake.Net.Http (>= 5.13.5) + MSBuild.StructuredLogger (>= 2.0.94) + Fake.DotNet.NuGet (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.SemVer (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Tasks (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.Core.Xml (>= 5.15) + Fake.IO.FileSystem (>= 5.15) + Fake.Net.Http (>= 5.15) FSharp.Core (>= 4.3.4) Newtonsoft.Json (>= 12.0.2) NuGet.Protocol (>= 4.9.4) System.Net.Http (>= 4.3.4) - Fake.IO.FileSystem (5.13.5) - Fake.Core.String (>= 5.13.5) + Fake.IO.FileSystem (5.15) + Fake.Core.String (>= 5.15) FSharp.Core (>= 4.3.4) System.Diagnostics.FileVersionInfo (>= 4.3) System.IO.FileSystem.Watcher (>= 4.3) - Fake.Net.Http (5.13.5) - Fake.Core.Trace (>= 5.13.5) + Fake.Net.Http (5.15) + Fake.Core.Trace (>= 5.15) FSharp.Core (>= 4.3.4) System.Net.Http (>= 4.3.4) - Fake.Tools.Git (5.13.5) - Fake.Core.Environment (>= 5.13.5) - Fake.Core.Process (>= 5.13.5) - Fake.Core.SemVer (>= 5.13.5) - Fake.Core.String (>= 5.13.5) - Fake.Core.Trace (>= 5.13.5) - Fake.IO.FileSystem (>= 5.13.5) + Fake.Tools.Git (5.15) + Fake.Core.Environment (>= 5.15) + Fake.Core.Process (>= 5.15) + Fake.Core.SemVer (>= 5.15) + Fake.Core.String (>= 5.15) + Fake.Core.Trace (>= 5.15) + Fake.IO.FileSystem (>= 5.15) FSharp.Core (>= 4.3.4) - FSharp.Compiler.Service (28.0) + FSharp.Compiler.Service (29.0.1) FSharp.Core (>= 4.6.2) System.Collections.Immutable (>= 1.5) System.Diagnostics.Process (>= 4.1) @@ -887,7 +1034,7 @@ NUGET Microsoft.Win32.Registry (>= 4.3) System.Collections.Immutable (>= 1.5) System.Text.Encoding.CodePages (>= 4.0.1) - Microsoft.NETCore.Platforms (2.2) + Microsoft.NETCore.Platforms (2.2.1) Microsoft.NETCore.Targets (2.1) Microsoft.Win32.Primitives (4.3) Microsoft.NETCore.Platforms (>= 1.1) @@ -906,23 +1053,23 @@ NUGET NETStandard.Library (2.0.3) Microsoft.NETCore.Platforms (>= 1.1) Newtonsoft.Json (12.0.2) - NuGet.Common (5.0) - NuGet.Frameworks (>= 5.0) + NuGet.Common (5.1) + NuGet.Frameworks (>= 5.1) System.Diagnostics.Process (>= 4.3) System.Threading.Thread (>= 4.3) - NuGet.Configuration (5.0) - NuGet.Common (>= 5.0) + NuGet.Configuration (5.1) + NuGet.Common (>= 5.1) System.Security.Cryptography.ProtectedData (>= 4.3) - NuGet.Frameworks (5.0) - NuGet.Packaging (5.0) + NuGet.Frameworks (5.1) + NuGet.Packaging (5.1) Newtonsoft.Json (>= 9.0.1) - NuGet.Configuration (>= 5.0) - NuGet.Versioning (>= 5.0) + NuGet.Configuration (>= 5.1) + NuGet.Versioning (>= 5.1) System.Dynamic.Runtime (>= 4.3) - NuGet.Protocol (5.0) - NuGet.Packaging (>= 5.0) + NuGet.Protocol (5.1) + NuGet.Packaging (>= 5.1) System.Dynamic.Runtime (>= 4.3) - NuGet.Versioning (5.0) + NuGet.Versioning (5.1) runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) @@ -1136,7 +1283,7 @@ NUGET System.Runtime.Extensions (>= 4.3) System.Threading (>= 4.3) System.Threading.Tasks (>= 4.3) - System.Memory (4.5.2) + System.Memory (4.5.3) System.Buffers (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= monotouch)) (&& (== netcoreapp2.0) (>= net461)) (&& (== netcoreapp2.0) (< netstandard1.1)) (&& (== netcoreapp2.0) (< netstandard2.0)) (&& (== netcoreapp2.0) (>= xamarinios)) (&& (== netcoreapp2.0) (>= xamarinmac)) (&& (== netcoreapp2.0) (>= xamarintvos)) (&& (== netcoreapp2.0) (>= xamarinwatchos)) (== netstandard2.0) System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) System.Runtime.CompilerServices.Unsafe (>= 4.5.2) @@ -1167,10 +1314,10 @@ NUGET System.Text.Encoding (>= 4.3) System.Threading (>= 4.3) System.Threading.Tasks (>= 4.3) - System.Net.Primitives (4.3) - Microsoft.NETCore.Platforms (>= 1.1) - Microsoft.NETCore.Targets (>= 1.1) - System.Runtime (>= 4.3) + System.Net.Primitives (4.3.1) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + System.Runtime (>= 4.3.1) System.Runtime.Handles (>= 4.3) System.Numerics.Vectors (4.5) - restriction: || (&& (== netcoreapp2.0) (>= net461)) (== netstandard2.0) System.ObjectModel (4.3) @@ -1355,13 +1502,13 @@ NUGET Microsoft.NETCore.Targets (>= 1.1) System.Runtime (>= 4.3) System.Text.Encoding (>= 4.3) - System.Text.RegularExpressions (4.3) - System.Collections (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (&& (== netcoreapp2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Text.RegularExpressions (4.3.1) + System.Collections (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (== netstandard2.0) + System.Runtime (>= 4.3.1) + System.Runtime.Extensions (>= 4.3.1) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== netcoreapp2.0) (< netcoreapp1.1)) (== netstandard2.0) System.Threading (4.3) System.Runtime (>= 4.3) System.Threading.Tasks (>= 4.3) diff --git a/sample-blobs.json b/sample-blobs.json new file mode 100644 index 0000000..942a75f --- /dev/null +++ b/sample-blobs.json @@ -0,0 +1,22 @@ +{ + "samples": { + "file1.txt": { "Type": "blockblob" }, + "file2.txt": null, + "file3.txt": { "Type": "pageblob" }, + "folder/": { + "childFile.txt": null + }, + "folder2/": { + "child/": { + "descendant4.txt": null + } + } + }, + "random": { + "file.txt": null, + "folder/": { + "emptyFolder/": null + } + }, + "emptyContainer": { } +} \ No newline at end of file diff --git a/sample-tables.json b/sample-tables.json new file mode 100644 index 0000000..3075c93 --- /dev/null +++ b/sample-tables.json @@ -0,0 +1,21 @@ +{ + "Employee": { + "Name": { + "Type": "String" + }, + "YearsWorking": { + "Type": "int32" + }, + "Dob": { + "Type": "DateTime" + }, + "Salary": { + "Type": "double", + "Optional": true + }, + "IsManager": { + "Type": "boolean", + "Optional": true + } + } +} \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobMemberFactory.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobMemberFactory.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Blob/BlobMemberFactory.fs rename to src/FSharp.Azure.StorageTypeProvider.Blob/BlobMemberFactory.fs index dc82ed1..894a427 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobMemberFactory.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobMemberFactory.fs @@ -4,7 +4,7 @@ module internal FSharp.Azure.StorageTypeProvider.Blob.BlobMemberFactory open FSharp.Azure.StorageTypeProvider.Blob.BlobRepository open ProviderImplementation.ProvidedTypes open System -open Microsoft.WindowsAzure.Storage.Blob +open Microsoft.Azure.Storage.Blob open FSharp.Control.Tasks let rec private createBlobItem (domainType : ProvidedTypeDefinition) connectionString containerName fileItem = diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepository.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobRepository.fs similarity index 98% rename from src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepository.fs rename to src/FSharp.Azure.StorageTypeProvider.Blob/BlobRepository.fs index 1610ecf..0994bbc 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepository.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobRepository.fs @@ -2,8 +2,8 @@ module FSharp.Azure.StorageTypeProvider.Blob.BlobRepository open FSharp.Azure.StorageTypeProvider -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Blob +open Microsoft.Azure.Storage +open Microsoft.Azure.Storage.Blob open System open System.IO diff --git a/src/FSharp.Azure.StorageTypeProvider.Blob/BlobTypeProvider.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobTypeProvider.fs new file mode 100644 index 0000000..6488fda --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/BlobTypeProvider.fs @@ -0,0 +1,116 @@ +namespace ProviderImplementation + +open FSharp.Azure.StorageTypeProvider +open FSharp.Azure.StorageTypeProvider.Blob +open FSharp.Azure.StorageTypeProvider.Configuration +open Microsoft.FSharp.Core.CompilerServices +open ProviderImplementation.ProvidedTypes +open System +open System.Collections.Generic +open System.Reflection + +[] +/// [omit] +type public BlobTypeProvider(config : TypeProviderConfig) as this = + inherit TypeProviderForNamespaces(config) + + let namespaceName = "FSharp.Azure.StorageTypeProvider.Blob" + let thisAssembly = typeof.Assembly + let azureAccountType = ProvidedTypeDefinition(thisAssembly, namespaceName, "BlobTypeProvider", baseType = Some typeof) + + let buildConnectionString (args : obj []) = + let (|ConnectionString|TwoPart|DevelopmentStorage|) (args:obj []) = + let getArg i = args.[i] :?> string + let accountNameOrConnectionString, accountKey = getArg 0, getArg 1 + let configFileKey, configFileName = getArg 2, getArg 3 + + match accountNameOrConnectionString, accountKey, configFileKey with + | _ when (not << String.IsNullOrWhiteSpace) configFileKey -> + let connectionFromConfig = getConnectionString(configFileKey, config.ResolutionFolder, configFileName) + ConnectionString connectionFromConfig + | _ when accountNameOrConnectionString.StartsWith "DefaultEndpointsProtocol" -> ConnectionString accountNameOrConnectionString + | _ when [ accountNameOrConnectionString; accountKey ] |> List.exists String.IsNullOrWhiteSpace -> DevelopmentStorage + | _ -> TwoPart (accountNameOrConnectionString, accountKey) + + match args with + | DevelopmentStorage -> "UseDevelopmentStorage=true" + | ConnectionString conn -> conn + | TwoPart (name, key) -> sprintf "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s;" name key + + let startLiveRefresh : obj -> _ = + function + | :? int as seconds when seconds >= 1 -> + let seconds = seconds * 1000 + async { + while true do + do! Async.Sleep seconds + this.Invalidate() + } |> Async.Start + | _ -> () + + let buildTypes (typeName : string) (args : obj []) = + // Create the top level property + let typeProviderForAccount = ProvidedTypeDefinition(thisAssembly, namespaceName, typeName, baseType = Some typeof) + typeProviderForAccount.AddMember(ProvidedConstructor([], fun _ -> <@@ null @@>)) + + startLiveRefresh args.[8] + + let connectionString = buildConnectionString args + let staticBlobSchema = args.[6] :?> string |> Option.ofString + let staticTableSchema = args.[7] :?> string |> Option.ofString + let connectionStringValidation = + match staticBlobSchema, staticTableSchema with + | Some _, _ | _, Some _ -> None + | _ -> Some (validateConnectionString connectionString) + + let parsedBlobSchema = Blob.StaticSchema.createSchema config.ResolutionFolder staticBlobSchema + + match connectionStringValidation, parsedBlobSchema with + | Some (Ok ()), Ok blobSchema + | None, Ok blobSchema -> + let domainTypes = ProvidedTypeDefinition("Domain", Some typeof) + typeProviderForAccount.AddMember(domainTypes) + // Now create child members e.g. containers, tables etc. + typeProviderForAccount.AddMembers + ([ (BlobMemberFactory.getBlobStorageMembers blobSchema, "blobs") ] + |> List.choose (fun (builder, name) -> + try builder(connectionString, domainTypes) + with ex -> failwithf "An error occurred during initial type generation for %s: %O" name ex)) + typeProviderForAccount + | Some (Error ex), _ -> failwithf "Unable to validate connection string (%O)" ex + | _, Error ex -> failwithf "Unable to parse blob schema file (%O)" ex + + let createParam (name, defaultValue:'a, help) = + let providedParameter = ProvidedStaticParameter(name, typeof<'a>, defaultValue) + providedParameter.AddXmlDoc help + providedParameter + + // Parameterising the provider + let parameters = + [ createParam("accountName", String.Empty, "The Storage Account name, or full connection string in the format 'DefaultEndpointsProtocol=protocol;AccountName=account;AccountKey=key;'.") + createParam("accountKey", String.Empty, "The Storage Account key. Ignored if the accountName argument is the full connection string.") + createParam("connectionStringName", String.Empty, "The Connection String key from the configuration file to use to retrieve the connection string. If set, accountName and accountKey are ignored.") + createParam("configFileName", "app.config", "The name of the configuration file to look for. Defaults to 'app.config'") + createParam("schemaSize", 10, "The maximum number of rows to read per table, from which to infer schema. Defaults to 10.") + createParam("humanize", false, "Whether to humanize table column names. Defaults to false.") + createParam("blobSchema", String.Empty, "Provide a path to a local file containing a fixed schema to eagerly use, instead of lazily generating the blob schema from a live storage account.") + createParam("tableSchema", String.Empty, "Provide a path to a local file containing a fixed schema to eagerly use, instead of lazily generating the table schema from a live storage account.") + createParam("autoRefresh", 0, "Optionally provide the number of seconds to wait before refreshing the schema. Defaults to 0 (never).") ] + + let memoize func = + let cache = Dictionary() + fun argsAsString args -> + let exists, value = cache.TryGetValue argsAsString + if exists then value + else + let value = func argsAsString args + cache.Add(argsAsString, value) + value + + do + azureAccountType.DefineStaticParameters(parameters, memoize buildTypes) + this.AddNamespace(namespaceName, [ azureAccountType ]) + azureAccountType.AddXmlDoc("The entry type to connect to Azure Storage assets.") + +[] +do () \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider.Blob/FSharp.Azure.StorageTypeProvider.Blob.fsproj b/src/FSharp.Azure.StorageTypeProvider.Blob/FSharp.Azure.StorageTypeProvider.Blob.fsproj new file mode 100644 index 0000000..b5308d6 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/FSharp.Azure.StorageTypeProvider.Blob.fsproj @@ -0,0 +1,39 @@ + + + + + + + netstandard2.0 + true + + + + + True + + + + True + paket-files/ProvidedTypes.fsi + + + True + paket-files/ProvidedTypes.fs + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/MimeTypes.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/MimeTypes.fs similarity index 100% rename from src/FSharp.Azure.StorageTypeProvider/Blob/MimeTypes.fs rename to src/FSharp.Azure.StorageTypeProvider.Blob/MimeTypes.fs diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/ProvidedBlobTypes.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/ProvidedBlobTypes.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Blob/ProvidedBlobTypes.fs rename to src/FSharp.Azure.StorageTypeProvider.Blob/ProvidedBlobTypes.fs index fa35984..9d291ec 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Blob/ProvidedBlobTypes.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/ProvidedBlobTypes.fs @@ -1,8 +1,8 @@ namespace FSharp.Azure.StorageTypeProvider.Blob open FSharp.Azure.StorageTypeProvider.Blob.BlobRepository -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Blob +open Microsoft.Azure.Storage +open Microsoft.Azure.Storage.Blob open System open System.IO open System.Xml.Linq diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/StaticSchema.fs b/src/FSharp.Azure.StorageTypeProvider.Blob/StaticSchema.fs similarity index 98% rename from src/FSharp.Azure.StorageTypeProvider/Blob/StaticSchema.fs rename to src/FSharp.Azure.StorageTypeProvider.Blob/StaticSchema.fs index 28d4cb3..dd1ba23 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Blob/StaticSchema.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/StaticSchema.fs @@ -2,7 +2,7 @@ open BlobRepository open FSharp.Azure.StorageTypeProvider.Configuration -open Microsoft.WindowsAzure.Storage.Blob +open Microsoft.Azure.Storage.Blob open Newtonsoft.Json.Linq open System.IO diff --git a/src/FSharp.Azure.StorageTypeProvider/paket.references b/src/FSharp.Azure.StorageTypeProvider.Blob/paket.references similarity index 75% rename from src/FSharp.Azure.StorageTypeProvider/paket.references rename to src/FSharp.Azure.StorageTypeProvider.Blob/paket.references index 643e2a0..da7078b 100644 --- a/src/FSharp.Azure.StorageTypeProvider/paket.references +++ b/src/FSharp.Azure.StorageTypeProvider.Blob/paket.references @@ -1,8 +1,7 @@ -WindowsAzure.Storage +Microsoft.Azure.Storage.Blob FSharp.Core System.Configuration.ConfigurationManager System.Net.Http File:ProvidedTypes.fsi File:ProvidedTypes.fs -FSharp.Compiler.Tools Taskbuilder.fs \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Configuration.fs b/src/FSharp.Azure.StorageTypeProvider.Common/Configuration.fs similarity index 84% rename from src/FSharp.Azure.StorageTypeProvider/Configuration.fs rename to src/FSharp.Azure.StorageTypeProvider.Common/Configuration.fs index af8f602..e5d5b63 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Configuration.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Common/Configuration.fs @@ -1,9 +1,9 @@ -module internal FSharp.Azure.StorageTypeProvider.Configuration +module FSharp.Azure.StorageTypeProvider.Configuration open System.Collections.Generic open System.Configuration open System.IO -open Microsoft.WindowsAzure.Storage +open Microsoft.Azure.Storage let private doesFileExist folder file = let fullPath = Path.Combine(folder, file) @@ -44,18 +44,19 @@ module ConnectionValidation = let private memoize code = let cache = Dictionary() fun arg -> - if not(cache.ContainsKey arg) - then cache.[arg] <- code arg - cache.[arg] + let exists, value = cache.TryGetValue arg + if exists then value + else + let value = code arg + cache.[arg] <- value + value + let private checkConnectionString connectionString = try CloudStorageAccount .Parse(connectionString) - .CreateCloudBlobClient() - .GetContainerReference("abc") - .ExistsAsync() - |> Async.AwaitTask - |> Async.RunSynchronously //throws an exception if attempted with an invalid connection string + //throws an exception if attempted with an invalid connection string + .GetSharedAccessSignature(new SharedAccessAccountPolicy()) |> ignore Ok() with | ex -> Error ex diff --git a/src/FSharp.Azure.StorageTypeProvider.Common/FSharp.Azure.StorageTypeProvider.Common.fsproj b/src/FSharp.Azure.StorageTypeProvider.Common/FSharp.Azure.StorageTypeProvider.Common.fsproj new file mode 100644 index 0000000..df6dd20 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Common/FSharp.Azure.StorageTypeProvider.Common.fsproj @@ -0,0 +1,31 @@ + + + + + + + netstandard2.0 + true + + + + + True + + + + True + paket-files/ProvidedTypes.fsi + + + True + paket-files/ProvidedTypes.fs + + + + + + + + + \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider.Common/Properties/PublishProfiles/FolderProfile.pubxml b/src/FSharp.Azure.StorageTypeProvider.Common/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..54ccf6a --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Common/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,13 @@ + + + + + FileSystem + Release + Any CPU + netstandard2.0 + bin\Debug\netstandard2.0\publish\ + + \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Shared.fs b/src/FSharp.Azure.StorageTypeProvider.Common/Shared.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Shared.fs rename to src/FSharp.Azure.StorageTypeProvider.Common/Shared.fs index 156bab7..8a2d7bf 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Shared.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Common/Shared.fs @@ -76,7 +76,7 @@ module Json = namespace FSharp.Azure.StorageTypeProvider -module internal Async = +module Async = let segmentedAzureOperation getNextSegment = let rec doRecursiveSegmenting (getNextSegment:_ -> Async<_ * _>) (output:_ ResizeArray) token = async { match! getNextSegment token with diff --git a/src/FSharp.Azure.StorageTypeProvider.Common/paket.references b/src/FSharp.Azure.StorageTypeProvider.Common/paket.references new file mode 100644 index 0000000..8d419e2 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Common/paket.references @@ -0,0 +1,7 @@ +Microsoft.Azure.Storage.Common +FSharp.Core +System.Configuration.ConfigurationManager +System.Net.Http +File:ProvidedTypes.fsi +File:ProvidedTypes.fs +Taskbuilder.fs \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider.Queue/FSharp.Azure.StorageTypeProvider.Queue.fsproj b/src/FSharp.Azure.StorageTypeProvider.Queue/FSharp.Azure.StorageTypeProvider.Queue.fsproj new file mode 100644 index 0000000..1661af5 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/FSharp.Azure.StorageTypeProvider.Queue.fsproj @@ -0,0 +1,37 @@ + + + + + + + netstandard2.0 + true + + + + + True + + + + True + paket-files/ProvidedTypes.fsi + + + True + paket-files/ProvidedTypes.fs + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Queue/ProvidedQueueTypes.fs b/src/FSharp.Azure.StorageTypeProvider.Queue/ProvidedQueueTypes.fs similarity index 95% rename from src/FSharp.Azure.StorageTypeProvider/Queue/ProvidedQueueTypes.fs rename to src/FSharp.Azure.StorageTypeProvider.Queue/ProvidedQueueTypes.fs index 0a00a5f..b16aba2 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Queue/ProvidedQueueTypes.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/ProvidedQueueTypes.fs @@ -1,7 +1,7 @@ namespace FSharp.Azure.StorageTypeProvider.Queue open FSharp.Azure.StorageTypeProvider.Queue.QueueRepository -open Microsoft.WindowsAzure.Storage.Queue +open Microsoft.Azure.Storage.Queue open System /// The unique identifier for this Azure queue message. @@ -115,15 +115,16 @@ type ProvidedQueue(defaultConnectionString, name) = message |> updateMessage MessageUpdateFields.Visibility connectionString (Some newTimeout) /// Updates the visibility and the string contents of an existing message. If no timeout is provided, the update is immediately visible. - member __.UpdateMessage(messageId, contents:string, ?newTimeout, ?connectionString) = + /// Pass false to isBase64Encoded if you upgrade from 2.0 + member __.UpdateMessage(messageId, contents:string, isBase64Encoded:bool, ?newTimeout, ?connectionString) = let message = messageId |> Factory.toAzureQueueMessage - message.SetMessageContent contents + message.SetMessageContent2(contents, isBase64Encoded) message |> updateMessage (MessageUpdateFields.Visibility ||| MessageUpdateFields.Content) connectionString newTimeout /// Updates the visibility and the binary contents of an existing message. If no timeout is provided, the update is immediately visible. member __.UpdateMessage(messageId, contents:byte array, ?newTimeout, ?connectionString) = let message = messageId |> Factory.toAzureQueueMessage - message.SetMessageContent contents + message.SetMessageContent2 contents message |> updateMessage (MessageUpdateFields.Visibility ||| MessageUpdateFields.Content) connectionString newTimeout /// Clears the queue of all messages. diff --git a/src/FSharp.Azure.StorageTypeProvider/Queue/QueueMemberFactory.fs b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueMemberFactory.fs similarity index 98% rename from src/FSharp.Azure.StorageTypeProvider/Queue/QueueMemberFactory.fs rename to src/FSharp.Azure.StorageTypeProvider.Queue/QueueMemberFactory.fs index 924aa7a..8efdb03 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Queue/QueueMemberFactory.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueMemberFactory.fs @@ -2,7 +2,7 @@ open FSharp.Azure.StorageTypeProvider.Queue open FSharp.Azure.StorageTypeProvider.Queue.QueueRepository -open Microsoft.WindowsAzure.Storage.Queue +open Microsoft.Azure.Storage.Queue open ProviderImplementation.ProvidedTypes open System @@ -46,7 +46,7 @@ let createQueueMemberType connectionString (domainType:ProvidedTypeDefinition) q p) queueName, queueType -open Microsoft.WindowsAzure.Storage.RetryPolicies +open Microsoft.Azure.Storage.RetryPolicies let private doesQueueEndpointExists connectionString = async { let client = getQueueClient connectionString diff --git a/src/FSharp.Azure.StorageTypeProvider/Queue/QueueRepository.fs b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueRepository.fs similarity index 95% rename from src/FSharp.Azure.StorageTypeProvider/Queue/QueueRepository.fs rename to src/FSharp.Azure.StorageTypeProvider.Queue/QueueRepository.fs index 259a114..58354d5 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Queue/QueueRepository.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueRepository.fs @@ -1,8 +1,8 @@ module internal FSharp.Azure.StorageTypeProvider.Queue.QueueRepository open FSharp.Azure.StorageTypeProvider -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Queue +open Microsoft.Azure.Storage +open Microsoft.Azure.Storage.Queue open System let internal getQueueClient connectionString = CloudStorageAccount.Parse(connectionString).CreateCloudQueueClient() diff --git a/src/FSharp.Azure.StorageTypeProvider.Queue/QueueTypeProvider.fs b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueTypeProvider.fs new file mode 100644 index 0000000..2732617 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/QueueTypeProvider.fs @@ -0,0 +1,110 @@ +namespace ProviderImplementation + +open FSharp.Azure.StorageTypeProvider +open FSharp.Azure.StorageTypeProvider.Queue +open FSharp.Azure.StorageTypeProvider.Configuration +open Microsoft.FSharp.Core.CompilerServices +open ProviderImplementation.ProvidedTypes +open System +open System.Collections.Generic +open System.Reflection + +[] +/// [omit] +type public QueueTypeProvider(config : TypeProviderConfig) as this = + inherit TypeProviderForNamespaces(config) + + let namespaceName = "FSharp.Azure.StorageTypeProvider.Queue" + let thisAssembly = typeof.Assembly + let azureAccountType = ProvidedTypeDefinition(thisAssembly, namespaceName, "QueueTypeProvider", baseType = Some typeof) + + let buildConnectionString (args : obj []) = + let (|ConnectionString|TwoPart|DevelopmentStorage|) (args:obj []) = + let getArg i = args.[i] :?> string + let accountNameOrConnectionString, accountKey = getArg 0, getArg 1 + let configFileKey, configFileName = getArg 2, getArg 3 + + match accountNameOrConnectionString, accountKey, configFileKey with + | _ when (not << String.IsNullOrWhiteSpace) configFileKey -> + let connectionFromConfig = getConnectionString(configFileKey, config.ResolutionFolder, configFileName) + ConnectionString connectionFromConfig + | _ when accountNameOrConnectionString.StartsWith "DefaultEndpointsProtocol" -> ConnectionString accountNameOrConnectionString + | _ when [ accountNameOrConnectionString; accountKey ] |> List.exists String.IsNullOrWhiteSpace -> DevelopmentStorage + | _ -> TwoPart (accountNameOrConnectionString, accountKey) + + match args with + | DevelopmentStorage -> "UseDevelopmentStorage=true" + | ConnectionString conn -> conn + | TwoPart (name, key) -> sprintf "DefaultEndpointsProtocol=https;AccountName=%s;AccountKey=%s;" name key + + let startLiveRefresh : obj -> _ = + function + | :? int as seconds when seconds >= 1 -> + let seconds = seconds * 1000 + async { + while true do + do! Async.Sleep seconds + this.Invalidate() + } |> Async.Start + | _ -> () + + let buildTypes (typeName : string) (args : obj []) = + // Create the top level property + let typeProviderForAccount = ProvidedTypeDefinition(thisAssembly, namespaceName, typeName, baseType = Some typeof) + typeProviderForAccount.AddMember(ProvidedConstructor([], fun _ -> <@@ null @@>)) + + startLiveRefresh args.[8] + + let connectionString = buildConnectionString args + let staticBlobSchema = args.[6] :?> string |> Option.ofString + let staticTableSchema = args.[7] :?> string |> Option.ofString + let connectionStringValidation = + match staticBlobSchema, staticTableSchema with + | Some _, _ | _, Some _ -> None + | _ -> Some (validateConnectionString connectionString) + + match connectionStringValidation with + | Some (Ok ()) + | None -> + let domainTypes = ProvidedTypeDefinition("Domain", Some typeof) + typeProviderForAccount.AddMember(domainTypes) + // Now create child members e.g. containers, tables etc. + typeProviderForAccount.AddMembers + ([ (QueueMemberFactory.getQueueStorageMembers, "queues") ] + |> List.choose (fun (builder, name) -> + try builder(connectionString, domainTypes) + with ex -> failwithf "An error occurred during initial type generation for %s: %O" name ex)) + typeProviderForAccount + | Some (Error ex) -> failwithf "Unable to validate connection string (%O)" ex + + let createParam (name, defaultValue:'a, help) = + let providedParameter = ProvidedStaticParameter(name, typeof<'a>, defaultValue) + providedParameter.AddXmlDoc help + providedParameter + + // Parameterising the provider + let parameters = + [ createParam("accountName", String.Empty, "The Storage Account name, or full connection string in the format 'DefaultEndpointsProtocol=protocol;AccountName=account;AccountKey=key;'.") + createParam("accountKey", String.Empty, "The Storage Account key. Ignored if the accountName argument is the full connection string.") + createParam("connectionStringName", String.Empty, "The Connection String key from the configuration file to use to retrieve the connection string. If set, accountName and accountKey are ignored.") + createParam("configFileName", "app.config", "The name of the configuration file to look for. Defaults to 'app.config'") + createParam("schemaSize", 10, "The maximum number of rows to read per table, from which to infer schema. Defaults to 10.") + createParam("humanize", false, "Whether to humanize table column names. Defaults to false.") + createParam("blobSchema", String.Empty, "Provide a path to a local file containing a fixed schema to eagerly use, instead of lazily generating the blob schema from a live storage account.") + createParam("tableSchema", String.Empty, "Provide a path to a local file containing a fixed schema to eagerly use, instead of lazily generating the table schema from a live storage account.") + createParam("autoRefresh", 0, "Optionally provide the number of seconds to wait before refreshing the schema. Defaults to 0 (never).") ] + + let memoize func = + let cache = Dictionary() + fun argsAsString args -> + if not (cache.ContainsKey argsAsString) then + cache.Add(argsAsString, func argsAsString args) + cache.[argsAsString] + + do + azureAccountType.DefineStaticParameters(parameters, memoize buildTypes) + this.AddNamespace(namespaceName, [ azureAccountType ]) + azureAccountType.AddXmlDoc("The entry type to connect to Azure Storage assets.") + +[] +do () \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider.Queue/paket.references b/src/FSharp.Azure.StorageTypeProvider.Queue/paket.references new file mode 100644 index 0000000..a46acf9 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Queue/paket.references @@ -0,0 +1,7 @@ +Microsoft.Azure.Storage.Queue +FSharp.Core +System.Configuration.ConfigurationManager +System.Net.Http +File:ProvidedTypes.fsi +File:ProvidedTypes.fs +Taskbuilder.fs \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider.Table/FSharp.Azure.StorageTypeProvider.Table.fsproj b/src/FSharp.Azure.StorageTypeProvider.Table/FSharp.Azure.StorageTypeProvider.Table.fsproj new file mode 100644 index 0000000..0ee2e55 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Table/FSharp.Azure.StorageTypeProvider.Table.fsproj @@ -0,0 +1,41 @@ + + + + + + + netstandard2.0 + true + + + + + True + + + + True + paket-files/ProvidedTypes.fsi + + + True + paket-files/ProvidedTypes.fs + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/ProvidedTableTypes.fs b/src/FSharp.Azure.StorageTypeProvider.Table/ProvidedTableTypes.fs similarity index 98% rename from src/FSharp.Azure.StorageTypeProvider/Table/ProvidedTableTypes.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/ProvidedTableTypes.fs index 56d2f45..5a26171 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/ProvidedTableTypes.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/ProvidedTableTypes.fs @@ -2,8 +2,8 @@ open FSharp.Azure.StorageTypeProvider open FSharp.Azure.StorageTypeProvider.Table.TableRepository -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Cosmos +open Microsoft.Azure.Cosmos.Table open System open System.Reflection diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/SharedTableTypes.fs b/src/FSharp.Azure.StorageTypeProvider.Table/SharedTableTypes.fs similarity index 97% rename from src/FSharp.Azure.StorageTypeProvider/Table/SharedTableTypes.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/SharedTableTypes.fs index 71d1db7..e447c35 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/SharedTableTypes.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/SharedTableTypes.fs @@ -1,6 +1,6 @@ namespace FSharp.Azure.StorageTypeProvider.Table -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Cosmos.Table open System /// The different types of insertion mechanism to use. diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/StaticSchema.fs b/src/FSharp.Azure.StorageTypeProvider.Table/StaticSchema.fs similarity index 97% rename from src/FSharp.Azure.StorageTypeProvider/Table/StaticSchema.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/StaticSchema.fs index 870ef48..c3a33e4 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/StaticSchema.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/StaticSchema.fs @@ -5,7 +5,7 @@ open Newtonsoft.Json.Linq open System.IO module internal Parsed = - open Microsoft.WindowsAzure.Storage.Table + open Microsoft.Azure.Cosmos.Table let parseEdmType (value:string) = match value.ToLower() with | "binary" -> EdmType.Binary diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/TableEntityMemberFactory.fs b/src/FSharp.Azure.StorageTypeProvider.Table/TableEntityMemberFactory.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Table/TableEntityMemberFactory.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/TableEntityMemberFactory.fs index a5acc8b..24ce621 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/TableEntityMemberFactory.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/TableEntityMemberFactory.fs @@ -3,7 +3,7 @@ module internal FSharp.Azure.StorageTypeProvider.Table.TableEntityMemberFactory open FSharp.Azure.StorageTypeProvider.Table.TableRepository open Microsoft.FSharp.Quotations -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Cosmos.Table open ProviderImplementation.ProvidedTypes open System open System.Text diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/TableMemberFactory.fs b/src/FSharp.Azure.StorageTypeProvider.Table/TableMemberFactory.fs similarity index 98% rename from src/FSharp.Azure.StorageTypeProvider/Table/TableMemberFactory.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/TableMemberFactory.fs index 2d65c4f..018fef5 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/TableMemberFactory.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/TableMemberFactory.fs @@ -2,8 +2,8 @@ open FSharp.Azure.StorageTypeProvider.Table open FSharp.Azure.StorageTypeProvider.Table.TableRepository -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Storage +open Microsoft.Azure.Cosmos.Table open ProviderImplementation.ProvidedTypes let (|StorageExn|_|) (ex:exn) = diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/TableQueryBuilder.fs b/src/FSharp.Azure.StorageTypeProvider.Table/TableQueryBuilder.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Table/TableQueryBuilder.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/TableQueryBuilder.fs index 10fb728..ddb6d96 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/TableQueryBuilder.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/TableQueryBuilder.fs @@ -3,7 +3,7 @@ open FSharp.Azure.StorageTypeProvider.Table.TableRepository open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Quotations -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Cosmos.Table open ProviderImplementation.ProvidedTypes open System open System.Reflection diff --git a/src/FSharp.Azure.StorageTypeProvider/Table/TableRepository.fs b/src/FSharp.Azure.StorageTypeProvider.Table/TableRepository.fs similarity index 99% rename from src/FSharp.Azure.StorageTypeProvider/Table/TableRepository.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/TableRepository.fs index de8dfd1..287c76a 100644 --- a/src/FSharp.Azure.StorageTypeProvider/Table/TableRepository.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/TableRepository.fs @@ -4,8 +4,8 @@ module FSharp.Azure.StorageTypeProvider.Table.TableRepository open FSharp.Azure.StorageTypeProvider.Table open FSharp.Azure.StorageTypeProvider -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Table +open Microsoft.Azure.Storage +open Microsoft.Azure.Cosmos.Table open System /// Suggests batch sizes based on a given entity type and published EDM property type sizes (source: https://msdn.microsoft.com/en-us/library/dd179338.aspx) diff --git a/src/FSharp.Azure.StorageTypeProvider/AzureTypeProvider.fs b/src/FSharp.Azure.StorageTypeProvider.Table/TableTypeProvider.fs similarity index 83% rename from src/FSharp.Azure.StorageTypeProvider/AzureTypeProvider.fs rename to src/FSharp.Azure.StorageTypeProvider.Table/TableTypeProvider.fs index 746fd75..702910b 100644 --- a/src/FSharp.Azure.StorageTypeProvider/AzureTypeProvider.fs +++ b/src/FSharp.Azure.StorageTypeProvider.Table/TableTypeProvider.fs @@ -1,8 +1,6 @@ namespace ProviderImplementation open FSharp.Azure.StorageTypeProvider -open FSharp.Azure.StorageTypeProvider.Blob -open FSharp.Azure.StorageTypeProvider.Queue open FSharp.Azure.StorageTypeProvider.Table open FSharp.Azure.StorageTypeProvider.Configuration open Microsoft.FSharp.Core.CompilerServices @@ -13,12 +11,12 @@ open System.Reflection [] /// [omit] -type public AzureTypeProvider(config : TypeProviderConfig) as this = +type public TableTypeProvider(config : TypeProviderConfig) as this = inherit TypeProviderForNamespaces(config) - let namespaceName = "FSharp.Azure.StorageTypeProvider" - let thisAssembly = Assembly.GetExecutingAssembly() - let azureAccountType = ProvidedTypeDefinition(thisAssembly, namespaceName, "AzureTypeProvider", baseType = Some typeof) + let namespaceName = "FSharp.Azure.StorageTypeProvider.Table" + let thisAssembly = typeof.Assembly + let azureAccountType = ProvidedTypeDefinition(thisAssembly, namespaceName, "TableTypeProvider", baseType = Some typeof) let buildConnectionString (args : obj []) = let (|ConnectionString|TwoPart|DevelopmentStorage|) (args:obj []) = @@ -65,12 +63,11 @@ type public AzureTypeProvider(config : TypeProviderConfig) as this = | Some _, _ | _, Some _ -> None | _ -> Some (validateConnectionString connectionString) - let parsedBlobSchema = Blob.StaticSchema.createSchema config.ResolutionFolder staticBlobSchema let parsedTableSchema = Table.StaticSchema.createSchema config.ResolutionFolder staticTableSchema - match connectionStringValidation, parsedBlobSchema, parsedTableSchema with - | Some (Ok ()), Ok blobSchema, Ok tableSchema - | None, Ok blobSchema, Ok tableSchema -> + match connectionStringValidation, parsedTableSchema with + | Some (Ok ()), Ok tableSchema + | None, Ok tableSchema -> let domainTypes = ProvidedTypeDefinition("Domain", Some typeof) typeProviderForAccount.AddMember(domainTypes) @@ -79,16 +76,13 @@ type public AzureTypeProvider(config : TypeProviderConfig) as this = // Now create child members e.g. containers, tables etc. typeProviderForAccount.AddMembers - ([ (BlobMemberFactory.getBlobStorageMembers blobSchema, "blobs") - (TableMemberFactory.getTableStorageMembers tableSchema schemaInferenceRowCount humanizeColumns, "tables") - (QueueMemberFactory.getQueueStorageMembers, "queues") ] + ([ (TableMemberFactory.getTableStorageMembers tableSchema schemaInferenceRowCount humanizeColumns, "tables") ] |> List.choose (fun (builder, name) -> try builder(connectionString, domainTypes) with ex -> failwithf "An error occurred during initial type generation for %s: %O" name ex)) typeProviderForAccount - | Some (Error ex), _, _ -> failwithf "Unable to validate connection string (%O)" ex - | _, Error ex, _ -> failwithf "Unable to parse blob schema file (%O)" ex - | _, _, Error ex -> failwithf "Unable to parse table schema file (%O)" ex + | Some (Error ex), _ -> failwithf "Unable to validate connection string (%O)" ex + | _, Error ex -> failwithf "Unable to parse table schema file (%O)" ex let createParam (name, defaultValue:'a, help) = let providedParameter = ProvidedStaticParameter(name, typeof<'a>, defaultValue) diff --git a/src/FSharp.Azure.StorageTypeProvider.Table/paket.references b/src/FSharp.Azure.StorageTypeProvider.Table/paket.references new file mode 100644 index 0000000..458f206 --- /dev/null +++ b/src/FSharp.Azure.StorageTypeProvider.Table/paket.references @@ -0,0 +1,7 @@ +Microsoft.Azure.Cosmos.Table +FSharp.Core +System.Configuration.ConfigurationManager +System.Net.Http +File:ProvidedTypes.fsi +File:ProvidedTypes.fs +Taskbuilder.fs \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/AssemblyInfo.fs b/src/FSharp.Azure.StorageTypeProvider/AssemblyInfo.fs deleted file mode 100644 index 406d4d3..0000000 --- a/src/FSharp.Azure.StorageTypeProvider/AssemblyInfo.fs +++ /dev/null @@ -1,17 +0,0 @@ -// Auto-Generated by FAKE; do not edit -namespace System -open System.Reflection - -[] -[] -[] -[] -[] -do () - -module internal AssemblyVersionInformation = - let [] AssemblyTitle = "FSharp.Azure.StorageTypeProvider" - let [] AssemblyProduct = "FSharp.Azure.StorageTypeProvider" - let [] AssemblyDescription = "Allows easy access to Azure Storage assets through F# scripts." - let [] AssemblyVersion = "2.0.1" - let [] AssemblyFileVersion = "2.0.1" diff --git a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepositoryAsync.fs b/src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepositoryAsync.fs deleted file mode 100644 index 4d32826..0000000 --- a/src/FSharp.Azure.StorageTypeProvider/Blob/BlobRepositoryAsync.fs +++ /dev/null @@ -1,123 +0,0 @@ -///Contains reusable helper functions for accessing blobs -module internal FSharp.Azure.StorageTypeProvider.Blob.BlobRepositoryAsync - -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Blob -open System -open System.IO -open FSharp.Control.Tasks.ContextInsensitive -open System.Threading.Tasks - -type ContainerItem = - | Folder of path : string * name : string * contents : ContainerItem array Lazy - | Blob of path : string * name : string * blobType : BlobType * length : int64 option - -type LightweightContainer = - { Name : string - Contents : ContainerItem seq Lazy } - -let getBlobClient connection = CloudStorageAccount.Parse(connection).CreateCloudBlobClient() -let getContainerRef(connection, container) = (getBlobClient connection).GetContainerReference(container) -let getBlockBlobRef (connection, container, file) = getContainerRef(connection, container).GetBlockBlobReference(file) -let getPageBlobRef (connection, container, file) = getContainerRef(connection, container).GetPageBlobReference(file) - -let private getItemName (item : string) (parent : CloudBlobDirectory) = - item, - match parent with - | null -> item - | parent -> item.Substring(parent.Prefix.Length) - -let rec private getContainerStructure wildcard (container : CloudBlobContainer) = task { - let rec getResults token = task { - let! blobsSeqmented = container.ListBlobsSegmentedAsync(prefix = wildcard, currentToken = token) - let token = blobsSeqmented.ContinuationToken - let result = blobsSeqmented.Results |> Seq.toList - if isNull token then - return result - else - let! others = getResults token - return result @ others } - let! results = getResults null - let containerStructur = - results - |> Seq.distinctBy (fun b -> b.Uri.AbsoluteUri) - |> Seq.choose (function - | :? CloudBlobDirectory as directory -> - let path, name = getItemName directory.Prefix directory.Parent - Some(Folder(path, name, lazy(container |> getContainerStructure directory.Prefix))) - | :? ICloudBlob as blob -> - let path, name = getItemName blob.Name blob.Parent - Some(Blob(path, name, blob.BlobType, Some blob.Properties.Length)) - | _ -> None) - |> Seq.toArray - return containerStructur -} -let listBlobs incSubDirs (container:CloudBlobContainer) prefix = - container.ListBlobsSegmentedAsync(prefix = prefix, useFlatBlobListing = incSubDirs, blobListingDetails = BlobListingDetails.All, maxResults = Nullable(), currentToken = null, options = BlobRequestOptions(), operationContext = null).Result - |> fun s -> s.Results - |> Seq.choose(function - | :? ICloudBlob as blob -> - let path, name = getItemName blob.Name blob.Parent - Some(Blob(path, name, blob.Properties.BlobType, Some blob.Properties.Length)) - | _ -> None) //can safely ignore folder types as we have a flat structure if & only if we want to include items from sub directories - -// let getBlobStorageAccountManifest connection = task { -// let rec getResults token = task { -// let! containerResultSeqment = (getBlobClient connection).ListContainersSegmentedAsync(currentToken = token) -// let token = containerResultSeqment.ContinuationToken -// let result = containerResultSeqment.Results |> Seq.toList -// if isNull token then -// return result -// else -// let! others = getResults token -// return result @ others } -// let! results = getResults null -// let blobStorageAccountManifest = task { -// let blobContainerList = results |> Seq.toList -// let manifestList = -// blobContainerList -// |> List.map (fun blobContainer -> -// let! content = getContainerStructure null blobContainer -// { Name = blobContainer.Name -// Contents = -// lazy -// content |> Seq.cache}) -// return manifestList -// } -// let! results = blobStorageAccountManifest -// } - -let getBlobStorageAccountManifest connection = - (getBlobClient connection).ListContainersSegmentedAsync(null).Result - |> fun s -> s.Results - |> Seq.toList - |> List.map (fun container -> - { Name = container.Name - Contents = - lazy - let! stuctur = - container - |> getContainerStructure null - stuctur - |> Seq.cache }) -let downloadFolder (connectionDetails, path) = - let downloadFile (blobRef:ICloudBlob) destination = - let targetDirectory = Path.GetDirectoryName(destination) - if not (Directory.Exists targetDirectory) then Directory.CreateDirectory targetDirectory |> ignore - blobRef.DownloadToFileAsync(destination, FileMode.Create) |> Async.AwaitTask - - let connection, container, folderPath = connectionDetails - let containerRef = (getBlobClient connection).GetContainerReference(container) - containerRef.ListBlobsSegmentedAsync(prefix = folderPath, useFlatBlobListing = true, blobListingDetails = BlobListingDetails.All, maxResults = Nullable(), currentToken = null, options = BlobRequestOptions(), operationContext = null).Result - |> fun s -> s.Results - |> Seq.choose (function - | :? ICloudBlob as b -> Some b - | _ -> None) - |> Seq.map (fun blob -> - let targetName = - match folderPath with - | folderPath when String.IsNullOrEmpty folderPath -> blob.Name - | _ -> blob.Name.Replace(folderPath, String.Empty) - downloadFile blob (Path.Combine(path, targetName))) - |> Async.Parallel - |> Async.Ignore \ No newline at end of file diff --git a/src/FSharp.Azure.StorageTypeProvider/FSharp.Azure.StorageTypeProvider.fsproj b/src/FSharp.Azure.StorageTypeProvider/FSharp.Azure.StorageTypeProvider.fsproj deleted file mode 100644 index 1c55915..0000000 --- a/src/FSharp.Azure.StorageTypeProvider/FSharp.Azure.StorageTypeProvider.fsproj +++ /dev/null @@ -1,45 +0,0 @@ - - - - FSharp.Azure.StorageTypeProvider - FSharp.Azure.StorageTypeProvider - FSharp.Azure.StorageTypeProvider - netstandard2.0 - true - ..\..\bin\ - ..\..\bin\FSharp.Azure.StorageTypeProvider.XML - true - false - - - - - True - paket-files/ProvidedTypes.fsi - - - True - paket-files/ProvidedTypes.fs - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/IntegrationTests/BlobUnitTests.fs b/tests/IntegrationTests/BlobUnitTests.fs index f89d042..b38b61d 100644 --- a/tests/IntegrationTests/BlobUnitTests.fs +++ b/tests/IntegrationTests/BlobUnitTests.fs @@ -3,14 +3,14 @@ open Expecto open FSharp.Azure.StorageTypeProvider open FSharp.Azure.StorageTypeProvider.Blob -open Microsoft.WindowsAzure.Storage.Blob +open Microsoft.Azure.Storage.Blob open System open System.Linq open System.IO open FSharp.Control.Tasks.ContextInsensitive -type Local = AzureTypeProvider<"UseDevelopmentStorage=true", ""> -type BlobSchema = AzureTypeProvider +type Local = BlobTypeProvider<"UseDevelopmentStorage=true", ""> +type BlobSchema = BlobTypeProvider let container = Local.Containers.samples diff --git a/tests/IntegrationTests/IntegrationTests.fsproj b/tests/IntegrationTests/IntegrationTests.fsproj index 26d9260..d0c2852 100644 --- a/tests/IntegrationTests/IntegrationTests.fsproj +++ b/tests/IntegrationTests/IntegrationTests.fsproj @@ -24,8 +24,17 @@ - - ..\..\bin\netstandard2.0\publish\FSharp.Azure.StorageTypeProvider.dll + + ..\..\src\FSharp.Azure.StorageTypeProvider.Blob\bin\Debug\netstandard2.0\FSharp.Azure.StorageTypeProvider.Blob.dll + + + ..\..\src\FSharp.Azure.StorageTypeProvider.Common\bin\Debug\netstandard2.0\FSharp.Azure.StorageTypeProvider.Common.dll + + + ..\..\src\FSharp.Azure.StorageTypeProvider.Queue\bin\Debug\netstandard2.0\FSharp.Azure.StorageTypeProvider.Queue.dll + + + ..\..\src\FSharp.Azure.StorageTypeProvider.Table\bin\Debug\netstandard2.0\FSharp.Azure.StorageTypeProvider.Table.dll diff --git a/tests/IntegrationTests/QueueHelpers.fs b/tests/IntegrationTests/QueueHelpers.fs index d3820c7..c6f4c76 100644 --- a/tests/IntegrationTests/QueueHelpers.fs +++ b/tests/IntegrationTests/QueueHelpers.fs @@ -1,7 +1,7 @@ module FSharp.Azure.StorageTypeProvider.QueueHelpers -open Microsoft.WindowsAzure.Storage -open Microsoft.WindowsAzure.Storage.Queue +open Microsoft.Azure.Storage +open Microsoft.Azure.Storage.Queue let private queueClient = CloudStorageAccount.DevelopmentStorageAccount.CreateCloudQueueClient() diff --git a/tests/IntegrationTests/paket.references b/tests/IntegrationTests/paket.references index 738757b..ecb3267 100644 --- a/tests/IntegrationTests/paket.references +++ b/tests/IntegrationTests/paket.references @@ -1,7 +1,9 @@ Unquote -WindowsAzure.Storage +Microsoft.Azure.Storage.Common +Microsoft.Azure.Storage.Blob +Microsoft.Azure.Storage.Queue +Microsoft.Azure.Cosmos.Table Expecto -FSharp.Compiler.Tools Newtonsoft.Json Microsoft.NET.Test.Sdk Taskbuilder.fs \ No newline at end of file