Unfucked 0.0.0-beta3

This is a prerelease version of Unfucked.
dotnet add package Unfucked --version 0.0.0-beta3                
NuGet\Install-Package Unfucked -Version 0.0.0-beta3                
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.
<PackageReference Include="Unfucked" Version="0.0.0-beta3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Unfucked --version 0.0.0-beta3                
#r "nuget: Unfucked, 0.0.0-beta3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Unfucked as a Cake Addin
#addin nuget:?package=Unfucked&version=0.0.0-beta3&prerelease

// Install Unfucked as a Cake Tool
#tool nuget:?package=Unfucked&version=0.0.0-beta3&prerelease                

🧰 Unfucked

GitHub Actions Testspace Coveralls

Fix egregiously broken or missing functionality in .NET libraries. Inspired by underscore, jQuery, Apache Commons, Spring, and Guava.

Unfuck your house

Packages

General

NuGet

  • Console
    • Colored text and background in strings, not tightly coupled to Console.Write
    • Enable colored output on Windows 10 1511 and later
    • Clear screen and move to top-left corner
  • Cryptography
    • Random string generation
    • Is certificate temporally valid
  • Decimal math
    • Math operations on 128-bit decimal values
  • Directories
    • Delete without throwing an exception on missing directories
  • DNS
    • Fluent resolving method
  • Enumerables
    • Filter out null values
    • Add multiple values at once
    • Upsert into non-concurrent dictionary
    • Fluent set difference method
    • Filter out consecutive duplicate values
    • Convert IAsyncEnumerator to list
    • First item or null instead of default for value types
    • Head and tail
    • Delta changeset between two enumerables (created, updated, deleted, and unchanged items)
    • Atomic swap on ConcurrentDictionary to upsert new value and get old value
    • Get or add to ConcurrentDictionary and dispose of created but unadded values
  • Paths
    • Trim trailing slashes
    • Create new empty temporary subdirectory in specific parent directory
    • Convert DOS backslashes to Unix forward slashes
    • Match file extension against a set
  • Processes
    • Command line argument marshalling with correct escaping and quoting
      • String to array
      • Array to string
    • Run program and get output and exit code
    • Get parent process of a process
    • Get descendant processes recursively of a process
  • Strings
    • Coerce empty strings to null
    • Fluently check if a string has any non-whitespace characters
    • Fluently check if a string has any characters
    • Fluent join method
    • Uppercase first letter
    • Lowercase first letter
    • Trim multiple strings from start, end, or both
    • Join enumerable into an English-style list with commas an a conjunction like and
    • Fluent conversion method to byte array
    • Fluent conversion method to byte stream
    • Convert DOS CRLF line breaks to Unix LF line breaks
    • Repeat a string a certain number of times
  • Tasks
    • Unbounded delay time (.NET 6 tops out at 49.7 days)
    • Await multiple tasks and proceed when any of them both completes and the return value passes a predicate, or they all fail to complete or the predicate
      • Return true if any passed or false if they all failed
      • Return the first passing task's result, or null if they all failed
    • Asynchronously await the cancellation of a CancellationToken without blocking the thread
  • URIs
    • Fluent method to get URI query parameters
    • Check if a URI host belongs to a given domain (site locking)
  • XML
    • Fluent methods to read an XML document from an HTTP response body as a mapped object, DOM, LINQ, or XPath
    • Find all descendant elements of a parent node which have a given tag name

Caching

NuGet

Compression

NuGet

  • For use with SharpCompress
  • Added features for TAR archives
    • Symlinks
    • Directories
    • File permissions
    • File owner
    • File group

DateTime

NuGet

  • For use with NodaTime
  • Absolute value of a Duration or TimeSpan
  • Get midnight from a ZonedDateTime as a ZonedDateTime, Period, or Duration
  • Convert time zone offset to hours
  • Compare two OffsetDateTimes to see which one happens first

DI

NuGet

  • For use with Microsoft.Extensions.Hosting dependency injection/inversion of control
  • Add a colored console with column formatted data
  • Search for JSON configuration files in executable directory, not just current working directory
  • Allow provider functions to be injected, so long-lived consumers can depend on short-lived dependencies and control their lifecycle

DNS

NuGet

  • For use with G6.GandiLiveDns
  • Interface for Gandi LiveDNS HTTP API client to allow mocked testing isolation

ICS

NuGet

  • For use with Ical.Net
  • Asynchronously serialize iCalendar files to a byte stream, to prevent Kestrel and IIS errors on synchronous I/O
  • Converters between the three implementations of a datetime used by Ical.Net, NodaTime, and .NET

OBS

NuGet

  • For use with OBSClient
  • Interface for Open Broadcaster Software Studio WebSocket API client to allow mocked testing isolation
  • Easily connect and authenticate to servers without all the boilerplate

PGP

NuGet

  • For use with PgpCore
  • Detached signing, where an ASCII-armored PGP signature is generated in a sidecar file, not inline wrapping the file being signed like in clearsigning

STUN

NuGet

  • For use with Stun.Net
  • STUN client that retains the server that it was configured with, useful for error logging
  • Multi-server STUN client that transparently picks a random public STUN server from a constantly-updated list when sending a request, with retries and fallbacks if any of them fail
  • Thread-safe multi-server STUN client that can be used concurrently from multiple threads without conflicts

Twitch

NuGet

  • For use with TwitchApi.Net
  • Interface for Twitch HTTP API client to allow mocked testing isolation

Windows

NuGet

  • For use with Managed Windows API (mwinapi)
  • Reliably detect when computer is entering and exiting standby
  • Kill the running screensaver
  • Easier to get program's basename without memory leaks
Bom.Squad

NuGet

Reconfigure the static shared Encoding.UTF8 instance to not emit UTF-8 byte order marks to unbreak compatibility with non-Microsoft software.

DarkNet

NuGet

Turn native Windows title bars dark in WPF and Windows Forms windows.

DataSizeUnits

NuGet

Parse, convert, normalize, and format amounts of data like bits, bytes, kilobytes, and megabytes.

HidClient

NuGet

Automatically connect and reconnect to USB HID peripherals.

KoKo

NuGet

Automatically implement INotifyPropertyChanged to allow you to create composable properties with no publisher or subscriber boilerplate.

SolCalc

NuGet

Calculate a stream of solar time of day transitions for a given point on Earth, including sunrise, sunset, astronomical dawn and dusk, nautical dawn and dusk, and civil dawn and dusk.

ThrottleDebounce

NuGet

Throttle, debounce, and try functions and actions.

UnionTypes

NuGet

Implicitly cast multiple types to one union type, to avoid manually writing millions of method overloads.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 is compatible. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (4)

Showing the top 4 NuGet packages that depend on Unfucked:

Package Downloads
Unfucked.Windows

Package Description

Unfucked.PGP

Package Description

Unfucked.DI

Package Description

Unfucked.STUN

Package Description

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.0.0-beta3 120 9/30/2024
0.0.0-beta2 92 9/8/2024
0.0.0-beta1 64 9/7/2024
0.0.0-alpha2 53 9/7/2024
0.0.0-alpha1 73 8/10/2024