Bix.Bun 1.0.0-beta-003

.NET 6.0
This is a prerelease version of Bix.Bun.
NuGet\Install-Package Bix.Bun -Version 1.0.0-beta-003
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
dotnet add package Bix.Bun --version 1.0.0-beta-003
<PackageReference Include="Bix.Bun" Version="1.0.0-beta-003" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Bix.Bun --version 1.0.0-beta-003
#r "nuget: Bix.Bun, 1.0.0-beta-003"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Bix.Bun as a Cake Addin
#addin nuget:?package=Bix.Bun&version=1.0.0-beta-003&prerelease

// Install Bix.Bun as a Cake Tool
#tool nuget:?package=Bix.Bun&version=1.0.0-beta-003&prerelease

Bix

the "Bix" name is just a codename for now (until I decide it's good to go).

An F# microframework that provides a router and http handler abstractions for web frameworks that work with a Request -> Response http server model.

Examples of runtimes that work with this model:

This microframework is heavily inspired by Giraffe, and Saturn frameworks from F# land so if you have ever used that server model then Bix will feel fairly similar.

An hypotetical example could be like the following code:

// define a function that takes HttpHandlers to satisfy existing handler constrains
let authenticateOrRedirect (authenticatedRoute: HttpHandler, notAuthenticatedRoute: HttpHandler) =
    Handlers.authenticateUser
        authenticatedRoute
        notAuthenticatedRoute

// compose different handlers for code reusability
// and granular control of handler execution
let checkAdminCredentials successRoute =
    authenticateOrRedirect (successRoute, Admin.Login)
    >=> Handlers.requiresAdmin

let checkUserCredentials successRoute =
    authenticateOrRedirect (successRoute, Views.Login)
    >=> Handlers.requiresUserOrAbove

// define routes for this application
let routes =
    Router.Empty
    |> Router.get("/", authenticateOrRedirect >=> Views.Landing)
    |> Router.get ("/login", authenticateOrRedirect >=> Views.Login)
    |> Router.get ("/me", checkUserCredentials(Views.Login))
    |> Router.get ("/portal", checkUserCredentials(Views.Portal))
    |> Router.get ("/admin", checkAdminCredentials(Admin.Portal))
    |> Router.post ("/users", checkAdminCredentials(Api.Users.Create >=> negotiateContent))
    |> Router.patch ("/users/:id", checkAdminCredentials(Api.Users.Update >=> negotiateContent))

// Start the web server
Server.Empty
|> Server.withPort 5000
|> Server.withDevelopment true
|> Server.withRouter routes
|> Server.run

The idea is to create simple and single purposed functions that work like middleware so you can organize and re-use

Adapters

Bix currently has two adapters

  • Bix.Deno
  • Bix.Bun

Adapters under investigation:

  • Bix.ServiceWorker
  • Bix.CloudflareWorker

Development

This project is developed with VSCode in Linux/Windows/WSL but either rider, and visual studio should work just fine.

Requirements

Try the samples

Depending on what you want to try change the directory to your selected sample, example: cd samples/Bix.Bun.Sample and run one of the following commands

  1. dotnet tool restore (run once per clone)
  2. start the project
    • bun start
    • deno task start

both commands will restore the projects and run fable, bun/deno in watch mode.

Product Versions
.NET net6.0 net6.0-android net6.0-ios net6.0-maccatalyst net6.0-macos net6.0-tvos net6.0-windows
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0-beta-003 49 7/22/2022
1.0.0-beta-002 51 7/18/2022
1.0.0-beta-001 78 7/17/2022