magic.library 14.3.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package magic.library --version 14.3.2
NuGet\Install-Package magic.library -Version 14.3.2
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="magic.library" Version="14.3.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add magic.library --version 14.3.2
#r "nuget: magic.library, 14.3.2"
#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 magic.library as a Cake Addin
#addin nuget:?package=magic.library&version=14.3.2

// Install magic.library as a Cake Tool
#tool nuget:?package=magic.library&version=14.3.2

Wiring all parts of Magic together automagically

This project helps you to wire up everything related to Magic. Normally you'd use it simply like the following from your startup class in your .Net 6 Web API project.

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using magic.library;

namespace magic.backend
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            // Initializing Magic.
            services.AddMagic(Configuration);
        }

        public void Configure(IApplicationBuilder app)
        {
            // Initializing Magic.
            app.UseMagic(Configuration);
        }
    }
}

However, you can also take more control over how things are actually wired up, by instead of using the "do all methods" called AddMagic and UseMagic, invoke some of the specialized initialization methods, you can find below.

  • IServiceCollection.AddMagicCaching
  • IServiceCollection.AddMagicHttp
  • IServiceCollection.AddMagicLogging
  • IServiceCollection.AddMagicSignals
  • IServiceCollection.AddMagicExceptions
  • IServiceCollection.AddMagicEndpoints
  • IServiceCollection.AddMagicAuthorization
  • IServiceCollection.AddMagicFileServices
  • IServiceCollection.AddMagicFileServices
  • IServiceCollection.AddMagicConfiguration
  • IServiceCollection.AddMagicScheduler
  • IServiceCollection.AddMagicMail
  • IServiceCollection.AddMagicLambda
  • IServiceCollection.AddMagicSockets

The above methods is basically what the AddMagic method actually does, and they're extension methods of IServiceCollection, that can be found in the magic.library namespace. Similar alternatives to UseMagic can be found below.

  • IApplicationBuilder.UseMagicExceptions
  • IApplicationBuilder.UseMagicStartupFiles
  • IApplicationBuilder.UseMagicScheduler
  • IApplicationBuilder.UseMagicCors

If you use these methods instead of the "do all methods", your motivation would probably be to replace one of these methods with your own implementation, to exchange the default wiring, by (for instance) using a "virtual database based file system" by creating your own service implementation of for instance IFileService from "magic.lambda.io", or use a different logging provider than the default, etc. If you wish to do this, you'd probably benefit from looking at what the default implementation of your method does, to understand the requirements from your method. Doing this is very powerful, and allows you to change the way the system behaves by default - But is also definitely considered an "advanced exercise".

Exceptions handlers

Magic allows you to provide a custom exceptions handler on a per folder level. This overrides the default exception logic with a custom exception handler expected to be named "exceptions.hl" and found within the folder hierarchy where an HTTP invocation is resolved. For instance, if you wish to create your own exception handler for a specific module called "foo", you can create an exception handler file called "/files/modules/foo/exceptions.hl", and expect this file to be invoked every time an unhandled exception occurs, anywhere inside of your "foo" folder. This allows you to transform an unhandled exception, such as for instance localising it or customising it in any ways. Your custom exception handler will be invoked with the following arguments.

  • [message] - The exception error message
  • [path] - The URL that triggered the exception
  • [field] - If the exception that was thrown declared a field, this argument will contain the name of the field
  • [status] - If the exception that was thrown declared a status code, this argument will contain the status code
  • [public] - If the exception that was thrown wants to propagate to the client this will be true

You can return a "transformed" exception from your exception handler, returning the following arguments, that will end up becoming the response object returned to the client.

  • [message] - Message to return as JSON to client
  • [field] - Field to return as JSON to client
  • [status] - Status code to decorate your HTTP response with

The default exception handler can be found in "/files/exceptions.hl", which will be invoked if no custom exception handler is declared further down in your folder hierarchy.

Project website

The source code for this repository can be found at github.com/polterguy/magic.library, and you can provide feedback, provide bug reports, etc at the same place.

