diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..97a7a04
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,26 @@
+# EditorConfig is awesome:
+http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# Default settings:
+# A newline ending every file
+# Use 4 spaces as indentation
+[*]
+insert_final_newline = true
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.{fs,fsi,fsx,config}]
+charset = utf-8
+trim_trailing_whitespace = true
+
+[paket.*]
+trim_trailing_whitespace = true
+indent_size = 2
+
+[*.paket.references]
+trim_trailing_whitespace = true
+indent_size = 2
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..545f417
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto eol=lf
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln merge=binary
+#*.csproj merge=binary
+#*.vbproj merge=binary
+#*.vcxproj merge=binary
+#*.vcproj merge=binary
+#*.dbproj merge=binary
+#*.fsproj merge=binary
+#*.lsproj merge=binary
+#*.wixproj merge=binary
+#*.modelproj merge=binary
+#*.sqlproj merge=binary
+#*.wwaproj merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg binary
+#*.png binary
+#*.gif binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc diff=astextplain
+#*.DOC diff=astextplain
+#*.docx diff=astextplain
+#*.DOCX diff=astextplain
+#*.dot diff=astextplain
+#*.DOT diff=astextplain
+#*.pdf diff=astextplain
+#*.PDF diff=astextplain
+#*.rtf diff=astextplain
+#*.RTF diff=astextplain
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..1253fcb
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,278 @@
+## SAFE-Stack
+.fable/
+.fake/
+.vs/
+obj/
+bin/
+packages/
+paket-files/
+node_modules/
+Client/public/js/
+release.cmd
+release.sh
+.idea/
+*.DotSettings.user
+deploy/
+dist/
+
+#
+# JetBrains
+#
+.idea
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.userosscache
+*.sln.docstates
+
+# User-specific files (MonoDevelop/Xamarin Studio)
+*.userprefs
+
+# Build results
+[Dd]ebug/
+[Dd]ebugPublic/
+[Rr]elease/
+[Rr]eleases/
+x64/
+x86/
+bld/
+[Bb]in/
+[Oo]bj/
+[Ll]og/
+
+# Visual Studio 2015 cache/options directory
+.vs/
+# Uncomment if you have tasks that create the project's static files in wwwroot
+#wwwroot/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+# NUNIT
+*.VisualState.xml
+TestResult.xml
+
+# Build Results of an ATL Project
+[Dd]ebugPS/
+[Rr]eleasePS/
+dlldata.c
+
+# DNX
+project.lock.json
+artifacts/
+
+*_i.c
+*_p.c
+*_i.h
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.svclog
+*.scc
+
+# Chutzpah Test files
+_Chutzpah*
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opendb
+*.opensdf
+*.sdf
+*.cachefile
+*.VC.db
+*.VC.VC.opendb
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+*.sap
+
+# TFS 2012 Local Workspace
+$tf/
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+*.DotSettings.user
+
+# JustCode is a .NET coding add-in
+.JustCode
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+_NCrunch_*
+.*crunch*.local.xml
+nCrunchTemp_*
+
+# MightyMoose
+*.mm.*
+AutoTest.Net/
+
+# Web workbench (sass)
+.sass-cache/
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.[Pp]ublish.xml
+*.azurePubxml
+# TODO: Comment the next line if you want to checkin your web deploy settings
+# but database connection strings (with potential passwords) will be unencrypted
+*.pubxml
+*.publishproj
+
+# Microsoft Azure Web App publish settings. Comment the next line if you want to
+# checkin your Azure Web App publish settings, but sensitive information contained
+# in these scripts will be unencrypted
+PublishScripts/
+
+# NuGet Packages
+*.nupkg
+packages/
+# The packages folder can be ignored because of Package Restore
+**/packages/*
+# except build/, which is used as an MSBuild target.
+!**/packages/build/
+# Uncomment if necessary however generally it will be regenerated when needed
+#!**/packages/repositories.config
+# NuGet v3's project.json files produces more ignoreable files
+*.nuget.props
+*.nuget.targets
+
+# Microsoft Azure Build Output
+csx/
+*.build.csdef
+
+# Microsoft Azure Emulator
+ecf/
+rcf/
+
+# Windows Store app package directories and files
+AppPackages/
+BundleArtifacts/
+Package.StoreAssociation.xml
+_pkginfo.txt
+
+# Visual Studio cache files
+# files ending in .cache can be ignored
+*.[Cc]ache
+# but keep track of directories ending in .cache
+!*.[Cc]ache/
+
+# Others
+ClientBin/
+~$*
+*~
+*.dbmdl
+*.dbproj.schemaview
+*.pfx
+*.publishsettings
+node_modules/
+orleans.codegen.cs
+
+# Since there are multiple workflows, uncomment next line to ignore bower_components
+# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
+#bower_components/
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file
+# to a newer Visual Studio version. Backup files are not needed,
+# because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+*.mdf
+*.ldf
+
+# Business Intelligence projects
+*.rdl.data
+*.bim.layout
+*.bim_*.settings
+
+# Microsoft Fakes
+FakesAssemblies/
+
+# GhostDoc plugin setting file
+*.GhostDoc.xml
+
+# Node.js Tools for Visual Studio
+.ntvs_analysis.dat
+
+# Visual Studio 6 build log
+*.plg
+
+# Visual Studio 6 workspace options file
+*.opt
+
+# Visual Studio LightSwitch build output
+**/*.HTMLClient/GeneratedArtifacts
+**/*.DesktopClient/GeneratedArtifacts
+**/*.DesktopClient/ModelManifest.xml
+**/*.Server/GeneratedArtifacts
+**/*.Server/ModelManifest.xml
+_Pvt_Extensions
+
+# Paket dependency manager
+paket-files/
+
+# FAKE - F# Make
+.fake/
+
+# JetBrains Rider
+.idea/
+*.sln.iml
+
+TestResults.xml
+
+dist/
diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
new file mode 100644
index 0000000..52f41c6
--- /dev/null
+++ b/.paket/Paket.Restore.targets
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+ true
+ $(MSBuildThisFileDirectory)
+ $(MSBuildThisFileDirectory)..\
+ $(PaketRootPath)paket-files\paket.restore.cached
+ $(PaketRootPath)paket.lock
+ classic
+ proj
+ assembly
+ native
+ /Library/Frameworks/Mono.framework/Commands/mono
+ mono
+
+
+ $(PaketRootPath)paket.bootstrapper.exe
+ $(PaketToolsPath)paket.bootstrapper.exe
+ $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\
+
+
+
+
+ $(PaketRootPath)paket.exe
+ $(PaketToolsPath)paket.exe
+ $(PaketToolsPath)paket.exe
+ $(_PaketBootStrapperExeDir)paket.exe
+ paket.exe
+
+
+ $(PaketRootPath)paket
+ $(PaketToolsPath)paket
+ $(PaketToolsPath)paket
+
+
+ $(PaketRootPath)paket.exe
+ $(PaketToolsPath)paket.exe
+
+
+ $(PaketBootStrapperExeDir)paket.exe
+
+
+ paket
+
+
+ <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))
+ dotnet "$(PaketExePath)"
+ $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
+ "$(PaketExePath)"
+
+
+ "$(PaketBootStrapperExePath)"
+ $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"
+
+
+
+
+ true
+ true
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+ true
+ $(NoWarn);NU1603;NU1604;NU1605;NU1608
+
+
+
+
+ /usr/bin/shasum "$(PaketRestoreCacheFile)" | /usr/bin/awk '{ print $1 }'
+ /usr/bin/shasum "$(PaketLockFilePath)" | /usr/bin/awk '{ print $1 }'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))
+ $([System.IO.File]::ReadAllText('$(PaketLockFilePath)'))
+ true
+ false
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached
+
+ $(MSBuildProjectFullPath).paket.references
+
+ $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references
+
+ $(MSBuildProjectDirectory)\paket.references
+
+ false
+ true
+ true
+ references-file-or-cache-not-found
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)'))
+ $([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)'))
+ references-file
+ false
+
+
+
+
+ false
+
+
+
+
+ true
+ target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths)
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])
+
+
+ %(PaketReferencesFileLinesInfo.PackageVersion)
+ All
+ runtime
+ runtime
+ true
+ true
+
+
+
+
+ $(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1])
+
+
+ %(PaketCliToolFileLinesInfo.PackageVersion)
+
+
+
+
+
+
+
+
+
+ false
+ $(MSBuildVersion)
+ 15.8.0
+
+
+
+
+
+ <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
+
+
+
+
+
+ $(MSBuildProjectDirectory)/$(MSBuildProjectFile)
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ $(BaseIntermediateOutputPath)$(Configuration)
+ $(BaseIntermediateOutputPath)
+
+
+
+ <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/.paket/paket.exe b/.paket/paket.exe
new file mode 100644
index 0000000..0f9368e
Binary files /dev/null and b/.paket/paket.exe differ
diff --git a/.paket/paket.exe.config b/.paket/paket.exe.config
new file mode 100644
index 0000000..2fc733f
--- /dev/null
+++ b/.paket/paket.exe.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.paket/paket.exe.orig b/.paket/paket.exe.orig
new file mode 100644
index 0000000..a35769a
Binary files /dev/null and b/.paket/paket.exe.orig differ
diff --git a/.paket/paket.targets b/.paket/paket.targets
new file mode 100644
index 0000000..4cd3070
--- /dev/null
+++ b/.paket/paket.targets
@@ -0,0 +1,57 @@
+
+
+
+
+
+ true
+ $(MSBuildThisFileDirectory)
+ $(MSBuildThisFileDirectory)..\
+ /Library/Frameworks/Mono.framework/Commands/mono
+ mono
+
+
+
+
+ $(PaketRootPath)paket.exe
+ $(PaketToolsPath)paket.exe
+ "$(PaketExePath)"
+
+
+
+
+
+ $(MSBuildProjectFullPath).paket.references
+
+
+
+
+ $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references
+
+
+
+
+ $(MSBuildProjectDirectory)\paket.references
+
+
+
+
+
+
+
+
+
+
+
+ $(PaketCommand) restore --references-files "$(PaketReferences)"
+
+ RestorePackages; $(BuildDependsOn);
+
+
+
+
+
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000..fe4117f
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2019 Grant Neale
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b3d8c86
--- /dev/null
+++ b/README.md
@@ -0,0 +1,59 @@
+# Fable.Import.GoogleCloud
+
+Fable bindings for the [@google-cloud/storage](https://www.npmjs.com/package/@google-cloud/storage)
+and [@google-cloud/common](https://www.npmjs.com/package/@google-cloud/common) npm packages.
+
+Currently this package also include bindings for these node.js modules, which are required as transitive dependencies:
+
+* caseless
+* duplexify
+* form-data
+* request
+* tough-cookie
+
+These should eventually be split out into separate packages.
+
+### Nuget Packages
+
+Stable | Prerelease
+--- | ---
+[](https://www.nuget.org/packages/Fable.Import.GoogleCloud/) | [](https://www.nuget.org/packages/Fable.Import.GoogleCloud/)
+
+
+## Example
+
+TODO
+
+## Development
+
+### Building
+
+Make sure the following **requirements** are installed in your system:
+
+* [dotnet SDK](https://www.microsoft.com/net/download/core) 2.0 or higher
+* [node.js](https://nodejs.org) 6.11 or higher
+* [yarn](https://yarnpkg.com)
+* [Mono](http://www.mono-project.com/) if you're on Linux or macOS.
+
+Then you just need to type `./build.cmd` or `./build.sh`
+
+### Release
+
+In order to push the package to [nuget.org](https://nuget.org) you need to add your API keys to `NUGET_KEY` environmental variable.
+You can create a key [here](https://www.nuget.org/account/ApiKeys).
+
+- Update RELEASE_NOTES with a new version, data and release notes [ReleaseNotesHelper](http://fake.build/apidocs/fake-releasenoteshelper.html).
+Ex:
+
+```
+#### 0.2.0 - 30.04.2017
+* FEATURE: Does cool stuff!
+* BUGFIX: Fixes that silly oversight
+```
+
+- You can then use the Release target. This will:
+ - make a commit bumping the version: Bump version to 0.2.0
+ - publish the package to nuget
+ - push a git tag
+
+`./build.sh Release`
diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
new file mode 100644
index 0000000..48537f4
--- /dev/null
+++ b/RELEASE_NOTES.md
@@ -0,0 +1,2 @@
+#### 0.1.0
+* Initial release
diff --git a/build.cmd b/build.cmd
new file mode 100644
index 0000000..07d872e
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,9 @@
+@echo off
+cls
+
+.paket\paket.exe restore
+if errorlevel 1 (
+ exit /b %errorlevel%
+)
+
+packages\build\FAKE\tools\FAKE.exe build.fsx %* || exit /b 1
diff --git a/build.fsx b/build.fsx
new file mode 100644
index 0000000..1f1847a
--- /dev/null
+++ b/build.fsx
@@ -0,0 +1,212 @@
+#r @"packages/build/FAKE/tools/FakeLib.dll"
+open Fake
+open Fake.Git
+open Fake.AssemblyInfoFile
+open Fake.ReleaseNotesHelper
+open Fake.UserInputHelper
+open Fake.YarnHelper
+open System
+open System.IO
+open System.Text.RegularExpressions
+
+#if MONO
+// prevent incorrect output encoding (e.g. https://github.com/fsharp/FAKE/issues/1196)
+System.Console.OutputEncoding <- System.Text.Encoding.UTF8
+#endif
+
+let dotnetcliVersion = "2.0.0"
+
+let mutable dotnetExePath = "dotnet"
+
+let release = LoadReleaseNotes "RELEASE_NOTES.md"
+let srcGlob = "src/**/*.fsproj"
+let testsGlob = "tests/**/*.fsproj"
+
+module Util =
+
+ let visitFile (visitor: string->string) (fileName : string) =
+ File.ReadAllLines(fileName)
+ |> Array.map (visitor)
+ |> fun lines -> File.WriteAllLines(fileName, lines)
+
+ let replaceLines (replacer: string->Match->string option) (reg: Regex) (fileName: string) =
+ fileName |> visitFile (fun line ->
+ let m = reg.Match(line)
+ if not m.Success
+ then line
+ else
+ match replacer line m with
+ | None -> line
+ | Some newLine -> newLine)
+
+// Module to print colored message in the console
+module Logger =
+ let consoleColor (fc : ConsoleColor) =
+ let current = Console.ForegroundColor
+ Console.ForegroundColor <- fc
+ { new IDisposable with
+ member x.Dispose() = Console.ForegroundColor <- current }
+
+ let warn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.DarkYellow in printf "%s" s) str
+ let warnfn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.DarkYellow in printfn "%s" s) str
+ let error str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.Red in printf "%s" s) str
+ let errorfn str = Printf.kprintf (fun s -> use c = consoleColor ConsoleColor.Red in printfn "%s" s) str
+
+
+Target "Clean" (fun _ ->
+ ["bin"]
+ |> CleanDirs
+
+ !! srcGlob
+ |> Seq.collect(fun p ->
+ ["bin";"obj"]
+ |> Seq.map(fun sp ->
+ Path.GetDirectoryName p @@ sp)
+ )
+ |> CleanDirs
+
+ )
+
+Target "InstallDotNetCore" (fun _ ->
+ dotnetExePath <- DotNetCli.InstallDotNetSDK dotnetcliVersion
+)
+
+Target "YarnInstall"(fun _ ->
+ Yarn (fun p ->
+ { p with
+ Command = Install Standard
+ })
+)
+
+Target "DotnetRestore" (fun _ ->
+ !! srcGlob
+ ++ testsGlob
+ |> Seq.iter (fun proj ->
+ DotNetCli.Restore (fun c ->
+ { c with
+ Project = proj
+ ToolPath = dotnetExePath
+ //This makes sure that Proj2 references the correct version of Proj1
+ AdditionalArgs = [sprintf "/p:PackageVersion=%s" release.NugetVersion]
+ })
+))
+
+Target "DotnetBuild" (fun _ ->
+ !! srcGlob
+ |> Seq.iter (fun proj ->
+ DotNetCli.Build (fun c ->
+ { c with
+ Project = proj
+ ToolPath = dotnetExePath
+ })
+))
+
+
+let fableWebpack workingDir =
+ DotNetCli.RunCommand(fun c ->
+ { c with WorkingDir = workingDir
+ ToolPath = dotnetExePath }
+ ) "fable webpack --port free"
+
+let mocha args =
+ Yarn(fun yarnParams ->
+ { yarnParams with Command = args |> sprintf "run mocha -- %s" |> YarnCommand.Custom }
+ )
+
+Target "MochaTest" (fun _ ->
+ !! testsGlob
+ |> Seq.iter(fun proj ->
+ let projDir = proj |> DirectoryName
+ //Compile to JS
+ fableWebpack projDir
+
+ //Run mocha tests
+ let projDirOutput = projDir > "bin"
+ mocha projDirOutput
+ )
+
+)
+
+Target "DotnetPack" (fun _ ->
+ !! srcGlob
+ |> Seq.iter (fun proj ->
+ DotNetCli.Pack (fun c ->
+ { c with
+ Project = proj
+ Configuration = "Release"
+ ToolPath = dotnetExePath
+ AdditionalArgs =
+ [
+ sprintf "/p:PackageVersion=%s" release.NugetVersion
+ sprintf "/p:PackageReleaseNotes=\"%s\"" (String.Join("\n",release.Notes))
+ ]
+ })
+ )
+)
+
+let needsPublishing (versionRegex: Regex) (releaseNotes: ReleaseNotes) projFile =
+ printfn "Project: %s" projFile
+ if releaseNotes.NugetVersion.ToUpper().EndsWith("NEXT")
+ then
+ Logger.warnfn "Version in Release Notes ends with NEXT, don't publish yet."
+ false
+ else
+ File.ReadLines(projFile)
+ |> Seq.tryPick (fun line ->
+ let m = versionRegex.Match(line)
+ if m.Success then Some m else None)
+ |> function
+ | None -> failwith "Couldn't find version in project file"
+ | Some m ->
+ let sameVersion = m.Groups.[1].Value = releaseNotes.NugetVersion
+ if sameVersion then
+ Logger.warnfn "Already version %s, no need to publish." releaseNotes.NugetVersion
+ not sameVersion
+
+Target "Publish" (fun _ ->
+ let versionRegex = Regex("(.*?)", RegexOptions.IgnoreCase)
+ !! srcGlob
+ |> Seq.filter(needsPublishing versionRegex release)
+ |> Seq.iter(fun projFile ->
+ let projDir = Path.GetDirectoryName(projFile)
+ let nugetKey =
+ match environVarOrNone "NUGET_KEY" with
+ | Some nugetKey -> nugetKey
+ | None -> failwith "The Nuget API key must be set in a NUGET_KEY environmental variable"
+ Directory.GetFiles(projDir > "bin" > "Release", "*.nupkg")
+ |> Array.find (fun nupkg -> nupkg.Contains(release.NugetVersion))
+ |> (fun nupkg ->
+ (Path.GetFullPath nupkg, nugetKey)
+ ||> sprintf "nuget push \"%s\" -s nuget.org -k %s"
+ |> DotNetCli.RunCommand (fun c ->
+ { c with ToolPath = dotnetExePath }))
+
+ // After successful publishing, update the project file
+ (versionRegex, projFile) ||> Util.replaceLines (fun line _ ->
+ versionRegex.Replace(line, "" + release.NugetVersion + "") |> Some)
+ )
+)
+
+Target "Release" (fun _ ->
+
+ if Git.Information.getBranchName "" <> "master" then failwith "Not on master"
+
+ StageAll ""
+ Git.Commit.Commit "" (sprintf "Bump version to %s" release.NugetVersion)
+ Branches.push ""
+
+ Branches.tag "" release.NugetVersion
+ Branches.pushTag "" "origin" release.NugetVersion
+)
+
+"Clean"
+// ==> "InstallDotNetCore"
+ ==> "YarnInstall"
+ ==> "DotnetRestore"
+ ==> "DotnetBuild"
+ ==> "MochaTest"
+ ==> "DotnetPack"
+ ==> "Publish"
+ ==> "Release"
+
+RunTargetOrDefault "DotnetPack"
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..6264bb2
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,50 @@
+#!/usr/bin/env bash
+
+set -eu
+
+cd "$(dirname "$0")"
+
+PAKET_BOOTSTRAPPER_EXE=.paket/paket.exe
+PAKET_EXE=.paket/paket.exe
+FAKE_EXE=packages/build/FAKE/tools/FAKE.exe
+
+FSIARGS=""
+FSIARGS2=""
+OS=${OS:-"unknown"}
+
+echo $OSTYPE
+if [ "$OS" != "Windows_NT" ]
+then
+ # Can't use FSIARGS="--fsiargs -d:MONO" in zsh, so split it up
+ # (Can't use arrays since dash can't handle them)
+ FSIARGS="--fsiargs"
+ FSIARGS2="-d:MONO"
+
+ # Allows NETFramework like net45 to be built using dotnet core tooling with mono
+ export FrameworkPathOverride=$(dirname $(which mono))/../lib/mono/4.5/
+
+fi
+
+run() {
+ if [ "$OS" != "Windows_NT" ]
+ then
+ mono "$@"
+ else
+ "$@"
+ fi
+}
+
+
+
+run $PAKET_EXE restore
+
+[ ! -e build.fsx ] && run $PAKET_EXE update
+[ ! -e build.fsx ] && run $FAKE_EXE init.fsx
+
+# build template
+# pushd Content/
+# ./build.sh
+# ./build.sh Clean
+# popd
+
+run $FAKE_EXE "$@" $FSIARGS $FSIARGS2 build.fsx
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..ec8098e
--- /dev/null
+++ b/package.json
@@ -0,0 +1,13 @@
+{
+ "private": true,
+ "devDependencies": {
+ "babel-core": "^6.26.3",
+ "babel-loader": "^8.0.5",
+ "babel-preset-es2015": "^6.24.1",
+ "fable-loader": "^2.1.4",
+ "webpack": "^4.29.6"
+ },
+ "dependencies": {
+ "@google-cloud/storage": "^2.4.3"
+ }
+}
diff --git a/paket.dependencies b/paket.dependencies
new file mode 100644
index 0000000..bc76c53
--- /dev/null
+++ b/paket.dependencies
@@ -0,0 +1,10 @@
+source https://www.nuget.org/api/v2
+content:none
+
+nuget Fable.Core
+
+clitool dotnet-fable
+
+group Build
+ source https://www.nuget.org/api/v2
+ nuget FAKE
\ No newline at end of file
diff --git a/paket.lock b/paket.lock
new file mode 100644
index 0000000..b729ae8
--- /dev/null
+++ b/paket.lock
@@ -0,0 +1,295 @@
+CONTENT: NONE
+NUGET
+ remote: https://www.nuget.org/api/v2
+ dotnet-fable (2.0.11) - clitool: true
+ Dotnet.ProjInfo (>= 0.20) - restriction: >= netcoreapp2.0
+ FSharp.Compiler.Service (>= 25.0.1) - restriction: >= netcoreapp2.0
+ FSharp.Core (>= 4.5.2) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.App (>= 2.0) - restriction: >= netcoreapp2.0
+ Newtonsoft.Json (>= 11.0.2) - restriction: >= netcoreapp2.0
+ Dotnet.ProjInfo (0.33) - restriction: >= netcoreapp2.0
+ FSharp.Core (>= 4.5.2) - restriction: || (>= net461) (>= netstandard2.0)
+ System.ValueTuple (>= 4.4) - restriction: || (>= net461) (>= netstandard2.0)
+ Fable.Core (2.0.3)
+ FSharp.Core (>= 4.5.2) - restriction: >= netstandard2.0
+ FSharp.Compiler.Service (27.0.1) - restriction: >= netcoreapp2.0
+ FSharp.Core (>= 4.5.2) - restriction: || (>= net45) (>= netstandard2.0)
+ System.Collections.Immutable (>= 1.5) - restriction: || (>= net45) (>= netstandard2.0)
+ System.Diagnostics.Process (>= 4.1) - restriction: && (< net45) (>= netstandard2.0)
+ System.Diagnostics.TraceSource (>= 4.0) - restriction: && (< net45) (>= netstandard2.0)
+ System.Reflection.Emit (>= 4.3) - restriction: && (< net45) (>= netstandard2.0)
+ System.Reflection.Metadata (>= 1.6) - restriction: || (>= net45) (>= netstandard2.0)
+ System.Reflection.TypeExtensions (>= 4.3) - restriction: && (< net45) (>= netstandard2.0)
+ System.Runtime.Loader (>= 4.0) - restriction: && (< net45) (>= netstandard2.0)
+ System.Security.Cryptography.Algorithms (>= 4.3) - restriction: && (< net45) (>= netstandard2.0)
+ FSharp.Core (4.6.2) - restriction: >= netstandard2.0
+ Microsoft.NETCore.App (2.2.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.DotNetHostPolicy (>= 2.2.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.Platforms (>= 2.2) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.Targets (>= 2.0) - restriction: >= netcoreapp2.2
+ NETStandard.Library (>= 2.0.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.DotNetAppHost (2.2.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.DotNetHostPolicy (2.2.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.DotNetHostResolver (>= 2.2.3)
+ Microsoft.NETCore.DotNetHostResolver (2.2.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.DotNetAppHost (>= 2.2.3)
+ Microsoft.NETCore.Platforms (2.2) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Targets (2.1) - restriction: >= netcoreapp2.0
+ Microsoft.Win32.Primitives (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.Win32.Registry (4.5) - restriction: >= netcoreapp2.0
+ System.Memory (>= 4.5) - restriction: || (&& (< net46) (< netcoreapp2.0) (>= netstandard2.0) (< xamarinios)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (>= uap10.1)
+ System.Security.AccessControl (>= 4.5) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (>= monotouch) (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ NETStandard.Library (2.0.3) - restriction: >= netcoreapp2.2
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (>= net45) (< netstandard1.3)) (&& (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.3) (< netstandard1.4) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.4) (< netstandard1.5) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.5) (< netstandard1.6) (< win8) (< wpa81)) (&& (< net45) (>= netstandard1.6) (< netstandard2.0) (< win8) (< wpa81)) (&& (< net45) (>= netstandard2.0)) (&& (>= net46) (< netstandard1.4)) (>= net461) (>= netcoreapp2.0) (&& (>= netstandard1.0) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8) (< win8)) (&& (< netstandard1.0) (< portable-net45+win8) (>= portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= portable-net45+win8+wp8+wpa81) (< portable-net45+win8+wpa81)) (&& (< netstandard1.0) (>= win8)) (&& (< netstandard1.3) (< win8) (>= wpa81)) (&& (< netstandard1.5) (>= uap10.0)) (>= uap10.1) (>= wp8)
+ Newtonsoft.Json (12.0.1) - restriction: >= netcoreapp2.0
+ runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.native.System (4.3.1) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: >= netcoreapp2.0
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1)
+ runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ 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)
+ runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3)
+ runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: >= netcoreapp2.0
+ runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: >= netcoreapp2.0
+ System.Collections (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Collections.Concurrent (4.3) - restriction: >= netcoreapp2.0
+ System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Reflection (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.3) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Threading (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.3) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ System.Collections.Immutable (1.5) - restriction: >= netcoreapp2.0
+ System.Diagnostics.Debug (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Diagnostics.Process (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.Win32.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.Win32.Registry (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ runtime.native.System (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Collections (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4))
+ System.IO.FileSystem (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO.FileSystem.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4))
+ System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4))
+ System.Runtime.InteropServices (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4))
+ System.Text.Encoding.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.Thread (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.ThreadPool (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.4) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Diagnostics.TraceSource (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ runtime.native.System (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Collections (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Diagnostics.Tracing (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ System.Globalization (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.IO (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.IO.FileSystem (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (>= net46)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Handles (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO.FileSystem.Primitives (4.3) - restriction: >= netcoreapp2.0
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Linq (4.3) - restriction: >= netcoreapp2.0
+ System.Collections (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.6) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Memory (4.5.2) - restriction: || (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (>= uap10.1))
+ System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (>= monoandroid) (< netstandard2.0)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< monoandroid) (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (>= monotouch) (&& (>= net45) (< netstandard2.0)) (&& (< net45) (< netcoreapp2.0) (>= netstandard2.0)) (>= net461) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (>= wpa81)) (>= uap10.1) (>= xamarinios) (>= xamarinmac) (>= xamarintvos) (>= xamarinwatchos)
+ System.Reflection (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Reflection.Emit (4.3) - restriction: >= netcoreapp2.0
+ System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.1) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection.Emit.ILGeneration (4.3) - restriction: >= netcoreapp2.0
+ System.Reflection (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< wp8) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< wp8) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< wp8) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection.Metadata (1.6) - restriction: >= netcoreapp2.0
+ System.Collections.Immutable (>= 1.5) - restriction: || (>= net45) (&& (< netcoreapp2.1) (>= netstandard2.0)) (&& (>= netstandard1.1) (< netstandard2.0) (< win8) (< wpa81)) (&& (< netstandard1.1) (>= portable-net45+win8+wpa81) (< win8)) (&& (< netstandard1.1) (>= win8)) (&& (< netstandard2.0) (< uap10.1) (>= wpa81))
+ System.Reflection.Primitives (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Reflection.TypeExtensions (4.5.1) - restriction: >= netcoreapp2.0
+ System.Resources.ResourceManager (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.0) (< win8) (< wp8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (4.3.1) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.2) (< win8) (< wp8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (>= monotouch) (>= netcoreapp2.0)) (&& (>= net461) (>= netcoreapp2.0)) (&& (>= netcoreapp2.0) (< netcoreapp2.1)) (&& (>= netcoreapp2.0) (< netstandard1.1)) (&& (>= netcoreapp2.0) (< netstandard2.0)) (&& (>= netcoreapp2.0) (>= uap10.1)) (&& (>= netcoreapp2.0) (>= xamarinios)) (&& (>= netcoreapp2.0) (>= xamarinmac)) (&& (>= netcoreapp2.0) (>= xamarintvos)) (&& (>= netcoreapp2.0) (>= xamarinwatchos))
+ System.Runtime.Extensions (4.3.1) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime.Handles (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.InteropServices (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ System.Reflection (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ System.Reflection.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.2) (< win8)) (&& (< monoandroid) (< net45) (>= netstandard1.2) (< netstandard1.3) (< win8) (< wpa81)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= net462) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.5) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.3) (< netstandard1.5) (< win8) (< wpa81)) (>= netcoreapp1.1) (< portable-net45+win8+wpa81)
+ System.Runtime.Loader (4.3) - restriction: >= netcoreapp2.0
+ System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net462) (>= netstandard1.5) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Reflection (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net462) (>= netstandard1.5) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net462) (>= netstandard1.5) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Numerics (4.3) - restriction: >= netcoreapp2.0
+ System.Globalization (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.1) (< netstandard1.3) (< win8) (< wpa81)) (< portable-net45+win8+wpa81)
+ System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (< portable-net45+win8+wpa81)
+ System.Security.AccessControl (4.5) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 2.0) - restriction: >= netcoreapp2.0
+ System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (< net46) (>= netstandard2.0)) (>= net461) (>= netcoreapp2.0)
+ System.Security.Cryptography.Algorithms (4.3.1) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Collections (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (&& (< monoandroid) (< netstandard1.3)) (>= net463)
+ System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (&& (< monoandroid) (< netstandard1.3)) (>= net463)
+ System.Runtime.Extensions (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ System.Runtime.Handles (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ System.Runtime.Numerics (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3)) (>= net463)
+ System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net46) (>= netstandard1.3) (< netstandard1.4)) (&& (< monoandroid) (< net46) (>= netstandard1.4) (< netstandard1.6)) (&& (< monoandroid) (< netstandard1.3)) (&& (>= net46) (< netstandard1.4)) (&& (>= net461) (< netstandard1.6)) (>= net463)
+ System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net46) (>= netstandard1.6) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< netstandard1.3))
+ System.Security.Cryptography.Encoding (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Collections (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Collections.Concurrent (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Linq (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Extensions (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Handles (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.InteropServices (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Security.Cryptography.Primitives (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Text.Encoding (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Security.Cryptography.Primitives (4.3) - restriction: >= netcoreapp2.0
+ System.Diagnostics.Debug (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Globalization (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.IO (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Resources.ResourceManager (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.Tasks (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Security.Principal.Windows (4.5.1) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 2.0) - restriction: >= netcoreapp2.0
+ System.Text.Encoding (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Text.Encoding.Extensions (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Text.Encoding (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Threading (4.3) - restriction: >= netcoreapp2.0
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Threading.Tasks (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Threading.Tasks (4.3) - restriction: >= netcoreapp2.0
+ Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Runtime (>= 4.3) - restriction: || (&& (< monoandroid) (< monotouch) (< net45) (>= netstandard1.3) (< win8) (< wpa81) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)) (&& (< monoandroid) (< net45) (>= netstandard1.0) (< netstandard1.3) (< win8) (< wp8) (< wpa81)) (< portable-net45+win8+wp8+wpa81)
+ System.Threading.Thread (4.3) - restriction: >= netcoreapp2.0
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Threading.ThreadPool (4.3) - restriction: >= netcoreapp2.0
+ System.Runtime (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.Runtime.Handles (>= 4.3) - restriction: && (< monoandroid) (< monotouch) (< net46) (>= netstandard1.3) (< xamarinios) (< xamarinmac) (< xamarintvos) (< xamarinwatchos)
+ System.ValueTuple (4.5) - restriction: >= netcoreapp2.0
+
+GROUP Build
+NUGET
+ remote: https://www.nuget.org/api/v2
+ FAKE (4.63)
diff --git a/src/Caseless/Caseless.fs b/src/Caseless/Caseless.fs
new file mode 100644
index 0000000..c5d23e9
--- /dev/null
+++ b/src/Caseless/Caseless.fs
@@ -0,0 +1,39 @@
+// ts2fable 0.0.0
+module rec Fable.Import.Caseless
+
+open Fable.Core
+
+//let [] caseless: Caseless.IExports = jsNative
+
+type [] IExports =
+ abstract caseless: ?dict: RawDict -> Caseless.Caseless
+
+type KeyType =
+ string
+
+type ValueType =
+ obj option
+
+type RawDict =
+ obj
+
+module Caseless =
+
+ type [] IExports =
+ abstract httpify: resp: obj * headers: RawDict -> Caseless
+
+ type [] Caseless =
+ abstract set: name: KeyType * value: ValueType * ?clobber: bool -> U2
+ abstract set: dict: RawDict -> unit
+ abstract has: name: KeyType -> U2
+ abstract get: name: KeyType -> ValueType option
+ abstract swap: name: KeyType -> unit
+ abstract del: name: KeyType -> bool
+
+ type [] Httpified =
+ abstract headers: RawDict with get, set
+ abstract setHeader: name: KeyType * value: ValueType * ?clobber: bool -> U2
+ abstract setHeader: dict: RawDict -> unit
+ abstract hasHeader: name: KeyType -> U2
+ abstract getHeader: name: KeyType -> ValueType option
+ abstract removeHeader: name: KeyType -> bool
diff --git a/src/Duplexify/Duplexify.fs b/src/Duplexify/Duplexify.fs
new file mode 100644
index 0000000..10cae16
--- /dev/null
+++ b/src/Duplexify/Duplexify.fs
@@ -0,0 +1,27 @@
+// ts2fable 0.0.0
+module rec Fable.Import.Duplexify
+
+open Fable.Core
+open Fable.Import.Node
+
+module Globals =
+ let [] duplexify: DuplexifyConstructor = jsNative
+
+type [] IExports =
+ abstract DuplexifyConstructor: DuplexifyConstructorStatic
+
+type [] DuplexifyConstructor =
+ [] abstract Invoke: ?writable: Stream.Writable<'a> * ?readable: Stream.Readable<'b> * ?streamOptions: Stream.DuplexOptions<'a> -> Duplexify.Duplexify<'a, 'b>
+ abstract obj: ?writable: Stream.Writable<'a> * ?readable: Stream.Readable<'b> * ?streamOptions: Stream.DuplexOptions<'a> -> Duplexify.Duplexify<'a, 'b>
+
+type [] DuplexifyConstructorStatic =
+ [] abstract Create: ?writable: Stream.Writable<'a> * ?readable: Stream.Readable<'b> * ?streamOptions: Stream.DuplexOptions<'a> -> DuplexifyConstructor
+
+module Duplexify =
+
+ type [] Duplexify<'a, 'b> =
+ inherit Stream.Duplex<'a, 'b>
+ abstract cork: unit -> unit
+ abstract uncork: unit -> unit
+ abstract setWritable: writable: Stream.Writable<'a> -> unit
+ abstract setReadable: readable: Stream.Readable<'b> -> unit
diff --git a/src/Fable.Import.GoogleCloud.fsproj b/src/Fable.Import.GoogleCloud.fsproj
new file mode 100644
index 0000000..df1244b
--- /dev/null
+++ b/src/Fable.Import.GoogleCloud.fsproj
@@ -0,0 +1,34 @@
+
+
+ 0.0.0
+ netcoreapp2.0
+ true
+
+
+ Fable bindings for the @google-cloud/storage npm package.
+ Provides fable bindings for the google-cloud/storage npm package.
+ false
+ Grant Neale
+ https://github.com/gamurs-group/fable-import-google-cloud/blob/master/LICENSE.md
+ https://github.com/gamurs-group/fable-import-google-cloud
+ F#, fsharp, fable2, fable-bindings, google-cloud, google-cloud-storage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/FormData/FormData.fs b/src/FormData/FormData.fs
new file mode 100644
index 0000000..c46b894
--- /dev/null
+++ b/src/FormData/FormData.fs
@@ -0,0 +1,40 @@
+// ts2fable 0.0.0
+module rec Fable.Import.FormData
+
+open Fable.Core
+open Fable.Import.Node
+open Fable.Import.JS
+
+//let [] formData: FormData.IExports = jsNative
+
+type [] IExports =
+ abstract FormData: FormDataStatic
+
+type [] FormData<'a> =
+ inherit Stream.Readable<'a>
+ abstract append: key: string * value: obj option * ?options: U2 -> unit
+ abstract getHeaders: unit -> FormData.Headers
+ abstract submit: ``params``: U2 * ?callback: (Error option -> Http.IncomingMessage -> unit) -> Http.ClientRequest<'a>
+ abstract getBoundary: unit -> string
+ abstract getLength: callback: (Error option -> float -> unit) -> unit
+ abstract getLengthSync: unit -> float
+ abstract hasKnownLength: unit -> bool
+
+type [] FormDataStatic =
+ [] abstract Create: unit -> FormData<'a>
+
+module FormData =
+
+ type [] Headers =
+ [] abstract Item: key: string -> obj option with get, set
+
+ type [] AppendOptions =
+ abstract header: U2 option with get, set
+ abstract knownLength: float option with get, set
+ abstract filename: string option with get, set
+ abstract filepath: string option with get, set
+ abstract contentType: string option with get, set
+
+ type [] SubmitOptions =
+ inherit Http.RequestOptions
+ abstract protocol: U2 option with get, set
diff --git a/src/GoogleCloud.Common/CommonUtil.fs b/src/GoogleCloud.Common/CommonUtil.fs
new file mode 100644
index 0000000..9ad5dbb
--- /dev/null
+++ b/src/GoogleCloud.Common/CommonUtil.fs
@@ -0,0 +1,215 @@
+namespace rec Fable.Import.GoogleCloud.Common
+
+open Fable.Core
+open Fable.Import.JS
+open Fable.Import.Duplexify
+//open Fable.Import.GoogleAuthLibrary
+
+module R = Fable.Import.Request.Request
+//type GoogleAuth = Google_auth_library.GoogleAuth
+//type GoogleAuthOptions = Google_auth_library.GoogleAuthOptions
+//type CredentialBody = Google_auth_library_build_src_auth_credentials.CredentialBody
+
+//let [] util: Util = jsNative
+
+
+type [] ParsedHttpRespMessage =
+ abstract resp: R.Response with get, set
+ abstract err: ApiError option with get, set
+
+// TODO
+//type [] MakeAuthenticatedRequest =
+// [] abstract Invoke: reqOpts: DecorateRequestOptions -> Duplexify.Duplexify<'a, 'b>
+// [] abstract Invoke: reqOpts: DecorateRequestOptions * ?options: MakeAuthenticatedRequestOptions -> U2
+// [] abstract Invoke: reqOpts: DecorateRequestOptions * ?callback: BodyResponseCallback -> U2
+// [] abstract Invoke: reqOpts: DecorateRequestOptions * ?optionsOrCallback: U2 -> U3>
+// abstract getCredentials: ((Error -> CredentialBody -> unit) -> unit) with get, set
+// abstract authClient: GoogleAuth with get, set
+
+type [] Abortable =
+ abstract abort: unit -> unit
+
+type [] AbortableDuplex =
+ interface end
+
+type [] PackageJson =
+ abstract name: string with get, set
+ abstract version: string with get, set
+
+// TODO
+//type [] MakeAuthenticatedRequestFactoryConfig =
+// inherit GoogleAuthOptions
+// /// Automatically retry requests if the response is related to rate limits or
+// /// certain intermittent server errors. We will exponentially backoff
+// /// subsequent requests by default. (default: true)
+// abstract autoRetry: bool option with get, set
+// /// If true, just return the provided request options. Default: false.
+// abstract customEndpoint: bool option with get, set
+// /// Account email address, required for PEM/P12 usage.
+// abstract email: string option with get, set
+// /// Maximum number of automatic retries attempted before returning the error.
+// /// (default: 3)
+// abstract maxRetries: float option with get, set
+// abstract stream: Duplexify.Duplexify<'a, 'b> option with get, set
+// abstract request: obj with get, set
+// /// A pre-instantiated GoogleAuth client that should be used.
+// /// A new will be created if this is not set.
+// abstract authClient: GoogleAuth option with get, set
+
+type [] MakeAuthenticatedRequestOptions =
+ abstract onAuthenticated: OnAuthenticatedCallback with get, set
+
+type [] OnAuthenticatedCallback =
+ [] abstract Invoke: err: Error option * ?reqOpts: DecorateRequestOptions -> unit
+
+type [] DecorateRequestOptions =
+ inherit R.CoreOptions
+ abstract autoPaginate: bool option with get, set
+ abstract autoPaginateVal: bool option with get, set
+ abstract objectMode: bool option with get, set
+ abstract maxRetries: float option with get, set
+ abstract uri: string with get, set
+ abstract interceptors_: ResizeArray option with get, set
+ abstract shouldReturnStream: bool option with get, set
+
+type [] Interceptor =
+ abstract request: opts: R.Options -> DecorateRequestOptions
+
+type ResponseBody =
+ obj option
+
+type [] BodyResponseCallback =
+ [] abstract Invoke: err: Error option * ?body: ResponseBody * ?res: R.Response -> unit
+
+type [] GoogleErrorBody =
+ abstract code: float with get, set
+ abstract errors: ResizeArray option with get, set
+ abstract response: R.Response with get, set
+ abstract message: string option with get, set
+
+type [] GoogleInnerError =
+ abstract reason: string option with get, set
+ abstract message: string option with get, set
+
+type [] MakeWritableStreamOptions =
+ /// A connection instance used to get a token with and send the request
+ /// through.
+ abstract connection: Util.TypeLiteral_01 option with get, set
+ /// Metadata to send at the head of the request.
+ abstract metadata: Util.TypeLiteral_02 option with get, set
+ /// Request object, in the format of a standard Node.js http.request() object.
+ abstract request: R.Options option with get, set
+ /// Dependency for HTTP calls.
+ abstract requestModule: obj with get, set
+ abstract makeAuthenticatedRequest: reqOpts: R.OptionsWithUri * fnobj: MakeWritableStreamOptionsMakeAuthenticatedRequestFnobj -> unit
+
+type [] MakeWritableStreamOptionsMakeAuthenticatedRequestFnobj =
+ abstract onAuthenticated: err: Error option * ?authenticatedReqOpts: R.Options -> unit
+
+type [] ParsedHttpResponseBody =
+ abstract body: ResponseBody with get, set
+ abstract err: Error option with get, set
+
+/// Custom error type for API errors.
+type [] ApiError =
+ inherit Error
+ abstract code: float option with get, set
+ abstract errors: ResizeArray option with get, set
+ abstract response: R.Response option with get, set
+
+/// Custom error type for API errors.
+type [] ApiErrorStatic =
+ [] abstract Create: errorMessage: string -> ApiError
+ [] abstract Create: errorBody: GoogleErrorBody -> ApiError
+
+/// Custom error type for partial errors returned from the API.
+type [] PartialFailureError =
+ inherit Error
+ abstract errors: ResizeArray option with get, set
+ abstract response: R.Response option with get, set
+
+/// Custom error type for partial errors returned from the API.
+type [] PartialFailureErrorStatic =
+ [] abstract Create: b: GoogleErrorBody -> PartialFailureError
+
+type [] MakeRequestConfig =
+ /// Automatically retry requests if the response is related to rate limits or
+ /// certain intermittent server errors. We will exponentially backoff
+ /// subsequent requests by default. (default: true)
+ abstract autoRetry: bool option with get, set
+ /// Maximum number of automatic retries attempted before returning the error.
+ /// (default: 3)
+ abstract maxRetries: float option with get, set
+ abstract retries: float option with get, set
+ abstract stream: Duplexify.Duplexify<'a, 'b> option with get, set
+ abstract request: obj option with get, set
+ abstract shouldRetryFn: (R.Response -> bool) option with get, set
+
+type [] Util =
+ abstract ApiError: obj with get, set
+ abstract PartialFailureError: obj with get, set
+ /// No op.
+ abstract noop: unit -> unit
+ /// Uniformly process an API response.
+ /// - Error value.
+ /// - Response value.
+ /// - Body value.
+ /// - The callback function.
+ abstract handleResp: err: Error option * ?resp: R.Response * ?body: ResponseBody * ?callback: BodyResponseCallback -> unit
+ /// Sniff an incoming HTTP response message for errors.
+ /// - An incoming HTTP response message from `request`.
+ abstract parseHttpRespMessage: httpRespMessage: R.Response -> ParsedHttpRespMessage
+ /// Parse the response body from an HTTP request.
+ /// - The response body.
+ abstract parseHttpRespBody: body: ResponseBody -> ParsedHttpResponseBody
+ /// Take a Duplexify stream, fetch an authenticated connection header, and
+ /// create an outgoing writable stream.
+ /// - Duplexify stream.
+ /// - Configuration object.
+ /// - Callback, executed after the writable Request stream has completed.
+ abstract makeWritableStream: dup: Duplexify.Duplexify<'a, 'b> * options: MakeWritableStreamOptions * ?onComplete: Function -> unit
+ /// Returns true if the API request should be retried, given the error that was
+ /// given the first time the request was attempted. This is used for rate limit
+ /// related errors as well as intermittent server errors.
+ /// - The API error to check if it is appropriate to retry.
+ abstract shouldRetryRequest: ?err: ApiError -> bool
+ /// Get a function for making authenticated requests.
+ /// - Array of scopes required for the API.
+ // TODO
+ // abstract makeAuthenticatedRequestFactory: config: MakeAuthenticatedRequestFactoryConfig -> MakeAuthenticatedRequest
+ /// Make a request through the `retryRequest` module with built-in error
+ /// handling and exponential back off.
+ /// - Request options in the format `request` expects.
+ /// - Configuration object.
+ /// - The callback function.
+ abstract makeRequest: reqOpts: DecorateRequestOptions * config: MakeRequestConfig * callback: BodyResponseCallback -> U2
+ /// Decorate the options about to be made in a request.
+ /// - The options to be passed to `request`.
+ /// - The project ID.
+ abstract decorateRequest: reqOpts: DecorateRequestOptions * projectId: string -> DecorateRequestOptions
+ abstract isCustomType: unknown: obj option * ``module``: string -> bool
+ /// Create a properly-formatted User-Agent string from a package.json file.
+ /// - A module's package.json file.
+ abstract getUserAgentFromPackageJson: packageJson: PackageJson -> string
+ /// Given two parameters, figure out if this is either:
+ /// - Just a callback function
+ /// - An options object, and then a callback function
+ /// An options object or callback.
+ /// A potentially undefined callback.
+ abstract maybeOptionsOrCallback: ?optionsOrCallback: U2<'T, 'C> * ?cb: 'C -> 'T * 'C
+
+type [] UtilStatic =
+ [] abstract Create: unit -> Util
+
+[]
+module Util =
+ type [] IExports =
+ abstract ApiError: ApiErrorStatic
+ abstract PartialFailureError: PartialFailureErrorStatic
+ abstract Util: UtilStatic
+
+ type [] TypeLiteral_01 =
+ interface end
+
+ type [] TypeLiteral_02 =
+ abstract contentType: string option with get, set
diff --git a/src/GoogleCloud.Common/Operation.fs b/src/GoogleCloud.Common/Operation.fs
new file mode 100644
index 0000000..84121c7
--- /dev/null
+++ b/src/GoogleCloud.Common/Operation.fs
@@ -0,0 +1,45 @@
+namespace rec Fable.Import.GoogleCloud.Common
+
+open Fable.Core
+open Fable.Import.JS
+
+type Operation =
+ Operation
+
+type [] Operation<'T> =
+ inherit ServiceObject<'T>
+ abstract completeListeners: float with get, set
+ abstract hasActiveListeners: bool with get, set
+ /// Wraps the `complete` and `error` events in a Promise.
+ abstract promise: unit -> Promise
+ /// Begin listening for events on the operation. This method keeps track of how
+ /// many "complete" listeners are registered and removed, making sure polling
+ /// is handled automatically.
+ ///
+ /// As long as there is one active "complete" listener, the connection is open.
+ /// When there are no more listeners, the polling stops.
+ abstract listenForEvents_: unit -> unit
+ /// Poll for a status update. Returns null for an incomplete
+ /// status, and metadata for a complete status.
+ abstract poll_: callback: MetadataCallback -> unit
+ /// Poll `getMetadata` to check the operation's status. This runs a loop to
+ /// ping the API on an interval.
+ ///
+ /// Note: This method is automatically called once a "complete" event handler
+ /// is registered on the operation.
+ abstract startPolling_: unit -> Promise
+
+type [] OperationStatic =
+ /// An Operation object allows you to interact with APIs that take longer to
+ /// process things.
+ /// - Configuration object.
+ [] abstract Create: config: ServiceObjectConfig -> Operation<'T>
+
+/// Types that need extra qualification
+[]
+module Operation =
+ type [] IExports =
+ abstract Operation: OperationStatic
+
+ type [] TypeLiteral_01 =
+ interface end
diff --git a/src/GoogleCloud.Common/Service.fs b/src/GoogleCloud.Common/Service.fs
new file mode 100644
index 0000000..4a8f9f2
--- /dev/null
+++ b/src/GoogleCloud.Common/Service.fs
@@ -0,0 +1,69 @@
+namespace rec Fable.Import.GoogleCloud.Common
+
+open Fable.Core
+open Fable.Import.JS
+//open Fable.Import.GoogleAuthLibrary
+
+module R = Fable.Import.Request.Request
+//type GoogleAuth = Google_auth_library.GoogleAuth
+//type GoogleAuthOptions = Google_auth_library.GoogleAuthOptions
+
+type [] StreamRequestOptions =
+ inherit DecorateRequestOptions
+ abstract shouldReturnStream: obj with get, set
+
+type [] ServiceConfig =
+ /// The base URL to make API requests to.
+ abstract baseUrl: string with get, set
+ /// The scopes required for the request.
+ abstract scopes: ResizeArray with get, set
+ abstract projectIdRequired: bool option with get, set
+ abstract packageJson: PackageJson with get, set
+ abstract requestModule: obj with get, set
+ /// Reuse an existing GoogleAuth client instead of creating a new one.
+ // TODO
+ // abstract authClient: GoogleAuth option with get, set
+
+type [] ServiceOptions =
+ // TODO
+ // inherit GoogleAuthOptions
+ abstract interceptors_: ResizeArray option with get, set
+ abstract promise: PromiseConstructor option with get, set
+ abstract email: string option with get, set
+ abstract token: string option with get, set
+
+type [] Service =
+ abstract baseUrl: string with get, set
+ abstract projectId: string with get, set
+ abstract Promise: PromiseConstructor with get, set
+ // TODO
+// abstract makeAuthenticatedRequest: MakeAuthenticatedRequest with get, set
+// abstract authClient: GoogleAuth with get, set
+ abstract requestModule: obj with get, set
+ /// Get and update the Service's project ID.
+ abstract getProjectId: unit -> Promise
+ abstract getProjectId: callback: (Error option -> string -> unit) -> unit
+ abstract getProjectIdAsync: unit -> Promise
+ /// Make an authenticated API request.
+ /// - A URI relative to the baseUrl.
+ /// - The callback function passed to `request`.
+ abstract request: reqOpts: DecorateRequestOptions * callback: BodyResponseCallback -> unit
+ /// Make an authenticated API request.
+ /// - A URI relative to the baseUrl.
+ abstract requestStream: reqOpts: DecorateRequestOptions -> R.Request
+
+type [] ServiceStatic =
+ /// Service is a base class, meant to be inherited from by a "service," like
+ /// BigQuery or Storage.
+ ///
+ /// This handles making authenticated requests by exposing a `makeReq_`
+ /// function.
+ /// - The scopes required for the request.
+ /// - [Configuration object](#/docs).
+ [] abstract Create: config: ServiceConfig * ?options: ServiceOptions -> Service
+
+/// Types that require extra qualification
+[]
+module Service =
+ type [] IExports =
+ abstract Service: ServiceStatic
diff --git a/src/GoogleCloud.Common/ServiceObject.fs b/src/GoogleCloud.Common/ServiceObject.fs
new file mode 100644
index 0000000..fa54853
--- /dev/null
+++ b/src/GoogleCloud.Common/ServiceObject.fs
@@ -0,0 +1,173 @@
+namespace rec Fable.Import.GoogleCloud.Common
+
+open System
+open Fable.Core
+open Fable.Import.JS
+open Fable.Import.Node.Events
+
+module R = Fable.Import.Request.Request
+
+type RequestResponse =
+ Metadata * R.Response
+
+type [] ServiceObjectParent =
+ abstract Promise: PromiseConstructor option with get, set
+ abstract requestModule: obj option with get, set
+ abstract requestStream: reqOpts: DecorateRequestOptions -> R.Request
+ abstract request: reqOpts: DecorateRequestOptions * callback: BodyResponseCallback -> unit
+
+type GetMetadataOptions =
+ obj
+
+type Metadata =
+ obj option
+
+type MetadataResponse =
+ Metadata * R.Response
+
+type [] MetadataCallback =
+ [] abstract Invoke: err: Error option * ?metadata: Metadata * ?apiResponse: R.Response -> unit
+
+type ExistsOptions =
+ obj
+
+type [] ExistsCallback =
+ [] abstract Invoke: err: Error option * ?exists: bool -> unit
+
+type [] ServiceObjectConfig =
+ /// The base URL to make API requests to.
+ abstract baseUrl: string option with get, set
+ /// The method which creates this object.
+ abstract createMethod: Function option with get, set
+ /// The identifier of the object. For example, the name of a Storage bucket or
+ /// Pub/Sub topic.
+ abstract id: string option with get, set
+ /// A map of each method name that should be inherited.
+ abstract methods: Methods option with get, set
+ /// The parent service instance. For example, an instance of Storage if the
+ /// object is Bucket.
+ abstract parent: ServiceObjectParent with get, set
+ /// Dependency for HTTP calls.
+ abstract requestModule: obj option with get, set
+
+type [] Methods =
+ [] abstract Item: methodName: string -> U2 with get, set
+
+type [] InstanceResponseCallback<'T> =
+ [] abstract Invoke: err: ApiError option * ?instance: 'T * ?apiResponse: R.Response -> unit
+
+type [] CreateOptions =
+ interface end
+
+type CreateResponse =
+ ResizeArray
+
+type [] CreateCallback<'T> =
+ [] abstract Invoke: err: ApiError option * ?instance: 'T * [] args: ResizeArray -> unit
+
+type DeleteOptions =
+ obj
+
+type [] DeleteCallback =
+ [] abstract Invoke: err: Error option * ?apiResponse: R.Response -> unit
+
+type [] GetConfig =
+ /// Create the object if it doesn't already exist.
+ abstract autoCreate: bool option with get, set
+
+type [] GetOrCreateOptions =
+ interface end
+
+type GetResponse<'T> =
+ 'T * R.Response
+
+type [] ResponseCallback =
+ [] abstract Invoke: ?err: Error * ?apiResponse: R.Response -> unit
+
+type SetMetadataResponse =
+ Metadata
+
+type SetMetadataOptions =
+ obj
+
+type ServiceObject =
+ ServiceObject
+
+/// ServiceObject is a base class, meant to be inherited from by a "service
+/// object," like a BigQuery dataset or Storage bucket.
+///
+/// Most of the time, these objects share common functionality; they can be
+/// created or deleted, and you can get or set their metadata.
+///
+/// By inheriting from this class, a service object will be extended with these
+/// shared behaviors. Note that any method can be overridden when the service
+/// object requires specific behavior.
+type [] ServiceObject<'T> =
+ inherit EventEmitter
+ abstract metadata: Metadata with get, set
+ abstract baseUrl: string option with get, set
+ abstract parent: ServiceObjectParent with get, set
+ abstract id: string option with get, set
+ abstract methods: Methods with get, set
+ abstract interceptors: ResizeArray with get, set
+ abstract Promise: PromiseConstructor option with get, set
+ abstract requestModule: obj with get, set
+ /// Create the object.
+ /// - Configuration object.
+ abstract create: ?options: CreateOptions -> Promise
+ abstract create: options: CreateOptions * callback: CreateCallback<'T> -> unit
+ abstract create: callback: CreateCallback<'T> -> unit
+ /// Delete the object.
+ abstract delete: ?options: DeleteOptions -> Promise
+ abstract delete: options: DeleteOptions * callback: DeleteCallback -> unit
+ abstract delete: callback: DeleteCallback -> unit
+ /// Check if the object exists.
+ abstract exists: ?options: ExistsOptions -> Promise
+ abstract exists: options: ExistsOptions * callback: ExistsCallback -> unit
+ abstract exists: callback: ExistsCallback -> unit
+ /// Get the object if it exists. Optionally have the object created if an
+ /// options object is provided with `autoCreate: true`.
+ /// - The configuration object that will be used to
+ /// create the object if necessary.
+ abstract get: ?options: GetOrCreateOptions -> Promise>
+ abstract get: callback: InstanceResponseCallback<'T> -> unit
+ abstract get: options: GetOrCreateOptions * callback: InstanceResponseCallback<'T> -> unit
+ /// Get the metadata of this object.
+ abstract getMetadata: ?options: GetMetadataOptions -> Promise
+ abstract getMetadata: options: GetMetadataOptions * callback: MetadataCallback -> unit
+ abstract getMetadata: callback: MetadataCallback -> unit
+ /// Set the metadata for this object.
+ /// - The metadata to set on this object.
+ /// - Configuration options.
+ abstract setMetadata: metadata: Metadata * ?options: SetMetadataOptions -> Promise
+ abstract setMetadata: metadata: Metadata * callback: MetadataCallback -> unit
+ abstract setMetadata: metadata: Metadata * options: SetMetadataOptions * callback: MetadataCallback -> unit
+ /// Make an authenticated API request.
+ /// - A URI relative to the baseUrl.
+ abstract request: reqOpts: DecorateRequestOptions -> Promise
+ abstract request: reqOpts: DecorateRequestOptions * callback: BodyResponseCallback -> unit
+ /// Make an authenticated API request.
+ /// - A URI relative to the baseUrl.
+ abstract requestStream: reqOpts: DecorateRequestOptions -> R.Request
+
+/// ServiceObject is a base class, meant to be inherited from by a "service
+/// object," like a BigQuery dataset or Storage bucket.
+///
+/// Most of the time, these objects share common functionality; they can be
+/// created or deleted, and you can get or set their metadata.
+///
+/// By inheriting from this class, a service object will be extended with these
+/// shared behaviors. Note that any method can be overridden when the service
+/// object requires specific behavior.
+type [] ServiceObjectStatic =
+ [] abstract Create: config: ServiceObjectConfig -> ServiceObject<'T>
+
+/// Types that require extra qualification
+[]
+module ServiceObject =
+ type [] IExports =
+ abstract ServiceObject: ServiceObjectStatic
+
+ type [] TypeLiteral_01 =
+ abstract reqOpts: R.CoreOptions option with get, set
+
diff --git a/src/GoogleCloud.Storage/Acl.fs b/src/GoogleCloud.Storage/Acl.fs
new file mode 100644
index 0000000..7e33f9f
--- /dev/null
+++ b/src/GoogleCloud.Storage/Acl.fs
@@ -0,0 +1,198 @@
+namespace rec Fable.Import.GoogleCloud.Storage
+
+open Fable.Core
+open Fable.Import.JS
+open Fable.Import.GoogleCloud.Common
+
+module R = Fable.Import.Request.Request
+//type BodyResponseCallback = @google_cloud_common.BodyResponseCallback
+//type DecorateRequestOptions = @google_cloud_common.DecorateRequestOptions
+
+
+type [] AclOptions =
+ abstract pathPrefix: string with get, set
+ abstract request: (DecorateRequestOptions -> BodyResponseCallback -> unit) with get, set
+
+type GetAclResponse =
+ U2> * R.Response
+
+type [] GetAclCallback =
+ [] abstract Invoke: err: Error option * ?acl: U2> * ?apiResponse: R.Response -> unit
+
+type [] GetAclOptions =
+ abstract entity: string with get, set
+ abstract generation: float option with get, set
+ abstract userProject: string option with get, set
+
+type [] UpdateAclOptions =
+ abstract entity: string with get, set
+ abstract role: string with get, set
+ abstract generation: float option with get, set
+ abstract userProject: string option with get, set
+
+type UpdateAclResponse =
+ AccessControlObject * R.Response
+
+type [] UpdateAclCallback =
+ [] abstract Invoke: err: Error option * ?acl: AccessControlObject * ?apiResponse: R.Response -> unit
+
+type [] AddAclOptions =
+ abstract entity: string with get, set
+ abstract role: string with get, set
+ abstract generation: float option with get, set
+ abstract userProject: string option with get, set
+
+type AddAclResponse =
+ AccessControlObject * R.Response
+
+type [] AddAclCallback =
+ [] abstract Invoke: err: Error option * ?acl: AccessControlObject * ?apiResponse: R.Response -> unit
+
+type RemoveAclResponse =
+ R.Response
+
+type [] RemoveAclCallback =
+ [] abstract Invoke: err: Error option * ?apiResponse: R.Response -> unit
+
+type [] RemoveAclOptions =
+ abstract entity: string with get, set
+ abstract generation: float option with get, set
+ abstract userProject: string option with get, set
+
+type [] AccessControlObject =
+ abstract entity: string with get, set
+ abstract role: string with get, set
+ abstract projectTeam: string with get, set
+
+/// Attach functionality to a {@link Storage.acl} instance. This will add an
+/// object for each role group (owners, readers, and writers), with each object
+/// containing methods to add or delete a type of entity.
+///
+/// As an example, here are a few methods that are created.
+///
+/// myBucket.acl.readers.deleteGroup('groupId', function(err) {});
+///
+/// myBucket.acl.owners.addUser('email@example.com', function(err, acl) {});
+///
+/// myBucket.acl.writers.addDomain('example.com', function(err, acl) {});
+type [] AclRoleAccessorMethods =
+ abstract owners: Acl.TypeLiteral_01 with get, set
+ abstract readers: Acl.TypeLiteral_01 with get, set
+ abstract writers: Acl.TypeLiteral_01 with get, set
+ abstract _assignAccessMethods: role: string -> unit
+
+/// Attach functionality to a {@link Storage.acl} instance. This will add an
+/// object for each role group (owners, readers, and writers), with each object
+/// containing methods to add or delete a type of entity.
+///
+/// As an example, here are a few methods that are created.
+///
+/// myBucket.acl.readers.deleteGroup('groupId', function(err) {});
+///
+/// myBucket.acl.owners.addUser('email@example.com', function(err, acl) {});
+///
+/// myBucket.acl.writers.addDomain('example.com', function(err, acl) {});
+type [] AclRoleAccessorMethodsStatic =
+ [] abstract Create: unit -> AclRoleAccessorMethods
+
+/// Cloud Storage uses access control lists (ACLs) to manage object and
+/// bucket access. ACLs are the mechanism you use to share objects with other
+/// users and allow other users to access your buckets and objects.
+///
+/// An ACL consists of one or more entries, where each entry grants permissions
+/// to an entity. Permissions define the actions that can be performed against an
+/// object or bucket (for example, `READ` or `WRITE`); the entity defines who the
+/// permission applies to (for example, a specific user or group of users).
+///
+/// Where an `entity` value is accepted, we follow the format the Cloud Storage
+/// API expects.
+///
+/// Refer to
+/// https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls
+/// for the most up-to-date values.
+///
+/// - `user-userId`
+/// - `user-email`
+/// - `group-groupId`
+/// - `group-email`
+/// - `domain-domain`
+/// - `project-team-projectId`
+/// - `allUsers`
+/// - `allAuthenticatedUsers`
+///
+/// Examples:
+///
+/// - The user "liz@example.com" would be `user-liz@example.com`.
+/// - The group "example@googlegroups.com" would be
+/// `group-example@googlegroups.com`.
+/// - To refer to all members of the Google Apps for Business domain
+/// "example.com", the entity would be `domain-example.com`.
+///
+/// For more detailed information, see
+/// [About Access Control Lists](http://goo.gl/6qBBPO).
+type [] Acl =
+ inherit AclRoleAccessorMethods
+ abstract ``default``: Acl with get, set
+ abstract pathPrefix: string with get, set
+ abstract request_: (DecorateRequestOptions -> BodyResponseCallback -> unit) with get, set
+ abstract add: options: AddAclOptions -> Promise
+ abstract add: options: AddAclOptions * callback: AddAclCallback -> unit
+ abstract delete: options: RemoveAclOptions -> Promise
+ abstract delete: options: RemoveAclOptions * callback: RemoveAclCallback -> unit
+ abstract get: ?options: GetAclOptions -> Promise
+ abstract get: options: GetAclOptions * callback: GetAclCallback -> unit
+ abstract get: callback: GetAclCallback -> unit
+ abstract update: options: UpdateAclOptions -> Promise
+ abstract update: options: UpdateAclOptions * callback: UpdateAclCallback -> unit
+ /// Transform API responses to a consistent object format.
+ abstract makeAclObject_: accessControlObject: AccessControlObject -> AccessControlObject
+ /// Patch requests up to the bucket's request object.
+ /// Callback function.
+ abstract request: reqOpts: DecorateRequestOptions * callback: BodyResponseCallback -> unit
+
+/// Cloud Storage uses access control lists (ACLs) to manage object and
+/// bucket access. ACLs are the mechanism you use to share objects with other
+/// users and allow other users to access your buckets and objects.
+///
+/// An ACL consists of one or more entries, where each entry grants permissions
+/// to an entity. Permissions define the actions that can be performed against an
+/// object or bucket (for example, `READ` or `WRITE`); the entity defines who the
+/// permission applies to (for example, a specific user or group of users).
+///
+/// Where an `entity` value is accepted, we follow the format the Cloud Storage
+/// API expects.
+///
+/// Refer to
+/// https://cloud.google.com/storage/docs/json_api/v1/defaultObjectAccessControls
+/// for the most up-to-date values.
+///
+/// - `user-userId`
+/// - `user-email`
+/// - `group-groupId`
+/// - `group-email`
+/// - `domain-domain`
+/// - `project-team-projectId`
+/// - `allUsers`
+/// - `allAuthenticatedUsers`
+///
+/// Examples:
+///
+/// - The user "liz@example.com" would be `user-liz@example.com`.
+/// - The group "example@googlegroups.com" would be
+/// `group-example@googlegroups.com`.
+/// - To refer to all members of the Google Apps for Business domain
+/// "example.com", the entity would be `domain-example.com`.
+///
+/// For more detailed information, see
+/// [About Access Control Lists](http://goo.gl/6qBBPO).
+type [] AclStatic =
+ [] abstract Create: options: AclOptions -> Acl
+
+[]
+module Acl =
+ type [] IExports =
+ abstract AclRoleAccessorMethods: AclRoleAccessorMethodsStatic
+ abstract Acl: AclStatic
+
+ type [] TypeLiteral_01 =
+ interface end
diff --git a/src/GoogleCloud.Storage/GoogleCloud.Storage.fs b/src/GoogleCloud.Storage/GoogleCloud.Storage.fs
new file mode 100644
index 0000000..d9c56a9
--- /dev/null
+++ b/src/GoogleCloud.Storage/GoogleCloud.Storage.fs
@@ -0,0 +1,1098 @@
+/// Fable bindings for the '@google-cloud/storage' npm package.
+namespace rec Fable.Import.GoogleCloud.Storage
+
+open System
+open Fable.Core
+open Fable.Import.JS
+open Fable.Import.Node
+open Fable.Import.Request
+open Fable.Import.Duplexify
+//open Fable.Import.GoogleAuthLibrary
+open Fable.Import.GoogleCloud.Common
+
+// Module abbreviation - these are always private
+module R = Fable.Import.Request.Request
+
+///// Global imports for the '@google-cloud/storage' module
+//module Globals =
+// // TODO test this and figure out how to do: const {Storage} = require('@google-cloud/storage');
+// let [] storage : Storage.IExports = jsNative
+
+
+//
+// bucket.d.ts
+//
+
+//type Acl = __acl.Acl
+//type Channel = __channel.Channel
+//type File = __file.File
+//type FileOptions = __file.FileOptions
+//type CreateResumableUploadOptions = __file.CreateResumableUploadOptions
+//type CreateWriteStreamOptions = __file.CreateWriteStreamOptions
+//type Iam = __iam.Iam
+//type Notification = __notification.Notification
+//type Storage = __storage.Storage
+
+[]
+module Bucket =
+ type [] IExports =
+ abstract Bucket: BucketStatic
+
+ type [] TypeLiteral_01 =
+ abstract ``type``: string with get, set
+ abstract storageClass: string option with get, set
+
+ type [] TypeLiteral_03 =
+ [] abstract Item: key: string -> string with get, set
+
+ type [] TypeLiteral_02 =
+ [] abstract Item: key: string -> U4 with get, set
+
+// duplicate
+//type [] BucketOptions =
+// abstract userProject: string option with get, set
+
+type [] GetFilesCallback =
+ [] abstract Invoke: err: Error option * ?files: ResizeArray * ?nextQuery: GetFilesCallbackInvokeNextQuery * ?apiResponse: Request.Response -> unit
+
+type [] GetFilesCallbackInvokeNextQuery =
+ interface end
+
+type [] WatchAllOptions =
+ abstract delimiter: string option with get, set
+ abstract maxResults: float option with get, set
+ abstract pageToken: string option with get, set
+ abstract prefix: string option with get, set
+ abstract projection: string option with get, set
+ abstract userProject: string option with get, set
+ abstract versions: bool option with get, set
+
+type [] AddLifecycleRuleOptions =
+ abstract append: bool option with get, set
+
+type [] LifecycleRule =
+ abstract action: U2 with get, set
+ abstract condition: Bucket.TypeLiteral_02 with get, set
+ abstract storageClass: string option with get, set
+
+type [] GetFilesOptions =
+ abstract autoPaginate: bool option with get, set
+ abstract delimiter: string option with get, set
+ abstract directory: string option with get, set
+ abstract prefix: string option with get, set
+ abstract maxApiCalls: float option with get, set
+ abstract maxResults: float option with get, set
+ abstract pageToken: string option with get, set
+ abstract userProject: string option with get, set
+ abstract versions: bool option with get, set
+
+type [] CombineOptions =
+ abstract kmsKeyName: string option with get, set
+ abstract userProject: string option with get, set
+
+type [] CombineCallback =
+ [] abstract Invoke: err: Error option * newFile: File option * apiResponse: Request.Response -> unit
+
+type CombineResponse =
+ File * Request.Response
+
+type [] CreateChannelConfig =
+ inherit WatchAllOptions
+ abstract address: string with get, set
+
+type [] CreateChannelOptions =
+ abstract userProject: string option with get, set
+
+type CreateChannelResponse =
+ Channel * Request.Response
+
+type [] CreateChannelCallback =
+ [] abstract Invoke: err: Error option * channel: Channel option * apiResponse: Request.Response -> unit
+
+type [] CreateNotificationOptions =
+ abstract customAttributes: Bucket.TypeLiteral_03 option with get, set
+ abstract eventTypes: ResizeArray option with get, set
+ abstract objectNamePrefix: string option with get, set
+ abstract payloadFormat: string option with get, set
+ abstract userProject: string option with get, set
+
+type [] CreateNotificationCallback =
+ [] abstract Invoke: err: Error option * notification: Notification option * apiResponse: Request.Response -> unit
+
+type CreateNotificationResponse =
+ Notification * Request.Response
+
+type [] DeleteBucketOptions =
+ abstract userProject: string option with get, set
+
+type DeleteBucketResponse =
+ Request.Response
+
+type [] DeleteBucketCallback =
+ inherit DeleteCallback
+ [] abstract Invoke: err: Error option * apiResponse: Request.Response -> unit
+
+type [] DeleteFilesOptions =
+ inherit GetFilesOptions
+ abstract force: bool option with get, set
+
+type [] DeleteFilesCallback =
+ [] abstract Invoke: err: U2> option * ?apiResponse: obj -> unit
+
+type DeleteLabelsResponse =
+ Request.Response
+
+type [] DeleteLabelsCallback =
+ inherit SetLabelsCallback
+
+type DisableRequesterPaysResponse =
+ Request.Response
+
+type [] DisableRequesterPaysCallback =
+ [] abstract Invoke: ?err: Error * ?apiResponse: obj -> unit
+
+type EnableRequesterPaysResponse =
+ Request.Response
+
+type [] EnableRequesterPaysCallback =
+ [] abstract Invoke: ?err: Error * ?apiResponse: Request.Response -> unit
+
+type [] BucketExistsOptions =
+ inherit GetConfig
+ abstract userProject: string option with get, set
+
+type BucketExistsResponse =
+ bool
+
+type [] BucketExistsCallback =
+ inherit ExistsCallback
+
+type [] GetBucketOptions =
+ inherit GetConfig
+ abstract userProject: string option with get, set
+
+type GetBucketResponse =
+ Bucket * Request.Response
+
+type [] GetBucketCallback =
+ [] abstract Invoke: err: ApiError option * bucket: Bucket option * apiResponse: Request.Response -> unit
+
+type [] GetLabelsOptions =
+ abstract userProject: string option with get, set
+
+type GetLabelsResponse =
+ Request.Response
+
+type [] GetLabelsCallback =
+ [] abstract Invoke: err: Error option * labels: obj option -> unit
+
+type GetBucketMetadataResponse =
+ Metadata * Request.Response
+
+type [] GetBucketMetadataCallback =
+ [] abstract Invoke: err: ApiError option * metadata: Metadata option * apiResponse: Request.Response -> unit
+
+type [] GetBucketMetadataOptions =
+ abstract userProject: string option with get, set
+
+type [] GetNotificationsOptions =
+ abstract userProject: string option with get, set
+
+type [] GetNotificationsCallback =
+ [] abstract Invoke: err: Error option * notifications: ResizeArray option * apiResponse: Request.Response -> unit
+
+type GetNotificationsResponse =
+ ResizeArray * Request.Response
+
+type [] MakeBucketPrivateOptions =
+ abstract includeFiles: bool option with get, set
+ abstract force: bool option with get, set
+ abstract userProject: string option with get, set
+
+type MakeBucketPrivateResponse =
+ ResizeArray
+
+type [] MakeBucketPrivateCallback =
+ [] abstract Invoke: ?err: Error * ?files: ResizeArray -> unit
+
+type [] MakeBucketPublicOptions =
+ abstract includeFiles: bool option with get, set
+ abstract force: bool option with get, set
+
+type [] MakeBucketPublicCallback =
+ [] abstract Invoke: ?err: Error * ?files: ResizeArray -> unit
+
+type MakeBucketPublicResponse =
+ ResizeArray
+
+type [] SetBucketMetadataOptions =
+ abstract userProject: string option with get, set
+
+type SetBucketMetadataResponse =
+ Request.Response
+
+type [] SetBucketMetadataCallback =
+ [] abstract Invoke: ?err: Error * ?metadata: Metadata -> unit
+
+type [] BucketLockCallback =
+ [] abstract Invoke: ?err: Error * ?apiResponse: Request.Response -> unit
+
+type BucketLockResponse =
+ Request.Response
+
+type [] Labels =
+ [] abstract Item: key: string -> string with get, set
+
+type [] SetLabelsOptions =
+ abstract userProject: string option with get, set
+
+type SetLabelsResponse =
+ Request.Response
+
+type [] SetLabelsCallback =
+ [] abstract Invoke: ?err: Error * ?metadata: Metadata -> unit
+
+type [] SetBucketStorageClassOptions =
+ abstract userProject: string option with get, set
+
+type [] SetBucketStorageClassCallback =
+ [] abstract Invoke: ?err: Error -> unit
+
+type UploadResponse =
+ File * Request.Response
+
+type [] UploadCallback =
+ [] abstract Invoke: err: Error option * ?file: File * ?apiResponse: Request.Response -> unit
+
+type [] UploadOptions =
+ inherit CreateResumableUploadOptions
+ inherit CreateWriteStreamOptions
+ abstract destination: U2 option with get, set
+ abstract encryptionKey: U2 option with get, set
+ abstract kmsKeyName: string option with get, set
+ abstract resumable: bool option with get, set
+
+type [] MakeAllFilesPublicPrivateOptions =
+ abstract force: bool option with get, set
+ abstract ``private``: bool option with get, set
+ abstract ``public``: bool option with get, set
+ abstract userProject: string option with get, set
+
+type [] MakeAllFilesPublicPrivateCallback =
+ [] abstract Invoke: ?err: U2> * ?files: ResizeArray