Quality gates

  • Build status
  • Quality Gate Status
  • Bugs
  • Code Smells
  • Duplicated Lines (%)
  • Lines of Code
  • Maintainability Rating
  • Reliability Rating
  • Security Rating
  • Technical Debt
  • Vulnerabilities
Product Compatible and additional computed target framework versions.
.NET 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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
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
17.3.9 81 2/17/2024
17.3.7 112 2/12/2024
17.3.6 78 2/12/2024
17.3.5 76 2/10/2024
17.3.4 80 2/9/2024
17.3.3 73 2/8/2024
17.3.2 82 2/2/2024
17.3.1 83 1/30/2024
17.2.2 72 1/30/2024
17.2.1 101 1/22/2024
17.2.0 71 1/22/2024
17.1.7 141 1/12/2024
17.1.6 106 1/11/2024
17.1.5 126 1/5/2024
17.0.1 166 1/1/2024
17.0.0 305 12/14/2023
16.11.6 206 11/14/2023
16.11.5 147 11/12/2023
16.9.0 270 10/9/2023
16.8.5 155 9/30/2023
16.8.4 144 9/25/2023
16.8.0 121 9/24/2023
16.7.51 109 9/24/2023
16.7.50 118 9/23/2023
16.7.1 167 9/4/2023
16.7.0 282 7/11/2023
16.6.13 173 7/6/2023
16.6.12 169 7/5/2023
16.6.11 156 7/5/2023
16.6.5 194 7/3/2023
16.4.4 193 7/2/2023
16.4.3 213 6/27/2023
16.4.2 194 6/25/2023
16.4.1 195 6/25/2023
16.4.0 182 6/22/2023
16.3.2 272 6/7/2023
16.3.0 276 5/28/2023
16.2.0 358 5/13/2023
16.1.10 345 5/1/2023
16.1.9 267 4/30/2023
16.1.1 283 4/20/2023
15.10.11 313 4/16/2023
15.9.40 335 4/3/2023
15.9.1 386 3/27/2023
15.9.0 409 3/24/2023
15.8.2 438 3/20/2023
15.7.0 319 3/6/2023
15.5.20 671 2/23/2023
15.5.13 477 2/13/2023
15.5.9 373 2/11/2023
15.5.2 454 2/5/2023
15.5.1 374 2/3/2023
15.5.0 451 1/28/2023
15.2.0 588 1/18/2023
15.1.0 1,055 12/28/2022
14.5.7 605 12/13/2022
14.5.5 707 12/6/2022
14.5.1 539 11/23/2022
14.5.0 488 11/18/2022
14.4.5 559 10/22/2022
14.4.2 497 10/22/2022
14.4.1 493 10/22/2022
14.4.0 521 10/17/2022
14.3.9 543 10/13/2022
14.3.6 551 10/7/2022
14.3.2 553 9/18/2022
14.3.1 646 9/12/2022
14.3.0 531 9/10/2022
14.1.3 795 8/7/2022
14.1.2 546 8/7/2022
14.1.1 554 8/7/2022
14.0.14 543 7/26/2022
14.0.12 532 7/24/2022
14.0.11 518 7/23/2022
14.0.10 527 7/23/2022
14.0.9 517 7/23/2022
14.0.8 603 7/17/2022
14.0.5 673 7/11/2022
14.0.4 605 7/7/2022
14.0.3 597 7/2/2022
14.0.2 541 7/2/2022
14.0.1 587 7/2/2022
14.0.0 565 6/25/2022
13.4.28 557 6/11/2022
13.4.25 663 6/9/2022
13.4.24 560 6/9/2022
13.4.19 606 6/8/2022
13.4.3 582 6/6/2022
13.4.2 620 6/4/2022
13.4.0 645 5/31/2022
13.3.8 620 5/19/2022
13.3.7 580 5/18/2022
13.3.6 623 5/14/2022
13.3.4 691 5/9/2022
13.3.1 631 5/1/2022
13.3.0 591 5/1/2022
13.2.2 647 4/25/2022
13.2.1 598 4/25/2022
13.2.0 633 4/21/2022
13.1.1 651 4/20/2022
13.1.0 707 4/7/2022
13.0.0 661 4/5/2022
12.0.3 816 3/14/2022
11.0.7 698 3/11/2022
11.0.5 743 3/2/2022
11.0.4 668 2/22/2022
11.0.3 678 2/9/2022
11.0.2 733 2/6/2022
11.0.1 725 2/5/2022
10.0.21 692 1/28/2022
10.0.20 708 1/27/2022
10.0.19 689 1/23/2022
10.0.18 663 1/17/2022
10.0.17 675 1/14/2022
10.0.16 528 1/2/2022
10.0.15 584 12/31/2021
10.0.14 597 12/28/2021
10.0.13 667 12/23/2021
10.0.11 458 12/23/2021
10.0.10 476 12/22/2021
10.0.9 635 12/22/2021
10.0.8 516 12/22/2021
10.0.7 678 12/22/2021
10.0.6 556 12/19/2021
10.0.5 651 12/18/2021
10.0.3 436 12/16/2021
10.0.2 514 12/14/2021
10.0.1 406 12/13/2021
10.0.0 451 12/6/2021
9.9.9 1,236 11/29/2021
9.9.6 4,700 11/24/2021
9.9.5 454 11/23/2021
9.9.4 754 11/21/2021
9.9.3 521 11/9/2021
9.9.2 540 11/4/2021
9.9.0 641 10/30/2021
9.8.9 663 10/29/2021
9.8.7 557 10/27/2021
9.8.6 551 10/27/2021
9.8.5 667 10/26/2021
9.8.4 624 10/25/2021
9.8.3 683 10/24/2021
9.8.1 554 10/21/2021
9.8.0 629 10/20/2021
9.7.9 542 10/20/2021
9.7.8 575 10/19/2021
9.7.7 809 10/17/2021
9.7.6 697 10/17/2021
9.7.5 579 10/14/2021
9.7.1 517 10/14/2021
9.7.0 587 10/9/2021
9.6.8 597 8/30/2021
9.6.7 576 8/26/2021
9.6.6 685 8/14/2021
9.6.5 789 8/11/2021
9.6.4 591 8/10/2021
9.6.3 592 8/9/2021
9.6.2 565 8/8/2021
9.6.1 532 8/8/2021
9.5.9 728 8/5/2021
9.5.8 724 8/4/2021
9.5.3 608 7/20/2021
9.5.0 975 7/9/2021
9.4.5 588 6/29/2021
9.4.4 740 6/29/2021
9.4.0 572 6/24/2021
9.3.7 590 6/21/2021
9.3.6 642 6/21/2021
9.3.5 771 6/18/2021
9.3.4 702 6/18/2021
9.2.5 747 6/7/2021
9.2.4 681 6/6/2021
9.2.3 625 6/6/2021
9.2.2 533 6/4/2021
9.2.1 759 6/1/2021
9.2.0 726 5/26/2021
9.1.9 538 5/5/2021
9.1.8 687 5/5/2021
9.1.7 554 5/3/2021
9.1.4 562 4/21/2021
9.1.2 545 4/18/2021
9.1.1 530 4/15/2021
9.1.0 579 4/14/2021
9.0.1 649 4/12/2021
9.0.0 547 4/5/2021
8.9.92 1,122 3/30/2021
8.9.4 1,132 3/26/2021
8.9.3 1,154 3/19/2021
8.9.2 1,149 1/29/2021
8.9.1 1,215 1/24/2021
8.9.0 1,283 1/22/2021
8.7.1 1,581 11/15/2020
8.7.0 1,293 11/15/2020
8.6.9 1,225 11/8/2020
8.6.7 1,204 11/4/2020
8.6.6 1,296 11/2/2020
8.6.5 1,262 11/1/2020
8.6.3 1,283 10/30/2020
8.6.2 1,199 10/30/2020
8.6.1 1,282 10/29/2020
8.6.0 1,236 10/28/2020
8.5.1 1,223 10/26/2020
8.5.0 1,189 10/23/2020
8.4.6 1,397 10/20/2020
8.4.5 1,278 10/18/2020
8.4.4 1,295 10/17/2020
8.4.3 1,273 10/16/2020
8.4.2 1,217 10/16/2020
8.4.1 1,220 10/15/2020
8.4.0 1,298 10/13/2020
8.3.3 1,216 10/11/2020
8.3.2 1,266 10/8/2020
8.3.1 1,273 10/5/2020
8.3.0 1,227 10/3/2020
8.2.3 1,174 10/1/2020
8.2.2 1,463 9/26/2020
8.2.1 1,328 9/25/2020
8.2.0 1,358 9/25/2020
8.1.25 1,258 9/24/2020
8.1.24 1,259 9/23/2020
8.1.23 1,187 9/23/2020
8.1.22 1,250 9/21/2020
8.1.21 1,304 9/15/2020
8.1.20 1,312 9/14/2020
8.1.19 1,298 9/13/2020
8.1.18 1,249 9/13/2020
8.1.17 1,307 9/13/2020
8.1.16 1,297 9/13/2020
8.1.15 1,220 9/12/2020
8.1.13 1,123 9/11/2020
8.1.12 1,251 9/11/2020
8.1.11 1,246 9/11/2020
8.1.10 1,291 9/6/2020
8.1.9 1,296 9/3/2020
8.1.8 1,328 9/2/2020
8.1.7 1,181 8/28/2020
8.1.4 1,181 8/25/2020
8.1.3 1,362 8/18/2020
8.1.2 1,180 8/16/2020
8.1.1 1,240 8/15/2020
8.0.3 1,253 8/11/2020
8.0.2 1,276 8/7/2020
8.0.1 1,281 8/7/2020
8.0.0 1,223 8/7/2020
7.0.1 1,338 6/28/2020
7.0.0 1,320 6/28/2020
5.0.10 1,290 5/31/2020
5.0.9 1,376 5/30/2020
5.0.8 1,273 5/29/2020
5.0.7 1,232 5/29/2020
5.0.5 1,340 2/27/2020
5.0.4 1,298 2/26/2020
5.0.3 1,300 2/26/2020
5.0.2 1,307 2/25/2020
5.0.1 1,192 2/25/2020
5.0.0 1,316 2/25/2020
4.1.5 1,257 2/23/2020
4.1.4 1,341 2/23/2020
4.1.3 1,276 2/22/2020
4.1.2 1,268 2/22/2020
4.1.1 1,255 2/21/2020
4.1.0 1,295 2/21/2020
4.0.9 1,382 2/7/2020
4.0.8 1,216 2/7/2020
4.0.7 1,236 2/7/2020
4.0.5 1,259 1/28/2020
4.0.4 1,383 1/27/2020
4.0.3 1,235 1/27/2020
4.0.2 1,377 1/16/2020
4.0.1 1,388 1/11/2020
4.0.0 1,348 1/5/2020
3.1.7 1,390 12/17/2019
3.1.6 1,297 12/12/2019
3.1.5 1,284 12/12/2019
3.1.4 1,308 12/5/2019
3.1.3 1,332 12/4/2019
3.1.2 1,350 11/30/2019
3.1.1 1,506 11/26/2019
3.1.0 1,311 11/10/2019
3.0.4 1,152 11/1/2019
3.0.3 1,325 10/28/2019
3.0.2 1,335 10/28/2019
3.0.1 1,328 10/26/2019
3.0.0 1,148 10/23/2019
2.1.4 948 10/21/2019
2.1.3 1,284 10/21/2019
2.1.2 1,415 10/21/2019
2.1.1 1,294 10/19/2019
2.1.0 1,341 10/19/2019
2.0.9 1,043 10/18/2019
2.0.8 1,316 10/18/2019
2.0.7 1,039 10/18/2019
2.0.6 1,046 10/18/2019
2.0.5 1,082 10/18/2019
2.0.4 1,042 10/17/2019
2.0.3 1,180 10/16/2019
2.0.2 1,172 10/15/2019
2.0.1 1,213 10/14/2019
2.0.0 921 10/13/2019
1.1.7 1,361 10/11/2019
1.1.6 1,328 10/11/2019